Files
StellaSora_DataLua/lua/game/common/utils/jumputil.lua
T
SL1900 08b515afd9 Major Update - 2.0.0.143
EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
2026-10-20 13:00:00 +09:00

669 lines
28 KiB
Lua

local JumpUtil = {}
local ModuleManager = require("GameCore.Module.ModuleManager")
local LocalData = require("GameCore.Data.LocalData")
function JumpUtil.JumpTo(jumpId, ...)
if jumpId == nil then
return
end
local args = {
...
}
local checkCallback = function(bNeedOpenPanel, bNeedTransition, nTransitionId, nTransitionType)
local sCurModule = ModuleManager.GetCurModuleName()
if sCurModule == "DormModuleScene" then
if not bNeedOpenPanel then
JumpUtil.DoJump(jumpId, table.unpack(args))
return
end
local nUseTransitionId = nTransitionId == 0 and 6 or nTransitionId
local transitionOpenCallback = function()
PanelManager.Home()
local function OnEventAfterEnterMain()
EventManager.Remove(EventId.AfterEnterMain, JumpUtil, OnEventAfterEnterMain)
PanelManager.IGNORE_CS_TRANS_EVENT = false
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
JumpUtil.DoJump(jumpId, table.unpack(args))
if not bNeedTransition then
EventManager.Hit(EventId.SetTransition)
end
end
cs_coroutine.start(wait)
end
local function OnEventDormLevelFinish()
EventManager.Remove("DORM_LEVEL_FINISH", JumpUtil, OnEventDormLevelFinish)
PanelManager.IGNORE_CS_TRANS_EVENT = true
NovaAPI.EnterModule("MainMenuModuleScene", true)
end
EventManager.Add("DORM_LEVEL_FINISH", JumpUtil, OnEventDormLevelFinish)
EventManager.Add(EventId.AfterEnterMain, JumpUtil, OnEventAfterEnterMain)
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
end
EventManager.Hit(EventId.SetTransition, nUseTransitionId, transitionOpenCallback, AllEnum.MainViewCorner.Dorm)
else
local transitionOpenCallback = function()
JumpUtil.DoJump(jumpId, table.unpack(args))
end
if bNeedTransition then
EventManager.Hit(EventId.SetTransition, nTransitionId, transitionOpenCallback, nTransitionType)
else
transitionOpenCallback()
end
end
end
JumpUtil.JumpCheckAndTransition(jumpId, checkCallback, ...)
end
function JumpUtil.JumpCheckAndTransition(jumpId, callback, ...)
local unLock, mapJumpTo = JumpUtil.CheckJumpUnLock(jumpId, true)
if not unLock then
callback(false, false, 0)
return
end
if mapJumpTo == nil then
printError("未配置此跳转Id, JumpId: " .. jumpId)
callback(false, false, 0)
return
end
local nType = mapJumpTo.Type
if nType == GameEnum.jumpType.Shop then
callback(true, true, 5)
elseif nType == GameEnum.jumpType.Mall then
if PanelManager.CheckPanelOpen(PanelId.Mall) or PanelManager.CheckPanelOpen(PanelId.MallPopup) then
callback(false, false, 0)
else
local nState = ConfigTable.GetConfigNumber("IsShowComBtn")
if nState == 1 then
callback(true, true, 5)
else
callback(false, false, 0)
end
end
elseif nType == GameEnum.jumpType.Gacha then
local getInfoCallback = function()
callback(true, true, 6)
end
PlayerData.Gacha:GetGachaInfomation(getInfoCallback)
elseif nType == GameEnum.jumpType.TravelerDuelLevel then
local checkCallback = function()
local trekkerVersusData
local tbActList = PlayerData.Activity:GetActivityList()
for nId, v in pairs(tbActList) do
local nActType = v:GetActType()
if nActType == GameEnum.activityType.TrekkerVersus then
trekkerVersusData = v
break
end
end
if trekkerVersusData ~= nil then
local nActEndTime = trekkerVersusData:GetChallengeEndTime()
local nCurTime = CS.ClientManager.Instance.serverTimeStamp
if nActEndTime < nCurTime then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
return
end
callback(true, true, 30)
end
end
PlayerData.Activity:SendActivityDetailMsg(checkCallback)
elseif nType == GameEnum.jumpType.Crafting then
if PanelManager.CheckPanelOpen(PanelId.CraftingTip) then
callback(false, false, 0)
elseif PanelManager.CheckPanelOpen(PanelId.Crafting) then
callback(false, false, 0)
else
callback(true, false, 0)
end
elseif nType == GameEnum.jumpType.StarTower then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
local nStarTowerId = mapJumpTo.Param[1]
local mapStarTower = ConfigTable.GetData("StarTower", nStarTowerId)
if mapStarTower == nil then
return
end
callback(true, false, 0)
elseif nType == GameEnum.jumpType.StarTowerGroup then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
callback(true, false, 0)
elseif nType == GameEnum.jumpType.StarTowerPanel then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
callback(true, false, 0)
elseif nType == GameEnum.jumpType.InfinityTower then
callback(true, true, 0)
elseif nType == GameEnum.jumpType.Phone then
local openCallback = function()
callback(true, false, 0)
end
PlayerData.Base:CheckFunctionBtn(GameEnum.OpenFuncType.Phone, openCallback)
elseif nType == GameEnum.jumpType.Vampire then
local stateCallback = function(bReEnter)
if not bReEnter then
local function success(bSuccess)
EventManager.Remove("GetTalentDataVampire", JumpUtil, success)
if bSuccess then
callback(true, true, 13)
end
end
EventManager.Add("GetTalentDataVampire", JumpUtil, success)
local ret, _, _ = PlayerData.VampireSurvivor:GetTalentData()
if ret ~= nil then
success(true)
end
end
end
local callbackCheck = function()
PlayerData.State:CheckVampireState(stateCallback)
end
PlayerData.Base:CheckFunctionBtn(GameEnum.OpenFuncType.VampireSurvivor, callbackCheck, "ui_systerm_locked")
elseif nType == GameEnum.jumpType.ComCYO then
callback(false, false, 0)
elseif nType == GameEnum.jumpType.ScoreBoss then
local openSC = function()
callback(true, false, 0)
end
if not PlayerData.ScoreBoss:GetInitInfoState() then
PlayerData.ScoreBoss:GetScoreBossInstanceData(openSC)
else
openSC()
end
elseif nType == GameEnum.jumpType.StorySet then
PlayerData.StorySet:TryOpenStorySetPanel(function()
callback(true, false, 0)
end)
elseif nType == GameEnum.jumpType.StarTowerGrowth then
local checkCallback = function()
callback(true, false, 0)
end
PlayerData.StarTower:SendTowerGrowthDetailReq(checkCallback)
elseif nType == GameEnum.jumpType.ActivityTask then
local nActId = mapJumpTo.Param[1]
if PlayerData.Activity:IsActivityInActivityGroup(nActId) then
local actGroupId = ConfigTable.GetData("Activity", nActId).MidGroupId
if actGroupId == 0 then
return
end
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
if taskActData ~= nil and taskActData:CheckActivityOpen() then
callback(true, false, 0)
return
end
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_End_Notice"))
end
elseif nType == GameEnum.jumpType.QuestNewbie then
if PanelManager.GetCurPanelId() == PanelId.QuestNewbie then
callback(false, false, 0)
else
callback(true, false, 0)
end
elseif nType == GameEnum.jumpType.TraceHunt then
local afterReq = function()
if PlayerData.TraceHunt:GetControlLeftTime() <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TraceHunt_Tips_ControlInterrupt"))
callback(false, false, 0)
return
end
callback(true, true, 49)
end
PlayerData.TraceHunt:SendTraceHuntInfoReq(afterReq)
elseif nType == GameEnum.jumpType.Dorm then
if ModuleManager.GetCurModuleName() == "DormModuleScene" then
return
end
local GetRoomInfoCallback = function(mapDormRoomInfo, mapDormBaseInfo)
if next(mapDormRoomInfo) == nil then
return
end
callback(true, true, 6, AllEnum.MainViewCorner.Dorm)
end
local GetBagInfoCallback = function()
PlayerData.PlayerDormData:GetRoomInfo(GetRoomInfoCallback)
end
PlayerData.PlayerDormData:GetBagInfo(GetBagInfoCallback)
else
callback(true, false, 0)
end
end
function JumpUtil.DoJump(jumpId, ...)
local unLock, mapJumpTo = JumpUtil.CheckJumpUnLock(jumpId, true)
if not unLock then
return false
end
if mapJumpTo == nil then
printError("未配置此跳转Id, JumpId: " .. jumpId)
return false
end
PanelManager.CloseAllDisposablePanel()
local nType = mapJumpTo.Type
EventManager.Hit(EventId.JumpToSuccess, nType)
if nType == GameEnum.jumpType.Mainline then
local nMainlineId = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.MainlineEx, nMainlineId)
elseif nType == GameEnum.jumpType.Rogue then
printError("不再支持老遗迹跳转")
elseif nType == GameEnum.jumpType.RogueGroup then
printError("不再支持老遗迹跳转")
elseif nType == GameEnum.jumpType.RoguePanel then
EventManager.Hit(EventId.OpenPanel, PanelId.RoguelikeLevel, 0, 0, true)
elseif nType == GameEnum.jumpType.RegionBoss then
local nRegionBossGroupId = mapJumpTo.Param[1]
local nHard = mapJumpTo.Param[2]
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossLevel, nHard, nRegionBossGroupId, true)
elseif nType == GameEnum.jumpType.RegionBossGroup then
local nRegionBossGroupId = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossLevel, 0, nRegionBossGroupId, true)
elseif nType == GameEnum.jumpType.RegionBossPanel then
EventManager.Hit(EventId.OpenPanel, PanelId.RogueBossLevel, 0, 0, true)
elseif nType == GameEnum.jumpType.Map then
EventManager.Hit(EventId.OpenPanel, PanelId.LevelMenu)
elseif nType == GameEnum.jumpType.Shop then
local nTabIndex = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.ShopPanel, nTabIndex)
elseif nType == GameEnum.jumpType.Mall then
local nTabIndex1 = mapJumpTo.Param[1]
local nTabIndex2 = mapJumpTo.Param[2]
if PanelManager.CheckPanelOpen(PanelId.Mall) then
EventManager.Hit("OpenMallTog", nTabIndex1)
elseif PanelManager.CheckPanelOpen(PanelId.MallPopup) then
EventManager.Hit(EventId.ClosePanel, PanelId.MallPopup)
EventManager.Hit("OpenMallTog", nTabIndex1)
else
local nState = ConfigTable.GetConfigNumber("IsShowComBtn")
if nState == 1 then
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, nTabIndex1, nTabIndex2)
else
local sContent = ConfigTable.GetUIText("Function_NotAvailable")
EventManager.Hit(EventId.OpenMessageBox, sContent)
end
end
elseif nType == GameEnum.jumpType.Gacha then
local nPoolId = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.GachaSpin, nPoolId)
elseif nType == GameEnum.jumpType.DailyInstanceLevel then
local nHard = mapJumpTo.Param[1]
local nDailyType = mapJumpTo.Param[2]
if nDailyType == nil then
EventManager.Hit(EventId.OpenPanel, PanelId.LevelMenu, 3)
else
EventManager.Hit(EventId.OpenPanel, PanelId.DailyInstanceLevelSelect, nHard, nDailyType, true)
end
elseif nType == GameEnum.jumpType.TravelerDuelLevel then
local callback = function()
local trekkerVersusData
local tbActList = PlayerData.Activity:GetActivityList()
for nId, v in pairs(tbActList) do
local nActType = v:GetActType()
if nActType == GameEnum.activityType.TrekkerVersus then
trekkerVersusData = v
break
end
end
if trekkerVersusData ~= nil then
local nActEndTime = trekkerVersusData:GetChallengeEndTime()
local nCurTime = CS.ClientManager.Instance.serverTimeStamp
if nActEndTime < nCurTime then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Invalid_Tip_3"))
return
end
local func = function()
EventManager.Hit(EventId.OpenPanel, PanelId.TrekkerVersus, trekkerVersusData.nActId)
end
EventManager.Hit(EventId.SetTransition, 30, func)
end
end
PlayerData.Activity:SendActivityDetailMsg(callback)
elseif nType == GameEnum.jumpType.Depot then
local nItemMark = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.DepotPanel, nItemMark)
elseif nType == GameEnum.jumpType.CharacterList then
PlayerData.Char:TempClearCharInfoData()
EventManager.Hit(EventId.OpenPanel, PanelId.CharList)
elseif nType == GameEnum.jumpType.Crafting then
local nProductionId = mapJumpTo.Param[1]
if PanelManager.CheckPanelOpen(PanelId.CraftingTip) then
local callback = function()
EventManager.Hit(EventId.TemporaryBlockInput, 0.1)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.1))
EventManager.Hit(EventId.OpenPanel, PanelId.CraftingTip, nProductionId)
end
cs_coroutine.start(wait)
end
EventManager.Hit("CloseCraftingTipPanel", callback)
elseif PanelManager.CheckPanelOpen(PanelId.Crafting) then
EventManager.Hit("JumpToProduction", nProductionId)
else
EventManager.Hit(EventId.OpenPanel, PanelId.CraftingTip, nProductionId)
end
elseif nType == GameEnum.jumpType.StarTower then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
local nStarTowerId = mapJumpTo.Param[1]
local mapStarTower = ConfigTable.GetData("StarTower", nStarTowerId)
if mapStarTower == nil then
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerLevelSelect, mapStarTower.Difficulty, mapStarTower.GroupId, true)
elseif nType == GameEnum.jumpType.StarTowerGroup then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
local nStarTowerGroupId = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerLevelSelect, 0, nStarTowerGroupId, true)
elseif nType == GameEnum.jumpType.StarTowerPanel then
local bState = PlayerData.State:CheckStarTowerState()
if bState then
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.LevelMenu, 2)
elseif nType == GameEnum.jumpType.Disc then
EventManager.Hit(EventId.OpenPanel, PanelId.DiscList)
elseif nType == GameEnum.jumpType.EquipmentPanel then
EventManager.Hit(EventId.OpenPanel, PanelId.EquipmentInstanceLevelSelect)
elseif nType == GameEnum.jumpType.EquipmentGroup then
local nGroup = mapJumpTo.Param[1]
local nRewardType = mapJumpTo.Param[2]
EventManager.Hit(EventId.OpenPanel, PanelId.EquipmentInstanceLevelSelect, 0, nGroup, true, nRewardType)
elseif nType == GameEnum.jumpType.MainlineStory then
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter)
elseif nType == GameEnum.jumpType.InfinityTower then
CS.WwiseAudioManager.Instance:PlaySound("ui_level_select")
EventManager.Hit(EventId.OpenPanel, PanelId.InfinityTowerSelectTower)
elseif nType == GameEnum.jumpType.InfinityTowerGroup then
local nStarTowerId = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.InfinityTowerSelectTower, nStarTowerId)
CS.WwiseAudioManager.Instance:PlaySound("ui_level_select")
elseif nType == GameEnum.jumpType.Agent then
EventManager.Hit(EventId.OpenPanel, PanelId.DispatchPanel)
CS.WwiseAudioManager.Instance:PlaySound("ui_level_select")
elseif nType == GameEnum.jumpType.Phone then
local nTog = mapJumpTo.Param[1]
PlayerData.Phone:OpenPhonePanel(nil, nTog)
elseif nType == GameEnum.jumpType.Vampire then
EventManager.Hit(EventId.OpenPanel, PanelId.VampireSurvivorLevelSelectPanel)
elseif nType == GameEnum.jumpType.ComCYO then
EventManager.Hit(EventId.OpenPanel, PanelId.Consumable, select(1, ...), select(2, ...), select(3, ...))
elseif nType == GameEnum.jumpType.Quest then
local nTog = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.Quest, nTog)
elseif nType == GameEnum.jumpType.SkillInstancePanel then
EventManager.Hit(EventId.OpenPanel, PanelId.SkillInstanceLevelSelect)
elseif nType == GameEnum.jumpType.SkillInstanceGroup then
local nGroup = mapJumpTo.Param[1]
EventManager.Hit(EventId.OpenPanel, PanelId.SkillInstanceLevelSelect, 0, nGroup, true)
elseif nType == GameEnum.jumpType.ScoreBoss then
EventManager.Hit(EventId.OpenPanel, PanelId.ScoreBossSelectPanel)
elseif nType == GameEnum.jumpType.WeeklyCopies then
EventManager.Hit(EventId.OpenPanel, PanelId.WeeklyCopiesPanel, mapJumpTo.Param[1])
elseif nType == GameEnum.jumpType.StorySet then
EventManager.Hit(EventId.OpenPanel, PanelId.StorySet, true)
elseif nType == GameEnum.jumpType.StarTowerGrowth then
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerGrowth)
elseif nType == GameEnum.jumpType.ActivityTask then
local nActId = mapJumpTo.Param[1]
local panelId = mapJumpTo.Param[2]
local tabId = mapJumpTo.Param[3]
if PlayerData.Activity:IsActivityInActivityGroup(nActId) then
local actGroupId = ConfigTable.GetData("Activity", nActId).MidGroupId
if actGroupId == 0 then
return
end
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
EventManager.Hit(EventId.OpenPanel, panelId, taskActId, tabId)
end
elseif nType == GameEnum.jumpType.MainLineStoryChapter then
local chapterIndex = mapJumpTo.Param[1]
local isUnlock = PlayerData.Avg:IsStoryChapterUnlock(chapterIndex)
if not isUnlock then
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter)
else
EventManager.Hit(EventId.OpenPanel, PanelId.MainlineEx, chapterIndex)
end
elseif nType == GameEnum.jumpType.QuestNewbie then
local nJumpTab = mapJumpTo.Param[1]
if PanelManager.GetCurPanelId() == PanelId.QuestNewbie then
EventManager.Hit("QuestNewbiePanelChangeTab", nJumpTab)
else
EventManager.Hit(EventId.OpenPanel, PanelId.QuestNewbie, nJumpTab)
end
elseif nType == GameEnum.jumpType.CharInfo then
local nCharId = mapJumpTo.Param[1]
local nModuleType = mapJumpTo.Param[2]
local tbCharInfoPanelId = {
[1] = PanelId.CharInfo,
[2] = PanelId.CharSkill,
[3] = PanelId.CharPotential,
[4] = PanelId.CharEquipment,
[5] = PanelId.CharTalent,
[6] = PanelId.CharacterRelation
}
local nCharInfoPanelId = tbCharInfoPanelId[nModuleType] or PanelId.CharInfo
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, nCharInfoPanelId, nCharId, {nCharId})
elseif nType == GameEnum.jumpType.TraceHunt then
EventManager.Hit(EventId.OpenPanel, PanelId.TraceHunt)
elseif nType == GameEnum.jumpType.Soldier then
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierMainViewPanel)
elseif nType == GameEnum.jumpType.Dorm then
EventManager.Hit(EventId.OpenPanel, PanelId.DormPanel)
end
end
function JumpUtil.CheckJumpUnLock(jumpId, showTips)
local mapJumpTo = ConfigTable.GetData("JumpTo", jumpId)
if mapJumpTo == nil then
printError("未配置此跳转Id, JumpId: " .. jumpId)
return false
end
local nType = mapJumpTo.Type
local bOpen = true
local bFuncUnlock = true
local sLockTip = ConfigTable.GetUIText("JumpTo_LevelUnlock")
if nType == GameEnum.jumpType.Mainline then
local nMainlineId = mapJumpTo.Param[1]
bOpen = PlayerData.Mainline:IsMainlineLevelUnlock(nMainlineId)
elseif nType == GameEnum.jumpType.Rogue then
printError("不再支持老遗迹跳转")
elseif nType == GameEnum.jumpType.RogueGroup then
printError("不再支持老遗迹跳转")
elseif nType == GameEnum.jumpType.RegionBossGroup then
local nRegionBossGroupId = mapJumpTo.Param[1]
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.RegionBoss, true)
bOpen = PlayerData.RogueBoss:CheckLevelOpen(nRegionBossGroupId, nil, showTips)
showTips = false
elseif nType == GameEnum.jumpType.RegionBossPanel then
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.RegionBoss, true)
showTips = false
elseif nType == GameEnum.jumpType.RegionBoss then
local nRegionBossGroupId = mapJumpTo.Param[1]
local nHard = mapJumpTo.Param[2]
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.RegionBoss, true)
bOpen = PlayerData.RogueBoss:CheckLevelOpen(nRegionBossGroupId, nHard, showTips)
showTips = false
elseif nType == GameEnum.jumpType.DailyInstanceLevel then
local nHard = mapJumpTo.Param[1]
local nDailyType = mapJumpTo.Param[2]
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.DailyInstance, true)
bOpen = PlayerData.DailyInstance:CheckLevelOpen(nDailyType, nHard, showTips)
showTips = false
elseif nType == GameEnum.jumpType.Crafting then
local nProductionId = mapJumpTo.Param[1]
bOpen = PlayerData.Crafting:CheckProductionUnlock(nProductionId)
sLockTip = ConfigTable.GetUIText("Crafting_Lock_Tip")
elseif nType == GameEnum.jumpType.Shop then
local nShopId = mapJumpTo.Param[1]
bOpen, sLockTip = PlayerData.Shop:CheckShopJumpAble(nShopId)
elseif nType == GameEnum.jumpType.StarTower then
local nStarTowerId = mapJumpTo.Param[1]
bOpen = PlayerData.StarTower:IsStarTowerUnlock(nStarTowerId)
elseif nType == GameEnum.jumpType.StarTowerGroup then
local nStarTowerGroupId = mapJumpTo.Param[1]
bOpen = PlayerData.StarTower:IsStarTowerGroupUnlock(nStarTowerGroupId)
elseif nType == GameEnum.jumpType.EquipmentPanel then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.CharGemInstance, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.CharGemInstance) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.EquipmentGroup then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.CharGemInstance, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.CharGemInstance) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.InfinityTower then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.InfinityTower, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.InfinityTower) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.InfinityTowerGroup then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.InfinityTower, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.InfinityTower) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.TravelerDuelLevel then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.TravelerDuel, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.TravelerDuel) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.Agent then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.Agent, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.Agent) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.Phone then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.Phone, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.Phone) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.Quest then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.Quest, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.Quest) or {}
local nTog = mapJumpTo.Param[1]
if nTog == AllEnum.QuestPanelTab.DailyQuest and bOpen then
bOpen = bOpen and PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.DailyQuest, true)
mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.DailyQuest) or {}
end
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.SkillInstancePanel then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.SkillInstance, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.SkillInstance) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.SkillInstanceGroup then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.SkillInstance, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.SkillInstance) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.ScoreBoss then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.ScoreBoss, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.ScoreBoss) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.WeeklyCopies then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.WeeklyCopies, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.WeeklyCopies) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.QuestNewbie then
bOpen = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.QuestNewbie, true)
local mapLockCfgData = ConfigTable.GetData("OpenFunc", GameEnum.OpenFuncType.QuestNewbie) or {}
sLockTip = UTILS.ParseParamDesc(mapLockCfgData.Tips, mapLockCfgData)
elseif nType == GameEnum.jumpType.CharInfo then
local mapChar = PlayerData.Char:GetCharDataByTid(mapJumpTo.Param[1])
if mapChar == nil then
mapChar = ConfigTable.GetData_Character(mapJumpTo.Param[1])
sLockTip = orderedFormat(ConfigTable.GetUIText("CharacterInfo_NotHave"), mapChar.Name)
bOpen = false
else
bOpen = true
end
elseif nType == GameEnum.jumpType.TraceHunt then
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.TraceHunt, true)
showTips = false
elseif nType == GameEnum.jumpType.Soldier then
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.Soldier, true)
showTips = false
elseif nType == GameEnum.jumpType.Dorm then
bFuncUnlock = PlayerData.Base:CheckFunctionUnlock(GameEnum.OpenFuncType.Dorm, true)
showTips = false
end
bOpen = bFuncUnlock and bOpen
if not bOpen and showTips then
EventManager.Hit(EventId.OpenMessageBox, sLockTip or "")
end
return bOpen, mapJumpTo
end
function JumpUtil.IsActivityJumpType(nJumpType)
if nJumpType == nil then
return false
end
return nJumpType == GameEnum.jumpType.ActivityStory or nJumpType == GameEnum.jumpType.ActivityLevel or nJumpType == GameEnum.jumpType.ActivityGame1 or nJumpType == GameEnum.jumpType.ActivityGame2
end
function JumpUtil.CheckJumpActivityOpen(tbJumpData, bShowTips)
if tbJumpData == nil or #tbJumpData == 0 then
return false
end
local nJumpType = tbJumpData[1]
local nActivityId = tbJumpData[2]
local nPanelId = tbJumpData[3]
if not JumpUtil.IsActivityJumpType(nJumpType) or nActivityId == nil or nPanelId == nil then
if bShowTips then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Not_Open"))
end
return false
end
local actGroupData = PlayerData.Activity:GetActivityGroupDataByActivityId(nActivityId)
if actGroupData == nil then
if bShowTips then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_Not_Open"))
end
return false
end
local bOpen, _state, _sTips, bNeedRefreshData = actGroupData:CheckActivityEntranceOpen(nActivityId, nPanelId, bShowTips)
return bOpen, actGroupData, bNeedRefreshData
end
function JumpUtil.JumpToActivity(tbJumpData)
if tbJumpData[1] == GameEnum.jumpType.MainLineStoryChapter then
local chapterIndex = tbJumpData[2]
local panelId = PanelId.MainlineEx
if chapterIndex == 11 then
panelId = PanelId.DustDawnStory
end
local isUnlock = PlayerData.Avg:IsStoryChapterUnlock(chapterIndex)
if isUnlock then
EventManager.Hit(EventId.OpenPanel, panelId, chapterIndex)
else
local sLockReadTipsKey = "Mainline_Preview_Lock_Read_" .. chapterIndex
if LocalData.GetPlayerLocalData(sLockReadTipsKey) then
EventManager.Hit(EventId.OpenPanel, panelId, chapterIndex)
return
end
local sTip = ConfigTable.GetUIText("Mainline_Preview_Lock_Read")
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTip,
callbackConfirm = function()
LocalData.SetPlayerLocalData(sLockReadTipsKey, true)
EventManager.Hit(EventId.OpenPanel, panelId, chapterIndex)
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
return
end
local bOpen, actGroupData, bNeedRefreshData = JumpUtil.CheckJumpActivityOpen(tbJumpData, true)
if not bOpen or actGroupData == nil then
if bNeedRefreshData then
PlayerData.Activity:SendActivityDetailMsg(nil, true)
end
return
end
local nJumpType = tbJumpData[1]
local nActivityId = tbJumpData[2]
local nPanelId = tbJumpData[3]
PanelManager.CloseAllDisposablePanel()
EventManager.Hit(EventId.JumpToSuccess, nJumpType)
actGroupData:OpenActivityEntrance(nActivityId, nPanelId)
end
return JumpUtil