local UIClimbTowerMainPanel = UIViewClass() local DayRefreshTimeId = 1 --每日刷新时间类型ID function UIClimbTowerMainPanel:OnOpened(context) UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS["IDS_NewClimbTower_Rank"]) self.climbTowerTimer = self.group_InfoClimbTower.gameObject:GetComponent(typeof(TK2Core.UI.UICDTimer)) self.TableShowSystem:SetIsClimbTower(true) self.TableShowSystem:EnterTableShow() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.ClimbTower) then self:CloseView(true) return end if GameAppInfo.IsJapanesePackage() then UIUtils.SetActive(self.btn_JPShop, true) self:RegistSystemEvent(EventID.UI_Shop_UpdateJPBaiZhanNewSymbolState, self.OnJPBaiZhanNewSymbolStateUpdate) self:OnJPBaiZhanNewSymbolStateUpdate() else UIUtils.SetActive(self.btn_JPShop, false) end self:RegistSystemEvent(EventID.UI_UpdateClimbTowerInfo, self.RefreshClimbTowerRed) self:RegistSystemEvent(EventID.UI_RefreshClimbTowerNoticeAwardRed, self.RefreshEarningsClimbTowerRed) self:RegistSystemEvent(EventID.FunctionUnlockUpdate, self.CheckIfFuncUnlock) -- GMS self:RegistSystemEvent(EventID.UI_CloseAndRecoverView, self.OnCloseAndRecoverView) self:RegistSystemEvent(EventID.UI_ClosePushedView, self.OnCloseSelf) self:RegistSystemEvent(EventID.UI_FubenQuickPass, self.OnClimbTowerQuickPass) self:RegistTriggerEvent(self.img_Back, UIEventTriggerType.Drag) UIUtils.SetActive(self.btn_NormalProgress, not GameAppInfo.IsOverseaPackage()) self:UpdateNationUI() self:RefreshClimbTowerRed() self:UpdateClimbTowerInfo() UIUtils.SetActive(self.ani_TitleInfo, Localization.DisableSpecifiedFunctionsInJapan) if Localization.DisableSpecifiedFunctionsInJapan then self.txt_TitleInfo.text = CTL.ClimbTower.GetOpenTimeDesc() end UIManager.ActiveUIModle(false, "UIClimbTowerMainPanel") end function UIClimbTowerMainPanel:OnClimbTowerQuickPass(mapType) if mapType == LuaConst.LevelType.ClimbTower then self:UpdateNationUI() self:RefreshClimbTowerRed() self:UpdateClimbTowerInfo() end end function UIClimbTowerMainPanel:OnJPBaiZhanNewSymbolStateUpdate() UIUtils.SetActive(self.img_JPNew, CTL.PayMall.GetNewSymbolState_JPBaiZhan()) end function UIClimbTowerMainPanel:OnCloseSelf(viewClassPath) if viewClassPath == self.__viewClassPath then self:CloseView(true) end end function UIClimbTowerMainPanel:CheckIfFuncUnlock(funcId, isUnlock) if funcId and funcId == MDL.Unlock.FunctionType.ClimbTower and not MDL.Unlock.IsUnlock(funcId) then CTL.NationClimbTower.CloseAllClimbView() end end function UIClimbTowerMainPanel:UpdateNationUI() UIUtils.SetActive(self.group_LeftClimbTower, true) UIUtils.SetActive(self.group_LeftBtn, true) UIUtils.SetActive(self.group_NationBtn, false) UIUtils.SetActive(self.btn_Shop, false) end function UIClimbTowerMainPanel:OnBackButtonPressed() self:OnButtonClicked(self.btn_Close) end function UIClimbTowerMainPanel:OnButtonClicked(obj) if obj == self.btn_ChallengeClimbTower then -- 挑战按钮 self:OnClickChallengeClimbTower() elseif obj == self.btn_through then local targetMaxTowerLevelCfg = CTL.ClimbTower.GetTargetMaxTowerLevelCfg(self.NextClimbTowerLevelChapter) local content = string.FormatByIdsKey("IDS_PlayEasier_Tips1", self.txt_ClimbTowerLevel.text .. string.FormatByIdsKey("IDS_NationClimbTower_HistoryLevel", targetMaxTowerLevelCfg.Number)) UTL.MessageBox.ShowOKCancelBox(Const_IDS.IDS_PlayEasier_Button, content, function() MDL.LevelSelect.FubenQuickPassReq(LuaConst.LevelType.ClimbTower, self.NextClimbTowerLevelId, targetMaxTowerLevelCfg.ID) end) elseif obj == self.btn_EarningsClimbTower then -- 收益按钮 CTL.ClimbTower.OpenEarningsInfo() elseif obj == self.btn_TimeUpClimbTower then -- 加速按钮 CTL.ClimbTower.OpenTimeUpView() elseif obj == self.UITemplateTitlePanel.btn_close then self:CloseView(true) elseif obj == self.UITemplateTitlePanel.btn_Home then CTL.HomeMain.CloseViewBackHomeMain() elseif obj == self.UITemplateTitlePanel.btn_Info then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.ClimbTower}) elseif obj == self.btn_RankClimbTower then --排行榜 CTL.Rank.OpenRankPanelByType(MDL.Rank.RankType.ClimbTower) elseif obj == self.btn_RewardInfo then UIManager.OpenView(Const_UI_Lua.UIEnum.UIClimbTowerReward) elseif obj == self.btn_NormalProgress then UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UINationClimbTowerProgress) -- 历程 elseif obj == self.btn_JPShop then UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UIShopMain, {TabEnum = CTL.PayMall.ShopMainTabEnum.JPBaiZhan}) else --首通道具提示 for i, v in ipairs(self.group_ItemFirst) do if obj == self.group_ItemFirst[i].event_Click then UTL.ItemTips.ShowCommonTipsById(self.group_ItemFirst[i].ItemID) return end end --下一关道具提示 for i, v in ipairs(self.group_Item) do if obj == self.group_Item[i].event_Click then UTL.ItemTips.ShowCommonTipsById(self.group_Item[i].ItemID) return end end --日服挂机奖励道具 for i, v in ipairs(self.group_ItemFirstJP) do if obj == self.group_ItemFirstJP[i].event_Click then UTL.ItemTips.ShowCommonTipsById(self.group_ItemFirstJP[i].ItemID) return end end end end function UIClimbTowerMainPanel:OnClosed() self:EndCdTime() UIManager.ActiveUIModle(true, "UIClimbTowerMainPanel") end function UIClimbTowerMainPanel:UpdateClimbTowerInfo() self:RefreshClimbTowerRed() local chapterConfig local levelConfig local passedFarthestId = MDL.ClimbTower.GetPassFarthestId() if passedFarthestId > 0 then levelConfig = DataSheetManager.ClimbTowerLevel:GetDataByID(passedFarthestId) self.txt_XP.text = string.FormatByIdsId(Const_IDS.IDS_ClimbTower_UnitRewardInfo,levelConfig.HangUpRewardStone) self.txt_Money.text = string.FormatByIdsId(Const_IDS.IDS_ClimbTower_UnitRewardInfo,levelConfig.HangUpRewardSliverCoin) chapterConfig = DataSheetManager.ClimbTowerData:GetDataByID(levelConfig.BelongToChapter) else self.txt_XP.text = string.FormatByIdsId(Const_IDS.IDS_ClimbTower_UnitRewardInfo,0) self.txt_Money.text = string.FormatByIdsId(Const_IDS.IDS_ClimbTower_UnitRewardInfo,0) chapterConfig = DataSheetManager.ClimbTowerData:GetDataByID(1) end local nextConfig= CTL.ClimbTower.GetNextLevelConfig() if nextConfig then chapterConfig = DataSheetManager.ClimbTowerData:GetDataByID(nextConfig.BelongToChapter) if chapterConfig then UIUtils.SetLabel(self.txt_ClimbTowerLevel, UIUtils.GetLocalizedTxt(Const_IDS[chapterConfig.ClimbTower])) else UIUtils.SetLabel(self.txt_ClimbTowerLevel,"not found chapter") end UIUtils.SetLabel(self.txt_Level, CTL.ClimbTower.GetClimbTowerLevelCoundText(nextConfig)) else UIUtils.SetLabel(self.txt_ClimbTowerLevel,nil) UIUtils.SetLabel(self.txt_Level,nil) end self.TableShowSystem:LoadChapterInfo(chapterConfig.BGUI) self.TableShowSystem:SwitchTable(false) local nextConfig = CTL.ClimbTower.GetNextLevelConfig() if nextConfig then local unlockLevel = CTL.Unlock.GetUnlockLevelByParameterTable(nextConfig.Unlock_Table) local curLv = MDL.Player.GetRoleInfo() if curLv >= unlockLevel then self.btn_ChallengeClimbTower:SetGray(false,true) else self.btn_ChallengeClimbTower:SetGray(true,true) end self.NextClimbTowerLevelId = nextConfig.ID self.NextClimbTowerLevelChapter = nextConfig.BelongToChapter local nextChapterConfig = DataSheetManager.ClimbTowerData:GetDataByID(nextConfig.BelongToChapter) --路线图传下一关的id和该id对应的章节 self.TableShowSystem:LoadClimbTowerInfo(nextChapterConfig.ID, nextConfig.Number) else --路线图传最后一关 local finalLevelConfig for _, v in DataSheetManager.ClimbTowerLevel:GetEnumerator() do if finalLevelConfig == nil or v.ID > finalLevelConfig.ID then finalLevelConfig = v end end if finalLevelConfig then local finalChapterConfig = DataSheetManager.ClimbTowerData:GetDataByID(finalLevelConfig.BelongToChapter) self.TableShowSystem:LoadClimbTowerInfo(finalChapterConfig.ID, finalLevelConfig.Number) end end self:RefreshNewUI() end function UIClimbTowerMainPanel:RefreshClimbTowerRed() self.btn_ChallengeClimbTower:SetRedPoint(CTL.ClimbTower.CheckChallengeRed()) if MDL.ClimbTower.GetIsCloseSpeedUp() then UIUtils.SetActive(self.btn_TimeUpClimbTower.gameObject,false) else UIUtils.SetActive(self.btn_TimeUpClimbTower.gameObject,true) self.btn_TimeUpClimbTower:SetRedPoint(CTL.ClimbTower.IsFreeTimesLeft()) end self:RefreshEarningsClimbTowerRed() -- 历程红点 self.btn_NormalProgress:SetRedPoint(CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.ClimbTowerEntry_Progress)) end function UIClimbTowerMainPanel:RefreshEarningsClimbTowerRed() self.btn_EarningsClimbTower:SetRedPoint(CTL.ClimbTower.CheckAwardRed()) end function UIClimbTowerMainPanel:OnDrag(comp, eventData) self.TableShowSystem:DraggingByManual(eventData.delta.x) end function UIClimbTowerMainPanel:RefreshNewUI() local _,nextConfig,_ = CTL.ClimbTower.CanChallengeNextLevel() self:GetShowGs(nextConfig) --全部通关了 if CTL.ClimbTower.IsPassedAllLevel() then UIUtils.SetActive(self.group_Level,false) UIUtils.SetActive(self.group_Right,false) self.btn_ChallengeClimbTower:SetGray(false,true) UIUtils.SetActive(self.btn_through, false) UIUtils.SetActive(self.group_InfoClimbTower,false) UIUtils.SetActive(self.group_Reward,false) return end UIUtils.SetActive(self.btn_through, CTL.ClimbTower.IsHasNoNeedFightClimberLevel(self.NextClimbTowerLevelChapter)) UIUtils.SetActive(self.group_Reward,true) UIUtils.SetActive(self.group_Level,true) UIUtils.SetActive(self.group_Right,true) --通关奖励显示 if nextConfig~=nil then local levelRewardTable = DataSheetManager.ClimbTowerRewardRepeat:GetDataByAttrRepeatID(nextConfig.LevelRewardRepeatID).Item_Table for i, v in ipairs(self.group_Item) do UIUtils.SetActive(self.group_Item[i].gameObject,false) end local index=0 for k, v in pairs(levelRewardTable) do index=index+1 local reward = self.group_Item[index] if index <=3 then UTL.Item.SetItemCell(reward, v.ItemID, v.ItemNum) UIUtils.SetActive(reward.gameObject,true) reward.ItemID=v.ItemID end end --首次通关奖励显示 for i, v in ipairs(self.group_ItemFirst) do UIUtils.SetActive(self.group_ItemFirst[i].gameObject,false) end local needShowFirstPastLevelId=nextConfig.NewRewardPre local needShowLevelData= DataSheetManager.ClimbTowerLevel:GetDataByID(needShowFirstPastLevelId) local needShowRewardTable = DataSheetManager.ClimbTowerRewardRepeat:GetDataByAttrRepeatID(needShowLevelData.LevelRewardRepeatID).Item_Table local firstRewardIndex=0 for i, v in ipairs(needShowRewardTable) do firstRewardIndex=firstRewardIndex+1 local reward = self.group_ItemFirst[firstRewardIndex] if firstRewardIndex <=3 then UTL.Item.SetItemCell(reward, v.ItemID, v.ItemNum) UIUtils.SetActive(reward.gameObject,true) reward.ItemID = v.ItemID end end UIUtils.SetLabel(self.txt_Notice, string.FormatByIdsKey("IDS_NewClimbTower_FirstPassRewardTip", CTL.ClimbTower.GetClimbTowerLevelCoundText(needShowLevelData))) --日服显示挂机奖励 if GameAppInfo.IsJapanesePackage() then local specialDesc, specialReward = CTL.ClimbTower.GetNextSpecialReward(nextConfig.ID) if specialDesc then self.state_region:SetState(0) self.txt_NoticeJP.text = specialDesc for i, v in ipairs(self.group_ItemFirstJP) do if i <= #specialReward then UIUtils.SetActive(v.gameObject.transform.parent, true) local itemID = specialReward[i].ItemID v.ItemID = itemID UTL.Item.SetItemCell(v, itemID, specialReward[i].ItemNum) else UIUtils.SetActive(v.gameObject.transform.parent, false) end end else self.state_region:SetState(1) end else self.state_region:SetState(1) end --判断是否要显示爬塔倒计时 达到每日最高层数后&没有通关爬塔总的最高层数时 显示倒计时,不能挑战 if CTL.ClimbTower.IsReachMaxChallengeLevelCountOfEveryDay() then self.btn_ChallengeClimbTower:SetGray(true,false) UIUtils.SetActive(self.group_InfoClimbTower,true) self:ShowCdTime() self:StartRepeatFunc(self.OnUpdateFun, 1) else self:UpdateUIAfterStopCdTime() end end end function UIClimbTowerMainPanel:UpdateUIAfterStopCdTime() self.btn_ChallengeClimbTower:SetGray(false,true) UIUtils.SetActive(self.group_InfoClimbTower,false) self:EndCdTime() self:StopRepeatFunc(self.OnUpdateFun) end function UIClimbTowerMainPanel:OnUpdateFun() if self.climbTowerTimer:IsTimerEnding() then self:UpdateUIAfterStopCdTime() end end --结束爬塔挑战的倒计时 function UIClimbTowerMainPanel:EndCdTime() self.climbTowerTimer:EndTimer() UIUtils.SetActive(self.lab_InfoClimbTower,false) end --显示爬塔挑战的倒计时 function UIClimbTowerMainPanel:ShowCdTime() --获取距离刷新时间的秒数 UIUtils.SetActive(self.lab_InfoClimbTower,true) local timeValue = UTL.Time.GetServerIntervalTimeToRefresh(DayRefreshTimeId) self.climbTowerTimer:SetCustomString(UIUtils.GetLocalizedTxt(Const_IDS.IDS_NewClimbTower_LevelMaxTime),1,2) self.climbTowerTimer:ResetAndBeginTimer(false,timeValue,0) end --战力显示 function UIClimbTowerMainPanel:GetShowGs(data) local currentGS=MDL.Player.GetLineUpGs() local _,nextConfig,_ = CTL.ClimbTower.CanChallengeNextLevel() if nextConfig then local currentGS= CTL.LevelSelect.GetSubjugateGsText(nextConfig.SubjugateDataPVE, currentGS) local currentGSShow=string.FormatByIdsKey("IDS_NewClimbTower_CombatPower", currentGS) --显示当前战力 UIUtils.SetLabel(self.txt_Now, currentGSShow) --显示 推荐战力 UIUtils.SetLabel(self.txt_Limit, string.FormatByIdsKey("IDS_NewClimbTower_RecommendCombatPower", tostring(data.Battle))) end end --点击爬塔挑战 function UIClimbTowerMainPanel:OnClickChallengeClimbTower() --全部通关了 if CTL.ClimbTower.IsPassedAllLevel() then CTL.Tips.AddTipsMsg(Const_IDS["IDS_NewClimbTower_LastLevel"]) return end --判断是否达到每日可挑战最高关卡 if CTL.ClimbTower.IsReachMaxChallengeLevelCountOfEveryDay() then --达到当日最高关卡数,提示 --获取距离刷新时间的秒数 local seconds= UTL.Time.GetServerIntervalTimeToRefresh(DayRefreshTimeId) ---超过一天返回天时分秒 否则返回时分秒 local text= UTL.Time.FormatTimeClockBySeconds(seconds) text = string.format(UIUtils.GetLocalizedTxt(Const_IDS.IDS_NewClimbTower_CrossDayTips),text) CTL.Tips.AddTipsMsg(text) else --判断能否挑战 local nextConfig= CTL.ClimbTower.GetNextLevelConfig() --是否在主城 if BattleDataGetter.IsOnlineTownLevel() then --判断是否在开放时间 if not CTL.ClimbTower.IsDuringOpenTime() then CTL.Tips.AddTipsMsg(CTL.ClimbTower.GetOpenTimeDesc()) return end --判断战力 local currentGS=MDL.Player.GetLineUpGs() local suggestGs=nextConfig.Battle --战力较小,且需要显示提示时,弹出二级确认框 if currentGS < suggestGs and CTL.ClimbTower.IsShowGSNotice() then UIManager.OpenView(Const_UI_Lua.UIEnum.UIClimbTowerNotice) else --进爬塔关 MDL.LevelSelect.EnterFuben(LuaConst.LevelType.ClimbTower, self.NextClimbTowerLevelId, nil, CTL.ClimbTower.GetClimbTowerLevelId(self.NextClimbTowerLevelId)) MDL.ClimbTower.SetFirstEnterLevelId(self.NextClimbTowerLevelId) end else --提示 CTL.Tips.AddTipsMsg(Const_IDS["IDS_NewClimbTower_SceneCheck"]) end end end return UIClimbTowerMainPanel