local DemonGod_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local fuben_pb = require 'Proto/fuben_pb' local demon_god_opt_pb = require('Proto/demon_god_opt_pb') DemonGod_Model.KingomIDS = { [1] = "IDS_DrawCard_PageTitle_WEI", [2] = "IDS_DrawCard_PageTitle_SHU", [3] = "IDS_DrawCard_PageTitle_WU", [4] = "IDS_DrawCard_PageTitle_QUN" } --缓存上一次进关卡的两个参数,方便执行【再打一次】 private.lastDemonGodLevelID = nil private.lastSelectLintID = nil DemonGod_Model.IsRefreshCurRankList = true function DemonGod_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageDemonGodGetAward, private.DemonGodGetAwardResponse) EventSystem.Regist(EventID.New_Day_Refresh, DemonGod_Model.CheckDemonGodRed) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, DemonGod_Model.CheckDemonGodRed) EventSystem.Regist(EventID.UI_Activity_Refresh_ListOrder, DemonGod_Model.CheckDemonGodRed) private.DemonGodInfo = {} end function DemonGod_Model.GetDemonGodInfo() return private.DemonGodInfo end ---@return 3队伤害总值, 三队最高伤害 function DemonGod_Model.GetLineUpMaxDamage() local maxDamage = 0 local allDamage = 0 if private.DemonGodInfo and private.DemonGodInfo.lineUpMaxDamage then for _,v in ipairs(private.DemonGodInfo.lineUpMaxDamage) do if v > maxDamage then maxDamage = v end allDamage = allDamage + v end end return allDamage, maxDamage end -- 战斗内显示,参与队伍的历史最高伤害 function DemonGod_Model.GetBattleTeamMaxDamage() return DemonGod_Model.GetTeamMaxDamageByTeamID(private.lastSelectLintID) end function DemonGod_Model.GetTeamMaxDamageByTeamID(teamId) return private.DemonGodInfo.lineUpMaxDamage[teamId] or 0 end function DemonGod_Model.GetTeamLockState(teamId) for k,v in ipairs(private.DemonGodInfo.lineUpLock) do if v == teamId then return true end end return false -- 默认是未锁定状态 end --判断奖励是否已领取 function DemonGod_Model.HasRewardReceived(id) local hasReceivedArray = private.DemonGodInfo.receivedIds if hasReceivedArray then for i, v in ipairs(hasReceivedArray) do if v == id then return true end end end return false end function DemonGod_Model.CheckDemonGodRed() local isRewardRed = false local lineUpMaxDamage = DemonGod_Model.GetLineUpMaxDamage() for i, v in DataSheetManager.DemonGodBossAchievementReward:GetEnumerator() do if DemonGod_Model.HasRewardReceived(v.ID) == false and lineUpMaxDamage >= v.AchievementDamage then isRewardRed = true break end end if isRewardRed then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.DemonGold_Reward) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.DemonGold_Reward) end if not CTL.Activities.IsDone(LuaConst.ActivityType.DemonGod) then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.DemonGold_Chanllengy) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.DemonGold_Chanllengy) end EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.DemonGod, CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.DemonGold)) end --region ***************** 协议 ******************** --[[ DemonGodInfo = { curBossId 当前开放的BOSSId lineUpMaxDamage 最高伤害值 receivedIds 已领取过的达标奖励ID列表 lineUpLock 今日已锁定的武将阵容列表 country 当前出战阵容限定国别 } ]] function DemonGod_Model.EnterDemonGodInfoRequest(msgResp) private.DemonGodInfo = msgResp DemonGod_Model.CheckDemonGodRed() EventSystem.Dispatch(EventID.UI_DemonGod_RefreshMainUI) -- 刷新奖励界面 end -- 领取奖励 function DemonGod_Model.DemonGodGetAwardRequest(awardId) local msg = demon_god_opt_pb.DemonGodGetAwardReq() msg.awardId = awardId NetManager.SendMessage(MessageEnums.MessageDemonGodGetAward, msg) end function private.DemonGodGetAwardResponse(msgResp) logging.log(LTAG.LOG, "DemonGodGetAwardResponse",msgResp) DemonGod_Model.CheckDemonGodRed() EventSystem.Dispatch(EventID.UI_DemonGod_RefreshRewardUI) -- 刷新奖励界面 end ---@public 进副本 function DemonGod_Model.EnterDemonGodRequest(levelID, selectLineID) if CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.DemonGod) == false then return end private.lastDemonGodLevelID = levelID private.lastSelectLintID = selectLineID local msg = fuben_pb.EnterFubenReq() msg.id = levelID msg.mapType = LuaConst.LevelType.DemonGod msg.freeLineUpNum = selectLineID NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end function DemonGod_Model.TryEnterDemonGodAgain() if private.lastDemonGodLevelID and private.lastSelectLintID then DemonGod_Model.EnterDemonGodRequest(private.lastDemonGodLevelID, private.lastSelectLintID) end end --endregion ***************** 协议 ******************** return DemonGod_Model