local EventSystem = require('Event/EventSystem') local dragon_artery_pb = require('Proto/dragon_artery_pb') local DragonArtery_Model = {} local private = {} local HIGH_TYPE_FIELD = 1 --高阶战场类型,对应DragonArtery配置的id local MID_TYPE_FIELD = 2 --中阶战场类型,对应DragonArtery配置的id local DragonArteryUseDragonJadeRevive = "DragonArteryUseDragonJadeRevive" --龙脉使用龙玉复活(勾选今日是否提示弹框) private.chatWarFieldID = nil --进入的聊天房间id private.enterWarFieldID = nil --进入的战场id private.paidToReviveCount = 0 --已经花钱复活的次数 private.settingPowerHigh = 0 --高阶战场设置的战力 private.settingPowerMid = 0 --中阶战场设置的战力 private.enterCount = 0 --进入次数 function DragonArtery_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageDAPayForRelive, private.OnDAPayForReliveResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetDragonArteryInfo, private.OnGetDragonArteryInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageSetDragonArteryEnterPower, private.OnSetDragonArteryEnterPowerResp) NetManager.RegisterMsgCB(MessageEnums.MessageDragonArteryEnter, private.OnDragonArteryEnterResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushDragonArteryInfo, private.OnG2CPushDragonArteryInfo) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushDragonArteryEnterPower, private.OnG2CPushDragonArteryEnterPower) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushDragonArteryResult, private.OnG2CPushDragonArteryResult) NetManager.RegisterMsgCB(MessageEnums.MessageDragonArteryCountryRank, private.OnDragonArteryCountryRankResp) NetManager.RegisterMsgCB(MessageEnums.MessageDragonArteryCountryRankReward, private.OnDragonArteryCountryRankRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageDragonArteryShareInfo, private.OnDragonArteryShareInfoResp) EventSystem.Regist(EventID.New_Day_Refresh, private.OnNewDayRefresh) EventSystem.Regist(EventID.Level_InitLevel, private.OnInitLevel) EventSystem.Regist(EventID.DragonArtery_SendResult, private.SendDragonArteryResult) EventSystem.Regist(EventID.Country_OnGetFoundCountry, private.OnGetFoundCountry) end function DragonArtery_Model.IsWarFieldTimeLimit(fieldData) return fieldData.Belong == HIGH_TYPE_FIELD or fieldData.Belong == MID_TYPE_FIELD end function private.OnInitLevel() if BattleDataGetter.IsDragonArteryType() == false then private.enterWarFieldID = nil private.chatWarFieldID = nil --离开龙脉战时,退出语音房间 local curRoomType = CTL.VoiceRoom.GetCurRoomType() if curRoomType == MDL.VoiceRoom.VoiceRoomType.DragonArtery then CTL.VoiceRoom.ExitVoiceRoom(MDL.VoiceRoom.VoiceRoomType.DragonArtery) end end end function DragonArtery_Model.SyncEnterInfo(enterInfo) private.enterCount = enterInfo.enterCount private.lineUpCountry = enterInfo.lineUpCountry DragonArtery_Model.UpdateEntryRed(CTL.Activities.GetState(LuaConst.ActivityType.DragonArtery) == CTL.Activities.ActivityState.Opening) end function DragonArtery_Model.GetEnterNums() return private.enterCount end function DragonArtery_Model.UpdateEntryRed(isInTime) if isInTime then local time = MDL.RedPoint.GetRedPointTimeByType(MDL.RedPoint.RedPointType.DragonArtery) if time and time > 0 and UTL.Time.IsTimestampSameDay(time) then EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.DragonArtery, false) else EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.DragonArtery, true) end else EventSystem.Dispatch(EventID.UI_Activity_Refresh_Single_RedPoint, LuaConst.ActivityType.DragonArtery, false) end end function private.SendDragonArteryResult(msg) NetManager.SendMessage(MessageEnums.MessageC2GUploadDragonArteryResult, msg) end --当前进入的战场id function DragonArtery_Model.GetCurEnterWarFieldID() return private.enterWarFieldID end --当前进入的战场类型 function DragonArtery_Model.GetEnterDragonArteryType() if private.enterWarFieldID then local warFieldData = DataSheetManager.DragonArteryWarfield:GetDataByID(private.enterWarFieldID) if warFieldData then return warFieldData.Belong end end logging.error(LTAG.ERROR, "enterWarFieldID is nil") return 1 end function DragonArtery_Model.SetCurChatWarFieldID(id) private.chatWarFieldID = id end --isAll:同1场景中的所有玩家均可见 function DragonArtery_Model.GetDragonArteryChannelPrefix(isAll) local warZoneId = MDL.ChannelChat.GetWarZoneId() local roomId = private.chatWarFieldID or 0 if warZoneId == nil or warZoneId == 0 then warZoneId = MDL.Login.GetRealServerId() end if isAll then return string.format("DragonArtery_%s_%s", warZoneId, roomId) else return string.format("DragonArtery_%s_%s_%s", warZoneId, roomId, BattleDataGetter.GetDragonArteryMyKingdom()) end end function DragonArtery_Model.SetCurEnterWarFieldID(id) private.enterWarFieldID = id EventSystem.Dispatch(EventID.UI_DragonArtery_SetWarFieldId) end function DragonArtery_Model.GetSettingPower() return private.settingPowerHigh, private.settingPowerMid end function DragonArtery_Model.GetSettingPowerByField(fieldId) local fieldData = DataSheetManager.DragonArteryWarfield:GetDataByID(fieldId) if fieldData.Belong == HIGH_TYPE_FIELD then return private.settingPowerHigh elseif fieldData.Belong == MID_TYPE_FIELD then return private.settingPowerMid end return 0 end function DragonArtery_Model.ClearInfoRemind() private.countryRankResult = nil CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.DragonArteryRankResult) end function DragonArtery_Model.TryOpenDragonArteryCountryRankResult() if private.countryRankResult then UIManager.OpenView(Const_UI_Lua.UIEnum.UIDragonArteryCountryRankPanel, private.countryRankResult) end end function private.OnGetFoundCountry() DragonArtery_Model.TryGetDragonArteryCountryRankResult(false) end --获取排行数据 function DragonArtery_Model.TryGetDragonArteryCountryRankResult(isForce) if isForce == false then if CTL.Activities.GetState(LuaConst.ActivityType.DragonArtery) == CTL.Activities.ActivityState.Opening then return end if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.DragonArtery) == false then return end if MDL.Country.IsHasCountry() == false then return end end local msg = dragon_artery_pb.DragonArteryCountryRankReq() NetManager.SendMessage(MessageEnums.MessageDragonArteryCountryRank, msg) end function DragonArtery_Model.DragonArteryCountryRankReq() logging.log(LTAG.LOG, "DragonArteryCountryRankReq") local msg = dragon_artery_pb.DragonArteryCountryRankReq() msg.IsWarReport = true NetManager.SendMessage(MessageEnums.MessageDragonArteryCountryRank, msg) end --当榜单数据不为空时,显示消息球 function private.OnDragonArteryCountryRankResp(msgResp) if msgResp.Resp.Code == 0 then logging.log(LTAG.LOG, "DragonArteryCountryRank", msgResp.rankInfo) if msgResp.IsWarReport then UIManager.OpenView(Const_UI_Lua.UIEnum.UIDragonArteryCountryRankPanel, msgResp) else if CTL.DragonArtery.IsDragonArteryInEndAndRefreshTime() and msgResp.rankInfo and #msgResp.rankInfo > 0 then private.ShowResultNotice(msgResp) else DragonArtery_Model.ClearInfoRemind() end end end end function private.OnNewDayRefresh() DragonArtery_Model.ClearInfoRemind() end function private.ShowResultNotice(result) private.countryRankResult = result CTL.HomeMain.AddMainNotice(CTL.HomeMain.NoticeType.DragonArteryRankResult) end --领取奖励 function DragonArtery_Model.DragonArteryCountryRankRewardReq() local msg = dragon_artery_pb.DragonArteryCountryRankRewardReq() NetManager.SendMessage(MessageEnums.MessageDragonArteryCountryRankReward, msg) end function private.OnDragonArteryCountryRankRewardResp(msgResp) if msgResp.Resp.Code == 0 then DragonArtery_Model.ClearInfoRemind() EventSystem.Dispatch(EventID.UI_DragonArtery_GetRankReward) end end --获取分享数据 function DragonArtery_Model.DragonArteryShareInfoReq(shareId, acid) if string.isNilOrEmpty(shareId) then return end private.targetAcid = acid local msg = dragon_artery_pb.DragonArteryShareInfoReq() msg.battleId = shareId NetManager.SendMessage(MessageEnums.MessageDragonArteryShareInfo, msg) end function private.OnDragonArteryShareInfoResp(msgResp) if msgResp.Resp.Code == 0 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIDragonArterySummaryPanel, { result = msgResp.result, targetAcid = private.targetAcid, isShareOpen = true }) end end --服务器结算推送 function private.OnG2CPushDragonArteryResult(msgResp) logging.log(LTAG.LOG, "G2CPushDragonArteryResult", msgResp) UIManager.OpenView(Const_UI_Lua.UIEnum.UIDragonArterySummaryPanel, { result = msgResp, targetAcid = BattleDataGetter.GetAcID(), isShareOpen = false }) end --复活花费 function DragonArtery_Model.DAPayForReliveReq(heroIndex) local content if GameAppInfo.IsJapanesePackage() then --日本消耗龙玉需要特殊增加文字说明 local costDragonSuffix = "\n" .. UIUtils.GetLocalizedTxt(Const_IDS.IDS_JP_MoneyConsumption_Pay) .. "\n" .. UIUtils.GetLocalizedTxt(Const_IDS.IDS_JP_MoneyConsumption_Time) .. "\n" .. UIUtils.GetLocalizedTxt(Const_IDS.IDS_JP_MoneyConsumption_CannotCancel) content = UIUtils.GetLocalizedTxt(Const_IDS.IDS_DragonArtey_BuyReborn) .. costDragonSuffix else content = UIUtils.GetLocalizedTxt(Const_IDS.IDS_DragonArtey_BuyReborn) end local time = PersistentData.PlayerData:Get(DragonArteryUseDragonJadeRevive, 0) -- 获取上一次本地保存的提示时间 if UTL.Time.IsTimestampSameDay(time) then private.DAPayForReliveReq(heroIndex) else UTL.MessageBox.ShowOKCancelToggleBox(nil, content, UIUtils.GetLocalizedTxt(Const_IDS.IDS_DragonArtey_P2R1), function() private.DAPayForReliveReq(heroIndex) end, function(isOn) if isOn then PersistentData.PlayerData:Set(DragonArteryUseDragonJadeRevive, UTL.Time.GetServerTimestamp(), true) else PersistentData.PlayerData:Remove(DragonArteryUseDragonJadeRevive) end end ) end end function private.DAPayForReliveReq(heroIndex) local msg = dragon_artery_pb.DAPayForReliveReq() msg.ReLiveHero = heroIndex NetManager.SendMessage(MessageEnums.MessageDAPayForRelive, msg) end function private.OnDAPayForReliveResp(msgResp) if msgResp.Resp.Code == 0 then private.paidToReviveCount = msgResp.paidCount end end function private.UpdateDragonArteryEnterPower(powerHigh, powerMid) private.settingPowerHigh = powerHigh private.settingPowerMid = powerMid EventSystem.Dispatch(EventID.UI_DragonArtery_UpdateSettingPower) end function DragonArtery_Model.SetDragonArteryEnterPowerReq(powerHigh, powerMid) if CTL.DragonArtery.IsJobAllowToSetPower() == false then local content = CTL.DragonArtery.GetSetPowerJobContent() CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_DragonArtey_NationAdvanceSet, content)) return end local msg = dragon_artery_pb.SetDragonArteryEnterPowerReq() msg.enterPowerHigh = powerHigh msg.enterPowerMid = powerMid NetManager.SendMessage(MessageEnums.MessageSetDragonArteryEnterPower, msg) end function private.OnSetDragonArteryEnterPowerResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_DragonArtey_SetBRSuccess"]) end end function DragonArtery_Model.DragonArteryEnterReq(roomId) if MDL.Country.IsHasCountry() == false then CTL.Tips.AddTipsMsg(Const_IDS["IDS_DragonArtey_MustInNation"]) return end local fieldData = DataSheetManager.DragonArteryWarfield:GetDataByID(roomId) local tabData = DataSheetManager.DragonArtery:GetDataByID(fieldData.Belong) local allowTime = tabData.OfficerEnterTime + tabData.RatingEnterTime local passedTime = CTL.Activities.GetOpenedActivityPassedTime(LuaConst.ActivityType.DragonArtery) if passedTime == nil or passedTime > allowTime then CTL.Tips.AddTipsMsg(Const_IDS["IDS_DragonArtey_ChoseTime"]) return end local isJobEnterFirst = CTL.DragonArtery.IsJobAllowToEnterFirst(roomId) local isTimeEnterFirst = passedTime == nil or passedTime <= tabData.OfficerEnterTime if isJobEnterFirst then if isTimeEnterFirst == false then --高级官员不在优先时间内,需要判断战力才能进 if MDL.Player.GetLineUpGs() < DragonArtery_Model.GetSettingPowerByField(roomId) then CTL.Tips.AddTipsMsg(Const_IDS.IDS_DragonArtey_BRNotRequire) return end end else if isTimeEnterFirst then --非高级官员,在优先时间内飘字提示 CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_DragonArtey_NotNationAdvance, CTL.DragonArtery.GetEnterFirstJobContent(tabData), UTL.Time.FormatTimeBySecondsToHour(tabData.OfficerEnterTime - passedTime))) return end if MDL.Player.GetLineUpGs() < DragonArtery_Model.GetSettingPowerByField(roomId) then CTL.Tips.AddTipsMsg(Const_IDS.IDS_DragonArtey_BRNotRequire) return end end private.wantingEnterWarFieldID = roomId --是否组队 if CTL.Team.IsInTeam() then UTL.MessageBox.ShowOKCancelBox(nil, Const_IDS.IDS_FightThrone_SingleEntry, private.DragonArteryEnter) return end private.DragonArteryEnter() end function private.DragonArteryEnter() if private.wantingEnterWarFieldID then local msg = dragon_artery_pb.DragonArteryEnterReq() msg.roomId = private.wantingEnterWarFieldID NetManager.SendMessage(MessageEnums.MessageDragonArteryEnter, msg) end end function private.OnDragonArteryEnterResp(msgResp) if msgResp.Resp.Code == 0 then private.chatWarFieldID = msgResp.chatRoomId DragonArtery_Model.SetCurEnterWarFieldID(private.wantingEnterWarFieldID) private.wantingEnterWarFieldID = nil end end --isSelectRoom:是否选中战场,服务器通过该状态决定是否推送该房间的信息变更 function DragonArtery_Model.GetDragonArteryInfoReq(roomId, isSelectRoom) local msg = dragon_artery_pb.GetDragonArteryInfoReq() msg.roomId = roomId msg.addOrLeave = isSelectRoom NetManager.SendMessage(MessageEnums.MessageGetDragonArteryInfo, msg) end function private.OnGetDragonArteryInfoResp(msgResp) if msgResp.Resp.Code == 0 then private.UpdateDragonArteryEnterPower(msgResp.enterPowerHigh, msgResp.enterPowerMid) EventSystem.Dispatch(EventID.UI_DragonArtery_SetFieldInfo, msgResp.roomCountryPlayerNum, msgResp.roomIds, msgResp.roomPlayerNums) end end function private.OnG2CPushDragonArteryInfo(msgResp) EventSystem.Dispatch(EventID.UI_DragonArtery_RefreshFieldInfo, msgResp.roomId, msgResp.roomCountryPlayerNum) end function private.OnG2CPushDragonArteryEnterPower(msgResp) private.UpdateDragonArteryEnterPower(msgResp.enterPowerHigh, msgResp.enterPowerMid) end function DragonArtery_Model.GetLineUpCountryLimits() return private.lineUpCountry end return DragonArtery_Model