local BossChallenge_Model = {} local private = {} local EventSystem = require 'Event/EventSystem' local fuben_pb = require 'Proto/fuben_pb' local rank_pb = require 'Proto/rank_pb' local boss_challenge_pb = require 'Proto/boss_challenge_pb' BossChallenge_Model.DifficultIDS = { "IDS_BossChallenge_Normal", "IDS_BossChallenge_Elite", "IDS_BossChallenge_Inferno", } BossChallenge_Model.Difficult = { Normal = 1, Elite = 2, Nightmare = 3, } function BossChallenge_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGetPlayerRank, private.SetRoleBossChallengeRankResponse) private.bossRank = nil private.bossChallengeSeasonInfo = {} private.bossDifficultScore = {} end function BossChallenge_Model.GetBossChallengeSeasonInfo() return private.bossChallengeSeasonInfo end function BossChallenge_Model.GetBossChallengeSeasonInfoById(seasonId) if private.bossChallengeSeasonInfo.curSeason.seasonId == seasonId then return private.bossChallengeSeasonInfo.curSeason elseif private.bossChallengeSeasonInfo.lastSeason.seasonId == seasonId then return private.bossChallengeSeasonInfo.lastSeason end logging.error(LTAG.ERROR, "boss挑战赛季Id:", seasonId, ",没有在服务器发来的数据中找到相应赛季。") end function BossChallenge_Model.GetBossChallengeState() return private.seasonState end function BossChallenge_Model.UpdateBossChallengeSeasonInfo(info) private.bossChallengeSeasonInfo = info private.seasonState = info.curSeason.seasonState EventSystem.Dispatch(EventID.UI_FairPlay_BossChallengeSeasonInfoUpdate) end function BossChallenge_Model.GetBossRankByBossLevelId() return private.bossRank end function BossChallenge_Model.UpdateBossDifficultScore(bossLevelId, score) private.bossDifficultScore[bossLevelId] = score end function BossChallenge_Model.SetBossDifficultScore(info) if IsServerDataNotNil(info) then for i, v in ipairs(info) do private.bossDifficultScore[v.bossLevelId] = v.score end end end function BossChallenge_Model.GetBossDifficultScoreById(id) return private.bossDifficultScore[id] or 0 end function BossChallenge_Model.GetBossDifficultScoreByDifficultAndSeason(difficult, seasonId) local bossLevelId = CTL.BossChallenge.GetSeasonBossLevelList(seasonId)[difficult] return BossChallenge_Model.GetBossDifficultScoreById(bossLevelId) end function BossChallenge_Model.GetTotalBossScoreBySeasonId(seasonId) local totalScore = 0 local seasonBossList = CTL.BossChallenge.GetSeasonBossLevelList(seasonId) for i, v in ipairs(seasonBossList) do totalScore = totalScore + (private.bossDifficultScore[v] or 0) end return totalScore end ---通过拼接赛季ID和Boss期ID,获得唯一的KEY local BossChallengeFormationKey = "BossChallengeFormationKey" function BossChallenge_Model.SaveBossFormation(seasonId, bossLevelId, formationList) local str = table.concat(formationList, ",") --..","..seasonId..","..bossLevelId local key = BossChallengeFormationKey..seasonId..bossLevelId..BattleDataGetter.GetAcID() PersistentData.DeviceData:Set(key, str, true) end ---获取时校验,如果没有根据KEY获取到值,则要检查该赛季ID的上一个赛季所储存的值,清空。 function BossChallenge_Model.LoadBossFormation(seasonId, bossLevelId) local key = BossChallengeFormationKey..seasonId..bossLevelId..BattleDataGetter.GetAcID() local str = PersistentData.DeviceData:Get(key) if not string.isNilOrEmpty(str) then local strList = string.split(str, ",") for i, v in ipairs(strList) do strList[i] = tonumber(v) end return strList else local lastSeasonData = MDL.BossChallenge.GetBossChallengeSeasonInfo().lastSeason local lastSeasonBossList = CTL.BossChallenge.GetSeasonBossLevelList(lastSeasonData.seasonId) if lastSeasonData then for i, v in ipairs(lastSeasonBossList) do local key = BossChallengeFormationKey..lastSeasonData.seasonId..v PersistentData.DeviceData:Remove(key) end end end return nil end ---协议相关 function BossChallenge_Model.EnterBossChallengeRequest(bossLevelId, seasonId, heroFormationList) if CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.BossChallenge) then local msg = fuben_pb.EnterFubenReq() msg.id = bossLevelId msg.mapType = LuaConst.LevelType.BossChallenge msg.seasonId = seasonId for i, v in ipairs(heroFormationList) do local id, isAwaken = CTL.HeroAwaken.DecodeHeroId(v) table.insert(msg.heroIds, id) table.insert(msg.heroAwakenInfos, isAwaken) end NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end end function BossChallenge_Model.GetRoleBossChallengeRankRequest(seasonId) local msg = boss_challenge_pb.GetPlayerRankReq() msg.seasonId = seasonId msg.bossId = 0 NetManager.SendMessage(MessageEnums.MessageGetPlayerRank, msg) end function private.SetRoleBossChallengeRankResponse(msgResp) if msgResp.Resp.Code == 0 then private.bossRank = msgResp.playerRank EventSystem.Dispatch(EventID.UI_BossChallenge_RankRefresh) end end function BossChallenge_Model.OnShutdown() private.bossDifficultScore = {} end return BossChallenge_Model