local UIGVGFightAttack = UIViewClass() --[[ 攻城略地 进攻界面 context = { cityId, --选中城池Id attackAcid, --要进攻的玩家Id playerShowType, --当前选中的展示类型 curPage, --当前选中的页数 } --]] local GVGFightAttackOfOrdersItem = DataSheetManager.ConstData:GetDataByID("GVGFightAttackOfOrdersItem").IntValue -- 进攻消耗道具Id local GVGFightAttackOfOrdersNum = DataSheetManager.ConstData:GetDataByID("GVGFightAttackOfOrdersNum").IntValue -- 进攻消耗道具数量 local GVGFightCostRatioInFierceFighting = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("GVGFightCostRatioInFierceFighting").FloatValue) -- 激战期消耗比例 -------------------- function UIGVGFightAttack:OnCreated() self.gvgFightAttackOfOrdersItemIsEnough = false end function UIGVGFightAttack:OnOpened(context) self:RegistSystemEvent(EventID.GVGFight_RefreshCityPlayerList, self.RefreshAttackState) self:RegistSystemEvent(EventID.UI_RefreshCurrency, self.RefreshAttackOfOrdersItem) self:RegistSystemEvent(EventID.GVGFight_RefreshTargetLineUp, self.RefreshTargetLineUp) self:RegistSystemEvent(EventID.GVGFight_RefreshGVGFightState, self.RefreshAttackOfOrdersItem) self:RegistSystemEvent(EventID.GVGFight_CloseUIGVGFightAttack, self.OnBackButtonPressed) self:RegistSystemEvent(EventID.UI_FreeLineUp_RefreshUI, self.RefreshTargetLineUp) self.attackAcid = context.attackAcid self.cityCfgData = DataSheetManager.GVGFightCity:GetDataByCityID(context.cityId) self:InitPanel() -- 请求对手阵容 MDL.GVGFight.GVGGetTargetFightInfoReq(self.attackAcid) -- 判断是否请求过自身阵容 ,如果没有请求自身阵容 if not MDL.FreeLineUp.GetLineUpInfoByFunctionType(MDL.FreeLineUp.FuncType.GvGFight) then MDL.FreeLineUp.FreeLineUpGetInfoRequest(MDL.FreeLineUp.FuncType.GvGFight) end end function UIGVGFightAttack:OnBackButtonPressed() self:OnButtonClicked(self.UICommonPopUp.btn_Close) end function UIGVGFightAttack:OnButtonClicked(comp) if comp == self.UICommonPopUp.btn_Close then self:CloseView(false) elseif comp == self.btn_Attack then if CTL.Team.IsInTeam() then UTL.MessageBox.ShowOKCancelBox("", Const_IDS.IDS_GVGFight_AttackWindow_Tips4, MDL.Team.TeamLeaveReq) else if self.gvgFightAttackOfOrdersItemIsEnough then MDL.GVGFight.EnterGVGFightReq(self.attackAcid, self.cityCfgData.CityID) CTL.GVGFight.RecordFightCityInfo(self.cityCfgData.CityID, self.context.curPage, self.context.playerShowType) else UTL.MessageBox.ShowOKCancelBox(Const_IDS.IDS_Store_BuyButton, Const_IDS.IDS_GVGFight_AttackWindow_Tips3, function() for _, v in MDL.OperationActivity.StoreGoodsData:GetEnumerator() do if v.ItemID == GVGFightAttackOfOrdersItem then UTL.ItemTips.OpenQuickPurchaseView(v.ID) return end end end) end end elseif comp == self.btn_Transfer then UIManager.OpenView(Const_UI_Lua.UIEnum.UIGVGFightTransferTips, {cityId = self.context.cityId, targetAcid = self.attackAcid}) end end function UIGVGFightAttack:SetHeroIcon(info, img, bg) UTL.Item.ItemSquareIconByHeroId(info.heroId, img, bg, nil, info.isAwaken) end function UIGVGFightAttack:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.scroll_GVGFightAttack then cellTable.state_Lab:SetState(index) -- 设置自身武将信息 -- 主将 self:SetHeroIcon(data.selfMainHeroId, cellTable.img_OwnHead01, cellTable.bg_OwnHead01) -- 副将 self:SetHeroIcon(data.selfAssistantHeroId, cellTable.img_OwnHead02, cellTable.bg_OwnHead02) -- 设置敌方英雄信息 -- 主将 self:SetHeroIcon(data.attAckMainHeroId, cellTable.img_EnemyHead1, cellTable.bg_EnemyHead01) -- 副将 self:SetHeroIcon(data.attAckAssistantHeroId, cellTable.img_EnemyHead02, cellTable.bg_EnemyHead02) end end -------------------- function UIGVGFightAttack:InitPanel() -- 设置标题 UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_GVGFight_AttackWindow_Title) -- 初始化玩家数据 self:RefreshAttackState() end function UIGVGFightAttack:RefreshAttackState(isTransfer) local attackInfo = MDL.GVGFight.GetInsideInfoByAcid(self.attackAcid) if attackInfo then -- 设置自身信息 -- 名字 UIUtils.SetLabel(self.group_PlayerInfo.txt_PlayerName, BattleDataGetter.GetPlayerName()) -- 区服 UIUtils.SetLabel(self.group_PlayerInfo.txt_Server, string.FormatByIdsId(Const_IDS.IDS_CrossSever_SeverSuffixText2, MDL.Login.GetServerShowId())) -- 头像&头像框 CTL.Character.SetSelfPortraitAndFrame(self.group_PlayerInfo.template_PlayerHead) -- 设置战力 UIUtils.SetLabel(self.group_PlayerInfo.txt_CENum, MDL.GVGFight.GetMyGs()) -- 设置兵力 local curTroops = MDL.GVGFight.GetCurTroops() UIUtils.SetLabel(self.group_PlayerInfo.txt_Troops, string.format("%s%s/%s", UIUtils.GetLocalizedTxt(Const_IDS.IDS_GVGFight_MyInfo_Force), curTroops, MDL.GVGFight.GVGFightForcesMax)) self.group_PlayerInfo.slider_Troops.value = curTroops / MDL.GVGFight.GVGFightForcesMax -- 设置势力信息 local guildInfo = MDL.Guild.GetMyGuildInfo() self:SetGuildInfo(self.group_PlayerInfo, guildInfo.guildName, guildInfo.emblemFrame, guildInfo.emblemContent) -- 设置敌方信息 -- 名字 UIUtils.SetLabel(self.group_EnemyInfo.txt_PlayerName, attackInfo.playerName) -- 区服 UIUtils.SetLabel(self.group_EnemyInfo.txt_Server, string.FormatByIdsId(Const_IDS.IDS_CrossSever_SeverSuffixText2, attackInfo.serverId)) -- 头像&头像框 CTL.Character.SetPortraitAndFrame(self.group_EnemyInfo.template_PlayerHead, attackInfo.portraitId, attackInfo.frameId) -- 设置战力 UIUtils.SetLabel(self.group_EnemyInfo.txt_CENum, attackInfo.gs) -- 设置兵力 UIUtils.SetLabel(self.group_EnemyInfo.txt_Troops, string.format("%s%s/%s", UIUtils.GetLocalizedTxt(Const_IDS.IDS_GVGFight_MyInfo_Force), attackInfo.troops, MDL.GVGFight.GVGFightForcesMax)) self.group_EnemyInfo.slider_Troops.value = attackInfo.troops / MDL.GVGFight.GVGFightForcesMax -- 设置势力信息 self:SetGuildInfo(self.group_EnemyInfo, attackInfo.guildName, attackInfo.emblemFrame, attackInfo.emblemContent) -- 根据对手状态设置 按钮状态 if self.cityCfgData.CityType == MDL.GVGFight.GVGFightCityType.CampCity then self.state_Btn:SetState(1) UIUtils.SetLabelText(self.txt_Info, Const_IDS.IDS_GVGFight_AttackWindow_Tips1) elseif attackInfo.guildAcid == guildInfo.guildId and not string.isNilOrEmpty(attackInfo.guildAcid) then -- 主公、太尉,可以调动非大营同势力玩家 if guildInfo.jobTitle == MDL.Guild.JobEnum.JunshiElder or guildInfo.jobTitle == MDL.Guild.JobEnum.Leader then self.state_Btn:SetState(2) else self.state_Btn:SetState(1) UIUtils.SetLabelText(self.txt_Info, Const_IDS.IDS_GVGFight_AttackWindow_Tips8) end elseif not MDL.GVGFight.GetInsideInfoByAcid(BattleDataGetter.GetAcID()) then self.state_Btn:SetState(1) UIUtils.SetLabelText(self.txt_Info, Const_IDS.IDS_GVGFight_AttackWindow_Tips2) else self.state_Btn:SetState(0) self:RefreshAttackOfOrdersItem() -- 设置图标 UTL.Item.MoneyIcon(self.img_Coin, GVGFightAttackOfOrdersItem) end else if not isTransfer then CTL.Tips.AddTipsMsg(UIUtils.GetLocalizedTxt(Const_IDS.IDS_GVGFight_ObjectDisappearTips)) end self:CloseView(false) end end function UIGVGFightAttack:SetGuildInfo(uiRoot, guildName, emblemFrame, emblemContent) if not string.isNilOrEmpty(guildName) then UIUtils.SetLabel(uiRoot.txt_Name, guildName) -- 设置军团徽记 CTL.Guild.SetGuildEmblem(uiRoot.img_GuildIcon, uiRoot.txt_Guild, emblemFrame, emblemContent) else UIUtils.SetActive(uiRoot.img_GuildIcon, false) UIUtils.SetLabelText(uiRoot.txt_Name, Const_IDS.IDS_GVGFight_InCity_NoGuild) end end -- 刷新道具显示 function UIGVGFightAttack:RefreshAttackOfOrdersItem() local curGVGFightState = MDL.GVGFight.GetCurGVGFightState() if curGVGFightState == MDL.GVGFight.GVGFightStage.OffSeason then self:OnBackButtonPressed() else if self.state_Btn.CurState ~= 0 then return end local ownAttackOfOrdersItemCount = UTL.Item.GetItemStockCount(GVGFightAttackOfOrdersItem) local costAttackOfOrdersItemCount = GVGFightAttackOfOrdersNum if curGVGFightState == MDL.GVGFight.GVGFightStage.Fierce then costAttackOfOrdersItemCount = math.floor(costAttackOfOrdersItemCount * GVGFightCostRatioInFierceFighting) end if costAttackOfOrdersItemCount > ownAttackOfOrdersItemCount then self.gvgFightAttackOfOrdersItemIsEnough = false UIUtils.SetLabel(self.txt_Coin, UTL.Color.FormatRedColor(costAttackOfOrdersItemCount)) else self.gvgFightAttackOfOrdersItemIsEnough = true UIUtils.SetLabel(self.txt_Coin, UTL.Color.FormatGreenColor(costAttackOfOrdersItemCount)) end end end -- 刷新目标阵容 function UIGVGFightAttack:RefreshTargetLineUp() if self.scroll_GVGFightAttack.Count > 0 then self.scroll_GVGFightAttack:ClearCells() end local selfLineUpHeroIds = MDL.FreeLineUp.GetLineUpArrayIdListByFunctionType(MDL.FreeLineUp.FuncType.GvGFight, true) local lineUpHeroIds = MDL.GVGFight.GetOtherLineUpHeroIdList() for i = 1, #lineUpHeroIds, 2 do self.scroll_GVGFightAttack:AddData({selfMainHeroId = selfLineUpHeroIds[i], selfAssistantHeroId = selfLineUpHeroIds[i + 1], attAckMainHeroId = lineUpHeroIds[i], attAckAssistantHeroId = lineUpHeroIds[i + 1]}, 0) end end function UIGVGFightAttack:OnClosed() UIManager.CloseView(Const_UI_Lua.UIEnum.UIGVGFightTransferTips) end return UIGVGFightAttack