| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- local MapProgressActivityData = class("MapProgressActivityData")
- local ProtocalDataNormal = require("ProtocalDataNormal")
- function MapProgressActivityData:ctor()
- self.rankData = nil
- self.type = Enum.RankActivitiesType.MapProgress
- end
- function MapProgressActivityData:Clear()
- self.rankData = nil
- end
- function MapProgressActivityData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAP_ACTIVITY_ACK,self.OnMapActivityAck, self)
- end
- function MapProgressActivityData:QueryRankActivityData(forceOpenUI)
- self.forceOpenUI = forceOpenUI
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_MAP_ACTIVITY_REQ, {})
- end
- function MapProgressActivityData:OnMapActivityAck(data)
- --data = {}
- --data.error = 0
- --data.map_score = 100
- --data.self_rank = 10
- --data.self_level = 100
- --data.end_time = 0
- --data.challeng_reward = false
- --data.rank_reward = false
- if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
- local oldData = clone(self.rankData)
- self.rankData = ProtocalDataNormal.ParseTowerActivityData(data)
- self.rankData.mapScore = data.map_score
- self.rankData.bagScore = data.bag_score
- self.rankData.rankIdx = self:GetRankIdx(self.rankData.selfRank)
- if oldData then
- local needRp = false
- local type = Enum.RankActivitiesType.MapProgress
- local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
- local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
- for i = #taskCfgDatas, 1, -1 do
- local cfgData = taskCfgDatas[i]
- if oldData.rushLevel < cfgData.Rank[1][1] and self.rankData.rushLevel >= cfgData.Rank[1][1] then
- if cfgData.Rank[1][2] == 0 or self.rankData.rushLevel <= cfgData.Rank[1][2] then
- needRp = true
- break
- end
- end
- end
- if not ManagerContainer.RedPointSimpleMgr:CheckRPStateByType(Enum.RPNotifyType.MapRankChanged) then
- ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankChanged, needRp or (self.rankData.rankIdx ~= oldData.rankIdx))
- end
- end
- self:RefreshRewardRPStatae()
- if self.forceOpenUI then
- --TODO 打开 冲榜界面
- if self.rankData.endTime > 0 then
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIActivityTower, Enum.RankActivitiesType.MapProgress)
- self.forceOpenUI = false
- else
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, Enum.RankActivitiesType.MapProgress, false)
- end
- end
- end
- function MapProgressActivityData:GetRankIdx(rank)
- local type = Enum.RankActivitiesType.MapProgress
- local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
- local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
- local cfgDatas = ManagerContainer.CfgMgr:GetRushListCfgByTypeAndIdx(type, idx)
- if not taskCfgDatas and not cfgDatas then
- return 0
- end
- local rankIdx = 0
- if rank > 0 then
- for i = #cfgDatas, 1, -1 do
- local cfgData = cfgDatas[i]
- if cfgData.Rank[1][2] == 0 then
- rankIdx = cfgData.RankGrade
- elseif rank <= cfgData.Rank[1][2] then
- rankIdx = cfgData.RankGrade
- end
- end
- end
- return rankIdx
- end
- function MapProgressActivityData:RefreshRewardRPStatae()
- local type = Enum.RankActivitiesType.MapProgress
- local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
- local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
- local cfgDatas = ManagerContainer.CfgMgr:GetRushListCfgByTypeAndIdx(type, idx)
- if not taskCfgDatas and not cfgDatas then
- ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankCanReward, false)
- return
- end
- local stage, endTime = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityStageEndTime(Enum.RankActivitiesType.MapProgress)
- local rankIdx = 0
- if self.rankData.selfRank > 0 then
- for i = #cfgDatas, 1, -1 do
- local cfgData = cfgDatas[i]
- if cfgData.Rank[1][2] == 0 then
- rankIdx = cfgData.RankGrade
- elseif self.rankData.selfRank <= cfgData.Rank[1][2] then
- rankIdx = cfgData.RankGrade
- end
- end
- end
- local rankRewardState = rankIdx > 0 and stage == 2 and self.rankData.selfRank > 0 and not self.rankData.rankReward
- local rankIdx = 0
- for i = #taskCfgDatas, 1, -1 do
- local cfgData = taskCfgDatas[i]
- if self.rankData.rushLevel >= cfgData.Rank[1][1] then
- if cfgData.Rank[1][2] == 0 or self.rankData.rushLevel <= cfgData.Rank[1][2] then
- rankIdx = cfgData.TargetGrade
- end
- end
- end
- local challengeRewardState = rankIdx > 0 and stage == 2 and not self.rankData.challengReward
- ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankCanReward, rankRewardState or challengeRewardState)
- end
- function MapProgressActivityData:OnActivityRewardAck(data)
- if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
- if data.reward_type == 1 then
- self.rankData.challengReward = true
- elseif data.reward_type == 2 then
- self.rankData.rankReward = true
- end
- self:RefreshRewardRPStatae()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_REWARD_SUCCESS_NTF, data.reward_type)
- CommonUtil.ACKShowRewardList(data.item_list)
- end
- function MapProgressActivityData:GetCurRankActivityData()
- return self.rankData
- end
- function MapProgressActivityData:SendRewardReq(type)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_RUSH_ACTIVITY_REWARD_REQ, {reward_type = type, rush_type = self.type})
- end
- function MapProgressActivityData:Destroy()
- self:Clear()
- end
- return MapProgressActivityData
|