local CountryPVP_Model = {} local EventSystem = require('Event/EventSystem') local private = {} local country_pvp_pb = require "Proto.country_pvp_pb" CountryPVP_Model.BattleMode = { defend = 0, --保卫 invade = 1, --入侵 peace = 2, --和平 battle = 3, --战争 } function CountryPVP_Model.OnStartup() EventSystem.Regist(EventID.CountryPVP_SendBattleResult, private.CountryPVPSendBattleResult) NetManager.RegisterMsgCB(MessageEnums.MessageG2CCountryPvpBattleResult, private.G2CCountryPvpBattleResult) --推送国战pvp结算信息 NetManager.RegisterMsgCB(MessageEnums.MessageEnterCountryPvp, private.EnterCountryPvpResp) --国战pvp请求进入副本 NetManager.RegisterMsgCB(MessageEnums.MessageCountryPvpListGetTeamInfo, private.CountryPvpListGetTeamInfoResp) --国战pvp请求目标玩家队伍信息 end --region 协议 --Client->Game->Cross 上传国战pvp战斗结果 function private.CountryPVPSendBattleResult(msg) NetManager.SendMessage(MessageEnums.MessageC2GUploadCountryPvpResult, msg) end --推送国战pvp结算信息 function private.G2CCountryPvpBattleResult(msg) logging.log(LTAG.LOG,"[ljtest] G2CCountryPvpBattleResult", msg.result,msg.attackerInfo,msg.defenderInfo) private.battleResult = {} private.battleResult.result = msg.result --结果 0平 1攻击方胜 2被攻击方胜 private.battleResult.attackerInfo = msg.attackerInfo --攻击方信息 private.battleResult.defenderInfo = msg.defenderInfo --被攻击方信息 CTL.CountryPVP.OpenBattleOverPanel(private.battleResult) end --国战pvp请求目标玩家队伍信息 function CountryPVP_Model.CountryPvpListGetTeamInfoReq(acid) local msg = country_pvp_pb.CountryPvpListGetTeamInfoReq() msg.acid = acid --被攻击放目标acid NetManager.SendMessage(MessageEnums.MessageCountryPvpListGetTeamInfo, msg) end function private.CountryPvpListGetTeamInfoResp(msgResp) if msgResp.Resp.Code == 0 then logging.log(LTAG.LOG,"[ljtest] CountryPvpListGetTeamInfoResp") private.infos = msgResp.infos --返回的队伍信息 if IsServerDataNotNil(private.infos) then EventSystem.Dispatch(EventID.Country_UICountryTargetListFull,private.infos) else EventSystem.Dispatch(EventID.Country_UICountryTargetListFullNoTeam) end end end -- 国战pvp请求 function CountryPVP_Model.EnterCountryPvpReq(mapId,acid,roleInfo) local msg = country_pvp_pb.EnterCountryPvpReq() msg.mapId = mapId --关卡id msg.acid = acid --被攻击放目标acid msg.activityId = LuaConst.ActivityType.CountryPVP private.attackAcid = acid private.attackRoleInfo = roleInfo NetManager.SendMessage(MessageEnums.MessageEnterCountryPvp, msg) end function private.EnterCountryPvpResp(msgResp) if msgResp.Resp.Code == 0 then logging.log(LTAG.LOG,"[ljtest] EnterCountryPvpResp") local countryName = "" local countryData = DataSheetManager.CountryBase:GetDataByID(private.attackRoleInfo.countryId) if countryData then countryName = countryData.CountryName end local content = string.FormatByIdsId(Const_IDS.IDS_CountryPVP_FightStart_Info_1,UIUtils.GetLocalizedTxt(Const_IDS[countryName]),private.attackRoleInfo.name) CTL.Tips.AddTipsMsg(content) else --刷新攻击者的队伍信息 MDL.CountryPVP.CountryPvpListGetTeamInfoReq(private.attackAcid) end end --endregion --PVP 结算结果 function CountryPVP_Model.GetPvpBattleResult() return private.battleResult end --获取当前所处国家场景 function CountryPVP_Model.GetCurrentInCountryScene() local sceneId = BattleDataGetter.GetCurLevelID() for k,v in DataSheetManager.CountryBase:GetEnumerator() do if v.SceneId == sceneId then return v.ID end end return nil end function CountryPVP_Model.GetPVPAttackTimeCfgId() local timeArray = DataSheetManager.ConstData:GetDataByID("CountryPVPAttackTime").IntListValue local startTimeCfgId = timeArray[1] local endTimeCfgId = timeArray[2] return startTimeCfgId,endTimeCfgId end function CountryPVP_Model.GetPVPAttackTime() local startTimeCfgId,endTimeCfgId = CountryPVP_Model.GetPVPAttackTimeCfgId() local serverStartTime = UTL.Time.GetServerTimestampByTimeId(startTimeCfgId) local serverEndTime = UTL.Time.GetServerTimestampByTimeId(endTimeCfgId) return serverStartTime,serverEndTime end --当前是战斗时间 function CountryPVP_Model.IsInBattleTime() local serverStartTime,serverEndTime = CountryPVP_Model.GetPVPAttackTime() local currentServerTime = UTL.Time.GetServerTimestamp() if currentServerTime >= serverStartTime and currentServerTime <= serverEndTime then return true end return false end --获取战斗模式 function CountryPVP_Model.GetCurrentBattleMode() if CTL.CountryPVP.IsInMyCountry() then --本国 return CountryPVP_Model.BattleMode.defend else if not CTL.CountryPVP.IsInNeutralityMap() then --敌国 return CountryPVP_Model.BattleMode.invade else --中立地图 if CountryPVP_Model.IsInBattleTime() then return CountryPVP_Model.BattleMode.battle else return CountryPVP_Model.BattleMode.peace end end end end return CountryPVP_Model