local SyncTeamPVP_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local battle_reward_pb = require 'Proto.battle_reward_pb' local battle_match_pb = require 'Proto/battle_match_pb' local fairplay_tvt_pb = require 'Proto.fairplay_tvt_pb' local voice_call_pb = require "Proto.voice_call_pb" SyncTeamPVP_Model.ChangeVoiceState = { ChangeListen = 1, ChangeMicrophone = 2, ChangeAll = 3, } function SyncTeamPVP_Model.OnStartup() --绑定竞技场推送消息回调 --NetManager.RegisterMsgCB(MessageEnums.MessageG2CFighterProperties,private.G2CFighterPropertiesCallback) --G2CFighterPropertiesProtoManager.G2CFighterPropertiesRegister(private.G2CFighterPropertiesCallback) --绑定战斗结果 的 推送消息回调 NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushBattleResult, private.GetTeamPVPBattleResult) --队友更换主副将推送消息回调 NetManager.RegisterMsgCB(MessageEnums.MessageG2CFriendlyFighterChangeHero, private.G2CFriendlyFighterChangeHeroCallback) --队友点击准备推送消息回调 NetManager.RegisterMsgCB(MessageEnums.MessageG2CFriendlyFighterReady, private.G2CFriendlyFighterReadyCallback) NetManager.RegisterMsgCB(MessageEnums.MessageFighterUnReady, private.OnCancelReady) --换将 NetManager.RegisterMsgCB(MessageEnums.MessageChangeBattleFighterHero, private.SendChangeHeroResponse) --准备 NetManager.RegisterMsgCB(MessageEnums.MessageFighterReady, private.SendReadyResponse) --申请自己3V3排名和积分 NetManager.RegisterMsgCB(MessageEnums.MessageFairPlayTvTOpen, private.FairPlayTvTOpenResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CFairPlayHistoryLegendary, private.SyncTeamPVPToTopRank) NetManager.RegisterMsgCB(MessageEnums.MessageGetFairPlayWinNumReward, private.GetFairPlayWinNumRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageBattleGetDailyReward,private.SyncTeamPVPGetDailyRewardResp) EventSystem.Regist(EventID.SyncTeam_PVPSendBattleResult, SyncTeamPVP_Model.SendBattleResult) EventSystem.Regist(EventID.WatchBattle_LevelStop, private.OnWatchBattleOver) private.historyDan = 0 private.rewardDan = 0 private.curNum = 0 private.curDan = 0 private.lastDan = 0 private.lastSeasonDan = 0 private.isReady = false private.selectMainHero = nil private.selectViceHero = nil private.matchResult = {}--匹配结果 private.tickTime = -1 SyncTeamPVP_Model.SetReopenSelectHero(false) private.battleResult = {}--战斗结果 private.pvpRank = 0 private.eloScore = 0 private.dan = 0 private.syncSoloFairPlayState = 0 private.role1Info = { acid = nil, mainHero = nil, viceHero = nil, ready = false, mainHeroAwaken = false, viceHeroAwaken = false } private.role2Info = { acid = nil, mainHero = nil, viceHero = nil, ready = false, mainHeroAwaken = false, viceHeroAwaken = false } private.syncTVTWinCountInfo = {} private.TVTSeasonInfo = {} end function SyncTeamPVP_Model.GetSelfSelectHero() return private.selectMainHero or 0, private.selectViceHero or 0 end function SyncTeamPVP_Model.GetSelfReadyState() return private.isReady end function SyncTeamPVP_Model.GetSyncTeamPVPCurNum() return private.curNum end function SyncTeamPVP_Model.GetSeasonId() return private.TVTSeasonInfo.curSeasonId end function SyncTeamPVP_Model.GetSyncTeamPVPRewardDan() return private.rewardDan end function SyncTeamPVP_Model.GetSyncTeamPVPHistoryDan() return private.historyDan end function SyncTeamPVP_Model.GetSyncSoloFairPlayState() return private.syncSoloFairPlayState end -- 获取当前状态需要达到排名 function SyncTeamPVP_Model.GetSoloLevelRank() return CTL.FairPlay.GetLevelRankByFairPlayState(private.syncSoloFairPlayState) end function SyncTeamPVP_Model.SetSyncTeamPVPActivityId(ID) private.activityId = ID end function SyncTeamPVP_Model.GetTVTSeasonInfo() return private.TVTSeasonInfo end function SyncTeamPVP_Model.GetTVTState() return private.seasonState end function SyncTeamPVP_Model.GetCDTimer() local cdTimer = os.difftime(private.TVTSeasonInfo.endTime, UTL.Time.GetServerTimestamp()) if cdTimer < 0 then return 0 end return cdTimer end function SyncTeamPVP_Model.UpdateTVTSeasonInfo(info) private.TVTSeasonInfo = info private.historyDan = info.historyDan >= 0 and info.historyDan or private.historyDan private.rewardDan = info.rewardDan >= 0 and info.rewardDan or private.rewardDan private.curNum = info.curNum private.seasonState = info.seasonState private.syncSoloFairPlayState = info.state private.syncTVTWinCountInfo.winNum = info.winNum private.syncTVTWinCountInfo.maxReceivedRewardID = private.GetMaxReceivedWinCountRewardID(info.rewardWinNum) EventSystem.Dispatch(EventID.UI_FairPlay_TVTSeasonInfoUpdate) end function private.SyncTeamPVPToTopRank() if private.dan ~= 0 then return private.dan end return 0 end function SyncTeamPVP_Model.FairPlayTvTOpenReq() local msg = fairplay_tvt_pb.FairPlayTvTOpenReq() NetManager.SendMessage(MessageEnums.MessageFairPlayTvTOpen, msg) end function private.FairPlayTvTOpenResp(msgResp) private.pvpRank = msgResp.playerRank private.eloScore = msgResp.eloPoint private.curDan = msgResp.curDan private.lastDan = msgResp.lastDan private.lastSeasonDan = msgResp.lastSeasonDan private.curNum = msgResp.curNum private.historyDan = msgResp.historyDan private.rewardDan = msgResp.rewardDan private.syncTVTWinCountInfo.winNum = msgResp.winNum private.syncTVTWinCountInfo.maxReceivedRewardID = private.GetMaxReceivedWinCountRewardID(msgResp.rewardWinNum) private.teamFairChampionshipNo1Info = msgResp.basicInfo --天下会武3v3冠军信息 private.isTeamFairFamous = msgResp.isTeamFairFamous --是否是天下会武3v3名人堂 private.teamName = msgResp.teamName --天下会武3v3队伍名称 EventSystem.Dispatch(EventID.UI_FairPlay_RefreshPVPRankInfo) if IsServerDataNotNil(private.teamFairChampionshipNo1Info) then EventSystem.Dispatch(EventID.UI_TeamFairChampionship_UpdateThumbsUpParam, msgResp.thumbsUpNum, msgResp.myThumbsUp) end end function SyncTeamPVP_Model.IsTeamFairFamous(checkData) if not private.isTeamFairFamous then return false end if checkData and not private.teamFairChampionshipNo1Info[1] then return false end return true end function SyncTeamPVP_Model.GetTeamFairInfoByIndex(index) return private.teamFairChampionshipNo1Info[index] end function SyncTeamPVP_Model.GetChampionTeamName() return private.teamName end function private.GetMaxReceivedWinCountRewardID(maxReceivedNum) local maxReceivedID = 0 for i, v in DataSheetManager.ThreeBattleSeasonWin:GetEnumerator() do if maxReceivedNum >= v.ID then maxReceivedID = v.ID end end return maxReceivedID end function SyncTeamPVP_Model.GetFairPlayWinNumRewardReq() local msg = fairplay_tvt_pb.GetFairPlayWinNumRewardReq() NetManager.SendMessage(MessageEnums.MessageGetFairPlayWinNumReward, msg) end function private.GetFairPlayWinNumRewardResp(msgResp) private.syncTVTWinCountInfo.maxReceivedRewardID = private.GetMaxReceivedWinCountRewardID(msgResp.rewardWinNum) EventSystem.Dispatch(EventID.UI_FairPlay_WinRewardRefresh) end --region 每日首胜 --3V3公平竞技奖励信息 function SyncTeamPVP_Model.SyncTeamPVPRewardInfo(rewardList) for _, v in ipairs(rewardList) do if v.battleType == MDL.Unlock.FunctionType.Battle3V3 then logging.log(LTAG.LOG, "SyncTeamPVPRewardInfo", v) private.firstWinOfEveryDayState = v.state --每日首胜奖励状态 0未完成,1未领取,2已领取 private.fairPlaySoloWeeklyRewardArray = v.rewards --周奖励信息--暂时不用,后面可能会加 EventSystem.Dispatch(EventID.UI_FairPlay_WinRewardRefresh) --刷红点 EventSystem.Dispatch(EventID.UI_SyncTeamPVP_RefreshDailyRewardUI) EventSystem.Dispatch(EventID.UI_FairPlay_TVTSeasonInfoUpdate) break end end end -- 获取每日首胜状态 0未完成,1未领取,2已领取 function SyncTeamPVP_Model.GetFirstWinOfEveryDayState() return private.firstWinOfEveryDayState end --领每日首胜奖励 Req function SyncTeamPVP_Model.SyncTeamPVPGetDailyRewardReq() local msg = battle_reward_pb.BattleGetDailyRewardReq() msg.typ = MDL.Unlock.FunctionType.Battle3V3 NetManager.SendMessage(MessageEnums.MessageBattleGetDailyReward, msg) end --领取每日首胜奖励 Rsp function private.SyncTeamPVPGetDailyRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_FairPlay_WinRewardRefresh) --刷红点 EventSystem.Dispatch(EventID.UI_SyncTeamPVP_RefreshDailyRewardUI) EventSystem.Dispatch(EventID.UI_FairPlay_TVTSeasonInfoUpdate) end end --endregion 每日首胜 function SyncTeamPVP_Model.GetSyncTVTWinInfo() return private.syncTVTWinCountInfo end function SyncTeamPVP_Model.GetCurDan() if private.dan ~= 0 then private.curDan = private.dan end return private.curDan end function SyncTeamPVP_Model.GetLastDan() return private.lastDan end function SyncTeamPVP_Model.GetLastSeasonDan() return private.lastSeasonDan end function SyncTeamPVP_Model.GetCurNum() return private.curNum end function SyncTeamPVP_Model.SyncTeamPVPRewardReq() MDL.FairPlay.FairPlayRewardReq(LuaConst.ActivityType.TVT) end --一键领取信息 function SyncTeamPVP_Model.SyncTeamPVPRewardResp(msgResp) private.rewardDan = msgResp.rewardDan EventSystem.Dispatch(EventID.UI_FairPlay_RefreshPVPRankInfo) end function SyncTeamPVP_Model.InitFighterProperties(msg) private.eloScore = msg.EloScore private.winNumbers = msg.winNumbers private.totalNumbers = msg.totalNumbers end local SyncTeamPVPLevelRankKey = "SyncTeamPVPLevelRankKey" function SyncTeamPVP_Model.SaveSyncTeamPVPLevelRank() local levelRank = CTL.SyncTeamPVP.GetLevelRank() PersistentData.PlayerData:Set(SyncTeamPVPLevelRankKey,levelRank,true) end function SyncTeamPVP_Model.LoadSyncTeamPVPLevelRank() local levelRank = PersistentData.PlayerData:Get(SyncTeamPVPLevelRankKey,0) if levelRank == 0 then SyncTeamPVP_Model.SaveSyncTeamPVPLevelRank() levelRank = CTL.SyncTeamPVP.GetLevelRank() end return levelRank end function SyncTeamPVP_Model.GetMaxScore() local maxScore = 0 for key, value in DataSheetManager.ThreeBattleLevelData:GetEnumerator() do if value.LevelRank == 0 and value.LevelScore > maxScore then maxScore = value.LevelScore end end return maxScore end function SyncTeamPVP_Model.GetLevelByScore(score) if score <= 0 then return DataSheetManager.ThreeBattleLevelData:GetDataByLevelID(1) end local battleLevel = DataSheetManager.ThreeBattleLevelData:GetDataByLevelID(1) for key, value in DataSheetManager.ThreeBattleLevelData:GetEnumerator() do if value.LevelRank == 0 then if value.LevelScore > score then return battleLevel end battleLevel = value end end return battleLevel end function SyncTeamPVP_Model.GetRole1Info() return private.role1Info.acid, private.role1Info.mainHero, private.role1Info.mainHeroAwaken, private.role1Info.viceHero, private.role1Info.viceHeroAwaken, private.role1Info.ready end function SyncTeamPVP_Model.GetRole2Info() return private.role2Info.acid, private.role2Info.mainHero, private.role2Info.mainHeroAwaken, private.role2Info.viceHero, private.role2Info.viceHeroAwaken, private.role2Info.ready end function SyncTeamPVP_Model.SetPVPRank(rank) private.pvpRank = rank end function SyncTeamPVP_Model.GetPVPRank() return private.pvpRank end function SyncTeamPVP_Model.SetEloScore(score) private.eloScore = score end function SyncTeamPVP_Model.GetEloScore() return private.eloScore end function SyncTeamPVP_Model.GetWinNumbers() return private.winNumbers end function SyncTeamPVP_Model.GetTotalNumbers() return private.totalNumbers end function SyncTeamPVP_Model.GetMatchResult() return private.matchResult end function SyncTeamPVP_Model.GetTickTime() return private.tickTime end function SyncTeamPVP_Model.GetReopenSelectHero() return private.reopenSelectHero end function SyncTeamPVP_Model.SetReopenSelectHero(isReopen) private.reopenSelectHero = isReopen end function SyncTeamPVP_Model.GetBattleResult() return private.battleResult end function SyncTeamPVP_Model.SyncTeamBattleMatchResultReceive(msg) private.matchResult = msg private.tickTime = msg.countDownTick private.battleChatChannel = msg.battleChatChannel -- 本方战斗队伍聊天频道 if msg.needCountDown == true then --匹配返回时,什么情况下,可以打开匹配成功界面?这里在其他需要跳转场景的玩法处做判断,使用IsCanGoOtherScene UIManager.OpenView(Const_UI_Lua.UIEnum.UISyncTeamPVPMatchSuccessPanel, msg) private.ReSetTeamMemberInfo() else if not UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UISyncTeamPVPSelectHeroPanel) then if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIHomeMain) then UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UISyncTeamPVPSelectHeroPanel) else SyncTeamPVP_Model.SetReopenSelectHero(true) end end end EventSystem.Dispatch(EventID.UI_SyncTeamPVP_MatchSuccess) end -- 本方战斗队伍聊天频道 function SyncTeamPVP_Model.GetBattleChatChannel() if private.battleChatChannel == nil then private.battleChatChannel = BattleDataGetter.GetBattleChatChannel() end return private.battleChatChannel end function SyncTeamPVP_Model.ClearCacheChannel() private.battleChatChannel = nil end function private.ReSetTeamMemberInfo() private.role1Info.acid = nil private.role1Info.mainHero = nil private.role1Info.mainAwaken = false private.role1Info.viceHero = nil private.role1Info.viceAwaken = false private.role1Info.ready = false private.role2Info.acid = nil private.role2Info.mainHero = nil private.role2Info.mainAwaken = false private.role2Info.viceHero = nil private.role2Info.viceAwaken = false private.role2Info.ready = false end function private.ResetSelfInfo() private.isReady = false private.selectMainHero = nil private.selectViceHero = nil end function SyncTeamPVP_Model.ResetSelfInfo() private.ResetSelfInfo() end --gws 战斗结果resp function private.GetTeamPVPBattleResult(msgResp) if BattleDataGetter.IsInLevelWatchBattle() and not BattleDataGetter.HadStopLevel() then private.watchBattleSummary = msgResp --公平3V3通用观战逻辑,目前有观战的是天下会武3V3 else private.OnGetTeamPVPBattleResult(msgResp) end end function private.OnGetTeamPVPBattleResult(msg) -- ↓以下代码为了解决bug- 当TCP断线重来回来时,发现房间没有了在,则不会到OnB2CReplenishReconnectFrameData,导致关卡没开始没结束,但是TCP连上了,loading的step不是none ,进而导致不能退出关卡。 if LevelManager._levelLogicData.LogicLoadingStep ~= LuaConst.Enum_LoadingStep.None and LevelManager._levelLogicData.LogicLoadingStep ~= LuaConst.Enum_LoadingStep.FastPlay then EventSystem.Dispatch(EventID.BI_LevelMiddle,BIManager.BIType.SyncBattle,"[sync]3v3ResultAtBeforeBegin") NotSyncBattleSetter.StopCurLevel() LevelManager.SetLoadingLevelEnd() end private.ResetSelfInfo() -- 上以上代码为了解决bug- logging.log(LTAG.LOG, "TeamPVP收到战斗结算协议", msg) private.battleResult = msg --结算界面数据,天下会武3V3也复用 if not BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamFairChampionship) then private.eloScore = msg.EloScore --段位分数,天下会武3V3不用 end logging.warn(LTAG.CRIT, "[G-C]TeamPVP : Respon BattleResult") if msg.ErrCode ~= 0 then logging.log(LTAG.LOG, "------------战斗无效:", "错误码-", msg.ErrCode, "----------------") return end BIManager.DispatchBIClientEvent(BIManager.EventName.TeamFightEnd) CameraController.Instance:SetGray(false) --先判断是否需要打开成就界面 UIManager.CloseAllBase() CTL.SyncTeamPVP.PlayTimeline(msg) end function private.OnWatchBattleOver(isClickExitBtn) if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamFairChampionship) then --目前有观战的是天下会武3V3 if private.watchBattleSummary then private.OnGetTeamPVPBattleResult(private.watchBattleSummary) private.watchBattleSummary = nil else if not isClickExitBtn then-- 是否是按下退出按钮退出 。处理case:关卡结束时不是玩家点击退出而是自然看完且未收到服务器的战斗结果,此时不能被卡在关卡内要主动离开。 EventSystem.Dispatch(EventID.Level_SendRoleLeaveFuben ,true) end end end end function private.G2CFriendlyFighterChangeHeroCallback(msg) if msg.acid == BattleDataGetter.GetAcID() then private.selectMainHero = msg.mainHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.mainHero) or msg.mainHero private.selectViceHero = msg.viceHeroAwaken and CTL.HeroAwaken.EncodeHeroId(msg.viceHero) or msg.viceHero end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UISyncTeamPVPSelectHeroPanel) or UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UISyncFourCountryWarSelectHeroPanel) then if msg.acid == BattleDataGetter.GetAcID() then EventSystem.Dispatch(EventID.UI_SyncTeamPVPSelect_RefreshHeroSelect, private.selectMainHero, private.selectViceHero) else EventSystem.Dispatch(EventID.UI_SyncTeamPVPSelectHero_TeamMemberChangeHero, msg) end else if private.role1Info.acid == nil and private.role2Info.acid == nil then private.role1Info.acid = msg.acid private.SetRoleInfo(private.role1Info, msg) elseif private.role1Info.acid ~= nil and private.role2Info.acid ~= nil then if private.role1Info.acid == msg.acid then private.SetRoleInfo(private.role1Info, msg) elseif private.role2Info.acid == msg.acid then private.SetRoleInfo(private.role2Info, msg) end else if private.role1Info.acid == nil then if private.role2Info.acid == msg.acid then private.SetRoleInfo(private.role2Info, msg) else private.role1Info.acid = msg.acid private.SetRoleInfo(private.role1Info, msg) end else if private.role1Info.acid == msg.acid then private.SetRoleInfo(private.role1Info, msg) else private.role2Info.acid = msg.acid private.SetRoleInfo(private.role2Info, msg) end end end end end function private.SetRoleInfo(roleInfo, msg) roleInfo.mainHero = msg.mainHero roleInfo.mainHeroAwaken = msg.mainHeroAwaken roleInfo.viceHero = msg.viceHero roleInfo.viceHeroAwaken = msg.viceHeroAwaken end function private.G2CFriendlyFighterReadyCallback(msg) if msg.acid == BattleDataGetter.GetAcID() then private.isReady = msg.isReady if msg.isReady then EventSystem.Dispatch(EventID.UI_SyncTeamPVP_PlayerReady) else EventSystem.Dispatch(EventID.UI_SyncTeamPVP_OnCancelReady) end else EventSystem.Dispatch(EventID.UI_SyncTeamPVPSelectHero_TeamMemberReady, msg.acid, msg.isReady) if private.role1Info.acid == msg.acid then private.role1Info.ready = msg.isReady elseif private.role2Info.acid == msg.acid then private.role2Info.ready = msg.isReady end end end function SyncTeamPVP_Model.OnSyncTeamPVPMatch(state) if state then private.BeginSyncTeamPVPMatch() else private.CancelSyncTeamPVPMatch() end end --开始匹配 function private.BeginSyncTeamPVPMatch() EventSystem.Dispatch(EventID.UI_SyncTeamPVP_RefreshUI) end --取消匹配 function private.CancelSyncTeamPVPMatch() EventSystem.Dispatch(EventID.UI_SyncTeamPVP_RefreshUI) end -- 发送战斗结果的请求 function SyncTeamPVP_Model.SendBattleResult(msg) logging.warn(LTAG.CRIT, "[C-G]TeamPVP : SendBattleResult") NetManager.SendMessage(MessageEnums.MessageC2GUploadBattleResult,msg) end function SyncTeamPVP_Model.CancelReady() local msg = battle_match_pb.FighterUnReadyReq() NetManager.SendMessage(MessageEnums.MessageFighterUnReady,msg) end function private.OnCancelReady(msg) private.isReady = false EventSystem.Dispatch(EventID.UI_SyncTeamPVP_OnCancelReady) end --通知服务器已准备(req) function SyncTeamPVP_Model.SendFighterReady(mainHero, viceHero) local msg = battle_match_pb.FighterReadyReq() local mainId, mainAwaken = CTL.HeroAwaken.DecodeHeroId(mainHero) msg.mainHero = mainId msg.mainHeroAwaken = mainAwaken local viceId, viceAwaken = CTL.HeroAwaken.DecodeHeroId(viceHero) msg.viceHero = viceId msg.viceHeroAwaken = viceAwaken NetManager.SendMessage(MessageEnums.MessageFighterReady, msg) --自己固定是第三个位置 end --服务器返回准备是否成功(resp) function private.SendReadyResponse(msgResp) if msgResp.success then private.isReady = true EventSystem.Dispatch(EventID.UI_SyncTeamPVP_PlayerReady) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_RepeatSelect"]) end end --通知服务器更换英雄(req) function SyncTeamPVP_Model.SendChangeHero(mainHero, viceHero) local msg = battle_match_pb.ChangeBattleFighterHeroReq() local mainId, mainAwaken = CTL.HeroAwaken.DecodeHeroId(mainHero) msg.mainHero = mainId msg.mainHeroAwaken = mainAwaken viceHero = viceHero or 0 local viceId, viceAwaken = CTL.HeroAwaken.DecodeHeroId(viceHero) msg.viceHero = viceId msg.viceHeroAwaken = viceAwaken private.selectMainHero = mainHero private.selectViceHero = viceHero NetManager.SendMessage(MessageEnums.MessageChangeBattleFighterHero, msg) end --服务器返回更换英雄是否成功(resp) function private.SendChangeHeroResponse(msgResp) if msgResp.success then EventSystem.Dispatch(EventID.UI_SyncTeamPVPSelect_RefreshHeroSelect, private.selectMainHero, private.selectViceHero) else CTL.Tips.AddTipsMsg(Const_IDS.IDS_RepeatSelect) end private.selectMainHero = nil private.selectViceHero = nil end function private.SyncSoloToTopRank(msg) private.dan = msg.dan end --这块是赛季结束服务器数据 function SyncTeamPVP_Model.SyncTeamPVPPlayInfoPush(msg) private.activityId = msg.activityId private.eloScore = msg.EloScore private.historyDan = msg.historyDan >= 0 and msg.historyDan or private.historyDan private.rewardDan = msg.rewardDan >= 0 and msg.rewardDan or private.rewardDan private.curNum = msg.curNum private.syncTVTWinCountInfo.winNum = msg.winNum private.syncTVTWinCountInfo.maxReceivedRewardID = private.GetMaxReceivedWinCountRewardID(msg.rewardWinNum) EventSystem.Dispatch(EventID.UI_FairPlay_TVTSeasonInfoUpdate) if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UISyncTeamPVPMainPanel) then SyncTeamPVP_Model.FairPlayTvTOpenReq() end end --region ************************ 测试武将相关 ************************************* ---@public 获取测试武将数据 function SyncTeamPVP_Model.GetTestHeroArray() private.TestHeroOpenTimer = 0 private.TestHeroCloseTimer = 0 local testHeroOpenTimestamp = 0 local testHeroCloseTimestamp = 0 local SyncSoloTestHeroList = {} for _, testHeroData in MDL.OperationActivity.TVTTestHero:GetEnumerator() do if testHeroData.ThreeToThree == 1 then if UTL.Time.IsServerInOpeningTime(testHeroData.OpenTime, testHeroData.CloseTime, true) then local closeTimer = UTL.Time.GetServerIntervalTimeByTimeId(testHeroData.CloseTime, true) if (testHeroCloseTimestamp == 0 and closeTimer > 0) or (closeTimer > 0 and closeTimer < testHeroCloseTimestamp) then testHeroCloseTimestamp = closeTimer end table.insert(SyncSoloTestHeroList, testHeroData.HeroItemID) else local openTimer = UTL.Time.GetServerIntervalTimeByTimeId(testHeroData.OpenTime, true) if (testHeroOpenTimestamp == 0 and openTimer > 0) or (openTimer > 0 and openTimer < testHeroOpenTimestamp) then testHeroOpenTimestamp = openTimer end end end end if testHeroOpenTimestamp > 0 then private.TestHeroOpenTimer = testHeroOpenTimestamp end if testHeroCloseTimestamp > 0 then private.TestHeroCloseTimer = testHeroCloseTimestamp end return SyncSoloTestHeroList end ---@public 检查武将是否是测试武将 function SyncTeamPVP_Model.CheckIsTestHero(heroItemId, isHeroId) local isTestHeroAndOpen, isTestHero, isOpen = false, false, false for _, testHeroData in MDL.OperationActivity.TVTTestHero:GetEnumerator() do local heroId = 0 if isHeroId then heroId = testHeroData.HeroID else heroId = testHeroData.HeroItemID end if testHeroData.ThreeToThree == 1 and heroId == heroItemId then isTestHero = true if UTL.Time.IsServerInOpeningTime(testHeroData.OpenTime, testHeroData.CloseTime, true) then isOpen = true end end end isTestHeroAndOpen = isTestHero and isOpen return isTestHeroAndOpen, isTestHero, isOpen end ---@public 获取测试武将刷新倒计时(取最接近当前时间的武将倒计时) function SyncTeamPVP_Model.GetTestHeroTimer() if private.TestHeroOpenTimer > 0 and private.TestHeroCloseTimer > 0 then return private.TestHeroOpenTimer < private.TestHeroCloseTimer and private.TestHeroOpenTimer or private.TestHeroCloseTimer elseif private.TestHeroOpenTimer > 0 and private.TestHeroCloseTimer <= 0 then return private.TestHeroOpenTimer elseif private.TestHeroOpenTimer <= 0 and private.TestHeroCloseTimer > 0 then return private.TestHeroCloseTimer end return 0 end --endregion ************************ 测试武将相关 ************************************* return SyncTeamPVP_Model