local TravelerDuelLevelSelectCtrl = class("TravelerDuelLevelSelectCtrl", BaseCtrl) local Actor2DManager = require("Game.Actor2D.Actor2DManager") local LocalSettingData = require("GameCore.Data.LocalSettingData") local Path = require("path") local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader") local ResTypeAny = GameResourceLoader.ResType.Any local typeof = typeof local mapToggle = { [0] = "Challenge", [1] = GameEnum.diffculty.Diffculty_1, [2] = GameEnum.diffculty.Diffculty_2, [3] = GameEnum.diffculty.Diffculty_3, [4] = GameEnum.diffculty.Diffculty_4 } TravelerDuelLevelSelectCtrl._mapNodeConfig = { aniRoot = { sNodeName = "----SafeAreaRoot----", sComponentName = "Animator" }, bgLevelInfo = {sNodeName = "----Bg----"}, rt_TravelerDuelSelect = {}, rt_TravelerDuelInfo = {}, RImagChar = {sComponentName = "RawImage"}, rt_ChallengeInfo = { sCtrlName = "Game.UI.TravelerDuelLevelSelect.TravelerDuelChallengeInfoCtrl" }, Skill = { sCtrlName = "Game.UI.TemplateEx.TemplateSkillCtrl", nCount = 5 }, btnSkill = { sNodeName = "Skill", sComponentName = "UIButton", nCount = 5, callback = "OnBtnClick_Skill" }, btnGo = { sComponentName = "UIButton", callback = "OnBtnClick_Go" }, svTravelerDuel = { sComponentName = "LoopScrollView" }, imgElementInfo = {sComponentName = "Image", nCount = 3}, TMPTravelerDesc = {sComponentName = "TMP_Text"}, TMPTravelerLevelNameNormal = {sComponentName = "TMP_Text"}, TMPRecommendBuildTitle = { sComponentName = "TMP_Text", sLanguageId = "InfinityTower_Recommend_Construct" }, imgReconmendBuild = {sComponentName = "Image"}, txtRecommendLevel = {sComponentName = "TMP_Text"}, TMPRewardCount = {sComponentName = "TMP_Text"}, TMPDuelLevel = {sComponentName = "TMP_Text"}, TMPDuelExp = {sComponentName = "TMP_Text"}, imgExpBarFillMask = { sComponentName = "RectTransform" }, item = { sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl", nCount = 5 }, ItemBtn = { sComponentName = "UIButton", nCount = 5, callback = "OnBtnClick_RewardItem" }, tog = { sComponentName = "UIButton", nCount = 4, callback = "OnBtnClick_Tog" }, imgLockMask = { sComponentName = "UIButton", callback = "OnBtnClick_TogTips", nCount = 4 }, togCtrl = { sNodeName = "tog", sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl", nCount = 4 }, TopBarPanel = { sCtrlName = "Game.UI.TopBarEx.TopBarCtrl" }, goEnemyInfo = { sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl" }, goRewardList = { sCtrlName = "Game.UI.MainlineEx.RewardListCtrl" }, btnAllReward = { sComponentName = "UIButton", callback = "OnBtnClick_RewardList" }, txtEnergyCount = {sComponentName = "TMP_Text"}, TMPTitleShop = { sComponentName = "TMP_Text", sLanguageId = "TD_ShopTitle" }, TMPTitleQuest = { nCount = 2, sComponentName = "TMP_Text", sLanguageId = "TD_QusetTitle" }, TMPDuelLevelTitle = { sComponentName = "TMP_Text", sLanguageId = "TD_LevelTitle" }, TMPRewardHint = {sComponentName = "TMP_Text"}, rt_LevelInfo = { sCtrlName = "Game.UI.TravelerDuelLevelSelect.TravelerDuelLevelInfoCtrl" }, btnLevel = { sComponentName = "UIButton", callback = "OnBtnClick_Level" }, btnDuelQuestMain = { sComponentName = "UIButton", callback = "OnBtnClick_Quest" }, btnDuelShopMain = { sComponentName = "UIButton", callback = "OnBtnClick_Shop" }, btnEnemyInfoChallenge = { sComponentName = "UIButton", callback = "OnBtnClick_EnemyInfo" }, rtCoverRoot = {sComponentName = "Transform"}, redDotDuelQuest1 = {}, btnRankingDetail = { sComponentName = "UIButton", callback = "OnBtnClick_OpenRankingInfo" }, TDRankingPanel = { sCtrlName = "Game.UI.TravelerDuelLevelSelect.TravelerDuelRanking.TravelerDuelRankingCtrl" }, TMPNpcName = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_NPC2" }, TMPSubTitle = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_NPC1" }, TMPSubName = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_NPC3" }, TMPNpcTime = {sComponentName = "TMP_Text"}, TMPNpcDate = {sComponentName = "TMP_Text"}, TMPTitleChallenge = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_ChallengeTitle" }, TMPTitleChallengel = { sComponentName = "TMP_Text", sLanguageId = "TravelerDuel_NormalTitle" }, OffScreen3DCameraNpc = {sComponentName = "Camera"}, rimgNpc = {sComponentName = "RawImage"}, goNpcPos = {}, SpriteNpc = { sComponentName = "SpriteRenderer" }, SpriteNpcFace = { sComponentName = "SpriteRenderer" }, rtOffscreen = { sNodeName = "----Actor2D_OffScreen_Renderer----", sComponentName = "Transform" }, txtRecommendLevelTitle = { sComponentName = "TMP_Text", sLanguageId = "InfinityTower_Recommend_Lv" }, txtTitleSkill = { sComponentName = "TMP_Text", sLanguageId = "RegusBoss_Enemy_Skill" }, txtTitleReward = { sComponentName = "TMP_Text", sLanguageId = "Level_Award" }, txtBtnAllReward = { sComponentName = "TMP_Text", sLanguageId = "Mall_Btn_All" }, txtBtnGo = { sComponentName = "TMP_Text", sLanguageId = "Maninline_Btn_Go" } } TravelerDuelLevelSelectCtrl._mapEventConfig = { [EventId.UIHomeConfirm] = "OnEvent_Home", [EventId.UIBackConfirm] = "OnEvent_Back", [EventId.UpdateWorldClass] = "OnEvent_UpdateWorldClass" } TravelerDuelLevelSelectCtrl._mapRedDotConfig = { [RedDotDefine.Map_TravelerDuel] = { sNodeName = "redDotDuelQuest1" } } function TravelerDuelLevelSelectCtrl:Awake() self.mapLevelGrid = {} self.mapBossDefaultHard = {} self.mapBossMaxHard = {} end function TravelerDuelLevelSelectCtrl:FadeIn() end function TravelerDuelLevelSelectCtrl:FadeOut() EventManager.Hit(EventId.SetTransition) end function TravelerDuelLevelSelectCtrl:OnEnable() local month = os.date("%m") local day = os.date("%d") local hour = os.date("%H") local min = os.date("%M") NovaAPI.SetTMPText(self._mapNode.TMPNpcDate, string.format("%s/%s", month, day)) NovaAPI.SetTMPText(self._mapNode.TMPNpcTime, string.format("%s:%s", hour, min)) if nil == self.npcTimer then self.npcTimer = self:AddTimer(0, 1, function() local month = os.date("%m") local day = os.date("%d") local hour = os.date("%H") local min = os.date("%M") NovaAPI.SetTMPText(self._mapNode.TMPNpcDate, string.format("%s/%s", month, day)) NovaAPI.SetTMPText(self._mapNode.TMPNpcTime, string.format("%s:%s", hour, min)) end, true, true, true) end local windowResolution = CS.ClientManager.Instance.currentWindowResolution local scaleFactor = math.min(windowResolution.x / 2160, windowResolution.y / 1080) local fixedScale = windowResolution.x / scaleFactor * windowResolution.y / scaleFactor / 2332800 self._mapNode.rtOffscreen.localScale = Vector3(fixedScale, fixedScale, fixedScale) self._mapNode.rimgNpc.gameObject:GetComponent("RectTransform").sizeDelta = Vector2(Settings.CURRENT_CANVAS_FULL_RECT_WIDTH, Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT) self._mapNode.OffScreen3DCameraNpc.orthographicSize = Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT / 200 local nW = math.floor(Settings.CURRENT_CANVAS_FULL_RECT_WIDTH * Settings.RENDERTEXTURE_SIZE_FACTOR) local nH = math.floor(Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT * Settings.RENDERTEXTURE_SIZE_FACTOR) self._NpcRenderTexture = GameUIUtils.GenerateRenderTextureFor2D(nW, nH) self._NpcRenderTexture.name = "TravelerDuelLevelSelect" self._mapNode.OffScreen3DCameraNpc.targetTexture = self._NpcRenderTexture NovaAPI.SetTexture(self._mapNode.rimgNpc, self._NpcRenderTexture) if self.goNpc ~= nil then destroy(self.goNpc) end self.goNpc = nil local mapSkinData = ConfigTable.GetData("NPCSkin", 917202) if mapSkinData ~= nil then if LocalSettingData.mapData.UseLive2D then self.goNpc = self:CreatePrefabInstance(mapSkinData.L2D, self._mapNode.goNpcPos.transform) self.goNpc.transform:SetLayerRecursively(CS.UnityEngine.LayerMask.NameToLayer("Cam_Layer_4")) Actor2DManager.PlayL2DAnim(self.goNpc.transform, "idle", true, true) else local sFileFullName = Path.basename(mapSkinData.Portrait) local sFileExtName = Path.extension(mapSkinData.Portrait) local sFileName = string.gsub(sFileFullName, sFileExtName, "") sFileName = string.gsub(sFileName, "_a", "") local sBodyName = string.format("%s_%s", sFileName, "001") local sFaceName = string.format("%s_%s", sFileName, "002") local LoadSprite = function(sPath, sName) local _sPath = string.format("%s/atlas_png/a/%s.png", Path.dirname(sPath), sName) return self:LoadAsset(_sPath, typeof(Sprite)) end NovaAPI.SetSpriteRendererSprite(self._mapNode.SpriteNpc, LoadSprite(mapSkinData.Portrait, sBodyName)) NovaAPI.SetSpriteRendererSprite(self._mapNode.SpriteNpcFace, LoadSprite(mapSkinData.Portrait, sFaceName)) end end local GetRankingCallback = function() EventManager.Hit(EventId.SetTransition) local mapSelfRankingData, _, LastRankingRefreshTime, _ = PlayerData.TravelerDuel:GetTDRankingData() self.mapSelfRankingData = mapSelfRankingData local nNextRefreshTime = LastRankingRefreshTime + PlayerData.TravelerDuel.rankingRefreshTime if self.rankingRefrehTimer ~= nil then self.rankingRefrehTimer:Cancel() self.rankingRefrehTimer = nil end local nCountTime = nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp if 0 < nCountTime then self.rankingRefrehTimer = self:AddTimer(1, nCountTime, "OnTimer_RefreshRanking", true, true, true, nil) else end end local _, _, LastRefreshTime, _ = PlayerData.TravelerDuel:GetTDRankingData() if LastRefreshTime == 0 then PlayerData.TravelerDuel:SendMsg_GetTravelerDuelRanking(GetRankingCallback) else local curTimeStamp = CS.ClientManager.Instance.serverTimeStamp local sum = curTimeStamp - LastRefreshTime if sum < PlayerData.TravelerDuel.rankingRefreshTime then GetRankingCallback() else PlayerData.TravelerDuel:SendMsg_GetTravelerDuelRanking(GetRankingCallback) end end self._mapNode.rt_TravelerDuelSelect:SetActive(true) self._mapNode.TopBarPanel:SetCoinVisible(true) self._mapNode.rt_TravelerDuelInfo:SetActive(false) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(false) self.nDuelLevel, self.nDuelExp = PlayerData.TravelerDuel:GetTravelerDuelLevel() self.mapChallenge = PlayerData.TravelerDuel:GetTravelerDuelChallenge() local nTotalExp = 0 if ConfigTable.GetData("TravelerDuelLevel", self.nDuelLevel + 1) ~= nil then nTotalExp = ConfigTable.GetData("TravelerDuelLevel", self.nDuelLevel + 1).LevelUpExp end self.nCurChallengeBossId = 0 if self.mapChallenge.nIdx == 0 then self.nCurChallengeBossId = 0 else self.nCurChallengeBossId = ConfigTable.GetData("TravelerDuelChallengeSeason", self.mapChallenge.nIdx).BossId end NovaAPI.SetTMPText(self._mapNode.TMPDuelLevel, self.nDuelLevel) local nFullLength = 514 local nFullHeight = 38 if 0 < nTotalExp then NovaAPI.SetTMPText(self._mapNode.TMPDuelExp, string.format("%d/%d", self.nDuelExp, nTotalExp)) self._mapNode.imgExpBarFillMask.sizeDelta = Vector2(nFullLength * (self.nDuelExp / nTotalExp), nFullHeight) else NovaAPI.SetTMPText(self._mapNode.TMPDuelExp, "Max") self._mapNode.imgExpBarFillMask.sizeDelta = Vector2(nFullLength, nFullHeight) end local tbParam = self:GetPanelParam() if 0 < #tbParam then if tbParam[3] == nil then end self.bJumpto = tbParam[3] self.nJumptoHard = tbParam[1] == nil and 0 or tbParam[1] self.nJumptoGroup = tbParam[2] == nil and 0 or tbParam[2] end local tbCachedAffix, nCachedBossId = PlayerData.TravelerDuel:GetCacheAffixids() if nCachedBossId ~= nil and nCachedBossId ~= 0 then self.bJumpto = false self.nJumptoHard = 0 self.nJumptoGroup = 0 end self._mapNode.rt_TravelerDuelInfo:SetActive(false) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(false) self._mapNode.bgLevelInfo:SetActive(false) self.curState = 1 self.curSelectHard = GameEnum.diffculty.Diffculty_1 self.nCurGroupId = 0 self.mapAllTravelerDuel = {} self.tbTravelerGroup = {} local forEachTravelerDuel = function(mapData) if self.mapAllTravelerDuel[mapData.BossId] == nil then if mapData.Difficulty ~= 0 or mapData.BossId == self.nCurChallengeBossId then self.mapAllTravelerDuel[mapData.BossId] = {} if mapData.BossId ~= self.nCurChallengeBossId then table.insert(self.tbTravelerGroup, mapData.BossId) end else return end end self.mapAllTravelerDuel[mapData.BossId][mapData.Difficulty] = mapData end ForEachTableLine(DataTable.TravelerDuelBossLevel, forEachTravelerDuel) self:InitBossMaxHard() local sortBoss = function(a, b) local mapBossA = ConfigTable.GetData("TravelerDuelBoss", a) local mapBossB = ConfigTable.GetData("TravelerDuelBoss", b) if mapBossA.TravelerDuelBossType ~= mapBossB.TravelerDuelBossType then return mapBossA.TravelerDuelBossType < mapBossB.TravelerDuelBossType end return mapBossA.Id < mapBossB.Id end table.sort(self.tbTravelerGroup, sortBoss) self._mapNode.svTravelerDuel:Init(#self.tbTravelerGroup, self, self.RefreshGrid, self.OnBtnClick_Grid) if self.nCurChallengeBossId ~= 0 then self._mapNode.rtCoverRoot.gameObject:SetActive(true) local mapLevelCfgData = ConfigTable.GetData("TravelerDuelBoss", self.nCurChallengeBossId) local nLevelId = self.mapAllTravelerDuel[self.nCurChallengeBossId][0].Id local coverPrefab = self:LoadAsset(string.format("%s.prefab", mapLevelCfgData.Cover)) local goCover = instantiate(coverPrefab, self._mapNode.rtCoverRoot) local ctrlCover = self:BindCtrlByNode(goCover, "Game.UI.TravelerDuelLevelSelect.TDCoverCtrl") ctrlCover:Refresh(self.mapChallenge, nLevelId, function() self:OnBtnClick_Challenge() end, false) else self._mapNode.rtCoverRoot.gameObject:SetActive(true) local mapLevelCfgData = ConfigTable.GetData("TravelerDuelBoss", 1001) local nLevelId = 1001 local coverPrefab = self:LoadAsset(string.format("%s.prefab", mapLevelCfgData.Cover)) local goCover = instantiate(coverPrefab, self._mapNode.rtCoverRoot) local ctrlCover = self:BindCtrlByNode(goCover, "Game.UI.TravelerDuelLevelSelect.TDCoverCtrl") ctrlCover:Refresh(self.mapChallenge, nLevelId, function() self:OnBtnClick_Challenge() end, false) end if self.nJumptoGroup ~= 0 and self.nJumptoGroup ~= nil then if self.nJumptoHard ~= 0 and self.nJumptoHard ~= nil then self:OpenJumptoHard() else self:OpenJumptoGroup() end end if nCachedBossId ~= nil and nCachedBossId ~= 0 then self.curState = 2 self.nCurGroupId = nCachedBossId local nLevelId = self.mapAllTravelerDuel[self.nCurGroupId][0].Id self._mapNode.rt_ChallengeInfo:Refresh(nLevelId) self._mapNode.rt_TravelerDuelSelect:SetActive(false) self._mapNode.TopBarPanel:SetCoinVisible(false) self._mapNode.rt_TravelerDuelInfo:SetActive(false) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(true) self._mapNode.bgLevelInfo:SetActive(true) end local totalRewardCount = ConfigTable.GetConfigValue("TravelerDuelWeeklyAwardLimit") local nRewardCount = PlayerData.TravelerDuel:GetTravelerDuelLevelRewardCount() nRewardCount = -1 < nRewardCount and totalRewardCount - nRewardCount or totalRewardCount if nRewardCount == nil then nRewardCount = 0 end if nRewardCount < 0 then nRewardCount = 0 end NovaAPI.SetTMPText(self._mapNode.TMPRewardCount, orderedFormat(ConfigTable.GetUIText("TD_WeekRewardTimes"), math.floor(nRewardCount), totalRewardCount)) self._mapNode.aniRoot:Play("TravelerDuelSelect_in") end function TravelerDuelLevelSelectCtrl:OnDisable() self:UnbindAllGrids() if self.rankingRefrehTimer ~= nil then self.rankingRefrehTimer:Cancel() self.rankingRefrehTimer = nil end if nil ~= self.npcTimer then self.npcTimer:Cancel() self.npcTimer = nil end self._mapNode.OffScreen3DCameraNpc.targetTexture = nil NovaAPI.SetTexture(self._mapNode.rimgNpc, nil) if self._NpcRenderTexture ~= nil then GameUIUtils.ReleaseRenderTexture(self._NpcRenderTexture) self._NpcRenderTexture = nil end if self.goNpc ~= nil then destroy(self.goNpc) self.goNpc = nil end end function TravelerDuelLevelSelectCtrl:OnDestroy() end function TravelerDuelLevelSelectCtrl:OnRelease() end function TravelerDuelLevelSelectCtrl:RefreshGrid(goGrid, gridIndex) if self.mapLevelGrid[goGrid] == nil then self.mapLevelGrid[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.TravelerDuelLevelSelect.TravelerDuelLevelGridCtrl") end local nIdx = gridIndex + 1 local nBossId = self.tbTravelerGroup[nIdx] local nLevelId = self.mapAllTravelerDuel[nBossId][mapToggle[1]].Id self.mapLevelGrid[goGrid]:Refresh(nBossId, nLevelId) end function TravelerDuelLevelSelectCtrl:UnbindAllGrids() for go, mapCtrl in ipairs(self.mapLevelGrid) do self:UnbindCtrlByNode(mapCtrl) end self.mapLevelGrid = {} delChildren(self._mapNode.rtCoverRoot) end function TravelerDuelLevelSelectCtrl:OpenJumptoGroup() self.curState = 2 self.nCurGroupId = self.nJumptoGroup local mapBossCfgData = ConfigTable.GetData("TravelerDuelBoss", self.nCurGroupId) if mapBossCfgData == nil then printError("TravelerDuelBoss Data Missing:" .. self.nCurGroupId) return end if mapBossCfgData.TravelerDuelBossType == GameEnum.travelerDuelBossType.NORMAL then local nHard = self:GetMaxTravelerDuelHard(self.nCurGroupId) self:RefreshTravelerDuelInfo(self.nCurGroupId, nHard) self._mapNode.rt_TravelerDuelInfo:SetActive(true) self._mapNode.rt_TravelerDuelSelect:SetActive(false) self._mapNode.TopBarPanel:SetCoinVisible(false) self._mapNode.rt_ChallengeInfo.gameObject:SetActive(false) self._mapNode.bgLevelInfo:SetActive(true) else local nLevelId = self.mapAllTravelerDuel[self.nCurGroupId][0].Id self._mapNode.rt_ChallengeInfo:Refresh(nLevelId) self._mapNode.rt_TravelerDuelInfo:SetActive(false) self._mapNode.TopBarPanel:SetCoinVisible(false) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(true) self._mapNode.bgLevelInfo:SetActive(true) end end function TravelerDuelLevelSelectCtrl:OpenJumptoHard() self.curState = 2 self.nCurGroupId = self.nJumptoGroup local nJumptoDuelId = self.mapAllTravelerDuel[self.nCurGroupId][self.nJumptoHard].Id if not PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(nJumptoDuelId) then self.nJumptoHard = GameEnum.diffculty.Diffculty_1 end self:RefreshTravelerDuelInfo(self.nCurGroupId, self.nJumptoHard) self._mapNode.rt_TravelerDuelInfo:SetActive(true) self._mapNode.rt_TravelerDuelSelect:SetActive(false) self._mapNode.TopBarPanel:SetCoinVisible(false) self._mapNode.bgLevelInfo:SetActive(true) end function TravelerDuelLevelSelectCtrl:OnBtnClick_Grid(goGrid, gridIndex) local nIdx = gridIndex + 1 local nBossId = self.tbTravelerGroup[nIdx] self.curState = 2 self.nCurGroupId = nBossId self._panel._tbParam[2] = nBossId self.mapBossDefaultHard = {} local nHard = self:GetMaxTravelerDuelHard(nBossId) local mapBosslevel = self.mapAllTravelerDuel[self.nCurGroupId][mapToggle[1]] local nBossLevelId = mapBosslevel.Id local bUnlock, sTip = PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(nBossLevelId) if not bUnlock then EventManager.Hit(EventId.OpenMessageBox, sTip) return end self:RefreshTravelerDuelInfo(nBossId, nHard) self._mapNode.rt_TravelerDuelInfo:SetActive(true) self:AddTimer(1, 0.6, function() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(false) end, true, true, true) self._mapNode.TopBarPanel:SetCoinVisible(false) self._mapNode.bgLevelInfo:SetActive(true) self._mapNode.aniRoot:Play("TravelerDuelInfo_in") EventManager.Hit("TDLevelSelectOut") EventManager.Hit(EventId.TemporaryBlockInput, 0.6) end function TravelerDuelLevelSelectCtrl:RefreshLevelUnlock() for index, hardBtn in ipairs(self._mapNode.tog) do local bActive = self.mapAllTravelerDuel[self.nCurGroupId][mapToggle[index]] ~= nil hardBtn.gameObject:SetActive(bActive) if bActive then local nBossId = self.mapAllTravelerDuel[self.nCurGroupId][mapToggle[index]].Id local bLock = PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(nBossId) hardBtn.interactable = bLock self._mapNode.imgLockMask[index].gameObject:SetActive(not bLock) self._mapNode.imgLockMask[index].interactable = not bLock local tmpTitle = self._mapNode.togCtrl[index].gameObject.transform:Find("AnimRoot/AnimSwitch/txt_Select"):GetComponent("TMP_Text") local tmpTitle1 = self._mapNode.togCtrl[index].gameObject.transform:Find("AnimRoot/AnimSwitch/txt_unSelect"):GetComponent("TMP_Text") NovaAPI.SetTMPText(tmpTitle, ConfigTable.GetUIText("Diffculty_" .. index)) NovaAPI.SetTMPText(tmpTitle1, ConfigTable.GetUIText("Diffculty_" .. index)) for j = 1, 3 do local btnStar = self._mapNode.togCtrl[index].gameObject.transform:Find("rtLockInfo/rt_Targets/btnTarget" .. j):GetComponent("Button") btnStar.gameObject:SetActive(false) end end end end function TravelerDuelLevelSelectCtrl:RefreshTravelerDuelInfo(nGroupId, nHard) self:RefreshLevelUnlock() for i = 1, 4 do self._mapNode.togCtrl[i]:SetDefault(i == nHard) end self.curSelectHard = nHard self._panel._tbParam[1] = 0 local mapTravelerDuelData = self.mapAllTravelerDuel[nGroupId][nHard] self.TravelerDuel = mapTravelerDuelData.Id if mapTravelerDuelData == nil then return end NovaAPI.SetTMPText(self._mapNode.TMPTravelerLevelNameNormal, mapTravelerDuelData.Name) NovaAPI.SetTMPText(self._mapNode.TMPTravelerDesc, mapTravelerDuelData.Desc) local rBuildRank = mapTravelerDuelData.RecommendBuildRank local sScore = "Icon/BuildRank/BuildRank_" .. rBuildRank self:SetPngSprite(self._mapNode.imgReconmendBuild, sScore) local nCharId = math.floor(mapTravelerDuelData.SkinId / 100) if self.nCurSkinId ~= mapTravelerDuelData.SkinId then self.nCurSkinId = mapTravelerDuelData.SkinId local bSuc, nType, nAnimLen = Actor2DManager.SetActor2D(self:GetPanelId(), self._mapNode.RImagChar, nCharId, mapTravelerDuelData.SkinId) end for i = 1, 3 do if mapTravelerDuelData.EET == nil or mapTravelerDuelData.EET[i] == nil then self._mapNode.imgElementInfo[i].gameObject:SetActive(false) else self._mapNode.imgElementInfo[i].gameObject:SetActive(true) self:SetAtlasSprite(self._mapNode.imgElementInfo[i], "12_rare", AllEnum.ElementIconType.Icon .. mapTravelerDuelData.EET[i]) end end local tbReward = decodeJson(mapTravelerDuelData.BaseAwardPreview) self.tbReward = tbReward local tbShowReward = {} local curLevelStar = PlayerData.TravelerDuel:GetTravelerDuelLevelStar(self.TravelerDuel) for _, tbValue in ipairs(tbReward) do local nLastIndex = #tbValue if not (0 < curLevelStar) or tbValue[nLastIndex] ~= 1 and tbValue[nLastIndex] ~= 2 then table.insert(tbShowReward, tbValue) end end for index = 1, 4 do self._mapNode.ItemBtn[index].interactable = tbShowReward[index] ~= nil if tbShowReward[index] ~= nil then local nLastIndex = #tbShowReward[index] self._mapNode.item[index]:SetItem(tbShowReward[index][1], nil, UTILS.ParseRewardItemCount(tbShowReward[index]), nil, false, tbShowReward[index][nLastIndex] == 1, tbShowReward[index][nLastIndex] == 2, true) else self._mapNode.item[index]:SetItem(nil) end end self.tbExtraDropReward = {} self._mapNode.ItemBtn[5].interactable = mapTravelerDuelData.ExtraDropPreview ~= nil and 0 < #mapTravelerDuelData.ExtraDropPreview if mapTravelerDuelData.ExtraDropPreview ~= nil and 0 < #mapTravelerDuelData.ExtraDropPreview then self._mapNode.item[5]:SetItem(mapTravelerDuelData.ExtraDropPreview[1], nil, nil, nil, false, false, false, false, false, false, true) local countTxt = "" if mapTravelerDuelData.ExtraDropPreview[2] == mapTravelerDuelData.ExtraDropPreview[3] then countTxt = mapTravelerDuelData.ExtraDropPreview[2] else countTxt = mapTravelerDuelData.ExtraDropPreview[2] .. "~" .. mapTravelerDuelData.ExtraDropPreview[3] end local txtCount = self._mapNode.item[5].gameObject.transform:Find("--Common--/txtCount"):GetComponent("TMP_Text") local txtX = txtCount.transform:Find("txtX") txtCount.gameObject:SetActive(0 < mapTravelerDuelData.ExtraDropPreview[2]) txtX.gameObject:SetActive(mapTravelerDuelData.ExtraDropPreview[2] == mapTravelerDuelData.ExtraDropPreview[3]) self.tbExtraDropReward = mapTravelerDuelData.ExtraDropPreview NovaAPI.SetTMPText(txtCount, countTxt) else self._mapNode.item[5]:SetItem(nil) end local tbSkill = mapTravelerDuelData.SkillShow for i = 1, 5 do if i <= #tbSkill then self._mapNode.Skill[i].gameObject:SetActive(true) self._mapNode.Skill[i]:SetTravelerDuelSkill(tbSkill[i]) else self._mapNode.Skill[i].gameObject:SetActive(false) end end NovaAPI.SetTMPText(self._mapNode.txtRecommendLevel, mapTravelerDuelData.SuggestedPower) local totalRewardCount = ConfigTable.GetConfigValue("TravelerDuelWeeklyAwardLimit") local nRewardCount = PlayerData.TravelerDuel:GetTravelerDuelLevelRewardCount(nGroupId) if curLevelStar <= 0 then NovaAPI.SetTMPText(self._mapNode.TMPRewardHint, ConfigTable.GetUIText("TD_FreeReward")) else local nShowCount = totalRewardCount - nRewardCount if 0 < nShowCount then NovaAPI.SetTMPText(self._mapNode.TMPRewardHint, string.format("%s %d/%d", ConfigTable.GetUIText("TD_WeekRewardTimes_Title"), nShowCount, totalRewardCount)) else NovaAPI.SetTMPText(self._mapNode.TMPRewardHint, string.format("%s %d/%d", ConfigTable.GetUIText("TD_WeekRewardTimes_Title"), 0, totalRewardCount)) end end end function TravelerDuelLevelSelectCtrl:GetMaxTravelerDuelHard(nBossId) local retHard = 1 if self.mapAllTravelerDuel[nBossId] == nil then printError("BossId Error:" .. nBossId) return 1 end if self.mapBossDefaultHard[nBossId] ~= nil then return self.mapBossDefaultHard[nBossId] end for nHard, mapBossLevel in pairs(self.mapAllTravelerDuel[nBossId]) do if PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(mapBossLevel.Id) then retHard = math.max(nHard, retHard) end end return retHard end function TravelerDuelLevelSelectCtrl:OnEvent_Back(nPanelId) if self._panel._nPanelId ~= nPanelId then return end self._mapNode.rt_ChallengeInfo:CacheAffixes() PlayerData.TravelerDuel:SetCacheAffixids(nil, nil) if self.bJumpto then EventManager.Hit(EventId.CloesCurPanel) return end if self.curState == 1 then EventManager.Hit(EventId.CloesCurPanel) else self.curSelectHard = GameEnum.diffculty.Diffculty_1 self.nCurGroupId = 0 self.curState = 1 self._panel._tbParam[2] = 0 self._panel._tbParam[1] = 0 self:AddTimer(1, 0.5, function() self._mapNode.rt_TravelerDuelInfo:SetActive(false) self._mapNode.rt_TravelerDuelSelect:SetActive(true) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() self._mapNode.rt_ChallengeInfo.gameObject:SetActive(false) self._mapNode.rt_ChallengeInfo:ClearListGrids(false) self._mapNode.bgLevelInfo:SetActive(false) self._mapNode.aniRoot:Play("TravelerDuelSelect_in") self._mapNode.TopBarPanel:SetCoinVisible(true) EventManager.Hit("TDLevelSelectIn", 1) end, true, true, true) EventManager.Hit(EventId.TemporaryBlockInput, 1.2) end end function TravelerDuelLevelSelectCtrl:OnEvent_Home(nPanelId) if self._panel._nPanelId ~= nPanelId then return end self._mapNode.rt_ChallengeInfo:CacheAffixes() PlayerData.TravelerDuel:SetCacheAffixids(nil, nil) PanelManager.Home() end function TravelerDuelLevelSelectCtrl:OnEvent_UpdateWorldClass() self:RefreshLevelUnlock() end function TravelerDuelLevelSelectCtrl:OnBtnClick_Go() self.mapBossDefaultHard[self.nCurGroupId] = self.curSelectHard local OpenPanel = function() EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossFormation, AllEnum.RegionBossFormationType.TravelerDuel, self.TravelerDuel, {}) end EventManager.Hit(EventId.SetTransition, 2, OpenPanel) end function TravelerDuelLevelSelectCtrl:OnBtnClick_Tog(btn) local nHard = table.indexof(self._mapNode.tog, btn:GetComponent("UIButton")) local togIdx = table.indexof(self._mapNode.tog, btn) if nHard == nil then return end if self.curSelectHard ~= nHard then for idx, value in pairs(mapToggle) do if value == self.curSelectHard then self._mapNode.togCtrl[idx]:SetTrigger(false) end end self._mapNode.togCtrl[togIdx]:SetTrigger(true) self:RefreshTravelerDuelInfo(self.nCurGroupId, nHard) end end function TravelerDuelLevelSelectCtrl:OnBtnClick_RewardList(btn) local mapLevel = ConfigTable.GetData("TravelerDuelBossLevel", self.TravelerDuel) local tbReward = decodeJson(mapLevel.BaseAwardPreview) local curLevelStar = PlayerData.TravelerDuel:GetTravelerDuelLevelStar(self.TravelerDuel) for _, tbValue in ipairs(tbReward) do local nLastIndex = #tbValue if 0 < curLevelStar and tbValue[nLastIndex] == 1 or curLevelStar == 3 and tbValue[nLastIndex] == 2 then table.insert(tbValue, true) end end self._mapNode.goRewardList:OpenPanel(tbReward, self.tbExtraDropReward) end function TravelerDuelLevelSelectCtrl:OnBtnClick_RewardItem(btn) local nIdx = table.indexof(self._mapNode.ItemBtn, btn) if nIdx == 5 then if self.tbExtraDropReward == nil then return end local nTid = self.tbExtraDropReward[1] if nTid == nil then return end local rtBtn = btn.transform UTILS.ClickItemGridWithTips(nTid, rtBtn, false, true, false) return end local mapLevel = ConfigTable.GetData("TravelerDuelBossLevel", self.TravelerDuel) local tbReward = decodeJson(mapLevel.BaseAwardPreview) local tbShowReward = {} local curLevelStar = PlayerData.TravelerDuel:GetTravelerDuelLevelStar(self.TravelerDuel) for _, tbValue in ipairs(tbReward) do local nLastIndex = #tbValue if not (0 < curLevelStar) or tbValue[nLastIndex] ~= 1 and tbValue[nLastIndex] ~= 2 then table.insert(tbShowReward, tbValue) end end tbReward = tbShowReward local rtBtn = btn.transform if tbReward[nIdx] ~= nil then local nTid = tbReward[nIdx][1] UTILS.ClickItemGridWithTips(nTid, rtBtn, false, true, false) end end function TravelerDuelLevelSelectCtrl:OnBtnClick_TogTips(btn, nidx) local nBossId = self.mapAllTravelerDuel[self.nCurGroupId][mapToggle[nidx]].Id local bUnLock, sMsg = PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(nBossId) if not bUnLock then EventManager.Hit(EventId.OpenMessageBox, sMsg) end end function TravelerDuelLevelSelectCtrl:OnBtnClick_Skill(btn, nidx) local mapTravelerDuelData = self.mapAllTravelerDuel[self.nCurGroupId][self.curSelectHard] local nSkillId = mapTravelerDuelData.SkillShow[nidx] if nSkillId ~= 0 then local mapData = {nSkillId = nSkillId, bTravelerDuel = true} EventManager.Hit(EventId.OpenPanel, PanelId.SkillTips, btn.transform, mapData) end end function TravelerDuelLevelSelectCtrl:OnBtnClick_Level(btn) self._mapNode.rt_LevelInfo:Show() end function TravelerDuelLevelSelectCtrl:OnBtnClick_Quest(btn) self:AddTimer(1, 0.2, function() EventManager.Hit(EventId.OpenPanel, PanelId.TravelerDuelLevelQuestPanel) self._panel._nFadeInType = 2 end, true, true, true) self._mapNode.aniRoot:Play("TravelerDuelTask") end function TravelerDuelLevelSelectCtrl:OnBtnClick_Shop(btn) EventManager.Hit(EventId.OpenPanel, PanelId.ShopPanel, 2) self._panel._nFadeInType = 2 end function TravelerDuelLevelSelectCtrl:OnBtnClick_EnemyInfo() local nLevelId = self.mapAllTravelerDuel[self.nCurGroupId][0].Id EventManager.Hit("OpenTravelerDuelMonsterInfo", nLevelId) end function TravelerDuelLevelSelectCtrl:OnTimer_RefreshRanking() local callback = function() local mapSelfRankingData, _, LastRankingRefreshTime, _ = PlayerData.TravelerDuel:GetTDRankingData() self.mapSelfRankingData = mapSelfRankingData local nNextRefreshTime = LastRankingRefreshTime + PlayerData.TravelerDuel.rankingRefreshTime if self.rankingRefrehTimer ~= nil then self.rankingRefrehTimer:Cancel() self.rankingRefrehTimer = nil end self.rankingRefrehTimer = self:AddTimer(1, nNextRefreshTime - CS.ClientManager.Instance.serverTimeStamp, "OnTimer_RefreshRanking", true, true, true, nil) end PlayerData.TravelerDuel:SendMsg_GetTravelerDuelRanking(callback) end function TravelerDuelLevelSelectCtrl:OnBtnClick_Challenge(btn) self.curState = 2 self.nCurGroupId = self.nCurChallengeBossId self._panel._tbParam[2] = self.nCurChallengeBossId local nLevelId = self.mapAllTravelerDuel[self.nCurGroupId][0].Id self._mapNode.rt_ChallengeInfo:Refresh(nLevelId) self._mapNode.rt_ChallengeInfo.gameObject:SetActive(true) self:AddTimer(1, 0.6, function() self._mapNode.rt_TravelerDuelInfo:SetActive(false) self.nCurSkinId = nil Actor2DManager.UnsetActor2D() end, true, true, true) self._mapNode.bgLevelInfo:SetActive(true) self._mapNode.aniRoot:Play("ChallengeInfo_in") self._mapNode.TopBarPanel:SetCoinVisible(false) EventManager.Hit(EventId.TemporaryBlockInput, 0.6) end function TravelerDuelLevelSelectCtrl:OnBtnClick_OpenRankingInfo(btn) self._mapNode.TDRankingPanel:OpenPanel() end function TravelerDuelLevelSelectCtrl:InitBossMaxHard() for nBossId, mapLevels in pairs(self.mapAllTravelerDuel) do local nNewHard = 0 for nHard, mapBossLevel in pairs(mapLevels) do if PlayerData.TravelerDuel:GetTravelerDuelLevelUnlock(mapBossLevel.Id) then nNewHard = math.max(nHard, nNewHard) end end if self.mapBossMaxHard ~= nil and self.mapBossMaxHard[nBossId] ~= nNewHard then self.mapBossMaxHard[nBossId] = nNewHard self.mapBossDefaultHard[nBossId] = nNewHard end end end return TravelerDuelLevelSelectCtrl