local CountryWorldBoss_Model = {} local private = { seekHelpList = {}, -- 服务器发送的请求协助列表 } local world_boss_pb = require('Proto/world_boss_pb') local warzone_boss_info_pb = require('Proto/warzone_boss_info_pb') local EventSystem = require('Event/EventSystem') function CountryWorldBoss_Model.OnStartup() EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, CountryWorldBoss_Model.RefreshRedPoint) EventSystem.Regist(EventID.UI_RefreshOfficialPositionInfo, private.OnOfficialPositionUpdate) EventSystem.Regist(EventID.UI_CountryWorldBoss_UpdateInfo, CountryWorldBoss_Model.RefreshRedPoint) EventSystem.Regist(EventID.Country_OnCountryResetChange, CountryWorldBoss_Model.RefreshRedPoint) -- 国家阶段发生变化刷新红点 private.rewardCountLeft = 0 private.payRewardCount = 0 -- 剩余购买次数 private.hasEnterNums = 0 private.officialPosNums = 0 end function CountryWorldBoss_Model.SetIsEnterMain(value) private.isEnterMain = value end function CountryWorldBoss_Model.GetIsEnterMain() return private.isEnterMain end function CountryWorldBoss_Model.GetCountryWorldBossDic() return MDL.WorldBoss.CountryWorldBossInfoDic end function CountryWorldBoss_Model.IsTimesLeft() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.CountryWorldBoss) and private.rewardCountLeft > 0 then if CountryWorldBoss_Model.GetCountryWorldBossDic() then for i,info in pairs(CountryWorldBoss_Model.GetCountryWorldBossDic()) do local bossState = CTL.WorldBoss.GetBossStateAndLev(info) if bossState == CTL.WorldBoss.BossState.Opening then return true end end end end return false end function CountryWorldBoss_Model.RefreshRedPoint() local isRed = false local isUnlock = CTL.WarZone.IsWarZoneOpen() and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.CountryWorldBoss) -- 判断玩法是否开启 if isUnlock then local curStage = MDL.Country.GetCurStage() local countryInfo = MDL.Country.GetMyGuildInfo() isUnlock = MDL.Guild.IsHasGuild() and countryInfo and countryInfo.country > 0 and curStage and curStage >= MDL.Country.Stage.CountryBuild end local activityState = CTL.Activities.GetState(LuaConst.ActivityType.CountryWorldBoss) if isUnlock and activityState == CTL.Activities.ActivityState.Opening then isRed = CountryWorldBoss_Model.IsTimesLeft() end if isRed then EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.CountryWorldBoss, true) CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.BossMain_WarZone) else EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.CountryWorldBoss, false) CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.BossMain_WarZone) end end --需要监听官职变化,修改挑战次数 function private.OnOfficialPositionUpdate() local newNums = CTL.Activities.GetLeftTimesByType(LuaConst.ActivityType.CountryWorldBoss, private.hasEnterNums, private.officialPosNums) if newNums ~= private.rewardCountLeft then private.rewardCountLeft = newNums EventSystem.Dispatch(EventID.UI_PurchaseNumsSuccess) end end -- 登录和战斗胜利时同步世界BOSS信息 function CountryWorldBoss_Model.SyncCountryWorldBossBossInfo(worldbossInfo) private.payRewardCount = worldbossInfo.warZonePayCount private.hasEnterNums = worldbossInfo.warZoneRewardCount private.officialPosNums = worldbossInfo.officialFreeCount or 0 private.rewardCountLeft = CTL.Activities.GetLeftTimesByType(LuaConst.ActivityType.CountryWorldBoss, private.hasEnterNums, private.officialPosNums) for i, id in ipairs(worldbossInfo.EnterWarZoneBoss) do MDL.WorldBoss.SetHasEnterBoss(id) end CountryWorldBoss_Model.RefreshRedPoint() EventSystem.Dispatch(EventID.UI_CountryWorldBoss_UpdateRewardTimes) end --客户端主动请求世界boss信息,只在上线请求 function CountryWorldBoss_Model.C2GCountryWorldBossData() local msg = world_boss_pb.C2GWorldBossData() msg.bossType = LuaConst.WorldBossType.WarZoneWorldBoss NetManager.SendMessage(MessageEnums.MessageC2GWorldBossData, msg) end -------- Start 数据相关 Start ---------- function CountryWorldBoss_Model.SetHasEnterNums(hasEnterNums) private.hasEnterNums = hasEnterNums end function CountryWorldBoss_Model.SetOfficialPosNums(officialPosNums) private.officialPosNums = officialPosNums end function CountryWorldBoss_Model.SetRewardCountLeft(rewardCountLeft) private.rewardCountLeft = rewardCountLeft end function CountryWorldBoss_Model.GetPayRewardCount() return private.payRewardCount end function CountryWorldBoss_Model.GetHasEnterNums() return private.hasEnterNums end function CountryWorldBoss_Model.GetOfficialPosNums() return private.officialPosNums end function CountryWorldBoss_Model.GetRewardCountLeft() return private.rewardCountLeft end -------- End 数据相关 End ---------- return CountryWorldBoss_Model