local TeamDungeon_Model = {} local private = {} local EventSystem = require 'Event/EventSystem' local team_pve_pb = require('Proto/team_pve_pb') local dig_treasure_pb = require("Proto/dig_treasure_pb") local MAX_TIME_MATCH local digTreasureRewardDict = {} local digRewardCount = 0 function TeamDungeon_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushTeamPVEResult, private.OnG2CPushTeamPVEResult) NetManager.RegisterMsgCB(MessageEnums.MessageG2CTeamPVEMatchResult, private.OnG2CTeamPVEMatchResult) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushDigTreasureResult, private.OnPushDigTreasureResult) NetManager.RegisterMsgCB(MessageEnums.MessageDigTreasureGatherReward, private.OnDigTreasureGatherReward) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushDigTreasureShowReward, private.OnPushDigTreasureShowReward) NetManager.RegisterMsgCB(MessageEnums.MessageDigTreasureBoxCheck, private.OnDigTreasureBoxCheck) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.RefreshRedPoint) private.digForTreasureSetUpTimes = DataSheetManager.ConstData:GetDataByID("DigForTreasureSetUpTimes").IntValue TeamDungeon_Model.IsMatching = false TeamDungeon_Model.LeftAwardCountDic = {} end function private.RefreshRedPoint() local isRed = false for id, times in pairs(TeamDungeon_Model.LeftAwardCountDic) do if MDL.Unlock.IsUnlock(DataSheetManager.TeamDungeonData:GetDataByID(id).FunctionID) and times > 0 then isRed = true break end end EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.TeamDungeon, isRed) end function TeamDungeon_Model.SyncLeftAwardCount(info) for _,v in ipairs(info.timesInfo) do TeamDungeon_Model.LeftAwardCountDic[v.matchID] = v.times end private.RefreshRedPoint() EventSystem.Dispatch(EventID.UI_TeamDungeon_RefreshAwardCount) end --组队副本是否还有剩余次数 function TeamDungeon_Model.IsTimesLeft(activityID) if TeamDungeon_Model.LeftAwardCountDic then local dungeonData = CTL.TeamDungeon.GetDungeonDataByActivityID(activityID) return TeamDungeon_Model.LeftAwardCountDic[dungeonData.ID] > 0 end return false end function private.OnG2CPushTeamPVEResult(msgResp) logging.log(LTAG.LOG, "G2CPushTeamPVEResult", msgResp) if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamDifficultLevel) then MDL.Level.TrySendBattleEvent() BIManager.DispatchBIClientEvent(BIManager.EventName.MultiplayerDungeonFinish) elseif BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamPVE) then BIManager.DispatchBIClientEvent(BIManager.EventName.TeamDungeonFinish) end if BattleDataGetter.GetCurLevelType() == nil or BattleDataGetter.IsTownLevel() then -- 保底代码 logging.warn(LTAG.WARN ,"在登录40%时或在主城中收到了SyncPVE的战斗结果 ,此时不打开组队副本结果界面!") return end CTL.TeamDungeon.ShowBattleSummary(msgResp) end function private.OnG2CTeamPVEMatchResult(msgResp) logging.log(LTAG.LOG, "G2CTeamPVEMatchResult", msgResp) --CTL.Tips.AddTipsMsg(Const_IDS.IDS_TeamDungeon1_MatchReady) CTL.TeamDungeon.OnTeamDungeonMatch(false,nil) end function TeamDungeon_Model.GetMaxMatchTime() if MAX_TIME_MATCH == nil then local value = DataSheetManager.ConstData:GetDataByID("TeamDungeonMaxMatchTime").IntValue MAX_TIME_MATCH = value end return MAX_TIME_MATCH end function TeamDungeon_Model.GetCurTeamDungeonReward(dungeonData) local curLev = MDL.Player.GetRoleInfo() local reward = dungeonData.Reward for _,v in ipairs(reward) do local rewardData = DataSheetManager.TeamDungeonReward:GetDataByID(v) if curLev >= rewardData.LevelMin and curLev <= rewardData.LevelMax then return rewardData end end return nil end --处理断线重连 function TeamDungeon_Model.OnReConnectOk() CTL.TeamDungeon.OnTeamDungeonMatch(false,nil) end function private.OnPushDigTreasureResult(msgResp) logging.log(LTAG.LOG,"OnPushDigTreasureResult ", msgResp) CTL.HomeMain.CloseBasicView() UIManager.OpenView(Const_UI_Lua.UIEnum.UIDigTreasureBattelResult,msgResp) end function TeamDungeon_Model.DigTreasureGatherRewardReq() local msg = dig_treasure_pb.DigTreasureGatherRewardReq() NetManager.SendMessage(MessageEnums.MessageDigTreasureGatherReward, msg) end function private.OnDigTreasureGatherReward(msgResp) EventSystem.Dispatch(EventID.DigTreasure_GatherReward,msgResp) end function private.OnPushDigTreasureShowReward(msgResp) for i, v in ipairs(msgResp.rewards) do digTreasureRewardDict[v.ItemId] = digTreasureRewardDict[v.ItemId] or 0 digTreasureRewardDict[v.ItemId] = digTreasureRewardDict[v.ItemId] + v.ItemCount end digRewardCount = digRewardCount + 1 CTL.TeamDungeon.OnDigTreasureShowReward() end function TeamDungeon_Model.GetDigTreasureRewardDict() return digTreasureRewardDict end function TeamDungeon_Model.ClearDigTreasureReward() digTreasureRewardDict = {} digRewardCount = 0 end function TeamDungeon_Model.GetDigRewardCount() return digRewardCount end function private.OnDigTreasureBoxCheck(msgResp) if msgResp.Resp.Code == 0 then if msgResp.success then CTL.TeamDungeon.SetAutoOpenRewardBox(private.curCheckRewardBoxId) if private.curCheckRewardBoxId ==LuaConst.BattleSettingEnum.AutoOpenRewardBoxWater then CTL.Tips.AddTipsMsg(Const_IDS.IDS_DigForTreasure_SetUpTips, UIUtils.GetLocalizedTxt(Const_IDS.IDS_MonsterName_ShuiZhiBaoXiang)) elseif private.curCheckRewardBoxId ==LuaConst.BattleSettingEnum.AutoOpenRewardBoxDirt then CTL.Tips.AddTipsMsg(Const_IDS.IDS_DigForTreasure_SetUpTips, UIUtils.GetLocalizedTxt(Const_IDS.IDS_MonsterName_TuZhiBaoXiang)) else CTL.Tips.AddTipsMsg(Const_IDS.IDS_DigForTreasure_SetUpTips, UIUtils.GetLocalizedTxt(Const_IDS.IDS_MonsterName_MuTouBaoXiang)) end else CTL.Tips.AddTipsMsg(Const_IDS.IDS_ERRORCODE_1362_InfoCode_HyperLinkExpired) end end end function TeamDungeon_Model.CheckUnlockDigForTreasure() local info = MDL.Task.GetTreasureRewardInfo() if private.digForTreasureSetUpTimes > info.singleCount then CTL.Tips.AddTipsMsg(Const_IDS.IDS_DigForTreasure_UnlockTips, private.digForTreasureSetUpTimes - info.singleCount) return false end return true end function TeamDungeon_Model.CheckAutoOpenRewardBox(id) if TeamDungeon_Model.CheckUnlockDigForTreasure() then private.curCheckRewardBoxId = id local msg = dig_treasure_pb.DigTreasureBoxCheckReq() msg.selectId = id - 4 -- LuaConst.BattleSettingEnum.AutoOpenRewardBoxWater = 5 NetManager.SendMessage(MessageEnums.MessageDigTreasureBoxCheck, msg) end end return TeamDungeon_Model