Refine rogue job progression

This commit is contained in:
2026-06-30 01:53:45 +09:00
parent 1847e2d9b2
commit 7db67e3ccd
15 changed files with 416 additions and 191 deletions

View File

@@ -1,9 +1,50 @@
import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs';
import { CARDS, ENEMIES, CLASSES, JOBS, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs';
import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, DISABLED_STOCK_CONTROLS, TRANSPARENT, DARK, GOLD, ATTACK, DEFEND, SKILL, DAMAGE_DIGIT_RUIDS, DAMAGE_POP_MAX_DIGITS, DAMAGE_POP_DIGIT_W, DAMAGE_POP_DIGIT_H, DAMAGE_POP_DIGIT_SPACING, MAX_MONSTERS, HEAD_OFFSET_Y, HP_BAR_W, WHITE, CARD_NAME_TEXT, CARD_DESC_TEXT, cardFaceLayout, CARD_W, CARD_H, CARD_SPACING, CARD_XS, ALIGN_CENTER, ALIGN_BOTTOM_CENTER, guid, transform, sprite, button, text, scrollLayoutGroup, popupLayerFor, uiOrderFor, displayOrderFor, applySortingOverride, entity, uiPath, sectionRoot, isGeneratedUiEntity, appendUiSection } from '../lib/ui-helpers.mjs';
import { method } from '../lib/codeblock.mjs';
export const jobMethods = [
method('ShowJobChoice', `self:SetEntityEnabled("/ui/RunUIGroup/CardHand", false)
method('BaseClassLabel', `if classId == "warrior" then
return "전사"
elseif classId == "rogue" then
return "Rogue"
elseif classId == "magician" then
return "마법사"
end
return "플레이어"`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'classId' }], 0, 'string'),
method('CurrentClassId', `if self.PlayerJob ~= nil and self.PlayerJob ~= "" then
return self.PlayerJob
end
return self.SelectedClass or ""`, [], 0, 'string'),
method('GetPlayableClasses', `local current = self:CurrentClassId()
if current == nil or current == "" then
return {}
end
if self.ClassLineages ~= nil and self.ClassLineages[current] ~= nil then
return self.ClassLineages[current]
end
return { current }`, [], 0, 'any'),
method('CanUseClassCard', `if cardClass == nil or cardClass == "" then
return false
end
if cardClass == "curse" then
return true
end
local playable = self:GetPlayableClasses()
for i = 1, #playable do
if playable[i] == cardClass then
return true
end
end
return false`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardClass' }], 0, 'boolean'),
method('CanAdvanceJob', `local current = self:CurrentClassId()
if current == nil or current == "" or self.Jobs == nil then
return false
end
local opts = self.Jobs[current]
return opts ~= nil and #opts > 0`, [], 0, 'boolean'),
method('ShowJobChoice', `if self:CanAdvanceJob() ~= true then
self:ContinueAfterBoss()
return
end
self:SetEntityEnabled("/ui/RunUIGroup/CardHand", false)
self:SetEntityEnabled("/ui/RunUIGroup/DeckHud", false)
self:SetEntityEnabled("/ui/SelectUIGroup/JobChoiceHud", true)`),
method('PickJobReward', `self:SetEntityEnabled("/ui/SelectUIGroup/JobChoiceHud", false)
@@ -20,9 +61,13 @@ if kind == "relic" then
else
self:ShowJobSelect()
end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'kind' }]),
method('ShowJobSelect', `local opts = self.Jobs[self.SelectedClass]
method('ShowJobSelect', `local current = self:CurrentClassId()
local opts = nil
if self.Jobs ~= nil then
opts = self.Jobs[current]
end
if opts == nil then
opts = self.Jobs["warrior"]
opts = {}
end
self.JobOpts = opts
for i = 1, 3 do
@@ -41,36 +86,30 @@ for i = 1, 3 do
end
end
self:SetEntityEnabled("/ui/SelectUIGroup/JobSelectHud", true)`),
method('JobLabel', `if self.PlayerJob ~= "" and self.Jobs ~= nil then
for cls, list in pairs(self.Jobs) do
for i = 1, #list do
if list[i].id == self.PlayerJob then
return list[i].name
end
end
end
method('JobLabel', `if self.PlayerJob ~= "" and self.JobMeta ~= nil and self.JobMeta[self.PlayerJob] ~= nil then
return self.JobMeta[self.PlayerJob].name
end
if self.SelectedClass == "warrior" then
return "전사"
elseif self.SelectedClass == "bandit" then
return "도적"
elseif self.SelectedClass == "magician" then
return "마법사"
end
return "플레이어"`, [], 0, 'string'),
method('SetJob', `self.PlayerJob = jobId
return self:BaseClassLabel(self.SelectedClass)`, [], 0, 'string'),
method('SetJob', `local current = self:CurrentClassId()
local starter = ""
local opts = self.Jobs[self.SelectedClass] or {}
local tier = 2
local opts = {}
if self.Jobs ~= nil and self.Jobs[current] ~= nil then
opts = self.Jobs[current]
end
for i = 1, #opts do
if opts[i].id == jobId then
starter = opts[i].starter
starter = opts[i].starter or ""
tier = opts[i].tier or 2
break
end
end
self.PlayerJob = jobId
if starter ~= "" then
table.insert(self.RunDeck, starter)
local sc = self.Cards[starter]
if sc ~= nil then
self:Toast("2차 전직: " .. self:JobLabel() .. "! 신규 카드 " .. sc.name)
self:Toast(tostring(tier) .. "차 전직: " .. self:JobLabel() .. "! 신규 카드 - " .. sc.name)
end
end
self:SetText("/ui/RunUIGroup/CombatHud/PlayerPanel/Name", self:JobLabel())