local SoloFight_Model = {} local private = {} local solo_fight_oper = require("Proto/solo_fight_oper_pb") local fuben_common = require('Proto/fuben_pb') local EventSystem = require('Event/EventSystem') local CHALLENGE_LIMIT = 100 --挑战的名次上限,超过该上限不能挑战,服务器已经写死该值,改动的话需要一起改 SoloFight_Model.EventType = { Self_Fight_Other = 1, --你挑战别人成功,排名上升 Other_Fight_Self = 2, --别人挑战你成功,排名下降 Others_Fight_Up = 3, --别人挑战别人,导致你排名上升 Others_Fight_Down = 4, --别人挑战别人,导致你排名下降 Self_Fight_Other_Fail = 5, --你挑战别人失败,排名不变 Other_Fight_Self_Fail = 6, --别人挑战你失败,排名不变 } local selfRankId = nil local soloFightInfo = nil local SOLOFIGHT_EVENT_TIME = "SOLOFIGHT_EVENT_TIME" --local eventInfo = nil local soloFightLeftTimes = nil --剩余挑战次数 function SoloFight_Model.GetSoloFightLeftTimes() return soloFightLeftTimes or 0 end function SoloFight_Model.GetSelfRankId() return selfRankId end function SoloFight_Model.SetSoloFightInfo(info) logging.log(LTAG.LOG," SetSoloFightInfo ",info) soloFightInfo = info soloFightLeftTimes = CTL.Activities.GetLeftTimesByType(LuaConst.ActivityType.OffLineSoloFight, soloFightInfo.enterNums, soloFightInfo.freeUsedNums) local hasReward = false for i = 1, private.offlineSoloRewardNum do if i <= soloFightInfo.todayRewardNum and not SoloFight_Model.HasReceiveRewardByIndex(i) then hasReward = true break end end EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.OffLineSoloFight, soloFightInfo.todayRewardNum < private.offlineSoloRewardNum or hasReward) EventSystem.Dispatch(EventID.UI_Solofight_RewardProgress_Refresh) EventSystem.Dispatch(EventID.UI_PurchaseNumsSuccess) end function SoloFight_Model.GetSoloFightRewardNum() if soloFightInfo then return soloFightInfo.todayRewardNum end return 0 end function SoloFight_Model.HasReceiveRewardByIndex(index) if soloFightInfo then for _, v in ipairs(soloFightInfo.todayRewardIndex) do if v == index then return true end end end return false end function SoloFight_Model.GetSoloFightInfo() return soloFightInfo end function SoloFight_Model.GetPurchaseNums() if soloFightInfo then return soloFightInfo.purchaseNums end return 0 end function SoloFight_Model.SaveEventTime(value) PersistentData.PlayerData:Set(SOLOFIGHT_EVENT_TIME,value, true) end function SoloFight_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageSoloFightRankDetails,private.OnSoloFightRankDetailsResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoloFightRankInfos,private.OnSoloFightRankInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoloFightEventInfos,private.OnSoloFightEventInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoloRankSelfInfos,private.SoloRankSelfInfosResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoleFightReward, private.SoleFightRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoleFightSweep, private.SoleFightSweepResp) NetManager.RegisterMsgCB(MessageEnums.MessageSoloFightTitleDropTipInfo, private.G2CSoloFightTitleDropTipInfo) --演武校场解锁or官职变更,请求自己当前的排名 EventSystem.Regist(EventID.FunctionUnlockUpdate, private.OnGetSelfRankIndex) EventSystem.Regist(EventID.UI_RefreshOfficialPositionInfo, private.OnGetSelfRankIndex) private.offlineSoloRewardNum = DataSheetManager.ConstData:GetDataByID("OfflineSoloRewardNum").IntValue end function SoloFight_Model.OnGetSelfRankIndex() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.SoloFight) then SoloFight_Model.SoloRankSelfInfosReq() local newNums = CTL.Activities.GetLeftTimesByType(LuaConst.ActivityType.OffLineSoloFight, soloFightInfo.enterNums, soloFightInfo.freeUsedNums) if newNums ~= soloFightLeftTimes then soloFightLeftTimes = newNums EventSystem.Dispatch(EventID.UI_PurchaseNumsSuccess) end end end function SoloFight_Model.SoloFightRankDetailsReq(index) logging.log(LTAG.LOG," SoloFightRankDetailsReq ") local msg = solo_fight_oper.SoloFightRankDetailsReq() if index then msg.startIdx = index end NetManager.SendMessage(MessageEnums.MessageSoloFightRankDetails,msg) end function private.OnSoloFightRankDetailsResp(msg) selfRankId = msg.selfRankIdx logging.log(LTAG.LOG," OnSoloFightRankDetailsResp ",msg) EventSystem.Dispatch(EventID.UI_Solofight_RankDetail_Refresh,msg) end function SoloFight_Model.RankInfoReq(title, page) logging.log(LTAG.LOG," RankInfoReq ") local msg = solo_fight_oper.SoloFightRankInfosReq() msg.title = title if page then msg.page = page end NetManager.SendMessage(MessageEnums.MessageSoloFightRankInfos,msg) end function private.OnSoloFightRankInfoResp(msg) logging.log(LTAG.LOG," OnSoloFightRankInfoResp ",msg) EventSystem.Dispatch(EventID.UI_Solofight_RankInfo_Refresh,msg) end function SoloFight_Model.EventInfoReq() local msg = solo_fight_oper.SoloFightEventInfosReq() NetManager.SendMessage(MessageEnums.MessageSoloFightEventInfos,msg) end function private.OnSoloFightEventInfoResp(msg) --CTL.SoloFight.OnEventInfoResp(msg) logging.log(LTAG.LOG," OnSoloFightEventInfoResp ",msg) local preTime = PersistentData.PlayerData:Get(SOLOFIGHT_EVENT_TIME,0) logging.log(LTAG.LOG," OnSoloFightEventInfoResp ",preTime) local isRed = false for i,v in ipairs(msg.eventInfos) do logging.log(LTAG.LOG," OnSoloFightEventInfoResp ",preTime,v.occurTime) if v.occurTime > preTime and v.eventType ~= SoloFight_Model.EventType.Self_Fight_Other then isRed = true break end end EventSystem.Dispatch(EventID.UI_Solofight_EventInfo_Refresh,msg.eventInfos,isRed) end function SoloFight_Model.SoleFightRewardReq(rewardIndex) local msg = solo_fight_oper.SoleFightRewardReq() msg.rewardId = rewardIndex NetManager.SendMessage(MessageEnums.MessageSoleFightReward, msg) end function private.SoleFightRewardResp(msgResp) end function SoloFight_Model.SoleFightSweepReq() if not CTL.Activities.IsOpeningTime(LuaConst.ActivityType.OffLineSoloFight) then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_1015_InfoCode_Activity_Not_Valid"]) return end local lineUpHeroCount = MDL.Player.GetLineUpHeroCount() if lineUpHeroCount < 6 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_1024_InfoCode_PeopleNotEnough"]) return end if SoloFight_Model.GetSoloFightLeftTimes() == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_HeroBiography_NoNum) else local msg = solo_fight_oper.SoleFightSweepReq() NetManager.SendMessage(MessageEnums.MessageSoleFightSweep, msg) end end function private.SoleFightSweepResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_ResourcesChapter_RewardReminder_2) end end function SoloFight_Model.FightReq(enemyAcid,enemyRankIdx,isEvent) -- 当isEvent 为true的时候 不计算敌人排名 传1即可 if not CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.SoloFight) then return end if not CTL.Activities.IsOpeningTime(LuaConst.ActivityType.OffLineSoloFight) then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_1015_InfoCode_Activity_Not_Valid"]) return end local lineUpHeroCount = MDL.Player.GetLineUpHeroCount() if lineUpHeroCount < 6 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_1024_InfoCode_PeopleNotEnough"]) return end if SoloFight_Model.GetSoloFightLeftTimes() == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_HeroBiography_NoNum) else local msg = fuben_common.EnterFubenReq() msg.id = 300001 msg.mapType = LuaConst.LevelType.SoloFight msg.soloFightReqInfo.enemyAcid = enemyAcid msg.soloFightReqInfo.enemyRankIdx = enemyRankIdx msg.soloFightReqInfo.selfRankIdx = selfRankId msg.soloFightReqInfo.isEventEnter = isEvent or false logging.log(LTAG.LOG," ",msg.soloFightReqInfo) NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end end --获取自己当前品阶的名次 function SoloFight_Model.SoloRankSelfInfosReq() local msg = solo_fight_oper.SoloRankSelfInfosReq() NetManager.SendMessage(MessageEnums.MessageSoloRankSelfInfos, msg) end function private.SoloRankSelfInfosResp(msgResp) logging.log(LTAG.LOG, "SoloRankSelfInfosResp", msgResp) if msgResp.Resp.Code == 0 then selfRankId = msgResp.selfRankIdx EventSystem.Dispatch(EventID.UI_Solofight_RankSelfIndex_Refresh, msgResp.selfRankIdx) end end --推送降品信息球 function private.G2CSoloFightTitleDropTipInfo(msgResp) logging.log(LTAG.LOG,"G2CSoloFightTitleDropTipInfo", msgResp) if msgResp.typ == 1 then if not private.dropTipInfo then private.dropTipInfo = {} end private.dropTipInfo.rankIdx = msgResp.rankIdx private.dropTipInfo.titleId = msgResp.titleId private.dropTipInfo.dropTime = msgResp.dropTime CTL.HomeMain.AddMainNotice(CTL.HomeMain.NoticeType.SoloFight) else CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.SoloFight) end EventSystem.Dispatch(EventID.UI_AnniversaryLuckyDraw_OpenLuckyFish, msgResp) end function SoloFight_Model.GetDropTipInfo() return private.dropTipInfo end return SoloFight_Model