317 lines
8.8 KiB
Lua
317 lines
8.8 KiB
Lua
|
||
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)
|
||
|