local NationClimbTower_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') local nationTowerUnlockLevelID = DataSheetManager.ConstData:GetDataByID("NationClimbTowerUnlock").IntValue local OpenDayIDS = { [1] = "IDS_NationClimbTower_OpenTime1", [2] = "IDS_NationClimbTower_OpenTime2", [3] = "IDS_NationClimbTower_OpenTime3", [4] = "IDS_NationClimbTower_OpenTime4", } local FormationHeroSlotUnlockIDS = { [1] = "IDS_NationClimbTower_WeiUnlock", [2] = "IDS_NationClimbTower_ShuUnlock", [3] = "IDS_NationClimbTower_WuUnlock", [4] = "IDS_NationClimbTower_QunUnlock", } NationClimbTower_Controller.RewardState = { NotReach = 0, Available = 1, Received = 2, } NationClimbTower_Controller.RankTypeIDIndexTower = { [MDL.Rank.RankType.NationClimbTowerWei] = 1, [MDL.Rank.RankType.NationClimbTowerShu] = 2, [MDL.Rank.RankType.NationClimbTowerWu] = 3, [MDL.Rank.RankType.NationClimbTowerQun] = 4, } function NationClimbTower_Controller.OnStartup() EventSystem.Regist(EventID.CharacterTeamGsChange, private.OnHeroGsChanged) EventSystem.Regist(EventID.UI_UpdateFastLevelPassRewards, private.RefreshTowerProgressRed) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.RefreshNationRed) EventSystem.Regist(EventID.UI_UpdateNationClimbTowerInfo, private.RefreshLineupGsRed) EventSystem.Regist(EventID.UI_FreeLineUp_RefreshUI, private.RefreshLineupGsRed) EventSystem.Regist(EventID.FunctionUnlockUpdate, private.RefreshRedByFunctionUnlock) end function NationClimbTower_Controller.GetNationClimbTowerUnlockDes() local openType, openLv = MDL.NationClimbTower.GetTowerOpenInfo() local towerMainStoryUnlockData = MDL.NationClimbTower.GetTowerConfigData(openType).Unlock_Table[1] local _, unlockDes = MDL.Unlock.PassedLevel(towerMainStoryUnlockData.UnlockConditionParam, towerMainStoryUnlockData.UnlockDes) local unlockText = string.FormatByIdsId( Const_IDS["IDS_NationClimbTower_Unlock"], unlockDes, UIUtils.GetLocalizedTxt(Const_IDS[DataSheetManager.ClimbTowerLevel:GetDataByID(nationTowerUnlockLevelID).LevelName]) ) return unlockText end -- @param1: 塔类型 -- @param2: 层数 function NationClimbTower_Controller.IsPassLevel(towerType, towerLv) local finishedLv = MDL.NationClimbTower.GetTowerPassedLvInfo(towerType) or 0 return finishedLv >= towerLv end -- @param1: 当前判断塔类型 -- @param2: 今日应开塔 function NationClimbTower_Controller.GetOpenDayDiff(towerType, curOpenType) if curOpenType <= 0 then logging.log(LTAG.LOG, "当前开启塔类型数据为 0 ") return 0, "" end local index = 0 if towerType == curOpenType then index = 1 elseif towerType < curOpenType then towerType = towerType + #OpenDayIDS + 1 index = math.abs(towerType - curOpenType) else index = towerType - curOpenType + 1 end return index - 1, UIUtils.GetLocalizedTxt(Const_IDS[OpenDayIDS[index]]) end function NationClimbTower_Controller.GetFormatDesOfNextOpen(isCross) local dayCount = isCross and 2 or 3 local timeValue = UTL.Time.GetServerIntervalTimeToRefresh(1) + UTL.Time.TotalSecondsOneDay * dayCount -- 挑战完的时刻 -> 第二天5点 + 2天 local formatTime = UTL.Time.FormatTimeClockBySeconds(timeValue) return string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_WaitContinue"], formatTime) end -- 四国爬塔是否有全通奖励可领 function NationClimbTower_Controller.IsAllPassRewardsAvailable() local allPassConfig = MDL.NationClimbTower.GetCurAllPassNationRewardsData() local receivedID = MDL.NationClimbTower.GetMaxAllPassRewardID() local progress = NationClimbTower_Controller.GetAllPassRewardsProgress() return progress == MDL.NationClimbTower.nationCount and receivedID < allPassConfig.ID end -- 当前塔类型是否完成全通奖励部分目标 function NationClimbTower_Controller.IsNationFinishAllPassRewardByID(towerType) local passMaxTowerLv = MDL.NationClimbTower.GetTowerPassedLvInfo(towerType) local config = MDL.NationClimbTower.GetCurAllPassNationRewardsData() if config then local rewardLevel = config.ThroughTowerNum return passMaxTowerLv >= rewardLevel end return false end -- 当前全通奖励进度 / 4 function NationClimbTower_Controller.GetAllPassRewardsProgress() local count = 0 for i, data in DataSheetManager.HeroCountry:GetEnumerator() do if NationClimbTower_Controller.IsNationFinishAllPassRewardByID(data.ID) then count = count + 1 end end return count end -- 获取全服前多少名速通奖励状态 function NationClimbTower_Controller.GetFastLevelPassRewardsState(towerType, towerLevel, chapterId) local key local rewardID if towerType == MDL.NationClimbTower.NormalClimbTowerType then key = MDL.NationClimbTower.CombineNormalTypeKey(chapterId, towerLevel) rewardID = DataSheetManager.ClimbTowerAllReward:GetDataByClimbTowerChapter_ClimbTowerLevel(chapterId, towerLevel).AllTowerRankReward else key = towerLevel rewardID = DataSheetManager.NationClimbTowerAllReward:GetDataByNationClimbTowerLevel(towerLevel).AllTowerRankReward[towerType] end local isAvailable = MDL.NationClimbTower.GetFastPassAvailableDic(towerType)[key] local isReceived = MDL.NationClimbTower.GetFastPassReceivedDic(towerType)[key] local state if isReceived then state = NationClimbTower_Controller.RewardState.Received elseif isAvailable then state = NationClimbTower_Controller.RewardState.Available else state = NationClimbTower_Controller.RewardState.NotReach end return state, rewardID end --是否满足挑战下一关 function NationClimbTower_Controller.CanChallengeNextLevel() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.FourNationClimbTower) then return false, nil, NationClimbTower_Controller.GetNationClimbTowerUnlockDes() end local openType, openLevel = MDL.NationClimbTower.GetTowerOpenInfo() -- 跨5点刷新 if openType ~= MDL.NationClimbTower.GetCurSelectTower() then return false, nil, NationClimbTower_Controller.GetFormatDesOfNextOpen(true) end -- 四国爬塔未在活开启时间内 if not NationClimbTower_Controller.IsDuringOpenTime() then return false, nil, NationClimbTower_Controller.GetOpenTimeDesc() end if NationClimbTower_Controller.IsMaxLevelByDay() then return false, nil, NationClimbTower_Controller.GetFormatDesOfNextOpen(false) end if NationClimbTower_Controller.IsPassedAllLevelByTowerType() then -- 当前国别塔已达最高层 return false, nil, UIUtils.GetLocalizedTxt(Const_IDS["IDS_NationClimbTower_LastLevel"]) end local nextConfig = MDL.NationClimbTower.GetNextLevelConfig() if nextConfig then -- 超过当日开放层数上限 if nextConfig.Number > openLevel then return false, nextConfig, NationClimbTower_Controller.GetFormatDesOfNextOpen(false) end return true, nextConfig, "" end return false end local NATION_TOWER_OPEN_ID = 2061 local NATION_TOWER_END_ID = 2062 --港澳台普通爬塔无限制,四国爬塔时间有限制 --其他地区的四国爬塔限制时间与普通爬塔一致 function NationClimbTower_Controller.IsDuringOpenTime() if not GameAppInfo.IsOverseaPackage() then return CTL.ClimbTower.IsDuringOpenTime() else return UTL.Time.IsServerInOpeningTime(NATION_TOWER_OPEN_ID, NATION_TOWER_END_ID) end end function NationClimbTower_Controller.GetOpenTimeDesc() local openTypeDesc, openTimeConfig = UTL.Time.GetDateDescAndTimeById(NATION_TOWER_OPEN_ID, NATION_TOWER_END_ID) return string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_OpenTime"], openTypeDesc, openTimeConfig) end -- 是否完成当日已开放的全部层数 function NationClimbTower_Controller.IsMaxLevelByDay() local openType, openLv = MDL.NationClimbTower.GetTowerOpenInfo() local finishedLv = MDL.NationClimbTower.GetTowerPassedLvInfo(openType) if finishedLv == 0 then return false end return not NationClimbTower_Controller.IsPassedAllLevelByTowerType() and finishedLv >= openLv end -- 是否完成最高层数 function NationClimbTower_Controller.IsPassedAllLevelByTowerType() local openType, openLv = MDL.NationClimbTower.GetTowerOpenInfo() local finishedLv = MDL.NationClimbTower.GetTowerPassedLvInfo(openType) local towerConfig = MDL.NationClimbTower.GetTowerConfigData(openType) local maxLevelConfig = MDL.NationClimbTower.GetLevelConfigByTowerType(openType, finishedLv) if not maxLevelConfig or maxLevelConfig.Number < towerConfig.BattleLevelNum then return false end return true end function NationClimbTower_Controller.IsCrossDay() local cacheType = MDL.NationClimbTower.GetCurSelectTower() local openType = MDL.NationClimbTower.GetTowerOpenInfo() return cacheType ~= openType end function NationClimbTower_Controller.OnEnterChallengeLevel() local openType, openLv = MDL.NationClimbTower.GetTowerOpenInfo() -- 跨5点刷新 if NationClimbTower_Controller.IsCrossDay() then CTL.Tips.AddTipsMsg(NationClimbTower_Controller.GetFormatDesOfNextOpen(true)) return end if not NationClimbTower_Controller.IsDuringOpenTime() then CTL.Tips.AddTipsMsg(NationClimbTower_Controller.GetOpenTimeDesc()) return end if NationClimbTower_Controller.IsPassedAllLevelByTowerType() then -- 您已通关最后一个关卡,无法继续挑战 CTL.Tips.AddTipsMsg(UIUtils.GetLocalizedTxt(Const_IDS["IDS_NationClimbTower_LastLevel"])) return end local nextLevelConfig = MDL.NationClimbTower.GetNextLevelConfig() if nextLevelConfig then if not NationClimbTower_Controller.IsFormationFinished(openType) then UTL.MessageBox.ShowOKCancelBox( nil, UIUtils.GetLocalizedTxt(Const_IDS["IDS_NationClimbTower_GoToSave"]), function() UIManager.OpenView(Const_UI_Lua.UIEnum.UINationClimbTowerSelectOfficer, { freeLineupFuncType = MDL.FreeLineUp.FuncType.NationClimbTower, activityType = LuaConst.ActivityType.ClimbTower }, "DemonGod/UIDemonGodSelectOfficer" ) end ) return end -- 超过当日开放层数上限 if nextLevelConfig.Number > openLv then CTL.Tips.AddTipsMsg(NationClimbTower_Controller.GetFormatDesOfNextOpen(false)) return end if not BattleDataGetter.IsOnlineTownLevel() then -- 本场景不可进入活动,请前往主城再试 CTL.Tips.AddTipsMsg(UIUtils.GetLocalizedTxt(Const_IDS["IDS_NationClimbTower_CityScene"])) return end MDL.NationClimbTower.SetFirstEnterLevelNum(nextLevelConfig.Number) NationClimbTower_Controller.EnterFuben(nextLevelConfig) end end function NationClimbTower_Controller.GetClimbTowerLevelId(levelID) local climbTowerConfig = DataSheetManager.NationClimbTowerLevel:GetDataByID(levelID) local data = DataSheetManager.CombinationLevel:GetDataByID(climbTowerConfig.CombinationLevelID) return data.LevelID end -- 国别爬塔当日是否开启 function NationClimbTower_Controller.IsNationTowerOpen(towerType) local openTowerType = MDL.NationClimbTower.GetTowerOpenInfo() return openTowerType == towerType end --四国爬塔战斗UI function NationClimbTower_Controller.ShowClimbTowerBattleUI() EventSystem.Regist(EventID.UI_UIBattleCountDownPanel_CloseEvent, private.RunLevel) UIManager.OpenView(Const_UI_Lua.UIEnum.UIBattleCountDownFormalPanel, { 3 }) CTL.HomeMain.OpenBattleSceneUI() NotSyncBattleSetter.PauseLevel(true) --进关时设定是否可以显示胜利pose local isCanShow = NationClimbTower_Controller.GetCanShowVictoryPose() --new↓ if isCanShow then LuaInputManager.EnqueueSpecialCommand(LuaConst.SpecialCommandType.SetCanShowVictoryPose) end --new↑ -- NotSyncBattleSetter.SetCanShowVictoryPose(isCanShow) --old end function private.RunLevel() NotSyncBattleSetter.PauseLevel(false) EventSystem.UnRegist(EventID.UI_UIBattleCountDownPanel_CloseEvent, private.RunLevel) end --是否可以显示胜利pose function NationClimbTower_Controller.GetCanShowVictoryPose() --最后一关 local nextConfig = MDL.NationClimbTower.GetNextLevelConfig() if not nextConfig then return true end return false end --结算界面 function NationClimbTower_Controller.ShowBattleSummary(msg) CTL.HomeMain.CloseOpenView() MDL.NationClimbTower.SaveTotalRewards(msg.Resp.Rewards) --失败了显示结算,胜利了显示奖励提示 if msg.isWin then if NationClimbTower_Controller.IsCrossDay() or NationClimbTower_Controller.IsMaxLevelByDay() or NationClimbTower_Controller.IsPassedAllLevelByTowerType() then UIManager.OpenView(Const_UI_Lua.UIEnum.UINationClimbTowerSummary, { Win = true }, "ClimbTower/UIClimbTowerSummary") else UIManager.OpenView(Const_UI_Lua.UIEnum.UIClimbTowerLevelClear) end else UIManager.OpenView(Const_UI_Lua.UIEnum.UINationClimbTowerSummary, { Win = false }, "ClimbTower/UIClimbTowerSummary") end end -- 进入指定level副本 function NationClimbTower_Controller.EnterFuben(nextConfig) local configTowerType = DataSheetManager.NationClimbTowerData:GetDataByID(nextConfig.BelongToChapter).TowerLevelCountry if MDL.NationClimbTower.GetTowerOpenInfo() ~= configTowerType then UIManager.OpenView(Const_UI_Lua.UIEnum.UINationClimbTowerSummary, { Win = true }, "ClimbTower/UIClimbTowerSummary") return end MDL.LevelSelect.EnterFuben(LuaConst.LevelType.NationClimbTower, nextConfig.ID, nil, nil, nil, configTowerType) end --退出副本 function NationClimbTower_Controller.LeaveFuben() MDL.NationClimbTower.SetFirstEnterLevelNum(nil) MDL.NationClimbTower.ClearTotalRewards() MDL.Level.SendRoleLeaveFuben() end -- 打开到对应塔选关主界面 function NationClimbTower_Controller.OpenNationClimbTowerMainView() UIManager.OpenAndPush(Const_UI_Lua.UIEnum.UIActivitiesMain, nil, nil, Const_UI_Lua.UIEnum.UIHomeMain) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.ClimbTower) then UIManager.OpenView(Const_UI_Lua.UIEnum.UIClimbTowerEntry) if not NationClimbTower_Controller.IsCrossDay() then UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UINationClimbTowerMainPanel, { towerType = MDL.NationClimbTower.GetCurSelectTower() }, "ClimbTower/UIClimbTowerMainPanel") end end private.RefreshNationRed() end -- 关闭所有活动相关界面 function NationClimbTower_Controller.CloseAllClimbView() if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UINationClimbTowerProgress) then CTL.HomeMain.ClosePushedView(Const_UI_Lua.UIEnum.UINationClimbTowerProgress) end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UINationClimbTowerSelectOfficer) then UIManager.CloseView(Const_UI_Lua.UIEnum.UINationClimbTowerSelectOfficer) end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UINationClimbTowerMainPanel) then CTL.HomeMain.ClosePushedView(Const_UI_Lua.UIEnum.UINationClimbTowerMainPanel) end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIClimbTowerMainPanel) then CTL.HomeMain.ClosePushedView(Const_UI_Lua.UIEnum.UIClimbTowerMainPanel) end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIClimbTowerEntry) then UIManager.CloseView(Const_UI_Lua.UIEnum.UIClimbTowerEntry) end end -- 开启时间界面检测计时器 function NationClimbTower_Controller.StartOpeningTimerChecker() local interval = 0 local serverSecondsIntervalFromZero = UTL.Time.GetServerSecondsIntervalFromZero() local startTime = DataSheetManager.TimeRefresh:GetDataByID(NATION_TOWER_OPEN_ID).HMS local endTime = DataSheetManager.TimeRefresh:GetDataByID(NATION_TOWER_END_ID).HMS if NationClimbTower_Controller.IsDuringOpenTime() then interval = endTime + 1 - serverSecondsIntervalFromZero else interval = startTime - serverSecondsIntervalFromZero end private.openingTimeTimer = TimerUtil.Interval(private.CheckTowerOpening, interval, 1) end function private.CheckTowerOpening() if not NationClimbTower_Controller.IsDuringOpenTime() then if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UINationClimbTowerMainPanel) then CTL.HomeMain.ClosePushedView(Const_UI_Lua.UIEnum.UINationClimbTowerMainPanel) end end EventSystem.Dispatch(EventID.UI_UpdateNationClimbTowerInfo) NationClimbTower_Controller.StartOpeningTimerChecker() end function NationClimbTower_Controller.GetProgressFinishFormatTime(timestamp) local month = UTL.Time.OsDateOriginal("%m", timestamp) local day = UTL.Time.OsDateOriginal("%d", timestamp) local hourMinute = os.date(UTL.Time.FormatDateEnum.HMS, timestamp) return month, day, hourMinute end function NationClimbTower_Controller.GetProgressFinishProgressName(towerType, level) local configData = MDL.NationClimbTower.GetLevelConfigByTowerType(towerType, level) return string.FormatByIdsId(Const_IDS[configData.LevelName], level) end -- 下线重登后历程界面的默认选中页签 function NationClimbTower_Controller.GetProgressOfflineDefaultIndex() for towerType, v in DataSheetManager.HeroCountry:GetEnumerator() do local avaDic = MDL.NationClimbTower.GetFastPassAvailableDic(v.ID) local receivedDic = MDL.NationClimbTower.GetFastPassReceivedDic(v.ID) for _, data in DataSheetManager.NationClimbTowerAllReward:GetEnumerator() do if avaDic[data.NationClimbTowerLevel] == true and receivedDic[data.NationClimbTowerLevel] == false then -- 有奖励可以领取 return towerType, data.Index end end end -- 无奖可领 local openType local subIndex if not GameAppInfo.IsOverseaPackage() then openType = 0 --0是百战雄关的类型 subIndex = MDL.NationClimbTower.GetNormalClimbProgressTabIndex() else subIndex = 1 openType = MDL.NationClimbTower.GetTowerOpenInfo() local curProgressLv = MDL.NationClimbTower.GetTowerPassedLvInfo(openType) for _, data in DataSheetManager.NationClimbTowerAllReward:GetEnumerator() do if curProgressLv < data.NationClimbTowerLevel then break end subIndex = data.Index end end return openType, subIndex end --region -------------------- 布阵相关 ------------------------------ local notOpenUnlockLv = 9999 function NationClimbTower_Controller.IsTeamSlotUnlock(towerType, teamID) local nationTowerSlotUnlockList = DataSheetManager.ConstData:GetDataByID("NationClimbTower_Unlock").IntListValue -- 爬塔槽位解锁 local unlockLv = nationTowerSlotUnlockList[teamID] local isUnlock = NationClimbTower_Controller.IsPassLevel(towerType, unlockLv) local unlockTips = string.FormatByIdsId(Const_IDS[FormationHeroSlotUnlockIDS[towerType]], string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_HistoryLevel"], unlockLv)) if unlockLv == notOpenUnlockLv then unlockTips = UIUtils.GetLocalizedTxt(Const_IDS["IDS_NationClimbTower_Lock"]) end return isUnlock, unlockTips end -- 是否已经布阵 function NationClimbTower_Controller.IsFormationFinished(towerType) local lineUpHeroList = MDL.NationClimbTower.GetLineUpInfo(towerType) -- 返回的是heroInfo结构体数组 if not lineUpHeroList then return false end for teamID = 1, 3 do local isUnlock = NationClimbTower_Controller.IsTeamSlotUnlock(towerType, teamID) if isUnlock then local pos1, pos2 = NationClimbTower_Controller.GetLineUpPosNumByTeamID(teamID) if not lineUpHeroList[pos1] or lineUpHeroList[pos1].heroId <= 0 then return false end end end return true end -- 布阵是否有空位可以布阵 function NationClimbTower_Controller.IsHasEmptyPosCanLineUp(towerType) local lineUpHeroList = MDL.NationClimbTower.GetLineUpInfo(towerType) -- 返回的是heroInfo结构体数组 if not lineUpHeroList then return true end local heroNum = 0 local isHasEmptyPos = false for teamID = 1, 3 do local isUnlock = NationClimbTower_Controller.IsTeamSlotUnlock(towerType, teamID) if isUnlock then local pos1, pos2 = NationClimbTower_Controller.GetLineUpPosNumByTeamID(teamID) if not lineUpHeroList[pos1] or lineUpHeroList[pos1].heroId <= 0 then isHasEmptyPos = true else heroNum = heroNum + 1 end if not lineUpHeroList[pos2] or lineUpHeroList[pos2].heroId <= 0 then isHasEmptyPos = true else heroNum = heroNum + 1 end end end if isHasEmptyPos and MDL.HeroSelect.GetHasCountryHeroCount(towerType) > heroNum then return true end return false end function private.OnHeroGsChanged() if NationClimbTower_Controller.IsFormationFinished(MDL.NationClimbTower.GetTowerOpenInfo()) then if not private.freeLineUpReq then private.freeLineUpReq = TimerUtil.Interval(private.RealSendLineupReq, 120, 1) end end end function private.RealSendLineupReq() MDL.FreeLineUp.FreeLineUpGetInfoRequest(MDL.FreeLineUp.FuncType.NationClimbTower) TimerUtil.Remove(private.freeLineUpReq) private.freeLineUpReq = nil end function NationClimbTower_Controller.GetLineUpPosNumByTeamID(selectTeamID) if selectTeamID == 2 then return 3, 4 elseif selectTeamID == 3 then return 5, 6 else return 1, 2 end end -- 保存布阵信息 function NationClimbTower_Controller.SaveLineUp(lineUpHeroList, towerType) if NationClimbTower_Controller.IsCrossDay() then UIManager.CloseView(Const_UI_Lua.UIEnum.UINationClimbTowerSelectOfficer) return end for teamID = 1, 3 do local isUnlock = NationClimbTower_Controller.IsTeamSlotUnlock(towerType, teamID) if isUnlock then local pos1, pos2 = NationClimbTower_Controller.GetLineUpPosNumByTeamID(teamID) local heroID1, heroID2 = lineUpHeroList[pos1], lineUpHeroList[pos2] if lineUpHeroList[pos1] < 0 or lineUpHeroList[pos2] < 0 then UTL.MessageBox.ShowOnlyOkBox(nil, Const_IDS["IDS_NationClimbTower_NoMaxHero"]) return end -- 上阵武将玩家未拥有 if (heroID1 > 0 and not MDL.HeroSelect.IsHasHero(heroID1)) or (heroID2 > 0 and not MDL.HeroSelect.IsHasHero(heroID2)) then CTL.Tips.AddTipsMsg(Const_IDS["IDS_NationClimbTower_LackHero"]) return end end end -- 阵容保存成功 MDL.FreeLineUp.FreeLineUpSetRequest( MDL.FreeLineUp.FuncType.NationClimbTower, towerType, MDL.FreeLineUp.SetType.Official, lineUpHeroList ) EventSystem.Dispatch(EventID.UI_UpdateNationTowerLineUpInfo) CTL.Tips.AddTipsMsg(Const_IDS["IDS_NationClimbTower_SaveSuccess"]) end --endregion --region--------------------- 红点逻辑 ------------------------------ function private.RefreshRedByFunctionUnlock(funcId, isUnlock) if funcId == MDL.Unlock.FunctionType.NationClimbTower then if isUnlock then private.RefreshChallengeRed() end elseif funcId == MDL.Unlock.FunctionType.FourNationClimbTower then private.RefreshLineupGsRed() end end function private.RefreshNationRed() private.RefreshTowerProgressRed() private.RefreshLineupGsRed() end function private.RefreshLineupGsRed() private.RefreshChallengeRed() private.RefreshLineUpRed() end function private.RefreshTowerProgressRed() if NationClimbTower_Controller.IsNationProgressHasAvailable() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_Progress) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_Progress) end end function private.RefreshChallengeRed() if NationClimbTower_Controller.IsTowerChallengeRed() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_Challenge) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_Challenge) end end function private.RefreshLineUpRed() if NationClimbTower_Controller.IsTowerCanLineUp() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_LineUp) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.ClimbTowerEntry_LineUp) end end -- 可挑战 && 当前阵容战力 > 推荐战力 -- 在活动按钮、活动界面百战雄关的参加按钮、中间百战雄关区域、挑战按钮上依次显示红点 function NationClimbTower_Controller.IsTowerChallengeRed() local openTowerType = MDL.NationClimbTower.GetTowerOpenInfo() if openTowerType == 0 then return end local canChallenge, nextConfig = NationClimbTower_Controller.CanChallengeNextLevel() if NationClimbTower_Controller.IsFormationFinished(openTowerType) and canChallenge then return MDL.NationClimbTower.GetLineUpGSTotal(openTowerType) >= nextConfig.Battle end return false end function NationClimbTower_Controller.IsTowerCanLineUp() local openTowerType = MDL.NationClimbTower.GetTowerOpenInfo() if openTowerType == 0 then return false end if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.FourNationClimbTower) then return false end if not CTL.NationClimbTower.IsDuringOpenTime() then return false end if NationClimbTower_Controller.IsHasEmptyPosCanLineUp(openTowerType) then return true end return false end -- 历程内是否有红点 function NationClimbTower_Controller.IsNationProgressHasAvailable() if not GameAppInfo.IsOverseaPackage() then local avaDic = MDL.NationClimbTower.GetFastPassAvailableDic(MDL.NationClimbTower.NormalClimbTowerType) local receivedDic = MDL.NationClimbTower.GetFastPassReceivedDic(MDL.NationClimbTower.NormalClimbTowerType) for i, v in DataSheetManager.ClimbTowerAllReward:GetEnumerator() do local key = MDL.NationClimbTower.CombineNormalTypeKey(v.ClimbTowerChapter, v.ClimbTowerLevel) if avaDic[key] == true and receivedDic[key] == false then return true end end end for i, v in DataSheetManager.HeroCountry:GetEnumerator() do local avaDic = MDL.NationClimbTower.GetFastPassAvailableDic(v.ID) local receivedDic = MDL.NationClimbTower.GetFastPassReceivedDic(v.ID) for k, _ in pairs(avaDic) do if avaDic[k] == true and receivedDic[k] == false then return true end end end return false end --endregion return NationClimbTower_Controller