local PersonalBoss_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local fuben_pb = require 'Proto/fuben_pb' local personal_boss_opt_pb = require 'Proto/personal_boss_opt_pb' local sweep_pb = require 'Proto.sweep_pb' local bossDict = {}--boss难度 PersonalBoss_Model.DifficultIndex = { Normal = 1, --普通 Elite = 2, --精英 Nightmare = 3, --噩梦 Hell = 4, --地狱 Purgatory = 5, --炼狱 Max = 6, --最高难度 } function PersonalBoss_Model.OnStartup() private.RewardCountLeft = 0 -- 已挑战次数 private.PassBossId = 0 -- 已挑战最大BossID private.FirstPassInfoDic = {} -- 首通记录(k:bossid, v:首通玩家数据) EventSystem.Regist(EventID.New_Day_Refresh, private.ResetRewardCountLeft) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.RefreshRedPoint) EventSystem.Regist(EventID.CharacterTeamGsChange, private.RefreshRedPoint) for _,data in DataSheetManager.PersonalBoss:GetEnumerator() do if not bossDict[data.Level] then bossDict[data.Level] = {} end table.insert(bossDict[data.Level], data) end NetManager.RegisterMsgCB(MessageEnums.MessagePersonalBossGetInfo, private.PersonalBossGetInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageSweepSelfBoss, private.SweepSelfBossResp) end function PersonalBoss_Model.OnShutdown() end -- 一键扫荡 function PersonalBoss_Model.SweepSelfBossReq(levelID) local msg = sweep_pb.SweepSelfBossReq() msg.SweepTimes = 1 msg.levelId = levelID NetManager.SendMessage(MessageEnums.MessageSweepSelfBoss, msg) end function private.SweepSelfBossResp() -- playerChange协议中发奖励 end -- 登录和战斗胜利,挑战次数变更同步数据 function PersonalBoss_Model.SyncPersonalBossInfo(PersonalBossInfo) private.RewardCountLeft = PersonalBossInfo.rewardCount private.PassBossId = PersonalBossInfo.bossId for _, v in ipairs(PersonalBossInfo.firstPassInfos) do private.FirstPassInfoDic[v.bossId] = v end EventSystem.Dispatch(EventID.UI_PersonalBoss_RefreshFirstPassInfo) -- 刷新首通 private.RefreshRedPoint() end function PersonalBoss_Model.PersonalBossGetInfoReq() local msg = personal_boss_opt_pb.PersonalBossGetInfoReq() NetManager.SendMessage(MessageEnums.MessagePersonalBossGetInfo, msg) end function private.PersonalBossGetInfoResp(msgResp) if msgResp.Resp.Code == 0 then PersonalBoss_Model.SyncPersonalBossInfo(msgResp.info) end end function PersonalBoss_Model.AgainEnterPersonalBossRequest() local bossLevelId = private.currBossLevelID private.currBossLevelID = nil PersonalBoss_Model.EnterPersonalBossRequest(bossLevelId) end function PersonalBoss_Model.EnterPersonalBossRequest(bossLevelId) if CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.PersonalBoss) == false then return end local msg = fuben_pb.EnterFubenReq() msg.id = bossLevelId msg.mapType = LuaConst.LevelType.PersonalBoss private.currBossLevelID = bossLevelId --logging.log(LTAG.LOG, "EnterPersonalBossRequest", msg,MessageEnums.MessageEnterFuben) NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end function PersonalBoss_Model.GetRedPointState() local isUnlock = CTL.Unlock.JudgeIfSatisfiedUnlockTable(DataSheetManager.FuctionUnlock:GetDataByFucID(MDL.Unlock.FunctionType.PersonalBoss).Unlock_Table) local activityData = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.PersonalBoss) local totalAwardTimes = activityData.DailyRefreshTimes local haveRewardCount = totalAwardTimes > private.RewardCountLeft and totalAwardTimes - private.RewardCountLeft or 0 return isUnlock and (haveRewardCount > 0 or private.CheckChallengeRed()), totalAwardTimes, haveRewardCount end --关卡可挑战 function private.CheckChallengeRed() local nextConfig if private.PassBossId == DataSheetManager.PersonalBoss:GetDataCount() then return false else nextConfig = DataSheetManager.PersonalBoss:GetDataByID(private.PassBossId + 1) end local recommendFight = nextConfig.Battle local curFight = MDL.Player.GetLineUpGs() if curFight >= recommendFight then return true end return false end -- 每日5点在线重置挑战次数 function private.ResetRewardCountLeft() private.RewardCountLeft = 0 -- 已挑战次数 private.RefreshRedPoint() end -- 根据bossid获取首通数据 function PersonalBoss_Model.GetFirstPassInfoByBossId(bossId) return private.FirstPassInfoDic[bossId] end function PersonalBoss_Model.GetRewardCountLeft() local count = private.RewardCountLeft return count end function PersonalBoss_Model.GetPassBossID() local bossId = private.PassBossId return bossId end --根据当前boss找到下一个boss对应的难度 function PersonalBoss_Model.GetDifficultIndex() local isNext = false for _,data in DataSheetManager.PersonalBoss:GetEnumerator() do if isNext then return data.Level end if data.ID == private.PassBossId then isNext = true end end return isNext and PersonalBoss_Model.DifficultIndex.Max or PersonalBoss_Model.DifficultIndex.Normal end --这个是返回当前应该选中的难度 有可能打完普通 解锁了精英 但是又满足精英的第一个boss条件 function PersonalBoss_Model.GetCurShowDifficultIndex() local index = PersonalBoss_Model.GetDifficultIndex() local bossState, lev = CTL.PersonalBoss.GetBossStateAndLev(bossDict[index][1]) if bossState == CTL.PersonalBoss.BossState.UnOpen then return index > PersonalBoss_Model.DifficultIndex.Normal and index - 1 or PersonalBoss_Model.DifficultIndex.Normal end return index end function PersonalBoss_Model.GetDifficultList(index) return bossDict[index] end function private.RefreshRedPoint() EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.PersonalBoss, PersonalBoss_Model.GetRedPointState()) -- 通知活动刷新boss红点 EventSystem.Dispatch(EventID.UI_PersonalBoss_UpdateRewardTimes) -- 通知界面刷新挑战次数,刷新红点 end return PersonalBoss_Model