Files
Endfield-Data/LuaScripts/Phase/PresetTeamSwitch/PhasePresetTeamSwitch.lua
2026-01-31 21:42:01 +07:00

317 lines
8.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local phaseBase = require_ex('Phase/Core/PhaseBase')
local PHASE_ID = PhaseId.PresetTeamSwitch
local PhaseFuncState = {
PresetTeamSwitch = 1,
DungeonCharacter = 2,
PresetTeamDungeon = 3,
}
PhasePresetTeamSwitch = HL.Class('PhasePresetTeamSwitch', phaseBase.PhaseBase)
PhasePresetTeamSwitch.m_currFuncState = HL.Field(HL.Any)
PhasePresetTeamSwitch.m_dungeonId = HL.Field(HL.String) << ""
PhasePresetTeamSwitch.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.SHOW_ENTER_FOCUS_MODE_CONFIRM] = { 'ShowEnterFocusModeConfirm', false },
[MessageConst.SHOW_ENTER_PRESET_TEAM_DUNGEON_CONFIRM] = {'ShowEnterPresetTeamDungeonConfirm', false}
}
PhasePresetTeamSwitch.ShowEnterFocusModeConfirm = HL.StaticMethod(HL.Table) << function(arg)
local focusModeInstId, onConfirm = unpack(arg)
local _, focusModeData = GameInstance.dataManager.focusModeInstDataTable:TryGetValue(focusModeInstId)
if not focusModeData then
logger.error('Focus mode data not found for ID: %s', focusModeInstId)
return
end
PhaseManager:GoToPhase(PHASE_ID, {
title = Language.LUA_ENTER_FOCUS_MODE_POPUP_TITLE,
subTitle = Language.LUA_ENTER_FOCUS_MODE_POPUP_SUB_TITLE,
presetTeamId = focusModeData.presetTeamId,
onConfirm = onConfirm,
})
end
PhasePresetTeamSwitch.ShowEnterPresetTeamDungeonConfirm = HL.StaticMethod(HL.Table) << function(arg)
local dungeonSeriesId = unpack(arg)
local dunSeriesId = dungeonSeriesId
local dunSeriesData = Tables.DungeonSeriesTable[dunSeriesId]
local dungeonId = dunSeriesData.includeDungeonIds[0]
local _, dungeonCfg = Tables.DungeonTable:TryGetValue(dungeonId)
local teamId = dungeonCfg.previewCharTeamId
if teamId == nil then
logger.error('试图通过【副本入口 - 预设编队Only】交互物进入一个没配预设编队的副本 %s', dungeonSeriesId)
return
end
local charInfo = CharInfoUtils.getLockedFormationData(teamId, true)
if charInfo == nil then
logger.error('试图通过【副本入口 - 预设编队Only】交互物无法获取预设编队的副本 %s %s', dungeonSeriesId, teamId)
return
end
local allPresetTeam = charInfo.lockedTeamMemberCount >= charInfo.maxTeamMemberCount
if not allPresetTeam then
logger.error('试图通过【副本入口 - 预设编队Only】交互物进入一个非纯预设编队副本 %s %s', dungeonSeriesId, teamId)
return
end
PhaseManager:GoToPhase(PHASE_ID, {
dungeonSeriesId = dungeonSeriesId,
presetTeamDungeon = true,
})
end
PhasePresetTeamSwitch._OnInit = HL.Override() << function(self)
PhasePresetTeamSwitch.Super._OnInit(self)
end
PhasePresetTeamSwitch._InitAllPhaseItems = HL.Override() << function(self)
if self.arg.presetTeamDungeon == true then
self.m_currFuncState = PhaseFuncState.PresetTeamDungeon
elseif self:_CheckIsDungeonCharacter() then
self.m_currFuncState = PhaseFuncState.DungeonCharacter
else
self.m_currFuncState = PhaseFuncState.PresetTeamSwitch
end
local arg = {}
if self.m_currFuncState == PhaseFuncState.PresetTeamSwitch then
arg = self:_CreateTeamSwitchArg()
elseif self.m_currFuncState == PhaseFuncState.DungeonCharacter then
arg = self:_CreateDungeonCharArg()
elseif self.m_currFuncState == PhaseFuncState.PresetTeamDungeon then
arg = self:_CreatePresetTeamDungeonArg()
end
self:CreatePhasePanelItem(PanelId.PresetTeamSwitch, arg)
end
PhasePresetTeamSwitch._CheckIsDungeonCharacter = HL.Method().Return(HL.Boolean) << function(self)
if self.arg.dungeonSeriesId == nil then
return false
end
local dunSeriesId = self.arg.dungeonSeriesId
local dunSeriesData = Tables.DungeonSeriesTable[dunSeriesId]
local dungeonId = dunSeriesData.includeDungeonIds[0]
if dungeonId == nil then
return false
end
self.m_dungeonId = dungeonId
return DungeonUtils.isDungeonChar(dungeonId)
end
PhasePresetTeamSwitch._CreatePresetTeamDungeonArg = HL.Method().Return(HL.Table) << function(self)
local dunSeriesId = self.arg.dungeonSeriesId
local dunSeriesData = Tables.DungeonSeriesTable[dunSeriesId]
local dungeonId = dunSeriesData.includeDungeonIds[0]
local _, dungeonCfg = Tables.DungeonTable:TryGetValue(dungeonId)
local teamId = dungeonCfg.previewCharTeamId
local charInfo = CharInfoUtils.getLockedFormationData(teamId, true)
local arg = {
title = Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_TITLE,
subTitle = Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_SUBTITLE,
presetTeamId = teamId,
hideTeam = true,
onConfirm = function()
local charInfos = {}
for _, char in ipairs(charInfo.chars) do
local presetCharInfo = CharInfoUtils.getPlayerCharInfoByInstId(char.charInstId)
table.insert(charInfos, presetCharInfo)
end
if GameInstance.dungeonManager:TryReqEnterDungeon(dungeonId, charInfos) then
Utils.reportPlacementEvent(GEnums.ClientPlacementEventType.DungeonBattleFirst)
end
GameInstance.player.charBag:ClearAllClientCharAndItemData()
end,
onCancel = function()
self:CloseSelf()
end,
}
return arg
end
PhasePresetTeamSwitch._CreateTeamSwitchArg = HL.Method().Return(HL.Table) << function(self)
local arg = {
title = self.arg.title,
subTitle = self.arg.subTitle,
presetTeamId = self.arg.presetTeamId,
onConfirm = function()
local onConfirm = self.arg.onConfirm
self:CloseSelf()
if onConfirm then
onConfirm()
end
end,
onCancel = function()
local onCancel = self.arg.onCancel
self:ExitSelfFast()
if onCancel then
onCancel()
end
end,
}
return arg
end
PhasePresetTeamSwitch._CreateDungeonCharArg = HL.Method().Return(HL.Table) << function(self)
local dungeonId = self.m_dungeonId
local _, dungeonCfg = Tables.DungeonTable:TryGetValue(dungeonId)
local teamId = dungeonCfg.previewCharTeamId
local charInfo = CharInfoUtils.getLockedFormationData(teamId, true)
local allPresetTeam = charInfo.lockedTeamMemberCount >= charInfo.maxTeamMemberCount
local arg = {
title = allPresetTeam and Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_TITLE or Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_TITLE_2,
subTitle = allPresetTeam and Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_SUBTITLE or Language.LUA_DUNGEON_CHAR_ENTER_DIALOG_SUBTITLE_2,
presetTeamId = teamId,
hideTeam = allPresetTeam,
onConfirm = function()
if allPresetTeam then
local charInfos = {}
for _, char in ipairs(charInfo.chars) do
local presetCharInfo = CharInfoUtils.getPlayerCharInfoByInstId(char.charInstId)
table.insert(charInfos, presetCharInfo)
end
Notify(MessageConst.DIALOG_CLOSE_UI, {PanelId.PresetTeamSwitch, PHASE_ID, 0})
GameInstance.dungeonManager:TryReqEnterDungeon(dungeonId, charInfos)
GameInstance.player.charBag:ClearAllClientCharAndItemData()
else
GameInstance.player.charBag:ClearAllClientCharAndItemData()
PhaseManager:ExitPhaseFast(PHASE_ID)
PhaseManager:GoToPhase(PhaseId.CharFormation, { dungeonId = dungeonId })
end
end,
onCancel = function()
local onCancel = self.arg.onCancel
if onCancel then
onCancel()
end
Notify(MessageConst.DIALOG_CLOSE_UI, {PanelId.PresetTeamSwitch, PHASE_ID, 0})
end,
}
return arg
end
PhasePresetTeamSwitch.PrepareTransition = HL.Override(HL.Number, HL.Boolean, HL.Opt(HL.Number)) << function(self, transitionType, fastMode, anotherPhaseId)
end
PhasePresetTeamSwitch._DoPhaseTransitionIn = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhasePresetTeamSwitch._DoPhaseTransitionOut = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhasePresetTeamSwitch._DoPhaseTransitionBehind = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhasePresetTeamSwitch._DoPhaseTransitionBackToTop = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhasePresetTeamSwitch._OnActivated = HL.Override() << function(self)
end
PhasePresetTeamSwitch._OnDeActivated = HL.Override() << function(self)
end
PhasePresetTeamSwitch._OnDestroy = HL.Override() << function(self)
PhasePresetTeamSwitch.Super._OnDestroy(self)
end
HL.Commit(PhasePresetTeamSwitch)