--=========================== --超级爬塔管理器 --模块负责:吕天元,陈思亮,张爽 --=========================== --==================== --打印没有当前活动配置错误日志 --==================== local DebugNoCurrentActivityCfg = function() --XLog.Error("【超级爬塔】XSuperTowerManager:当前活动配置为空!") end --==================== --管理器 --==================== XSuperTowerManagerCreator = function() local XSuperTowerManager = {} local StageManager --关卡管理器 local RoleManager --角色管理器 local BagManager --仓库管理器 local TeamManager --队伍管理器 local FunctionManager --特权管理器 local ShopManager --商店管理器 local IsShowSettleDark --结算遮罩控制 local IsCallFinishBattle --是否已经调用FinishBattle local HoldFinishBattle --是否挂起了结算战斗 local HoldSettleData --挂起时缓存的结算数据 local InitialManagers = false local DEBUG = false ------------------------------------------------------------------ ------------------------------------------------------------------ --=============== --超级爬塔关卡类型枚举 --=============== XSuperTowerManager.StageType = { None = 0, -- 缺省类型,表示空值(用于查询时) SingleTeamOneWave = 1, -- 单队伍单波 SingleTeamMultiWave = 2, -- 单队伍多波 MultiTeamMultiWave = 3, -- 多队伍多波 LllimitedTower = 4, -- 无限爬塔 } --=============== --超级爬塔关卡队伍字典 --=============== XSuperTowerManager.TeamId = { [XSuperTowerManager.StageType.SingleTeamOneWave] = 1, -- 单队伍单波 [XSuperTowerManager.StageType.SingleTeamMultiWave] = 1, -- 单队伍多波 [XSuperTowerManager.StageType.LllimitedTower] = 2, -- 无限爬塔 [XSuperTowerManager.StageType.MultiTeamMultiWave] = 3, -- 多队多波 } --=============== --超级爬塔队伍类型枚举 --=============== XSuperTowerManager.TeamType = { SingleTeam = 1, --单队伍 Tier = 2, --爬塔 } --=============== --超级爬塔 爬塔结算分数项枚举 --=============== XSuperTowerManager.ScoreType = { Tier = 1, --通关层数 NormalBattle = 2, --普通战斗层 EliteBattle = 3, --精英战斗层 BossBattle = 4, --Boss战斗层 EnhancerGet = 5, --获得增益数 PluginsGet = 6 --获得插件数 } --=============== --超级爬塔 目标关卡奖励获取状态 --=============== XSuperTowerManager.StageRewardState = { Complete = 1, --已获得 CanGet = 2, --可获得 Lock = 3, --未解锁 } --=============== --超级爬塔 基础配置Key值枚举 --=============== XSuperTowerManager.BaseCfgKey = { ScoreItemId = "ScoreItemId", --积分物品id InitBagCapacity = "InitBagCapacity", --初始背包容量 MaxBagCapacity = "MaxBagCapacity", --最大背包容量 MaxTeamPluginCount = "MaxTeamPluginCount", SingleCapacityCount = "SingleCapacityCount", --单次扩容数量 BagCacheCapacity = "BagCacheCapacity", --背包缓存容量 MainAssetsPanelItem1 = "CurrencyItem1", --主界面和角色货币栏道具1 MainAssetsPanelItem2 = "CurrencyItem2", --主界面和角色货币栏道具2 MainAssetsPanelItem3 = "CurrencyItem3", --主界面和角色货币栏道具3 BagAssetsPanelItem1 = "CurrencyItemOther1", --商店和背包货币栏道具1 BagAssetsPanelItem2 = "CurrencyItemOther2", --商店和背包货币栏道具2 BagAssetsPanelItem3 = "CurrencyItemOther3", --商店和背包货币栏道具3 } --=============== --超级爬塔 特权Key枚举 --=============== XSuperTowerManager.FunctionName = { Shop = "CheckMallIsOpen", --商店 Transfinite = "CheckSuperLimitIsOpen", --角色超限 BonusChara = "CheckSpecialCharacterIsOpen", --特典角色 MultiTeam = "CheckMultiTeamChallengeOpen", --多队伍挑战 Exclusive = "CheckSlotIsOpen" --专属槽 } --=============== --超级爬塔 主题Index --=============== XSuperTowerManager.ThemeIndex = { ThemeAll = 0, --主题区域总览 } --=============== --超级爬塔 关卡Index --=============== XSuperTowerManager.StageIndex = { StageAll = 0, --关卡区域总览 } --=============== --超级爬塔 协议名 --=============== local METHOD_NAME = { StConfirmTargetResultRequest = "StConfirmTargetResultRequest",--确认目标关卡战斗结果 } --=============== --超级爬塔 道具类型 --=============== XSuperTowerManager.ItemType = { Enhance = 1, Plugin = 2, } --=============== --目标关卡 目标关卡属性类型 --=============== XSuperTowerManager.StageElement = { None = 0, --无 NextFloor = 2, --下一层 Keep = 3, --保持现状,暂时离开 } ------------------------------------------------------------------ ------------------------------------------------------------------ --=============== --初始化 --=============== function XSuperTowerManager.Init() XSuperTowerManager.InitActivityCfg() if not XSuperTowerManager.CheckActivityIsInTime() and not DEBUG then return end XSuperTowerManager.InitManagers() end function XSuperTowerManager.InitManagers() if InitialManagers then return end XSuperTowerManager.InitStageManager() XSuperTowerManager.InitRoleManager() XSuperTowerManager.InitBagManager() XSuperTowerManager.InitTeamManager() XSuperTowerManager.InitFunctionManager() XSuperTowerManager.InitShopManager() InitialManagers = true end --=============== --初始化活动配置 --=============== local CurrentActivityCfg function XSuperTowerManager.InitActivityCfg() CurrentActivityCfg = XSuperTowerConfigs.GetCurrentActivity() end --=============== --初始化关卡管理器 --=============== function XSuperTowerManager.InitStageManager() local script = require("XEntity/XSuperTower/Stages/XSuperTowerStageManager") StageManager = script.New(XSuperTowerManager) end --=============== --初始化角色管理器 --=============== function XSuperTowerManager.InitRoleManager() local script = require("XEntity/XSuperTower/Role/XSuperTowerRoleManager") RoleManager = script.New(XSuperTowerManager) end function XSuperTowerManager.InitFunctionManager() local script = require("XEntity/XSuperTower/Function/XSuperTowerFunctionManager") FunctionManager = script.New(XSuperTowerManager) end --=============== --初始化队伍管理器 --=============== function XSuperTowerManager.InitTeamManager() local script = require("XEntity/XSuperTower/XSuperTowerTeamManager") TeamManager = script.New(XSuperTowerManager) end --=============== --获取队伍管理器 --=============== function XSuperTowerManager.InitBagManager() local script = require("XEntity/XSuperTower/XSuperTowerBagManager") BagManager = script.New(XSuperTowerManager) end --=============== --初始化商店管理器 --=============== function XSuperTowerManager.InitShopManager() local script = require("XEntity/XSuperTower/Shop/XSuperTowerShopManager") ShopManager = script.New(XSuperTowerManager) end --=============== --FubenManager代理方法:初始化StageInfo --=============== function XSuperTowerManager.InitStageInfo() if StageManager then StageManager:InitStageInfo() end end --=============== --FubenManager代理方法:检查stageId是否有通关 --=============== function XSuperTowerManager.CheckPassedByStageId(stageId) local targetStage = StageManager:GetTargetStageByStageId(stageId) if targetStage then return targetStage:CheckIsClear() else return false end end --=============== --FubenManager代理方法:出战前检查 --=============== function XSuperTowerManager.CheckPreFight(stage, challengeCount) local stageType = XSuperTowerManager.GetStageTypeByStageId(stage.StageId) if stageType == XSuperTowerManager.StageType.None then XUiManager.TipError("关卡不存在!") return false elseif stageType == XSuperTowerManager.StageType.LllimitedTower then local team = XSuperTowerManager.GetTeamByStageId(stage.StageId) --爬塔需要3个人 local isFullMember = team:GetIsFullMember() if not isFullMember then XUiManager.TipText("STTierStageNotFullMemember") end return isFullMember else --XUiManager.TipMsg("TODO -- 目标关卡战斗前检查") return true end end --=============== --FubenManager代理方法:准备出战数据 --=============== function XSuperTowerManager.PreFight(stage, team, isAssist, challengeCount, challengeId) local preFight = {} preFight.CardIds = {} preFight.RobotIds = {} preFight.StageId = stage.StageId preFight.IsHasAssist = isAssist and true or false preFight.ChallengeCount = challengeCount or 1 local stageType = XSuperTowerManager.GetStageTypeByStageId(stage.StageId) if stageType == XSuperTowerManager.StageType.None then return nil else local team = XSuperTowerManager.GetTeamByStageId(stage.StageId) if team then for i = 1, 3 do local entityId = team:GetEntityIdByTeamPos(i) local role = RoleManager:GetRole(entityId) preFight.CardIds[i] = role and role:GetCharacterId() or 0 if role and role:GetIsRobot() then preFight.RobotIds[i] = role:GetId() else preFight.RobotIds[i] = 0 end end preFight.CaptainPos = team:GetCaptainPos() preFight.FirstFightPos = team:GetFirstFightPos() end end return preFight end --=============== --FubenManager代理方法:结束战斗 --=============== function XSuperTowerManager.FinishFight(settleData) if not IsCallFinishBattle then HoldFinishBattle = true HoldSettleData = settleData return end local stageInfo = XDataCenter.FubenManager.GetStageInfo(settleData.StageId) if stageInfo.Type ~= XDataCenter.FubenManager.StageType.SuperTower then return end local stageId = settleData.StageId local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) if stageType == XSuperTowerManager.StageType.LllimitedTower then XSuperTowerManager.TierStageFinish(settleData) else XSuperTowerManager.TargetStageFinish(settleData) end IsShowSettleDark = false HoldFinishBattle = false IsCallFinishBattle = false HoldSettleData = nil end --=============== --FubenManager代理方法:调用结算战斗时 --=============== function XSuperTowerManager.CallFinishFight() local XFubenManager = XDataCenter.FubenManager local res = XFubenManager.FubenSettleResult XFubenManager.FubenSettling = false XFubenManager.FubenSettleResult = nil --通知战斗结束,关闭战斗设置页面 CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_FINISH) if not res then IsShowSettleDark = true IsCallFinishBattle = true return end if res.Code ~= XCode.Success then CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FUBEN_SETTLE_FAIL, res.Code) return end CsXGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_RESULT, res.Settle) IsCallFinishBattle = true if HoldFinishBattle then XSuperTowerManager.FinishFight(HoldSettleData) end end --=============== --进入战斗 --=============== function XSuperTowerManager.EnterFight(stageId) local stageConfig = XDataCenter.FubenManager.GetStageCfg(stageId) local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) if stageType == XSuperTowerManager.StageType.None then XUiHelper.GetText("STNoStageType") return elseif stageType == XSuperTowerManager.StageType.LllimitedTower then --爬塔直接调用EnterFight local isAssist = false local challengeCount = 1 XDataCenter.FubenManager.EnterFight(stageConfig, nil, isAssist, challengeCount) else --目标关卡需先设定队伍信息,成功后再进入关卡 local isAssist = false local challengeCount = 1 XDataCenter.FubenManager.EnterFight(stageConfig, nil, isAssist, challengeCount) end end --=============== --爬塔关卡结束时 --=============== function XSuperTowerManager.TierStageFinish(settleData) local theme = StageManager:GetThemeByStageId(settleData.StageId) XSuperTowerManager:GetStageManager():RefreshStMapTierData(settleData.StMapTierDataOperation) --[[if settleData.IsWin then if theme:GetResetFlag() then XLuaUiManager.Open("UiSuperTowerInfiniteSettleWin", settleData) end else if theme:GetResetFlag() then XLuaUiManager.Open("UiSuperTowerInfiniteSettleWin", settleData) end end]] --XLog.Debug("================爬塔关卡结束:SettleData:", settleData) if theme:GetResetFlag() then XLuaUiManager.Open("UiSuperTowerInfiniteSettleWin", settleData) end end --=============== --目标关卡结束时 --=============== function XSuperTowerManager.TargetStageFinish(settleData) local stageId = settleData.StageId local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) local targetStage = XSuperTowerManager.GetTargetStageByStageId(stageId) XSuperTowerManager.GetStageManager():SetTempProgress(settleData.StTargetStageFightResult) local tempProgress = StageManager:GetTempProgressByTargetId(targetStage:GetId()) local IsMultiTeam = stageType ==XSuperTowerManager.StageType.MultiTeamMultiWave local teamList = IsMultiTeam and XSuperTowerManager.GetTeamByStageId(stageId) or {XSuperTowerManager.GetTeamByStageId(stageId)} if IsMultiTeam then local teamCount = targetStage:GetTeamCount() teamList = XSuperTowerManager.GetTeamByStageType(stageType,teamCount) else teamList = {XSuperTowerManager.GetTeamByStageId(stageId)} end local battledTeamList = {} local pulginList = {} for index,team in pairs(teamList or {}) do if index <= tempProgress then local pluginSlotManger = team:GetExtraData() local plugins = pluginSlotManger:GetPlugins() for _,plugin in pairs(plugins or {}) do if type(plugin) == "table" then table.insert(pulginList, plugin) end end table.insert(battledTeamList, team) end end if settleData.IsWin and IsMultiTeam then if not StageManager:IsSetTempProgress() then XLog.Error("SuperTower SetTempProgress Is Late!") end StageManager:ClearTempProgressMark() if tempProgress < targetStage:GetProgress() then local nextIndex = tempProgress + 1 local nextStageId = targetStage:GetStageIdByIndex(nextIndex) local nextTeam = XSuperTowerManager.GetTeamByStageId(nextStageId) XSuperTowerManager.EnterFight(nextStageId) else XLuaUiManager.Open("UiSuperTowerSettleWin",targetStage, pulginList, tempProgress, battledTeamList) end else XLuaUiManager.Open("UiSuperTowerSettleWin",targetStage, pulginList, tempProgress, battledTeamList) end end ------------------------------------------------------------------ ------------------------------------------------------------------ --=============== --获取当前活动配置ID --=============== function XSuperTowerManager.GetActivityId() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return 1 end return CurrentActivityCfg.Id end --=============== --获取当前活动TimeId --=============== function XSuperTowerManager.GetActivityTimeId() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return 0 end return CurrentActivityCfg.TimeId end --=============== --获取当前活动的主题组ID --=============== function XSuperTowerManager.GetThemeIds() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return {} end return CurrentActivityCfg.MapId end --=============== --获取当前活动的名字 --=============== function XSuperTowerManager.GetActivityName() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return {} end return CurrentActivityCfg.Name end function XSuperTowerManager.GetActivityEntryImage() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return "" end return CurrentActivityCfg.EntryImage end --=============== --获取当前活动序言故事ID --=============== function XSuperTowerManager.GetPrefaceStoryId() if not CurrentActivityCfg then DebugNoCurrentActivityCfg() return {} end return CurrentActivityCfg.PrefaceStoryId end --=============== --获取背包管理器 --=============== function XSuperTowerManager.GetBagManager() return BagManager end --=============== --获取角色管理器 --=============== function XSuperTowerManager.GetRoleManager() return RoleManager end --=============== --获取关卡管理器 --=============== function XSuperTowerManager.GetStageManager() return StageManager end --=============== --获取队伍管理器 --=============== function XSuperTowerManager.GetTeamManager() return TeamManager end --=============== --获取特权管理器 --=============== function XSuperTowerManager.GetFunctionManager() return FunctionManager end --=============== --获取商店管理器 --=============== ---@return XSuperTowerShopManager function XSuperTowerManager.GetShopManager() return ShopManager end --=============== --检测结算遮罩是否打开 --=============== ---@return IsShowSettleDark function XSuperTowerManager.CheckShowSettleDark() return IsShowSettleDark end --=============== --获取当前活动开始时间戳(根据TimeId) --=============== function XSuperTowerManager.GetActivityStartTime() return XFunctionManager.GetStartTimeByTimeId(XSuperTowerManager.GetActivityTimeId()) end --=============== --获取当前活动结束时间戳(根据TimeId) --=============== function XSuperTowerManager.GetActivityEndTime() return XFunctionManager.GetEndTimeByTimeId(XSuperTowerManager.GetActivityTimeId()) end --=============== --根据关卡Id获取关卡类型(XSuperTowerManager.StageType) --若查不到结果,会返回XSuperTowerManager.StageType.None --@param stageId:关卡Id --=============== function XSuperTowerManager.GetStageTypeByStageId(stageId) return StageManager:GetStageTypeByStageId(stageId) end --=============== --根据关卡Id获取关卡序号 --若查不到结果,会返回0 --@param stageId:关卡Id --=============== function XSuperTowerManager.GetStageIndexByStageId(stageId) return StageManager:GetStageIndexByStageId(stageId) end --=============== --根据关卡Id获取队伍ID --若查不到结果,会返回nil --@param stageId:关卡Id --=============== function XSuperTowerManager.GetTeamIdByStageId(stageId) local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) return XSuperTowerManager.GetTeamIdByStageType(stageType) end --=============== --根据关卡类型获取队伍ID --若查不到结果,会返回nil --@param stageType:(XSuperTowerManager.StageType) --=============== function XSuperTowerManager.GetTeamIdByStageType(stageType) return XSuperTowerManager.TeamId[stageType] end --=============== --根据关卡ID获取队伍对象 --若查不到结果,会返回nil --@param stageId:关卡Id --=============== function XSuperTowerManager.GetTeamByStageId(stageId) local teamId = XSuperTowerManager.GetTeamIdByStageId(stageId) local stageIndex = XSuperTowerManager.GetStageIndexByStageId(stageId) if teamId and stageIndex > 0 then return TeamManager:GetTeamById(teamId, stageIndex) end return nil end --=============== --=============== --根据关卡类型获取队伍对象(多队伍时会返回该类型所有队伍对象) --若查不到结果,会返回nil --@param stageType:(XSuperTowerManager.StageType) --@param teamCount:多队伍类型时需要获取的队伍数 --=============== function XSuperTowerManager.GetTeamByStageType(stageType, teamCount) local teamId = XSuperTowerManager.GetTeamIdByStageType(stageType) if teamId then if stageType == XSuperTowerManager.StageType.MultiTeamMultiWave then local teamList = {} local count = teamCount or 0 for index = 1, count do table.insert(teamList, TeamManager:GetTeamById(teamId, index)) end return next(teamList) and teamList else return TeamManager:GetTeamById(teamId)--单队伍时不需要设置关卡序号(有且仅有1),默认为1 end end return nil end --=============== --根据关卡ID获取目标关卡ID --=============== function XSuperTowerManager.GetTargetStageIdByStageId(stageId) return StageManager:GetTargetStageIdByStageId(stageId) end --=============== --根据关卡ID获取目标关卡的关卡数量 --=============== function XSuperTowerManager.GetTargetStageCountByStageId(stageId) local targetStage = StageManager:GetTargetStageByStageId(stageId) if targetStage == nil then return 0 end return #targetStage:GetStageId() end --=============== --根据关卡ID获取目标关卡数据实体 --=============== function XSuperTowerManager.GetTargetStageByStageId(stageId) return StageManager:GetTargetStageByStageId(stageId) end --=============== --根据关卡Id获取关卡在目标关卡中的序号 --=============== function XSuperTowerManager.GetStageIndexByStageId(stageId) return StageManager:GetStageIndexByStageId(stageId) end --=============== --根据队伍实体获取该队伍中所有角色ID --=============== function XSuperTowerManager.GetCharacterIdListByTeamEntity(stTeam) local characterIds = {} if stTeam then for index,id in pairs(stTeam:GetEntityIds()) do local role = RoleManager:GetRole(id) if role then characterIds[index] = role:GetCharacterId() else characterIds[index] = 0 end end end return characterIds end --=============== --清除多队伍关卡的所有队伍数据 --=============== function XSuperTowerManager.ClearAllMultiTeamsData() local teamMaxCount = StageManager:GetMaxStageCount() local teamId = XSuperTowerManager.TeamId[XSuperTowerManager.StageType.MultiTeamMultiWave] for index = 1,teamMaxCount do TeamManager:ClearTeam(teamId, index) end end --=============== --一键上阵 --=============== function XSuperTowerManager.AutoTeam(stStage) local normalRoleList = RoleManager:GetCanFightRoles(XCharacterConfigs.CharacterType.Normal) local isomerRoleList = RoleManager:GetCanFightRoles(XCharacterConfigs.CharacterType.Isomer) XSuperTowerManager.ClearAllMultiTeamsData() local stageIdList = stStage:GetStageId() table.sort(normalRoleList, function(a, b) return a:GetAbility() > b:GetAbility() end) table.sort(isomerRoleList, function(a, b) return a:GetAbility() > b:GetAbility() end) -- 正在使用的角色id字典 local usingCharacterIdDic = {} for index,stageId in pairs(stageIdList or {}) do --优先选择倾向构造体 local memberCount = stStage:GetMemberCountByIndex(index) local recommendType = XFubenConfigs.GetStageRecommendCharacterType(stageId) or XCharacterConfigs.CharacterType.Normal local team = XSuperTowerManager.GetTeamByStageId(stageId) team:Clear() local charIndex = 1 local curCount = 1 local roleList if recommendType == XCharacterConfigs.CharacterType.Isomer then roleList = isomerRoleList elseif recommendType == XCharacterConfigs.CharacterType.Normal then roleList = normalRoleList end while curCount <= memberCount do local role = roleList[charIndex] if role then if XFubenConfigs.IsStageRecommendCharacterType(stageId, role:GetId()) and -- not team:CheckHasSameCharacterId(role:GetId() not usingCharacterIdDic[role:GetCharacterId()] then team:UpdateEntityTeamPos(role:GetId(), curCount, true) usingCharacterIdDic[role:GetCharacterId()] = true if curCount == 1 then team:UpdateFirstFightPos(curCount) team:UpdateCaptainPos(curCount) end table.remove(roleList,charIndex) charIndex = charIndex - 1 curCount = curCount + 1 end else break end charIndex = charIndex + 1 end end for index,stageId in pairs(stageIdList or {}) do --补足非倾向构造体 local memberCount = stStage:GetMemberCountByIndex(index) local recommendType = XFubenConfigs.GetStageRecommendCharacterType(stageId) or XCharacterConfigs.CharacterType.Normal local team = XSuperTowerManager.GetTeamByStageId(stageId) local charIndex = 1 local curCount = 1 local roleList if recommendType == XCharacterConfigs.CharacterType.Isomer then roleList = isomerRoleList elseif recommendType == XCharacterConfigs.CharacterType.Normal then roleList = normalRoleList end while curCount <= memberCount do if team:GetEntityIdByTeamPos(curCount) == 0 then local role = roleList[charIndex] if role then -- not team:CheckHasSameCharacterId(role:GetId()) if not usingCharacterIdDic[role:GetCharacterId()] then team:UpdateEntityTeamPos(role:GetId(), curCount, true) usingCharacterIdDic[role:GetCharacterId()] = true if curCount == 1 then team:UpdateFirstFightPos(curCount) team:UpdateCaptainPos(curCount) end table.remove(roleList,charIndex) charIndex = charIndex - 1 curCount = curCount + 1 end else break end charIndex = charIndex + 1 else curCount = curCount + 1 end end end end --=============== --一键填充插件 --stStage : XSuperTowerTargetStage --=============== function XSuperTowerManager.AutoPulgin(stStage) local teamManager = XDataCenter.SuperTowerManager.GetTeamManager() local teams = teamManager:GetTeamsByIdAndCount(XDataCenter.SuperTowerManager.TeamId[stStage:GetStageType()] , XSuperTowerConfigs.MaxMultiTeamCount) teamManager:AutoSelectPlugins2Teams(teams) end --=============== --检查背包与特权弹窗 --=============== function XSuperTowerManager.CheckPopupWindow(callBack) local unLockFuncList = FunctionManager:GetUnlockList() if unLockFuncList and #unLockFuncList > 0 then XLuaUiManager.Open("UiSuperTowerUnlockTips", unLockFuncList, function() XSuperTowerManager.CheckPopupWindow(callBack) end) return end local hasUpdate, last, current = BagManager:CheckMaxCapacityUpdate() if hasUpdate then XLuaUiManager.Open("UiSupertowerUpTips", last, current, function() XSuperTowerManager.CheckPopupWindow(callBack) end) return end if callBack then callBack() end end --=============== --根据关卡ID获取队伍对象 --若查不到结果,会返回nil --@param stStage:目标关卡 --=============== function XSuperTowerManager.CheckTeamListAllHasCaptainAndFirstPos(stStage) local IsNotHasCaptain = false local IsNotHasFirstPos = false for index,stageId in pairs(stStage:GetStageId() or {}) do local teamId = XSuperTowerManager.GetTeamIdByStageId(stageId) if teamId then local team = TeamManager:GetTeamById(teamId, index) if not team:GetCaptainPosEntityId() or team:GetCaptainPosEntityId() == 0 then IsNotHasCaptain = true end if not team:GetFirstFightPosEntityId() or team:GetFirstFightPosEntityId() == 0 then IsNotHasFirstPos = true end end end return not IsNotHasCaptain, not IsNotHasFirstPos end --=============== --检查现在是否在活动时间内(根据TimeId) --=============== function XSuperTowerManager.CheckActivityIsInTime() local now = XTime.GetServerNowTimestamp() return (now >= XSuperTowerManager.GetActivityStartTime()) and (now < XSuperTowerManager.GetActivityEndTime()) end --=============== --根据特权Key检查特权是否解锁 --@param key:特权键值 XSuperTowerManager.FunctionName --=============== function XSuperTowerManager.CheckFunctionUnlockByKey(key) return FunctionManager:CheckFunctionUnlockByKey(key) end ------------------------------------------------------------------ ------------------------------------------------------------------ --=============== --获取主题选择状态的本地数据 -- --=============== function XSuperTowerManager.GetCurSelectThemeIndex() local activityId = XSuperTowerManager.GetActivityId() return XSaveTool.GetData(string.format( "%sSuperTowerCurSelectThemeIndex%s", XPlayer.Id, activityId)) end --=============== --保存主题选择状态的本地数据 --index:主题序号 --=============== function XSuperTowerManager.SaveCurSelectThemeIndex(index) local activityId = XSuperTowerManager.GetActivityId() local data = XSaveTool.GetData(string.format( "%sSuperTowerCurSelectThemeIndex%s", XPlayer.Id, activityId)) if not data then XSaveTool.SaveData(string.format( "%sSuperTowerCurSelectThemeIndex%s", XPlayer.Id, activityId), index) end end --=============== --删除主题选择状态的本地数据 --=============== function XSuperTowerManager.RemoveCurSelectThemeIndex() local activityId = XSuperTowerManager.GetActivityId() local data = XSaveTool.GetData(string.format( "%sSuperTowerCurSelectThemeIndex%s", XPlayer.Id, activityId)) if data then XSaveTool.RemoveData(string.format( "%sSuperTowerCurSelectThemeIndex%s", XPlayer.Id, activityId)) end end ------------------------------------------------------------------ ------------------------------------------------------------------ --===================== --确认目标关卡战斗结果 --@param targetStageId :目标关卡ID --@response res.RewardGoodsList :奖励列表 --===================== function XSuperTowerManager.ConfirmTargetResultRequest(targetStageId, cb) XNetwork.Call(METHOD_NAME.StConfirmTargetResultRequest, {TargetId = targetStageId}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end if cb then cb(res.RewardGoodsList) end end) end ------------------------------------------------------------------ ------------------------------------------------------------------ --===================== --处理登陆活动内容推送 --@data : { -- 活动id public int Id, -- 地图信息列表 public List MapInfos, -- 超限角色信息 public List CharacterInfos, -- 背包信息 public StBagInfo BagInfo } --===================== function XSuperTowerManager.RefreshLoginData(data) if data and next(data) and not InitialManagers then XSuperTowerManager.InitManagers() XSuperTowerManager.InitStageInfo() end StageManager:RefreshNotifyMapInfo(data.MapInfos) RoleManager:InitWithServerData(data.CharacterInfos) BagManager:InitWithServerData(data.BagInfo) ShopManager:UpdateShopData(data.MallInfo) FunctionManager:SetUnLockEvent() --初始化特权需要在首次刷新关卡数据的时候 end --===================== --替换fubenmanager里的OpenFightLoading() --===================== function XSuperTowerManager.OpenFightLoading(stageId) local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) if stageType == XSuperTowerManager.StageType.MultiTeamMultiWave then local targetStage = XSuperTowerManager.GetTargetStageByStageId(stageId) local tempProgress = StageManager:GetTempProgressByTargetId(targetStage:GetId()) XLuaUiManager.Open("UiSuperTowerLoading", targetStage, tempProgress + 1) else XDataCenter.FubenManager.OpenFightLoading(stageId) end end --===================== --替换fubenmanager里的CloseFightLoading() --===================== function XSuperTowerManager.CloseFightLoading(stageId) local stageType = XSuperTowerManager.GetStageTypeByStageId(stageId) if stageType == XSuperTowerManager.StageType.MultiTeamMultiWave then if XLuaUiManager.IsUiLoad("UiSuperTowerLoading") then XLuaUiManager.Remove("UiSuperTowerLoading") end else XDataCenter.FubenManager.CloseFightLoading(stageId) end end --=================================入口,跳转相关============================= --=================== --获取活动配置简表 --=================== function XSuperTowerManager.GetActivityChapters() --只有活动开启期间显示入口 local isEnd = XSuperTowerManager.GetIsEnd() if isEnd then return {} end local chapters = {} local tempChapter = {} tempChapter.Type = XDataCenter.FubenManager.ChapterType.SuperTower tempChapter.Id = XSuperTowerManager.GetActivityId() table.insert(chapters, tempChapter) return chapters end --================ --跳转到活动主界面 --================ function XSuperTowerManager.JumpTo() if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.SuperTower) then local canGoTo, notStart = XSuperTowerManager.CheckCanGoTo() if canGoTo then XLuaUiManager.Open("UiSuperTowerMain") elseif notStart then XUiManager.TipMsg(CS.XTextManager.GetText("CommonActivityNotStart")) else XUiManager.TipMsg(CS.XTextManager.GetText("CommonActivityEnd")) end end end --================ --检查是否能进入玩法 --@return param1:是否在活动时间内(true为在活动时间内) --@return param2:是否未开始活动(true为未开始活动) --================ function XSuperTowerManager.CheckCanGoTo() local isActivityEnd, notStart = XSuperTowerManager.GetIsEnd() return not isActivityEnd, notStart end --================ --跳转到爬塔关卡准备界面 --若有正在爬的塔则跳转到正在爬的塔 --没有的话跳转到最新章节的塔 --================ function XSuperTowerManager.SkipToSuperTowerTier() local playingId = StageManager:GetPlayingTierId() local theme if playingId > 0 then theme = StageManager:GetThemeById(playingId) else theme = StageManager:GetThemeByClearProgress() end XLuaUiManager.Open("UiSuperTowerStageDetail04", theme) end --================ --获取玩法是否关闭(用于判断玩法入口,进入活动条件等) --@return param1:玩法是否关闭 --@return param2:是否活动未开启 --================ function XSuperTowerManager.GetIsEnd() local timeNow = XTime.GetServerNowTimestamp() local isEnd = timeNow >= XSuperTowerManager.GetActivityEndTime() local isStart = timeNow >= XSuperTowerManager.GetActivityStartTime() local inActivity = (not isEnd) and (isStart) return not inActivity, timeNow < XSuperTowerManager.GetActivityStartTime() end --================ --玩法关闭时弹出主界面 --================ function XSuperTowerManager.HandleActivityEndTime() XLuaUiManager.RunMain() XUiManager.TipMsg(CS.XTextManager.GetText("STActivityTimeEnd")) end --===================================================================== XSuperTowerManager.Init() XEventManager.AddEventListener(XEventId.EVENT_FUBEN_SETTLE_REWARD,XSuperTowerManager.FinishFight) return XSuperTowerManager end --===================== --登陆活动内容推送 --@data : { -- 活动id public int Id, -- 地图信息列表 public List MapInfos, -- 超限角色信息 public List CharacterInfos, -- 背包信息 public StBagInfo BagInfo } --===================== XRpc.NotifySuperTowerLoginData = function(data) XDataCenter.SuperTowerManager.RefreshLoginData(data) end --[[ XRpc.NotifyStMapTierData = function(data) XDataCenter.SuperTowerManager.GetStageManager():RefreshStMapTierData(data) end ]] XRpc.NotifyStMapTargetData = function(data) XDataCenter.SuperTowerManager.GetStageManager():RefreshStMapTargetData(data) end --[[ XRpc.NotifyTargetStageFightResult = function(data) XDataCenter.SuperTowerManager.GetStageManager():SetTempProgress(data) end ]] XRpc.NotifySuperTowerMallRefreshData = function(data) local shopManager = XDataCenter.SuperTowerManager.GetShopManager() if shopManager then shopManager:OnrMallRefreshData(data) end end XRpc.NotifySuperTowerMallData = function(data) local shopManager = XDataCenter.SuperTowerManager.GetShopManager() if shopManager then shopManager:UpdateShopData(data.MallInfo) end end -- 背包最大容量 XRpc.NotifyStBagCapacity = function(data) XDataCenter.SuperTowerManager.GetBagManager():UpdateMaxCapacity(data.Capacity) end -- 背包插件更新 XRpc.NotifyStBagPluginChange = function(data) XDataCenter.SuperTowerManager.GetBagManager():OnBagPluginChange(data) end -- 通知背包插件合成数据 -- data : List XRpc.NotifyStBagPluginSynthesisData = function(pluginSynthesisInfos) XDataCenter.SuperTowerManager.GetBagManager():OnBagPluginSynthesisData(pluginSynthesisInfos) end