local UISlgGvETips = UIViewClass() local INTERVAL_REFRESH = 30 local function SortByDamageHP(record_1, record_2) return record_1.damageHP > record_2.damageHP end function UISlgGvETips:OnCreated() self.itemTemplateObj = self.item.gameObject UIUtils.SetActive(self.ani_Content, false) UIUtils.SetActive(self.ani_battle, false) end function UISlgGvETips:OnOpened(context) self:SetPushStyle(LuaConst.PushStyleEnum.CLOSENOTRECOVER) self:RegistSystemEvent(EventID.UI_SlgGve_CloseGridTips, self.OnCloseGridTips) self:RegistSystemEvent(EventID.UI_SlgGve_GetGridDetail, self.OnGetGridDetail) self:RegistSystemEvent(EventID.UI_SlgGve_UpdateGridTips, self.InitInfo) self:RegistSystemEvent(EventID.UI_SlgGve_RefreshGridTipsPos, self.OnRefreshPosition) self:RegistSystemEvent(EventID.UI_SlgGve_UpdateMyOccupyGridInfo, self.OnUpdateMyOccupyGridInfo) self:InitInfo(context.gridIndex) end function UISlgGvETips:OnRefreshPosition(rootX, rootY) local gridIndex = self.gridIndex if self.gridMiddleIndex > 0 then gridIndex = self.gridMiddleIndex end local posX, posY = UTL.SLG.PositionToUIPosition(UTL.SLG.IndexToPosition(gridIndex)) self.root:SetLocalPosition(posX + rootX, posY + rootY, 0) end function UISlgGvETips:OnUpdateMyOccupyGridInfo() --该地块可能是我的占领地块,可能会刷出贼兵或者贼兵消失 if self.isThief ~= MDL.SlgGvE.CheckGridIndexHasThief(self.gridIndex) then self:InitInfo(self.gridIndex) end end function UISlgGvETips:InitInfo(gridIndex) self.gridIndex = gridIndex self.isThief = MDL.SlgGvE.CheckGridIndexHasThief(gridIndex) self:SetInfo() end function UISlgGvETips:InitData() local type, info, middleIndex = MDL.SlgGvE.GetGridInfo(self.gridIndex) local gridCfg = DataSheetManager.SlgGvEPlotData:GetDataByGveMapID(info.gveMapID) self.gridType = type self.gridInfo = info self.gridMiddleIndex = middleIndex self.gridCfg = gridCfg end function UISlgGvETips:SetInfo() self:InitData() if self.isThief then self:HandleAttackList() self:HandleRankRecord() self:HandleGs() self:HandleDes() self:HandleBtn() self:HandleTopInfo() else MDL.SlgGvE.GVEGetLandDetailReq(self.gridIndex) self:StartRepeatFunc(self.TimeToRefresh, INTERVAL_REFRESH) end self:HandleTitle() self:HandleIcon() self:HandleGridName() self:HandleIncome() self:HandleRewards() self:HandleEditGroup() end function UISlgGvETips:TimeToRefresh() self:InitData() MDL.SlgGvE.GVEGetLandDetailReq(self.gridIndex) end function UISlgGvETips:OnGetGridDetail(detail) self:HandleAttackList(detail) self:HandleRankRecord(detail) self:HandleGs(detail) self:HandleDes(detail) self:HandleBtn(detail) self:HandleTopInfo(detail) end function UISlgGvETips:HandleAttackList(detail) if self.isThief then UIUtils.SetActive(self.ani_battle, false) else if detail and #detail.attackList > 0 then UIUtils.SetActive(self.ani_battle, true) self.loop_landtips:ReloadAll(detail.attackList) else UIUtils.SetActive(self.ani_battle, false) end end end function UISlgGvETips:HandleRankRecord(detail) if self.isThief then UIUtils.SetActive(self.ani_Content, false) else if self.gridType == MDL.SlgGvE.GridType.Elite or self.gridType == MDL.SlgGvE.GridType.Boss then UIUtils.SetActive(self.ani_Content, true) local rewardArray = {} for i, v in DataSheetManager.SlgGvERankReward:GetDataByGveGuildRankGroupID_GveRankRewardID(self.gridCfg.GveRankRewardID) do table.insert(rewardArray, v) end self.loop_reward:ReloadAll(rewardArray) local sortedDamageRecord = {} local info if IsProtoDataNotNil(detail.eliteLandInfo) then info = detail.eliteLandInfo elseif IsProtoDataNotNil(detail.bossLandInfo) then info = detail.bossLandInfo end for i, v in ipairs(info.damageRecord) do sortedDamageRecord[i] = v end self.maxHp = info.bossMaxHp if #sortedDamageRecord > 0 then table.sort(sortedDamageRecord, SortByDamageHP) self.loop_rank:ReloadAll(sortedDamageRecord) if self.selectToggleIndex == nil then self.toggle_Group:SelectIndex(0) end else if self.selectToggleIndex == nil then self.toggle_Group:SelectIndex(1) end end else UIUtils.SetActive(self.ani_Content, false) end end end function UISlgGvETips:HandleGridName() if self.gridType == MDL.SlgGvE.GridType.Boss or self.gridType == MDL.SlgGvE.GridType.Elite then UIUtils.SetActive(self.group_main, false) else UIUtils.SetActive(self.group_main, true) local x, y = UTL.SLG.IndexToPosition(self.gridIndex) if self.isThief then self.lab_content.text = string.format("%s(%s,%s)", string.FormatByIdsId(Const_IDS.IDS_SlgGve_Plot_Name_9, MDL.SlgGvE.GetCurOfficalLv()), x, y) else self.lab_content.text = string.format("%s(%s,%s)", string.FormatByIdsId(Const_IDS[self.gridCfg.GveMapName], self.gridCfg.GveMapLevel), x, y) end end end function UISlgGvETips:HandleIcon() if self.isThief then local thiefCfg = DataSheetManager.SlgGvEEnemyData:GetDataByBanditLevel(MDL.SlgGvE.GetCurOfficalLv()) UIUtils.SetImageByAssetBundle(self.img_HeroHead, thiefCfg.GveEnemypIcon) else UIUtils.SetImageByAssetBundle(self.img_HeroHead, self.gridCfg.GveEnemypIcon) end end function UISlgGvETips:HandleGs(detail) if self.isThief then self.lab_gs.text = CTL.SlgGvE.GetCurThiefGs(MDL.SlgGvE.GetCurOfficalLv()) else if IsProtoDataNotNil(detail.personalLandInfo) then self.lab_gs.text = detail.personalLandInfo.EnemyGS elseif IsProtoDataNotNil(detail.eliteLandInfo) then self.lab_gs.text = detail.eliteLandInfo.EnemyGS elseif IsProtoDataNotNil(detail.bossLandInfo) then self.lab_gs.text = detail.bossLandInfo.EnemyGS end end end function UISlgGvETips:HandleTitle() if self.isThief then self.lab_Title.text = string.FormatByIdsId(Const_IDS.IDS_SlgGve_Plot_Name_9, MDL.SlgGvE.GetCurOfficalLv()) else UIUtils.SetLabel(self.lab_Title, string.FormatByIdsId(Const_IDS[self.gridCfg.GveMapName], self.gridCfg.GveMapLevel)) end end function UISlgGvETips:HandleTopInfo(detail) local info = self.gridInfo if self.isThief or not info.hasOccupy then self.state_occupy:SetState(0) else if self.gridType == MDL.SlgGvE.GridType.Elite then --精英城 self.state_occupy:SetState(3) self.txt_TitleGuildName.text = MDL.Guild.GetMyGuildInfo().emblemContent UTL.Item.SetAtlasSprite(self.ico_GuildBg, "UI_Guild", DataSheetManager.GuildEmblem:GetDataByID(MDL.Guild.GetMyGuildInfo().emblemFrame).Image) elseif self.gridType == MDL.SlgGvE.GridType.Boss then --boss城 if info.hasEnemy then self.state_occupy:SetState(0) else self.state_occupy:SetState(3) self.txt_TitleGuildName.text = MDL.Guild.GetMyGuildInfo().emblemContent UTL.Item.SetAtlasSprite(self.ico_GuildBg, "UI_Guild", DataSheetManager.GuildEmblem:GetDataByID(MDL.Guild.GetMyGuildInfo().emblemFrame).Image) end elseif MDL.SlgGvE.CheckGridMyOccupied(self.gridIndex) then --自己占城 self.state_occupy:SetState(1) CTL.Character.SetPortraitAndFrame(self.hero_head, detail.personalLandInfo.PortraitId, detail.personalLandInfo.FrameId) else --他人占城 self.state_occupy:SetState(2) self.player_name.text = detail.personalLandInfo.ownerName CTL.Character.SetPortraitAndFrame(self.hero_head, detail.personalLandInfo.PortraitId, detail.personalLandInfo.FrameId) end end end function UISlgGvETips:HandleDes(detail) if self.isThief then UIUtils.SetActive(self.cell_ItemDesc, false) else local info if IsProtoDataNotNil(detail.personalLandInfo) then info = detail.personalLandInfo elseif IsProtoDataNotNil(detail.eliteLandInfo) then info = detail.eliteLandInfo elseif IsProtoDataNotNil(detail.bossLandInfo) then info = detail.bossLandInfo end if info.hasOccupy == false or info.hasEnemy == true then UIUtils.SetActive(self.cell_ItemDesc, true) local cfg = DataSheetManager.SlgGvEEnemyBuff:GetDataBySkillSignID(info.EnemyBuffId) UIUtils.SetLabelText(self.txt_ItemInfoDes, Const_IDS[cfg.SkillDes]) else UIUtils.SetActive(self.cell_ItemDesc, false) end end end function UISlgGvETips:HandleIncome() if self.isThief then UIUtils.SetActive(self.cell_Itemincome, false) else UIUtils.SetActive(self.cell_Itemincome, true) local data = DataSheetManager.SlgGvEHoldReward:GetDataByGveHoldRewardID(self.gridCfg.GveHoldRewardID) for i, v in ipairs(self.group_material) do if i <= #data.LootRule_Table then UIUtils.SetActive(v.gameObject, true) local itemId = CTL.SlgGvE.MaterialsItemId[data.LootRule_Table[i].GvereSourcesID] UTL.Item.ItemSquareIcon(v.icon_material, nil, itemId) local itemNameAndDesc = UTL.Item.GetItemDataSpliceByType(itemId) v.lab_name.text = itemNameAndDesc.Name v.lab_num.text = string.FormatByIdsId(Const_IDS.IDS_SlgGve_Main_Hint_1, CTL.SlgGvE.GetMaterialEarnNum(data.LootRule_Table[i].ItemNum)) else UIUtils.SetActive(v.gameObject, false) end end end end function UISlgGvETips:HandleRewards() if self.isThief then UIUtils.SetActive(self.cell_reward01, true) UIUtils.SetActive(self.cell_reward02, false) UIUtils.SetLabelText(self.txt_ItemInfoTitle, Const_IDS.IDS_SlgGve_Enemy_Hint_4) local thiefCfg = DataSheetManager.SlgGvEEnemyData:GetDataByBanditLevel(MDL.SlgGvE.GetCurOfficalLv()) local reward = DataSheetManager.SlgGvEBattleReward:GetDataByGveBattleRewardID(thiefCfg.BanditRewrdID).Reward_Table self.loop_ItemIcon01:ReloadAll(reward) else if self.gridType == MDL.SlgGvE.GridType.Boss then UIUtils.SetActive(self.cell_reward01, true) UIUtils.SetActive(self.cell_reward02, true) UIUtils.SetLabelText(self.txt_ItemInfoTitle, Const_IDS.IDS_SlgGve_Enemy_Hint_5) local reward = DataSheetManager.SlgGvEFirstReward:GetDataByGveFirstRewardID(self.gridCfg.GveFirstRewardID).Reward_Table self.loop_ItemIcon01:ReloadAll(reward) local auctionReward = MDL.GuildAuction.GetAuctionRewardsShowList(self.gridCfg.GveAuctionRewardID, LuaConst.ActivityType.SlgGvE, true) self.loop_ItemIcon02:ReloadAll(auctionReward) elseif self.gridType == MDL.SlgGvE.GridType.Elite then UIUtils.SetActive(self.cell_reward01, true) UIUtils.SetActive(self.cell_reward02, false) UIUtils.SetLabelText(self.txt_ItemInfoTitle, Const_IDS.IDS_SlgGve_Enemy_Hint_5) local reward = DataSheetManager.SlgGvEFirstReward:GetDataByGveFirstRewardID(self.gridCfg.GveFirstRewardID).Reward_Table self.loop_ItemIcon01:ReloadAll(reward) else UIUtils.SetActive(self.cell_reward01, true) UIUtils.SetActive(self.cell_reward02, false) UIUtils.SetLabelText(self.txt_ItemInfoTitle, Const_IDS.IDS_SlgGve_Enemy_Hint_4) local reward = DataSheetManager.SlgGvEBattleReward:GetDataByGveBattleRewardID(self.gridCfg.GveBattleRewardID).Reward_Table self.loop_ItemIcon01:ReloadAll(reward) end end end function UISlgGvETips:HandleEditGroup() if self.gridType == MDL.SlgGvE.GridType.Elite or self.gridType == MDL.SlgGvE.GridType.Boss then if string.isNilOrEmpty(self.gridInfo.markContent) then UIUtils.SetActive(self.group_edit, false) else UIUtils.SetActive(self.group_edit, true) self.lab.text = self.gridInfo.markContent end else UIUtils.SetActive(self.group_edit, false) end end function UISlgGvETips:HandleBtn(detail) if self.isThief then self.state_btn:SetState(0) UIUtils.SetActive(self.Button_giveup, false) UIUtils.SetActive(self.Button_sweep, false) UIUtils.SetActive(self.Button_go, true) else if self.gridType == MDL.SlgGvE.GridType.Boss or self.gridType == MDL.SlgGvE.GridType.Elite then UIUtils.SetActive(self.Button_giveup, false) UIUtils.SetActive(self.Button_sweep, false) else --自己的个人地块才显示 UIUtils.SetActive(self.Button_giveup, MDL.SlgGvE.CheckGridMyOccupied(self.gridIndex)) UIUtils.SetActive(self.Button_sweep, MDL.SlgGvE.CheckGridMyOccupied(self.gridIndex)) self.state_btn:SetState(1) end local info if IsProtoDataNotNil(detail.personalLandInfo) then info = detail.personalLandInfo self.state_btn:SetState(1) elseif IsProtoDataNotNil(detail.eliteLandInfo) then info = detail.eliteLandInfo if info.resetDeadLine > 0 then self.state_btn:SetState(0) else self.state_btn:SetState(1) end elseif IsProtoDataNotNil(detail.bossLandInfo) then info = detail.bossLandInfo if info.resetDeadLine > 0 then self.state_btn:SetState(0) else self.state_btn:SetState(1) end end if info.hasOccupy == false or info.hasEnemy == true then if info.resetDeadLine == nil or info.resetDeadLine > 0 then UIUtils.SetActive(self.Button_go, true) else if self.gridCfg.IsNeedAuthority then if MDL.Guild.JobHasPermission(MDL.Guild.GetMyGuildInfo().jobTitle, MDL.Guild.AuthorityEnum.SlgGvEFightBoss) then UIUtils.SetActive(self.Button_go, true) else UIUtils.SetActive(self.Button_go, false) end else UIUtils.SetActive(self.Button_go, true) end end else UIUtils.SetActive(self.Button_go, false) end end end function UISlgGvETips:OnButtonClicked(comp) if comp == self.Button_go then if CTL.SlgGvE.CheckIfGridLineUp(self.gridIndex) == false then return end CTL.SlgGvE.OpenLineUp(CTL.SlgGvE.LineupEnterType.lineUpOrBattle, self.gridCfg.GveMapID, self.isThief, self.gridIndex) elseif comp == self.Button_giveup then UTL.MessageBox.ShowOKCancelBox(nil, Const_IDS.IDS_SlgGve_Main_Hint_12, function() MDL.SlgGvE.GVEGiveUpLandReq(self.gridIndex) end) elseif comp == self.Button_sweep then CTL.SlgGvE.OpenLineUp(CTL.SlgGvE.LineupEnterType.lineUpOrBattle, self.gridCfg.GveMapID, self.isThief, self.gridIndex, true) end end function UISlgGvETips:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.loop_landtips then cellTable.lab_name.text = data.name elseif scrollRect == self.loop_reward then if index + 1 > 3 then cellTable.UIState:SetState(3) else cellTable.UIState:SetState(index) end local cfg = DataSheetManager.SlgGvERankReward:GetDataByGveGuildRankGroupID_GveRankRewardID(self.gridCfg.GveRankRewardID, index + 1) if cfg.GveGuildRankUp == cfg.GveGuildRankDown then cellTable.txt_Rank.text = cfg.GveGuildRankUp else if cfg.GveGuildRankDown == 999 then cellTable.txt_Rank.text = string.FormatByIdsId(Const_IDS.IDS_OfflineSoloFight_RankingList_Type2, cfg.GveGuildRankUp) else cellTable.txt_Rank.text = cfg.GveGuildRankUp .. "-" .. cfg.GveGuildRankDown end end local rewardTable = data.Reward_Table for i, rewardData in ipairs(rewardTable) do local contentItem = cellTable.Content[i] if not contentItem then contentItem = self:InstantiateCellCollection(cellTable.cell.gameObject, cellTable.Content, self.itemTemplateObj) end contentItem.ItemID = rewardData.Item UTL.Item.SetItemCell(contentItem, rewardData.Item, rewardData.ItemNum) UIUtils.SetActive(contentItem.gameObject, true) end for i = #rewardTable + 1, #cellTable.Content do UIUtils.SetActive(cellTable.Content[i].gameObject, false) end elseif scrollRect == self.loop_ItemIcon01 then UTL.Item.SetItemCell(cellTable.item, data.Item, data.ItemNum) elseif scrollRect == self.loop_ItemIcon02 then UIUtils.SetActive(cellTable.group_FirstDone, self.gridCfg.GveAuctionRewardID == 8101) --首战拍卖配置Id-8101 UTL.Item.SetItemCell(cellTable.item, data.ItemID, data.ItemNum) elseif scrollRect == self.loop_rank then if data.name == BattleDataGetter.GetPlayerName() then cellTable.lab_name.text = UTL.Color.FormatTextByColor("FFF9B5", data.name) cellTable.lab_num.text = UTL.Color.FormatTextByColor("FFF9B5", string.format("%s(%.2f%%)", UTL.String.GetCountStr(data.damageHP), (data.damageHP / self.maxHp) * 100)) else cellTable.lab_name.text = data.name cellTable.lab_num.text = string.format("%s(%.2f%%)", UTL.String.GetCountStr(data.damageHP), (data.damageHP / self.maxHp) * 100) end end end function UISlgGvETips:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loop_reward then for _, v in ipairs(cellTable.Content) do if target == v.event_Click then UTL.ItemTips.ShowCommonTipsById(v.ItemID) return end end elseif scrollRect == self.loop_ItemIcon01 then UTL.ItemTips.ShowCommonTipsById(data.Item) elseif scrollRect == self.loop_ItemIcon02 then UTL.ItemTips.ShowCommonTipsById(data.ItemID) end end function UISlgGvETips:OnValueChanged(comp, index) self.selectToggleIndex = index self.state_content:SetState(index) if index == 0 and self.loop_rank.Count == 0 then UIUtils.SetActive(self.sprite_EmptyBg, true) else UIUtils.SetActive(self.sprite_EmptyBg, false) end end function UISlgGvETips:OnCloseGridTips() self:CloseView() end return UISlgGvETips