local ThreeTeamFight_Model = {} local private = {} local three_teams_pk_pb = require('Proto/three_teams_pk_pb') local fuben_common = require('Proto/fuben_pb') local EventSystem = require('Event/EventSystem') local Const_MapId = 623001 function ThreeTeamFight_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKGetTopRank, private.OnThreeTeamsPKGetTopRankResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKThumpUp, private.OnThreeTeamsPKThumpUpResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKChallengeInfo, private.OnThreeTeamsPKChallengeInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKFightInfo, private.OnThreeTeamsPKFightInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKEventInfos, private.OnThreeTeamsPKEventInfosResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsPKRewardInfo, private.OnThreeTeamsPKRewardInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageThreeTeamsSweep, private.OnThreeTeamsPKFightSweepResp) private.sortedTaskInfo = {} private.isSeasonOpen = false private.startTimestamp = 0 private.maxChallengeTimes = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.ThreeTeamFight).DailyRefreshTimes private.maxThumpUpTimes = DataSheetManager.ConstData:GetDataByID("KudosNumDaily").IntValue private.leftChallengeTimes = 0 private.hasBuyTimes = 0 private.leftThumpUpTimes = 0 private.myRank = 0 private.showInfoBall = false end function ThreeTeamFight_Model.SyncBasicInfo(info, isInit) if info.isBroadCast or isInit then --赛季是否开启 private.isSeasonOpen = info.isSeasonOpen private.startTimestamp = info.startTimeStamp if info.isSeasonOpen == false then EventSystem.Dispatch(EventID.UI_ThreeTeamFight_OnSeasonFinish) end end if info.isBroadCast == false then --已经购买的次数 private.hasBuyTimes = info.purchaseNums --剩余挑战次数 private.leftChallengeTimes = private.maxChallengeTimes - info.enterNums + private.hasBuyTimes --剩余点赞次数 private.leftThumpUpTimes = private.maxThumpUpTimes - info.thumpUpCount --刷新任务状态 if info.taskInfo and #info.taskInfo > 0 then private.SetTaskInfo(info.taskInfo) end CTL.ThreeTeamFight.RefreshRed() EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshBasic) end --信息球 private.RefreshMainNotice(info) end function private.RefreshMainNotice(info) if info.isSeasonOpen == false then CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.ThreeTeamFight) else if private.showInfoBall ~= info.showInfoBall then private.showInfoBall = info.showInfoBall if private.showInfoBall then CTL.HomeMain.AddMainNotice(CTL.HomeMain.NoticeType.ThreeTeamFight) else CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.ThreeTeamFight) end end end end function ThreeTeamFight_Model.IsSeasonOpen() --战区未开启前,认为未开启 if CTL.WarZone.IsWarZoneOpen() == false then return false end return private.isSeasonOpen end function ThreeTeamFight_Model.GetStartTimestamp() return private.startTimestamp end function private.SetTaskInfo(taskInfo) table.clearArray(private.sortedTaskInfo) for i, v in ipairs(taskInfo) do private.sortedTaskInfo[i] = v end table.sort(private.sortedTaskInfo, private.SortByTaskState) end function ThreeTeamFight_Model.GetTaskInfo() return private.sortedTaskInfo end --是否有任务奖励可领取 function ThreeTeamFight_Model.CheckIfTaskGet() for i, v in ipairs(private.sortedTaskInfo) do if v.state == 1 then return true end end return false end function ThreeTeamFight_Model.ThreeTeamsPKChallengeInfoReq(isRefresh) local msg = three_teams_pk_pb.ThreeTeamsPKChallengeInfoReq() msg.isRefresh = isRefresh NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKChallengeInfo, msg) end function private.OnThreeTeamsPKChallengeInfoResp(msgResp) if msgResp.Resp.Code == 0 then private.UpdateMyRank(msgResp.curRank) EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshChallengeInfo, msgResp) end end function ThreeTeamFight_Model.ThreeTeamsPKFightInfoReq(acid) local msg = three_teams_pk_pb.ThreeTeamsPKFightInfoReq() msg.acid = acid NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKFightInfo, msg) end function private.OnThreeTeamsPKFightInfoResp(msgResp) if msgResp.Resp.Code == 0 then MDL.FreeLineUp.UpdateLineUpInfoList(MDL.FreeLineUp.FuncType.ThreeTeamFight, msgResp.lineUpInfo.lineUps) EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshChallengePopUpInfo, msgResp) end end function ThreeTeamFight_Model.ThreeTeamsPKThumpUpReq(acid) local msg = three_teams_pk_pb.ThreeTeamsPKThumpUpReq() msg.acid = acid NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKThumpUp, msg) end function private.OnThreeTeamsPKThumpUpResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshTopInfo, msgResp.rank) end end function ThreeTeamFight_Model.ThreeTeamsPKGetTopRankReq() local msg = three_teams_pk_pb.ThreeTeamsPKGetTopRankReq() NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKGetTopRank, msg) end function private.OnThreeTeamsPKGetTopRankResp(msgResp) if msgResp.Resp.Code == 0 then private.UpdateMyRank(msgResp.myRank) EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshTopInfo, msgResp.rank) end end function ThreeTeamFight_Model.EnterFightReq(acid, rank) local msg = fuben_common.EnterFubenReq() msg.id = Const_MapId msg.mapType = LuaConst.LevelType.NineVsNineFight msg.soloFightReqInfo.enemyAcid = acid msg.soloFightReqInfo.enemyRankIdx = rank msg.soloFightReqInfo.isEventEnter = false NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end function ThreeTeamFight_Model.ThreeTeamsPKEventInfosReq() local msg = three_teams_pk_pb.ThreeTeamsPKEventInfosReq() NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKEventInfos, msg) end function private.OnThreeTeamsPKEventInfosResp(msgResp) if msgResp.Resp.Code == 0 then local preTime = CTL.ThreeTeamFight.GetEventTime() local isRed = false for i, v in ipairs(msgResp.eventInfos) do if v.occurTime > preTime and v.eventType ~= MDL.SoloFight.EventType.Self_Fight_Other then isRed = true break end end EventSystem.Dispatch(EventID.UI_ThreeTeamFight_RefreshEventInfo, msgResp.eventInfos, isRed) end end function ThreeTeamFight_Model.ThreeTeamsPKRewardInfoReq(taskId) local msg = three_teams_pk_pb.ThreeTeamsPKRewardInfoReq() msg.taskId = taskId NetManager.SendMessage(MessageEnums.MessageThreeTeamsPKRewardInfo, msg) end function private.OnThreeTeamsPKRewardInfoResp(msgResp) if msgResp.Resp.Code == 0 then private.UpdateMyRank(msgResp.curRank) end end function private.OnThreeTeamsPKFightSweepResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_ResourcesChapter_RewardReminder_2) end end function private.UpdateMyRank(myRank) private.myRank = myRank EventSystem.Dispatch(EventID.UI_ThreeTeamFight_UpdateMyRank, private.myRank) end function ThreeTeamFight_Model.ThreeTeamsSweepReq() local msg = NetManager.GetPB("sweep_pb").ThreeTeamsSweepReq() NetManager.SendMessage(MessageEnums.MessageThreeTeamsSweep, msg) end function ThreeTeamFight_Model.GetMyRank() return private.myRank end function ThreeTeamFight_Model.GetPurchaseNums() return private.hasBuyTimes end function ThreeTeamFight_Model.GetLeftTimes() return private.leftChallengeTimes end function ThreeTeamFight_Model.GetLeftThumbsUpTimes() return private.leftThumpUpTimes end --0 任务正在进行 1 任务已经完成 2 奖励已经领取 function private.SortByTaskState(taskInfo_1, taskInfo_2) local sortValue_1, sortValue_2 if taskInfo_1.state == 1 then sortValue_1 = 1 elseif taskInfo_1.state == 2 then sortValue_1 = 3 else sortValue_1 = 2 end if taskInfo_2.state == 1 then sortValue_2 = 1 elseif taskInfo_2.state == 2 then sortValue_2 = 3 else sortValue_2 = 2 end if sortValue_1 == sortValue_2 then return taskInfo_1.taskId < taskInfo_2.taskId end return sortValue_1 < sortValue_2 end return ThreeTeamFight_Model