miduo_client/Assets/ManagedResources/~Lua/Modules/Fight/FightPointPassManager.lua

511 lines
16 KiB
Lua
Raw Normal View History

2021-04-20 13:58:00 +08:00
FightPointPassManager = {};
2020-05-09 13:31:21 +08:00
local this = FightPointPassManager
local mainLevelConfig = ConfigManager.GetConfig(ConfigName.MainLevelConfig)
-- 火洞吊裸
local Huo_Dong_Diao_Luo = ConfigManager.GetConfig(ConfigName.ActivityDropReward)
local rewardGroupConfig = ConfigManager.GetConfig(ConfigName.RewardGroup)
-- 挂机物品栏位对应vip数值加成特权
local _ItemIdToVipPrivilege = {
[14] = 1,
[3] = 1,
[17] = 27,
}
-- 战斗胜利后是否已经更新过ID
local hadUpdate = false
local CHATER_OPEN = 1
local CHATER_CLOSE = 0
local CHATER_STATE = "CHATER_STATE"
local OLD_ID = "OLD_ID"
2020-06-03 19:09:01 +08:00
local isOpenRewardUpTip = false
2020-05-09 13:31:21 +08:00
function this.Initialize()
this.curOpenFight = 1011 -- 当前开启的关卡
this.lastPassFightId = 1011 -- 上一关的ID
this.isBattleBack = false
this.HangOnTime = 0 -- 关卡挂机时长
this.curFightState = 0
this.oldLevel = 0 -- 玩家关卡战斗之前的等级
this.curFightMapId = 1011 -- 当前关卡对应的地图背景ID
this.isOutFight = false
this.isOpenNewChapter = false -- 是否开启新章节
this.isMaxChapter=false --是否最大章节
this.maxChapterNum=15 --最大章节数
this.isBeginFight = false
this.enterFightBattle = false -- 进入关卡战斗
this.ShowBtnJumpTime = ConfigManager.GetConfig(ConfigName.GameSetting)[1].JumpLevelTime
this.boxState = 0 -- 当前需要显示的宝箱
2020-05-25 19:16:23 +08:00
Game.GlobalEvent:AddEvent(GameEvent.Player.OnLevelChange, this.CheckFightRP)
2020-06-08 20:18:49 +08:00
-- Game.GlobalEvent:AddEvent(GameEvent.Mission.OnOpenEnableFight, this.CheckFightRP)
Game.GlobalEvent:AddEvent(GameEvent.Mission.OnOpenFight, this.CheckFightRP)
2020-05-09 13:31:21 +08:00
end
2020-05-25 19:16:23 +08:00
function this.CheckFightRP()
CheckRedPointStatus(RedPointType.SecretTer_IsCanFight)
end
2020-05-09 13:31:21 +08:00
-- 初始化关卡状态, state , 1 已开启未通过 2 :已通过 -1 已开启等级未解锁
function this.InitAllFightPointState(msg)
Log("当前关卡ID " .. msg.fightId)
Log("当前关卡的状态 " .. msg.state)
Log("当前已经挂机的时长 " .. msg.duration)
2020-05-09 13:31:21 +08:00
if msg.duration < 0 then
Log("服务器返回的挂机时长是负数,是不是调时间??")
2020-05-09 13:31:21 +08:00
end
this.HangOnTime = msg.duration
this.curOpenFight = msg.fightId
2020-10-19 21:54:01 +08:00
if mainLevelConfig[this.curOpenFight].SortId-1 > 0 then
this.lastPassFightId = ConfigManager.GetConfigDataByKey(ConfigName.MainLevelConfig,"SortId", mainLevelConfig[this.curOpenFight].SortId-1).Id
end
2020-05-09 13:31:21 +08:00
this.curFightState = msg.state
this.adventrueEnemyList=msg.adventureBossInfo
this.HangOnReward=msg.reward
Log("挂机奖励 ==== "..this.HangOnReward)
2020-05-09 13:31:21 +08:00
this.maxChapterNum = LengthOfTable(GameDataBase.SheetBase.GetKeys(ConfigManager.GetConfig(ConfigName.MainLevelSettingConfig)))
end
-- 获取某一关卡的状态, 小于当前关卡必定已通关,大于必定未解锁
function this.GetFightStateById(fightId)
local curDiff = mainLevelConfig[this.curOpenFight].Difficulty
local judgeDiff = mainLevelConfig[fightId].Difficulty
if curDiff == judgeDiff then
if fightId < this.curOpenFight then
return FIGHT_POINT_STATE.PASS
elseif fightId == this.curOpenFight then
if this.curFightState == 1 then
return FIGHT_POINT_STATE.OPEN_NOT_PASS
elseif this.curFightState == -1 then
return FIGHT_POINT_STATE.OPEN_LOW_LEVEL
elseif this.curFightState == 2 then
return FIGHT_POINT_STATE.PASS
end
elseif fightId > this.curOpenFight then
return FIGHT_POINT_STATE.LOCK
end
elseif curDiff > judgeDiff then
return FIGHT_POINT_STATE.PASS
elseif curDiff < judgeDiff then
return FIGHT_POINT_STATE.LOCK
end
end
-- 获取某一关卡是否开启
function this.GetFightIsOpenById(fightId)
local curDiff = mainLevelConfig[this.curOpenFight].Difficulty
local judgeDiff = mainLevelConfig[fightId].Difficulty
if curDiff == judgeDiff then
return fightId <= this.curOpenFight
elseif judgeDiff < curDiff then
return true
else
return false
end
end
-- 获取某一关卡是否通关
function this.IsFightPointPass(fightId)
local isPass = false
local curDiff = mainLevelConfig[this.curOpenFight].Difficulty
local judgeDiff = mainLevelConfig[fightId].Difficulty
if curDiff == judgeDiff then
if fightId < this.curOpenFight then
isPass = true
elseif fightId == this.curOpenFight then
if this.curFightState == 2 then -- 最后一章的最后一关
isPass = true
else
isPass = false
end
else
isPass = false
end
elseif curDiff > judgeDiff then
isPass = true
else
isPass = false
end
return isPass
end
-- 战斗胜利后刷新当前关卡的ID
function this.RefreshFightId(msg)
--local data = mainLevelConfig[this.curOpenFight]
--if data then
local oldFight = this.curOpenFight
this.lastPassFightId = oldFight
PlayerPrefs.SetInt(PlayerManager.uid .. OLD_ID, oldFight)
-- 最后一关更新
--if data.NextLevel ~= -1 then
-- 服务器更新关卡状态
this.curOpenFight = msg.fightId
this.curFightState = msg.state
if this.curFightState == 1 then
-- 解锁一个可以打的新关卡, 发送新关卡ID
Game.GlobalEvent:DispatchEvent(GameEvent.Mission.OnOpenEnableFight, msg.fightId)
end
-- 章节开启
local isOpen = mainLevelConfig[this.curOpenFight].PicShow == 1
--开启新章节的表现处理
if isOpen then
this.SetChapterOpenState(true)
end
Game.GlobalEvent:DispatchEvent(GameEvent.Mission.OnOpenFight, oldFight)
2020-06-03 19:09:01 +08:00
--判断是否需要弹估计奖励提升界面
local oldLevelConFig = ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.lastPassFightId)
local cirLevelConFig = ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.curOpenFight)
for i = 1, #cirLevelConFig.RewardShowMin do
local oldsinglePro = oldLevelConFig.RewardShowMin[i]
local cursinglePro = cirLevelConFig.RewardShowMin[i]
if not isOpenRewardUpTip and cursinglePro[2] > oldsinglePro[2] then
this.SetIsOpenRewardUpTip(true)
end
end
Log(" 更新关卡ID " .. this.curOpenFight)
Log(" 关卡状态 " .. this.curFightState)
2020-05-09 13:31:21 +08:00
-- 判断新解锁关卡的状态
--if PlayerManager.level >= data.LevelLimit then
-- this.curFightState = 1
--if this.curFightState == 1 then
-- -- 解锁一个可以打的新关卡, 发送新关卡ID
-- Game.GlobalEvent:DispatchEvent(GameEvent.Mission.OnOpenEnableFight, data.NextLevel)
--end
--else
-- this.curFightState = -1
--end
---- 章节开启
--local isOpen = mainLevelConfig[this.curOpenFight].PicShow == 1
----开启新章节的表现处理
--if isOpen then
-- this.SetChapterOpenState(true)
--end
--Log("~关卡已通关id = "..oldFight)
-- 发送关卡通关事件
--[[ Game.GlobalEvent:DispatchEvent(GameEvent.Mission.OnOpenFight, oldFight)]]
--else
-- this.curFightState = 2
--end
--end
end
2020-06-03 19:09:01 +08:00
function this.GetIsOpenRewardUpTip()
return isOpenRewardUpTip
end
function this.SetIsOpenRewardUpTip(_isOpenRewardUpTip)
isOpenRewardUpTip = _isOpenRewardUpTip
end
2020-05-09 13:31:21 +08:00
function this.SetChapterOpenState(state)
this.isOpenNewChapter = state
local value = state and CHATER_OPEN or CHATER_CLOSE
PlayerPrefs.SetInt(PlayerManager.uid .. CHATER_STATE, value)
end
function this.IsChapterClossState()
if this.curOpenFight == 1011 then
return true
end
this.isOpenNewChapter = PlayerPrefs.GetInt(PlayerManager.uid .. CHATER_STATE) < 1
return this.isOpenNewChapter
end
-- 获取当前关卡的ID
function this.GetCurFightId()
return this.curOpenFight
end
function this.GetLastFightID()
if PlayerPrefs.GetInt(PlayerManager.uid .. OLD_ID) > 0 then
this.lastPassFightId = PlayerPrefs.GetInt(PlayerManager.uid .. OLD_ID)
end
end
-- 获取挂机奖励vip加成
function this.GetItemVipValue(itemId)
local privilege = _ItemIdToVipPrivilege[itemId]
if not privilege then return 0 end
local value = PrivilegeManager.GetPrivilegeNumber(privilege)
return value
end
-- 点击按钮是判断是否可以挑战
function this.IsCanFight(fightId)
-- 是否有数据
if not mainLevelConfig[this.curOpenFight] then
Log("没有这个关卡")
2021-03-02 16:53:12 +08:00
return false, Language[10616]
2020-05-09 13:31:21 +08:00
end
--章节解锁优先
if this.IsChapterClossState() then
-- 以防后端不校验,再来一次
if PlayerManager.level < mainLevelConfig[this.curOpenFight].LevelLimit then
Log("等级不足")
2021-03-02 16:53:12 +08:00
return false, tostring(mainLevelConfig[this.curOpenFight].LevelLimit .. Language[10056])
2020-05-09 13:31:21 +08:00
else -- 等级不足未通关时设置一下
if this.curFightState == -1 then
this.curFightState = 1
end
end
local state = this.GetFightStateById(fightId)
if state == FIGHT_POINT_STATE.OPEN_NOT_PASS then
Log("开启未通关")
2021-03-02 16:53:12 +08:00
return true, Language[10617]
2020-05-09 13:31:21 +08:00
elseif state == FIGHT_POINT_STATE.OPEN_LOW_LEVEL then
Log("等级不足")
2021-03-02 16:53:12 +08:00
return false, tostring(mainLevelConfig[this.curOpenFight].LevelLimit .. Language[10056])
2020-05-09 13:31:21 +08:00
elseif state == FIGHT_POINT_STATE.PASS then -- 最后一关
Log("已经通关")
2021-03-02 16:53:12 +08:00
return false, Language[10618]
2020-05-09 13:31:21 +08:00
end
else
2021-03-02 16:53:12 +08:00
return true, Language[10619]
2020-05-09 13:31:21 +08:00
end
end
2020-05-25 19:16:23 +08:00
-- 判断是否显示关卡按钮红点
function this.IsShowFightRP()
return this.IsCanFight(this.curOpenFight)
end
2020-05-09 13:31:21 +08:00
-- 挑战按钮的文字显示
function this.GetBtnText()
-- 解锁新章节优先
if this.IsChapterClossState() then
2020-05-09 13:31:21 +08:00
-- 先判断等级
local limitLevel = mainLevelConfig[this.curOpenFight].LevelLimit
if PlayerManager.level < limitLevel then
2021-03-02 16:53:12 +08:00
return limitLevel .. Language[10056]
2020-05-09 13:31:21 +08:00
end
local offset = 1
offset = mainLevelConfig[this.curOpenFight].Difficulty
local newFightId = (tonumber(this.curOpenFight) - offset) / 10
local isBoss = (newFightId % 5) == 0
2021-03-02 16:53:12 +08:00
local str = isBoss and Language[10531] or Language[10620]
2020-05-09 13:31:21 +08:00
-- 最后一关
local state = this.GetFightStateById(this.curOpenFight)
if state == FIGHT_POINT_STATE.PASS then -- 最后一关
2021-03-02 16:53:12 +08:00
str = Language[10621]
2020-05-09 13:31:21 +08:00
end
return str
else
2021-03-02 16:53:12 +08:00
return Language[10619]
2020-05-09 13:31:21 +08:00
end
end
-- 是不是首领关卡
function this.IsFightBoss()
local offset = 1
offset = mainLevelConfig[this.curOpenFight].Difficulty
local newFightId = (tonumber(this.curOpenFight) - offset) / 10
local isBoss = (newFightId % 5) == 0
return isBoss
end
-- 某一章节是否通关
function this.IsChapterPass(areaId)
-- 当前关卡难度
local curFightDiff = mainLevelConfig[this.curOpenFight].Difficulty
-- 当前章节难度
local curChapterId = math.floor(this.curOpenFight / 1000)
if curFightDiff > 1 then
return true
elseif curFightDiff == 1 then
return areaId < curChapterId
end
end
--- ===================== 战力相关的 =============================
---- 请求战斗
function this.ExecuteFightBattle(monsterGroupId, fightId, callBack)
Log("---------执行关卡战斗---------"..fightId)
2020-05-09 13:31:21 +08:00
NetManager.LevelStarFightDataRequest(monsterGroupId, fightId, function (msg)
hadUpdate = false
2020-06-03 19:09:01 +08:00
local fightData = BattleManager.GetBattleServerData(msg)
2021-03-19 18:14:52 +08:00
UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.STORY_FIGHT, callBack, fightId)
2020-05-09 13:31:21 +08:00
end)
end
-- 获取当前章节数
function this.GetCurChapterIndex()
local curChapterId = math.floor(this.curOpenFight / 1000)
if not FightPointPassManager.isOpenNewChapter then
curChapterId = curChapterId-1
2020-07-22 10:51:36 +08:00
if curChapterId == 0 then
curChapterId = 1
end
end
2020-05-09 13:31:21 +08:00
return curChapterId
end
-- 战斗胜利
function this.OnBattleEnd(battleEnd)
if not hadUpdate then
hadUpdate = true
if battleEnd.result == 0 then
Log("关卡战斗失败!")
2020-05-09 13:31:21 +08:00
else
this.isBattleBack = true
--this.RefreshFightId()
end
end
end
-- 关卡战斗结束
function this.FightBattleEnd()
this.enterFightBattle = false
end
function this.GetBattleMonsterGroup()
return mainLevelConfig[this.curOpenFight].MonsterGroup
end
--通过难度和章节获取该章节是否通过
function this.GetDifficultAndChapter(Difficult,Chapter)
-- 当前关卡难度
local curFightDiff = mainLevelConfig[this.curOpenFight].Difficulty
-- 当前章节难度
local curChapterId = math.floor(this.curOpenFight / 1000)
local state = 0--1 未开启 2 已开启 3 未通关 4 已通关
if Difficult > curFightDiff then
state = 1
elseif Difficult == curFightDiff then
if Chapter > curChapterId then
state = 1
elseif Chapter == curChapterId then
state = 3
elseif Chapter < curChapterId then
state = 4
end
elseif Difficult < curFightDiff then
state = 4
end
return state
end
--获取立绘角色奔跑方向
function this.GetRoleDirection()
local data={}
if not FightPointPassManager.IsChapterClossState() then
data=ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.lastPassFightId)
else
data=ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.curOpenFight)
end
return data.RoleDirection
end
--获取当前关卡位置坐标
function this.GetLevelPointPosition()
local data={}
if not FightPointPassManager.IsChapterClossState() then
data=ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.lastPassFightId)
else
data=ConfigManager.GetConfigData(ConfigName.MainLevelConfig,this.curOpenFight)
end
return data.LevelPointPosition
end
--计算小地图节点坐标
function this.CalculateMapPointPos(parentPoint,sonPoint)
local scaleValueX=parentPoint.localScale.x
local scaleValueY=parentPoint.localScale.y
--Log(tostring(sonPoint[1]*(-1)*scaleValueX).." "..tostring(sonPoint[2]*(-1)*scaleValueY))
local x= math.floor(sonPoint[1]*(-1)*scaleValueX)
local y= math.floor(sonPoint[2]*(-1)*scaleValueY)
return x,y
end
-- 活动期间关卡的总奖励预览
function this.GetExtralReward()
local fightRewardId = 0
local openNum = 0
local rewardShow = {}
local rewardGroupId = {}
if mainLevelConfig[this.curOpenFight] then
fightRewardId = mainLevelConfig[this.curOpenFight].RandomReward[1]
end
local ids = ActivityGiftManager.GetExpertActiveisAllOpenIds()
--local ids = {30, 31}
if #ids > 0 then
for i = 1, #ids do
for k, v in ConfigPairs(Huo_Dong_Diao_Luo) do
if v.RewardGroup[1] == fightRewardId and v.ActivityId == ids[i] then
rewardGroupId[#rewardGroupId + 1] = v.ActivityReward[1]
end
end
end
for i = 1, #rewardGroupId do
Log("活动组ID ----- " .. rewardGroupId[i])
2020-05-09 13:31:21 +08:00
end
for i = 1, #rewardGroupId do
--Log("rewardGroupId ==== " .. rewardGroupId[i])
local shows = rewardGroupConfig[rewardGroupId[i]].ShowItem
if shows then
for j = 1, #shows do
rewardShow[#rewardShow + 1] = shows[j]
end
else
Log(string.format("奖励组Id%s对应的前端显示字段ShowItem为空", rewardGroupId[i]))
2020-05-09 13:31:21 +08:00
end
end
--Log("活动奖励数量 === " .. #rewardShow)
return 1, rewardShow
else
return openNum, nil
end
end
function this.SetBoxState(state)
this.boxState = state
end
function this.GetBoxState()
return this.boxState
end
-- 是否在关卡里屏蔽暂停按钮
function this.GetStopBtnState()
local isShow = true
if not this.enterFightBattle then
return true
else
if this.curOpenFight == 1011 or this.curOpenFight == 1021 or this.curOpenFight == 1031
or this.curOpenFight == 1041 or this.curOpenFight == 1051 then
isShow = false
else
isShow = true
end
end
return isShow
end
2020-06-23 18:36:24 +08:00
return this