fix(bandit): 도적 덱을 사일런트 전용으로 정리

This commit is contained in:
2026-06-14 18:48:15 +09:00
parent cf193bf51a
commit 6f436ef3eb
5 changed files with 35 additions and 914 deletions

View File

@@ -8,7 +8,6 @@ const CLASSES = {
warrior: { label: '전사', maxHp: 80 },
bandit: { label: '도적', maxHp: 70 },
magician: { label: '마법사', maxHp: 70 },
thief: { label: '도적', maxHp: 75 },
};
for (const cls of Object.keys(CLASSES)) {
if (!CARDS.starterDecks?.[cls]) throw new Error(`[gen-slaydeck] starterDecks.${cls} 없음`);
@@ -33,10 +32,6 @@ const JOBS = {
{ id: 'poisoner', name: 'Poison', desc: 'Poison scaling\nDeadly Poison\nCatalyst · Noxious Fumes', starter: 'DeadlyPoison' },
{ id: 'trickster', name: 'Trickster', desc: 'Draw and tempo\nAcrobatics\nAdrenaline · Tools', starter: 'Acrobatics' },
],
thief: [
{ id: 'assassin', name: '어쌔신', desc: '표창·치명타 특화\n크리티컬 스로우\n쉐도우 스타 · 클로', starter: 'CriticalThrow' },
{ id: 'bandit', name: '시프', desc: '단검 연타 특화\n새비지 블로우\n스틸 · 메소 가드', starter: 'SavageBlow' },
],
};
for (const [cls, jobs] of Object.entries(JOBS)) {
for (const j of jobs) {
@@ -2319,10 +2314,9 @@ function upsertUi() {
],
}));
const classCards = [
{ key: 'Warrior', label: '\uC804\uC0AC', desc: '\uAC15\uD55C \uACF5\uACA9\uACFC \uBC29\uC5B4', x: -540, enabled: true, tint: { r: 0.74, g: 0.32, b: 0.28, a: 1 } },
{ key: 'Thief', label: '\uB3C4\uC801', desc: '\uBE60\uB978 \uB2E8\uAC80 \uC5F0\uD0C0', x: -180, enabled: true, tint: { r: 0.5, g: 0.32, b: 0.6, a: 1 } },
{ key: 'Bandit', label: '\uC0AC\uC77C\uB7F0\uD2B8', desc: '\uB3C5\u00B7\uB2E8\uAC80\u00B7\uB4DC\uB85C\uC6B0', x: 180, enabled: true, tint: { r: 0.26, g: 0.5, b: 0.34, a: 1 } },
{ key: 'Mage', label: '\uB9C8\uBC95\uC0AC', desc: '\uB9C8\uBC95 \uC6D0\uAC70\uB9AC \uB51C\uB7EC', x: 540, enabled: true, tint: { r: 0.3, g: 0.4, b: 0.75, a: 1 } },
{ key: 'Warrior', label: '\uC804\uC0AC', desc: '\uAC15\uD55C \uACF5\uACA9\uACFC \uBC29\uC5B4', x: -360, enabled: true, tint: { r: 0.74, g: 0.32, b: 0.28, a: 1 } },
{ key: 'Thief', label: '\uB3C4\uC801', desc: '\uB3C5\u00B7\uB2E8\uAC80\u00B7\uB4DC\uB85C\uC6B0', x: 0, enabled: true, tint: { r: 0.26, g: 0.5, b: 0.34, a: 1 } },
{ key: 'Mage', label: '\uB9C8\uBC95\uC0AC', desc: '\uB9C8\uBC95 \uC6D0\uAC70\uB9AC \uB51C\uB7EC', x: 360, enabled: true, tint: { r: 0.3, g: 0.4, b: 0.75, a: 1 } },
];
for (let i = 0; i < classCards.length; i++) {
const cls = classCards[i];
@@ -2712,7 +2706,6 @@ function writeCodeblocks() {
prop('any', 'NewGameHandler'),
prop('any', 'WarriorSelectHandler'),
prop('any', 'ThiefSelectHandler'),
prop('any', 'BanditSelectHandler'),
prop('any', 'MageSelectHandler'),
prop('any', 'AscMinusHandler'),
prop('any', 'AscPlusHandler'),
@@ -2916,15 +2909,7 @@ if thief ~= nil and thief.ButtonComponent ~= nil then
thief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)
self.ThiefSelectHandler = nil
end
self.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass("thief") end)
end
local bandit = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/BanditButton")
if bandit ~= nil and bandit.ButtonComponent ~= nil then
if self.BanditSelectHandler ~= nil then
bandit:DisconnectEvent(ButtonClickEvent, self.BanditSelectHandler)
self.BanditSelectHandler = nil
end
self.BanditSelectHandler = bandit:ConnectEvent(ButtonClickEvent, function() self:SelectClass("bandit") end)
self.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass("bandit") end)
end
local mage = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/MageButton")
if mage ~= nil and mage.ButtonComponent ~= nil then
@@ -3168,32 +3153,22 @@ if mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then
end
local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton")
if thief ~= nil and thief.SpriteGUIRendererComponent ~= nil then
if self.SelectedClass == "thief" then
if self.SelectedClass == "bandit" then
thief.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)
else
thief.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
end
end
local bandit = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/BanditButton")
if bandit ~= nil and bandit.SpriteGUIRendererComponent ~= nil then
if self.SelectedClass == "bandit" then
bandit.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)
else
bandit.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
end
end
if self.SelectedClass == "warrior" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "전사 선택됨")
elseif self.SelectedClass == "bandit" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "사일런트 선택됨")
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "도적 선택됨")
elseif self.SelectedClass == "magician" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "마법사 선택됨")
elseif self.SelectedClass == "thief" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "도적 선택됨")
else
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 선택하고 시작하세요")
end`),
method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "bandit" and self.SelectedClass ~= "magician" and self.SelectedClass ~= "thief" then
method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "bandit" and self.SelectedClass ~= "magician" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 먼저 선택하세요")
return
end
@@ -3211,9 +3186,6 @@ self.RunDeck = { ${CARDS.starterDecks.magician.map(luaStr).join(', ')} }
elseif self.SelectedClass == "bandit" then
self.PlayerMaxHp = ${CLASSES.bandit.maxHp}
self.RunDeck = { ${CARDS.starterDecks.bandit.map(luaStr).join(', ')} }
elseif self.SelectedClass == "thief" then
self.PlayerMaxHp = ${CLASSES.thief.maxHp}
self.RunDeck = { ${CARDS.starterDecks.thief.map(luaStr).join(', ')} }
else
self.PlayerMaxHp = ${CLASSES.warrior.maxHp}
self.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} }
@@ -4488,8 +4460,6 @@ elseif self.SelectedClass == "bandit" then
return "도적"
elseif self.SelectedClass == "magician" then
return "마법사"
elseif self.SelectedClass == "thief" then
return "도적"
end
return "플레이어"`, [], 0, 'string'),
method('SetJob', `self.PlayerJob = jobId