local Rank_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local rank_pb = require 'Proto/rank_pb' local other_role_opt_pb = require 'Proto/other_role_opt_pb' Rank_Model.RankType = { FightGs = 1, -- 战力榜 Level = 2, -- 等级榜 ClimbTower = 4, -- 爬塔 Fair3V3 = 5, -- 三军争霸 BossChallenge = 6, -- 无双挑战 Guild = 7, -- 势力名望 SyncSolo = 8, -- 谁与争锋 GuildBoss = 9, -- 魔将来袭(隶属于势力子页签) GuildWar = 10, -- 势力争霸(隶属于势力子页签) GuildEscort = 11, -- 势力运镖(隶属于势力子页签) DemonGod = 20, -- 魔神降世 NationClimbTowerWei = 21, -- 四国爬塔魏 NationClimbTowerShu = 22, -- 四国爬塔蜀 NationClimbTowerWu = 23, -- 四国爬塔吴 NationClimbTowerQun = 24, -- 四国爬塔群 GuildPower = 25, -- 势力战力 Country = 26, -- 国家 Storm = 30, -- 暴风 ThreeTeamFight = 31, -- 多人演武 --回放 FairPlayReplay1v1MyServer = 51, -- 公平竞技1v1本服视频榜单 FairPlayReplay1v1WarZone = 52, --公平竞技1v1战区视频榜单 FairPlayReplay1v1AllServer = 53, --公平竞技1v1全服视频榜单 FairPlayReplay1v1MyServerNDay = 54, --公平竞技1v1本服N日视频榜单 FairPlayReplay1v1WarZoneNDay = 55, --公平竞技1v1战区N日视频榜单 FairPlayReplay1v1AllServerNDay = 56, --公平竞技1v1全服N日视频榜单 FairPlayReplay3v3MyServer = 57, --公平竞技3v3本服视频榜单 FairPlayReplay3v3WarZone = 58, --公平竞技3v3战区视频榜单 FairPlayReplay3v3AllServer = 59, --公平竞技3v3全服视频榜单 FairPlayReplay3v3MyServerNDay = 60, --公平竞技3v3本服N日视频榜单 FairPlayReplay3v3WarZoneNDay = 61, --公平竞技3v3战区N日视频榜单 FairPlayReplay3v3AllServerNDay = 62, --公平竞技3v3全服N日视频榜单 FairPlayReplayBCMyServer = 63, --公平竞技无双挑战本服视频榜单 FairPlayReplayBCWarZone = 64, --公平竞技无双挑战战区视频榜单 FairPlayReplayBCAllServer = 65, --公平竞技无双挑战全服视频榜单 ExpelMonster = 70, --元旦活动恶兽驱役 Fair3V3AllServer = 105, --三军争霸全服 SyncSoloAllServer = 108, --谁与争锋全服 SyncFourCountryWar = 109, --四国之战排行榜 HeroMatch1v1 = 21751, -- 天地群雄 HeroMatch3v3 = 34648, -- 天地群雄3v3 GVGFight = 20031, --四国战力排行榜 FightGs_Wei = 35456, FightGs_Shu = 35457, FightGs_Wu = 35458, FightGs_Qun = 35459, SlgGvE = 45197, --汉中风云 AwakenActivity = 44358, --觉醒试炼活动 } function Rank_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGetRankRecord, private.SetRankInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageThumbsUpForWhom, nil) NetManager.RegisterMsgCB(MessageEnums.MessageCommonShowGetInfo, private.CommonShowGetInfoResponse) private.RankInfo = {} private.WarZoneMyCountryRankInfo = {} -- 任意榜单中自己的国家排行 private.MyCountryRankInfo = nil private.MyRankInfo = {} -- 缓存自己的(或军团)排行信息 private.NextRefreshTime = 0 -- 长时间待在排行界面刷新界面时间间隔 private.RankInfo[Rank_Model.RankType.BossChallenge] = {} private.RemainingThumbsUpTimes = 0 -- 今日剩余点赞次数 private.localRankThumbsUpForWhom = {} --本服排行榜点赞的信息 private.warZoneRankThumbsUpForWhom = {} --战区排行榜点赞的信息 private.LastGetRankInfoReqParam = {} private.IsThumbsUp = false end ---------- start 数据获取相关 start ---------- function Rank_Model.GetRankInfoDataByType(rankType, paramTable) if rankType == Rank_Model.RankType.BossChallenge then return private.RankInfo[rankType][paramTable.bossId] else return private.RankInfo[rankType] end end function Rank_Model.GetWarZoneCountryRankInfoByType(rankType, paramTable) return private.WarZoneMyCountryRankInfo[rankType] end function Rank_Model.GetMyCountryRankInfo() return private.MyCountryRankInfo end -- 所有排行信息 function Rank_Model.GetAllRankInfo() return private.RankInfo end -- 当前排行榜自己的排行信息 function Rank_Model.GetMyRankInfo() return private.MyRankInfo end -- 下次刷新时间 function Rank_Model.GetNextRefreshTime() return private.NextRefreshTime end -- 获取当日剩余点赞次数 function Rank_Model.GetRemainingThumbsUpTimes() return private.RemainingThumbsUpTimes end -- 判断当前排行榜类型的玩家是否已经被点赞过 function Rank_Model.IsAlreadyThumbsUp(rankType, acid, isCross) local playerList if isCross then playerList = private.warZoneRankThumbsUpForWhom[rankType] else playerList = private.localRankThumbsUpForWhom[rankType] end if playerList then for i, v in ipairs(playerList) do if v == acid then return true end end end return false end function Rank_Model.IsThumbsUpRefresh() return private.IsThumbsUp end function Rank_Model.GetPreCountryInfo() return private.PreCountryInfo, private.PreMyCountryInfo end -- 势力名望上期榜单 function Rank_Model.GetLastBalanceGuildInfo() return private.PreGuildInfo, private.PreMyGuildInfo end ---------- end 数据获取相关 end ---------- --region ********************** 协议相关 ********************* --region 拉取排行榜 function Rank_Model.GetRankInfoReq(rankType, paramTable, sortType, isThumbsUp) if not rankType then return end local msg = rank_pb.GetRankRecordReq() msg.rankType = rankType if rankType == Rank_Model.RankType.BossChallenge then if not paramTable or not paramTable.seasonId then return end msg.params.seasonId = paramTable.seasonId elseif rankType == Rank_Model.RankType.DemonGod then msg.params.isPreRank = paramTable.isPreRank elseif rankType == Rank_Model.RankType.ExpelMonster then msg.params.isPreRank = paramTable.isPreRank elseif rankType == Rank_Model.RankType.SlgGvE then msg.params.bossId = paramTable.bossId msg.params.group = paramTable.group elseif rankType == Rank_Model.RankType.AwakenActivity then msg.params.bossId = paramTable.bossId end -- 查询类型 msg.params.isCross = false if sortType and sortType ~= CTL.Rank.SortType.None then msg.params.isCross = sortType == CTL.Rank.SortType.WarZone and true or false end private.LastGetRankInfoReqParam["rankType"] = rankType private.LastGetRankInfoReqParam["paramTable"] = paramTable private.LastGetRankInfoReqParam["sortType"] = sortType private.IsThumbsUp = isThumbsUp NetManager.SendMessage(MessageEnums.MessageGetRankRecord, msg) end function private.SetRankInfoResp(msgResp) local rankType = msgResp.rankType if rankType == Rank_Model.RankType.GuildBoss -- 军团_(势力boss)魔将来袭(隶属于势力子页签) or rankType == Rank_Model.RankType.GuildWar -- 军团_势力争霸(隶属于势力子页签) or rankType == Rank_Model.RankType.GuildEscort -- 军团_势力押镖(隶属于势力子页签) or rankType == Rank_Model.RankType.GuildPower then -- 军团_势力战力(隶属于势力子页签) private.RankInfo[rankType] = msgResp.guildRankInfo.guildInfo private.MyRankInfo = msgResp.guildRankInfo.myGuildInfo private.NextRefreshTime = msgResp.guildRankInfo.nextRefreshTime elseif rankType == Rank_Model.RankType.BossChallenge then -- 无双挑战 private.RankInfo[rankType][msgResp.params.bossId] = msgResp.perRankInfo.records private.MyRankInfo = msgResp.perRankInfo.myRank private.NextRefreshTime = msgResp.perRankInfo.nextRefreshTime elseif rankType == Rank_Model.RankType.Country then private.RankInfo[rankType] = msgResp.countryRankInfo.countryInfo private.MyRankInfo = msgResp.countryRankInfo.myCountryInfo private.NextRefreshTime = msgResp.countryRankInfo.nextRefreshTime private.PreCountryInfo = msgResp.countryRankInfo.preCountryInfo private.PreMyCountryInfo = msgResp.countryRankInfo.preMyCountryInfo elseif rankType == Rank_Model.RankType.FightGs or CTL.Rank.IsNationFightGsRank(rankType) then -- 原榜单信息 private.RankInfo[rankType] = msgResp.perRankInfo.records private.MyRankInfo = msgResp.perRankInfo.myRank private.NextRefreshTime = msgResp.perRankInfo.nextRefreshTime -- 新增在自己国家内的排行 if IsServerDataNotNil(msgResp.perRankCountryInfo) then private.WarZoneMyCountryRankInfo[rankType] = msgResp.perRankCountryInfo.records private.MyCountryRankInfo = msgResp.perRankCountryInfo.myRank else private.WarZoneMyCountryRankInfo[rankType] = {} end elseif rankType == Rank_Model.RankType.Guild then -- 势力名望 private.RankInfo[rankType] = msgResp.guildRankInfo.guildInfo private.MyRankInfo = msgResp.guildRankInfo.myGuildInfo private.NextRefreshTime = msgResp.guildRankInfo.nextRefreshTime private.PreGuildInfo, private.PreMyGuildInfo = msgResp.preGuildRankInfo.guildInfo, msgResp.preGuildRankInfo.myGuildInfo else private.RankInfo[rankType] = msgResp.perRankInfo.records private.MyRankInfo = msgResp.perRankInfo.myRank private.NextRefreshTime = msgResp.perRankInfo.nextRefreshTime end EventSystem.Dispatch(EventID.UI_RefreshRankInfo, rankType, msgResp.params) end -- #endregion --region 同步点赞信息 function Rank_Model.SyncRankThumbsUpInfo(msg) local reRequest = false if private.RemainingThumbsUpTimes ~= msg.RemainingThumbsUpTimes then private.RemainingThumbsUpTimes = msg.RemainingThumbsUpTimes reRequest = true end table.clearArray(private.localRankThumbsUpForWhom) for i, v in ipairs(msg.RankThumbsUpForWhom) do local playerList = private.localRankThumbsUpForWhom[v.RankType] if not playerList then playerList = {} private.localRankThumbsUpForWhom[v.RankType] = playerList end table.insert(playerList, v.TargetACID) end table.clearArray(private.warZoneRankThumbsUpForWhom) for i, v in ipairs(msg.RankThumbsUpForWhomCross) do local playerList = private.warZoneRankThumbsUpForWhom[v.RankType] if not playerList then playerList = {} private.warZoneRankThumbsUpForWhom[v.RankType] = playerList end table.insert(playerList, v.TargetACID) end if private.RemainingThumbsUpTimes == 0 then CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.Rank_ThumbsUp) else CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.Rank_ThumbsUp) end -- 点赞信息发生变化时需要重新请求排行榜 if reRequest then Rank_Model.GetRankInfoReq(private.LastGetRankInfoReqParam.rankType, private.LastGetRankInfoReqParam.paramTable, private.LastGetRankInfoReqParam.sortType, true) end end --endregion --region 点赞 function Rank_Model.ThumbsUpForWhomRequest(rankType, acid, sortType) local msg = rank_pb.ThumbsUpForWhomReq() msg.rankType = rankType msg.acid = acid msg.isCross = sortType == CTL.Rank.SortType.WarZone and true or false NetManager.SendMessage(MessageEnums.MessageThumbsUpForWhom, msg) end --endregion 点赞 --region 选中玩家详细信息 function Rank_Model.CommonShowGetInfoRequest(targetAcid, rankType) local msg = other_role_opt_pb.CommonShowGetInfoReq() msg.TargetAcid = targetAcid if rankType then msg.rankType = rankType end NetManager.SendMessage(MessageEnums.MessageCommonShowGetInfo, msg) end function private.CommonShowGetInfoResponse(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_CommonShow_RefreshRoleInfo, msgResp.ShowInfo) end end --endregion 选中玩家详细信息 --endregion ******************* 协议相关 ********************* return Rank_Model