local AwakenActivity_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local hero_awaken_info_pb = require 'Proto.hero_awaken_info_pb' function AwakenActivity_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageOpenAwakenActivityPanel, private.OpenAwakenActivityPanelResp) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenActivityStageChangeNotify, private.AwakenActivityStageChangeNotify) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenChallengeReward, private.AwakenChallengeRewardResp) private.awakenActivityInfo = {} private.playerInfoMap = {} end --[[ 觉醒试炼活动信息 message AwakenChallengeInfo ]] function AwakenActivity_Model.UpdateAwakenActivityInfo(openAwakenChallengeHeroList) for _, v in ipairs(openAwakenChallengeHeroList) do private.awakenActivityInfo[v.heroId] = v end EventSystem.Dispatch(EventID.UI_AwakenActivity_UpdateAwakenActivityInfo) end local function SortAwakenActivity(a, b) if a.openTime and b.openTime and a.openTime ~= b.openTime then return a.openTime > b.openTime else return a.heroId > b.heroId end end function AwakenActivity_Model.GetAwakenActivityInfoList() local list = {} for _, v in pairs(private.awakenActivityInfo) do if v.curStage == hero_awaken_info_pb.Fighting or v.curStage == hero_awaken_info_pb.Showing then table.insert(list, v) end end table.sort(list, SortAwakenActivity) return list end function AwakenActivity_Model.GetAwakenActivityInfo(heroId) return private.awakenActivityInfo[heroId] end function AwakenActivity_Model.GetStartChallengeAcid(heroId) return private.awakenActivityInfo[heroId] and private.awakenActivityInfo[heroId].startChallengeAcid end --是否有觉醒活动开启 function AwakenActivity_Model.IsOpen() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AwakenActivity) == false then return false end for _, v in pairs(private.awakenActivityInfo) do if v.curStage ~= hero_awaken_info_pb.HasEnd then return true end end return false end --是否有某个英雄的觉醒活动开启 function AwakenActivity_Model.IsOpenByHeroId(heroId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AwakenActivity) == false then return false end for _, v in pairs(private.awakenActivityInfo) do if v.heroId == heroId and v.curStage ~= hero_awaken_info_pb.HasEnd then return true end end return false end function AwakenActivity_Model.PullPlayerInfoFromServer(heroId) if not private.playerInfoMap[heroId] then AwakenActivity_Model.OpenAwakenActivityPanelReq(heroId) end end function AwakenActivity_Model.ClearPlayerInfo() table.clear(private.playerInfoMap) end function AwakenActivity_Model.GetPlayerShowInfo(heroId) if IsProtoDataNotNil(private.playerInfoMap[heroId]) and IsProtoDataNotNil(private.playerInfoMap[heroId].playerShowInfo) then return private.playerInfoMap[heroId].playerShowInfo end end function AwakenActivity_Model.GetRank1PlayerInfo(heroId) if IsProtoDataNotNil(private.playerInfoMap[heroId]) and IsProtoDataNotNil(private.playerInfoMap[heroId].rank1PlayerInfo) then return private.playerInfoMap[heroId].rank1PlayerInfo end end ------------------------------------------------服务器请求 --进入试炼副本 function AwakenActivity_Model.EnterLevelReq(heroId) local msg = NetManager.GetPB("fuben_pb").EnterFubenReq() msg.id = 631001 msg.mapType = LuaConst.LevelType.HeroAwakeBoss msg.mapID = 631001 msg.awakenHeroId = heroId private.lastHeroId = heroId NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end function AwakenActivity_Model.TryEnterAgain() if private.lastHeroId then AwakenActivity_Model.EnterLevelReq(private.lastHeroId) end end --打开主界面,请求玩家展示信息和排行榜 function AwakenActivity_Model.OpenAwakenActivityPanelReq(heroId) local msg = NetManager.GetPB("hero_awaken_opt_pb").OpenAwakenActivityPanelReq() msg.heroId = heroId private.OpenAwakenActivityPanelReqHeroId = heroId NetManager.SendMessage(MessageEnums.MessageOpenAwakenActivityPanel, msg) end function private.OpenAwakenActivityPanelResp(msg) if msg.Resp.Code == 0 then private.playerInfoMap[private.OpenAwakenActivityPanelReqHeroId] = msg private.OpenAwakenActivityPanelReqHeroId = nil EventSystem.Dispatch(EventID.UI_AwakenActivity_OpenAwakenActivityPanelResp) end end --领取觉醒试炼挑战奖励 function AwakenActivity_Model.AwakenChallengeRewardReq(heroId) local msg = NetManager.GetPB("hero_awaken_opt_pb").AwakenChallengeRewardReq() msg.heroId = heroId NetManager.SendMessage(MessageEnums.MessageAwakenChallengeReward, msg) end function private.AwakenChallengeRewardResp(msg) if msg.Resp.Code == 0 then local awakenActivityInfo = private.awakenActivityInfo[msg.heroId] awakenActivityInfo.hasChallengeReward = msg.hasReward EventSystem.Dispatch(EventID.UI_AwakenActivity_AwakenChallengeRewardResp, msg) end end --觉醒活动阶段变更通知 function private.AwakenActivityStageChangeNotify(msg) for _, v in ipairs(msg.changeActivityHero) do private.awakenActivityInfo[v.heroId] = v end for _, heroId in ipairs(msg.timeArriveActivityHero) do private.awakenActivityInfo[heroId] = nil end EventSystem.Dispatch(EventID.UI_AwakenActivity_UpdateAwakenActivityInfo) end return AwakenActivity_Model