feat(bandit): 사일런트 도적 덱 추가

- 도적 시작 직업을 선택 화면에서 활성화하고 bandit 스타터 덱으로 런을 시작하도록 생성기를 연결

- Slay the Spire 사일런트 카드 75장을 bandit 카드 풀에 추가하고 카드명/설명을 한글화

- 현재 전투 엔진이 지원하는 피해, 방어도, 드로우, 독, 약화, 취약, 광역, 다단히트, 회복, 파워 효과로 카드 효과를 매핑

- 도적 스타터 덱을 타격 5장, 수비 5장, 무력화, 생존자로 구성

- bandit 및 도적 전직 계열(shiv, poisoner, trickster)을 카드 프레임 매핑에 연결

- ui/DefaultGroup.ui와 SlayDeckController.codeblock을 생성기로 재생성

검증:

- node --check tools/deck/gen-slaydeck.mjs

- node --test tools/balance/sim-balance.test.mjs tools/map/rogue-map.test.mjs

- 도적 카드 75장 및 한글화 잔여 영어/깨짐 없음 확인
This commit is contained in:
2026-06-14 02:37:14 +09:00
parent fd57e0d56d
commit a2b8d6bfb9
5 changed files with 801 additions and 307 deletions

File diff suppressed because one or more lines are too long

View File

@@ -6,7 +6,8 @@
},
"classToFrame": {
"warrior": "warrior", "fighter": "warrior", "page": "warrior", "spearman": "warrior",
"magician": "magician", "firepoison": "magician", "icelightning": "magician", "cleric": "magician"
"magician": "magician", "firepoison": "magician", "icelightning": "magician", "cleric": "magician",
"bandit": "bandit", "shiv": "bandit", "poisoner": "bandit", "trickster": "bandit"
},
"rewardWeights": { "normal": 70, "unique": 25, "legend": 5 }
}

View File

@@ -335,6 +335,730 @@
"desc": "피해 8",
"image": "0265e103b4904f178b1c2bdcd54d5975",
"rarity": "unique"
},
"SilentStrike": {
"name": "타격",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 6,
"desc": "피해 6."
},
"SilentDefend": {
"name": "수비",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"block": 5,
"desc": "방어도 5."
},
"Neutralize": {
"name": "무력화",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 3,
"weak": 1,
"desc": "피해 3. 약화 1 부여."
},
"Survivor": {
"name": "생존자",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"block": 8,
"draw": 1,
"desc": "방어도 8. 카드 1장 드로우."
},
"Acrobatics": {
"name": "곡예",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"draw": 3,
"desc": "카드 3장 드로우."
},
"Backflip": {
"name": "백플립",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"block": 5,
"draw": 2,
"desc": "방어도 5. 카드 2장 드로우."
},
"Bane": {
"name": "파멸",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 7,
"hits": 2,
"desc": "피해 7을 2회."
},
"BladeDance": {
"name": "칼날 춤",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 4,
"hits": 3,
"desc": "시브식 공격: 피해 4를 3회."
},
"CloakAndDagger": {
"name": "망토와 단검",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"block": 6,
"damage": 4,
"desc": "방어도 6. 피해 4."
},
"DaggerSpray": {
"name": "단검 분사",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 4,
"hits": 2,
"aoe": true,
"desc": "모든 적에게 피해 4를 2회."
},
"DaggerThrow": {
"name": "단검 투척",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 9,
"draw": 1,
"desc": "피해 9. 카드 1장 드로우."
},
"DeadlyPoison": {
"name": "맹독",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"poison": 5,
"desc": "독 5 부여."
},
"Deflect": {
"name": "흘리기",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"block": 4,
"desc": "방어도 4."
},
"DodgeAndRoll": {
"name": "회피와 구르기",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"block": 8,
"desc": "방어도 8."
},
"FlyingKnee": {
"name": "날아차기",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 8,
"desc": "피해 8."
},
"Outmaneuver": {
"name": "책략",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "normal",
"powerEffect": "energyPerTurn",
"value": 1,
"desc": "매 턴 에너지 +1."
},
"PiercingWail": {
"name": "꿰뚫는 비명",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"weak": 3,
"desc": "약화 3 부여."
},
"PoisonedStab": {
"name": "독 찌르기",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 6,
"poison": 3,
"desc": "피해 6. 독 3 부여."
},
"Prepared": {
"name": "준비",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "normal",
"draw": 1,
"desc": "카드 1장 드로우."
},
"QuickSlash": {
"name": "빠른 베기",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 8,
"draw": 1,
"desc": "피해 8. 카드 1장 드로우."
},
"Slice": {
"name": "얇게 베기",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 6,
"desc": "피해 6."
},
"SneakyStrike": {
"name": "기습 타격",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 12,
"desc": "피해 12."
},
"SuckerPunch": {
"name": "불시의 일격",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "normal",
"damage": 7,
"weak": 1,
"desc": "피해 7. 약화 1 부여."
},
"Accuracy": {
"name": "정확도",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "시브 지원: 매 턴 힘 +1."
},
"AllOutAttack": {
"name": "총공격",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 10,
"aoe": true,
"desc": "모든 적에게 피해 10."
},
"Backstab": {
"name": "등 찌르기",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 11,
"desc": "피해 11."
},
"Blur": {
"name": "잔상",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"block": 8,
"desc": "방어도 8."
},
"BouncingFlask": {
"name": "튕기는 플라스크",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"poison": 9,
"desc": "독 9 부여."
},
"CalculatedGamble": {
"name": "계산된 도박",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"draw": 3,
"desc": "카드 3장 드로우."
},
"Caltrops": {
"name": "마름쇠",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "blockPerTurn",
"value": 3,
"desc": "매 턴 방어도 +3."
},
"Catalyst": {
"name": "촉매",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"poison": 8,
"desc": "독 8 부여."
},
"Choke": {
"name": "목 조르기",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 12,
"vuln": 2,
"desc": "피해 12. 취약 2 부여."
},
"Concentrate": {
"name": "집중",
"cost": 0,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "energyPerTurn",
"value": 1,
"desc": "매 턴 에너지 +1."
},
"CripplingCloud": {
"name": "불구름",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"poison": 4,
"weak": 2,
"desc": "독 4와 약화 2 부여."
},
"Dash": {
"name": "질주",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"block": 10,
"damage": 10,
"desc": "방어도 10. 피해 10."
},
"Distraction": {
"name": "교란",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"draw": 1,
"desc": "카드 1장 드로우."
},
"EndlessAgony": {
"name": "끝없는 고통",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 4,
"hits": 2,
"desc": "피해 4를 2회."
},
"EscapePlan": {
"name": "탈출 계획",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"block": 3,
"draw": 1,
"desc": "카드 1장 드로우. 방어도 3."
},
"Eviscerate": {
"name": "절개",
"cost": 3,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 7,
"hits": 3,
"desc": "피해 7을 3회."
},
"Expertise": {
"name": "전문가",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"draw": 3,
"desc": "카드 3장 드로우."
},
"Finisher": {
"name": "마무리",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 6,
"hits": 2,
"desc": "피해 6을 2회."
},
"Flechettes": {
"name": "플레셰트",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 4,
"hits": 3,
"desc": "피해 4를 3회."
},
"Footwork": {
"name": "발놀림",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "blockPerTurn",
"value": 2,
"desc": "매 턴 방어도 +2."
},
"HeelHook": {
"name": "발뒤꿈치 걸기",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 5,
"draw": 1,
"desc": "피해 5. 카드 1장 드로우."
},
"InfiniteBlades": {
"name": "무한의 칼날",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "시브 지원: 매 턴 힘 +1."
},
"LegSweep": {
"name": "다리 걸기",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"block": 11,
"weak": 2,
"desc": "방어도 11. 약화 2 부여."
},
"MasterfulStab": {
"name": "달인의 찌르기",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 12,
"desc": "피해 12."
},
"NoxiousFumes": {
"name": "유독 가스",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "독 강화: 매 턴 힘 +1."
},
"Predator": {
"name": "포식자",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 15,
"draw": 2,
"desc": "피해 15. 카드 2장 드로우."
},
"Reflex": {
"name": "반사 신경",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"draw": 2,
"desc": "카드 2장 드로우."
},
"RiddleWithHoles": {
"name": "벌집 만들기",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 3,
"hits": 5,
"desc": "피해 3을 5회."
},
"Setup": {
"name": "설치",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"draw": 1,
"desc": "카드 1장 드로우."
},
"Skewer": {
"name": "꿰뚫기",
"cost": 2,
"kind": "Attack",
"class": "bandit",
"rarity": "unique",
"damage": 7,
"hits": 3,
"desc": "피해 7을 3회."
},
"Tactician": {
"name": "전술가",
"cost": 0,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "energyPerTurn",
"value": 1,
"desc": "매 턴 에너지 +1."
},
"Terror": {
"name": "공포",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "unique",
"vuln": 5,
"desc": "취약 5 부여."
},
"WellLaidPlans": {
"name": "치밀한 계획",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "unique",
"powerEffect": "blockPerTurn",
"value": 2,
"desc": "매 턴 방어도 +2."
},
"AThousandCuts": {
"name": "천 개의 상처",
"cost": 2,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "매 턴 힘 +1."
},
"Adrenaline": {
"name": "아드레날린",
"cost": 0,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"draw": 2,
"strength": 1,
"desc": "힘 +1. 카드 2장 드로우."
},
"AfterImage": {
"name": "잔상 효과",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "blockPerTurn",
"value": 1,
"desc": "매 턴 방어도 +1."
},
"Alchemize": {
"name": "연금술",
"cost": 1,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"heal": 8,
"desc": "HP 8 회복."
},
"BulletTime": {
"name": "불릿 타임",
"cost": 2,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "energyPerTurn",
"value": 2,
"desc": "매 턴 에너지 +2."
},
"Burst": {
"name": "폭발",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "매 턴 힘 +1."
},
"CorpseExplosion": {
"name": "시체 폭발",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"poison": 6,
"vuln": 2,
"desc": "독 6과 취약 2 부여."
},
"DieDieDie": {
"name": "죽어 죽어 죽어",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "legend",
"damage": 13,
"aoe": true,
"desc": "모든 적에게 피해 13."
},
"Doppelganger": {
"name": "도플갱어",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"draw": 3,
"desc": "카드 3장 드로우."
},
"Envenom": {
"name": "맹독 바르기",
"cost": 2,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "strengthPerTurn",
"value": 1,
"desc": "독 지원: 매 턴 힘 +1."
},
"GlassKnife": {
"name": "유리 칼",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "legend",
"damage": 8,
"hits": 2,
"desc": "피해 8을 2회."
},
"GrandFinale": {
"name": "대단원",
"cost": 0,
"kind": "Attack",
"class": "bandit",
"rarity": "legend",
"damage": 50,
"aoe": true,
"desc": "모든 적에게 피해 50."
},
"Malaise": {
"name": "불쾌감",
"cost": 2,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"weak": 3,
"desc": "약화 3 부여."
},
"Nightmare": {
"name": "악몽",
"cost": 3,
"kind": "Skill",
"class": "bandit",
"rarity": "legend",
"draw": 3,
"desc": "카드 3장 드로우."
},
"PhantasmalKiller": {
"name": "환영 살인마",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "strengthPerTurn",
"value": 2,
"desc": "매 턴 힘 +2."
},
"StormOfSteel": {
"name": "강철 폭풍",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "legend",
"damage": 4,
"hits": 5,
"desc": "피해 4를 5회."
},
"ToolsOfTheTrade": {
"name": "거래의 도구",
"cost": 1,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "energyPerTurn",
"value": 1,
"desc": "매 턴 에너지 +1."
},
"Unload": {
"name": "난사",
"cost": 1,
"kind": "Attack",
"class": "bandit",
"rarity": "legend",
"damage": 14,
"desc": "피해 14."
},
"WraithForm": {
"name": "망령화",
"cost": 3,
"kind": "Power",
"class": "bandit",
"rarity": "legend",
"powerEffect": "blockPerTurn",
"value": 8,
"desc": "매 턴 방어도 +8."
}
},
"starterDecks": {
@@ -361,6 +1085,20 @@
"MagicGuard",
"MagicGuard",
"MagicClaw"
],
"bandit": [
"SilentStrike",
"SilentStrike",
"SilentStrike",
"SilentStrike",
"SilentStrike",
"SilentDefend",
"SilentDefend",
"SilentDefend",
"SilentDefend",
"SilentDefend",
"Neutralize",
"Survivor"
]
}
}

View File

@@ -1,4 +1,4 @@
import { readFileSync, writeFileSync } from 'node:fs';
import { readFileSync, writeFileSync } from 'node:fs';
const CARDS = JSON.parse(readFileSync('data/cards.json', 'utf8'));
const ENEMIES = JSON.parse(readFileSync('data/enemies.json', 'utf8'));
@@ -6,6 +6,7 @@ const ENEMIES = JSON.parse(readFileSync('data/enemies.json', 'utf8'));
// 검증 (fail-fast): 잘못된 데이터면 생성 중단
const CLASSES = {
warrior: { label: '전사', maxHp: 80 },
bandit: { label: '도적', maxHp: 70 },
magician: { label: '마법사', maxHp: 70 },
};
for (const cls of Object.keys(CLASSES)) {
@@ -26,6 +27,11 @@ const JOBS = {
{ id: 'icelightning', name: '위자드(썬·콜)', desc: '광역·빙결 특화\n썬더 볼트(전체)\n콜드 빔 · 칠링 스텝', starter: 'ThunderBolt' },
{ id: 'cleric', name: '클레릭', desc: '회복·축복 특화\n힐 · 블레스\n홀리 애로우', starter: 'Heal' },
],
bandit: [
{ id: 'shiv', name: 'Shiv', desc: 'Many small attacks\nBlade Dance\nAccuracy · After Image', starter: 'BladeDance' },
{ 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' },
],
};
for (const [cls, jobs] of Object.entries(JOBS)) {
for (const j of jobs) {
@@ -2242,7 +2248,7 @@ function upsertUi() {
}));
const classCards = [
{ 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: '\uCD94\uD6C4 \uC5F4\uB9BC', x: 0, enabled: false, tint: { r: 0.18, g: 0.19, b: 0.21, a: 1 } },
{ key: 'Thief', label: '\uB3C4\uC801', desc: 'Silent deck', 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++) {
@@ -2432,6 +2438,7 @@ function writeCodeblocks() {
prop('any', 'EndTurnHandler'),
prop('any', 'NewGameHandler'),
prop('any', 'WarriorSelectHandler'),
prop('any', 'ThiefSelectHandler'),
prop('any', 'MageSelectHandler'),
prop('any', 'AscMinusHandler'),
prop('any', 'AscPlusHandler'),
@@ -2602,6 +2609,14 @@ if warrior ~= nil and warrior.ButtonComponent ~= nil then
end
self.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass("warrior") end)
end
local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton")
if thief ~= nil and thief.ButtonComponent ~= nil then
if self.ThiefSelectHandler ~= nil then
thief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)
self.ThiefSelectHandler = nil
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
if self.MageSelectHandler ~= nil then
@@ -2657,14 +2672,24 @@ if mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then
mage.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)
end
end
local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton")
if thief ~= nil and thief.SpriteGUIRendererComponent ~= nil 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
if self.SelectedClass == "warrior" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "전사 선택됨")
elseif self.SelectedClass == "bandit" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "도적 선택됨")
elseif self.SelectedClass == "magician" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "마법사 선택됨")
else
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 선택하고 시작하세요")
end`),
method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "magician" then
method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "bandit" and self.SelectedClass ~= "magician" then
self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 먼저 선택하세요")
return
end
@@ -2679,6 +2704,9 @@ end`, [
method('StartRun', `if self.SelectedClass == "magician" then
self.PlayerMaxHp = ${CLASSES.magician.maxHp}
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(', ')} }
else
self.PlayerMaxHp = ${CLASSES.warrior.maxHp}
self.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} }
@@ -3745,6 +3773,8 @@ self:SetEntityEnabled("/ui/DefaultGroup/JobSelectHud", true)`),
end
if self.SelectedClass == "warrior" then
return "전사"
elseif self.SelectedClass == "bandit" then
return "도적"
elseif self.SelectedClass == "magician" then
return "마법사"
end

View File

@@ -234993,9 +234993,9 @@
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.11,
"g": 0.12,
"b": 0.14,
"r": 0.16,
"g": 0.2,
"b": 0.26,
"a": 1
},
"DropShadow": false,
@@ -235025,7 +235025,7 @@
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": false,
"RaycastTarget": true,
"Type": 1,
"Enable": true
},
@@ -235074,7 +235074,7 @@
"KeyCode": 0,
"OverrideSorting": false,
"Transition": 1,
"Enable": false
"Enable": true
}
],
"@version": 1
@@ -235232,9 +235232,9 @@
"DropShadowDistance": 32,
"Font": 0,
"FontColor": {
"r": 0.55,
"g": 0.58,
"b": 0.62,
"r": 0.94,
"g": 0.74,
"b": 0.26,
"a": 1
},
"FontSize": 34,
@@ -235369,9 +235369,9 @@
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.18,
"g": 0.19,
"b": 0.21,
"r": 0.26,
"g": 0.5,
"b": 0.34,
"a": 1
},
"DropShadow": false,
@@ -235561,9 +235561,9 @@
"DropShadowDistance": 32,
"Font": 0,
"FontColor": {
"r": 0.52,
"g": 0.55,
"b": 0.59,
"r": 0.86,
"g": 0.9,
"b": 0.94,
"a": 1
},
"FontSize": 20,
@@ -235589,7 +235589,7 @@
"bottom": 0
},
"SizeFit": false,
"Text": "추후 열림",
"Text": "Silent deck",
"UseOutLine": true,
"Enable": true
}
@@ -235597,288 +235597,6 @@
"@version": 1
}
},
{
"id": "0e000097-0000-4000-8000-00000e000097",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockBody",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent",
"jsonString": {
"name": "LockBody",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockBody",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 3,
"pathConstraints": "/////",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "UISprite",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uisprite",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 0,
"AnchorsMax": {
"x": 0.5,
"y": 0.5
},
"AnchorsMin": {
"x": 0.5,
"y": 0.5
},
"MobileOnly": false,
"OffsetMax": {
"x": 38,
"y": 33
},
"OffsetMin": {
"x": -38,
"y": -25
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 76,
"y": 58
},
"UIMode": 1,
"UIScale": {
"x": 1,
"y": 1,
"z": 1
},
"UIVersion": 2,
"anchoredPosition": {
"x": 0,
"y": 4
},
"Position": {
"x": 0,
"y": 4,
"z": 0
},
"QuaternionRotation": {
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"Scale": {
"x": 1,
"y": 1,
"z": 1
},
"Enable": true
},
{
"@type": "MOD.Core.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": ""
},
"LocalPosition": {
"x": 0,
"y": 0
},
"LocalScale": {
"x": 1,
"y": 1
},
"OverrideSorting": false,
"PlayRate": 1,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.78,
"g": 0.69,
"b": 0.42,
"a": 1
},
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"FillAmount": 1,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": false,
"Type": 1,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "0e0000a1-0000-4000-8000-00000e0000a1",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockShackle",
"componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent",
"jsonString": {
"name": "LockShackle",
"path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockShackle",
"nameEditable": true,
"enable": true,
"visible": true,
"localize": true,
"displayOrder": 4,
"pathConstraints": "/////",
"revision": 1,
"origin": {
"type": "Model",
"entry_id": "UISprite",
"sub_entity_id": null,
"root_entity_id": null,
"replaced_model_id": null
},
"modelId": "uisprite",
"@components": [
{
"@type": "MOD.Core.UITransformComponent",
"ActivePlatform": 255,
"AlignmentOption": 0,
"AnchorsMax": {
"x": 0.5,
"y": 0.5
},
"AnchorsMin": {
"x": 0.5,
"y": 0.5
},
"MobileOnly": false,
"OffsetMax": {
"x": 27,
"y": 69
},
"OffsetMin": {
"x": -27,
"y": 27
},
"Pivot": {
"x": 0.5,
"y": 0.5
},
"RectSize": {
"x": 54,
"y": 42
},
"UIMode": 1,
"UIScale": {
"x": 1,
"y": 1,
"z": 1
},
"UIVersion": 2,
"anchoredPosition": {
"x": 0,
"y": 48
},
"Position": {
"x": 0,
"y": 48,
"z": 0
},
"QuaternionRotation": {
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"Scale": {
"x": 1,
"y": 1,
"z": 1
},
"Enable": true
},
{
"@type": "MOD.Core.SpriteGUIRendererComponent",
"AnimClipPlayType": 0,
"EndFrameIndex": 2147483647,
"ImageRUID": {
"DataId": ""
},
"LocalPosition": {
"x": 0,
"y": 0
},
"LocalScale": {
"x": 1,
"y": 1
},
"OverrideSorting": false,
"PlayRate": 1,
"PreserveSprite": 0,
"StartFrameIndex": 0,
"Color": {
"r": 0.78,
"g": 0.69,
"b": 0.42,
"a": 1
},
"DropShadow": false,
"DropShadowAngle": 30,
"DropShadowColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 0.72
},
"DropShadowDistance": 32,
"FillAmount": 1,
"FillCenter": true,
"FillClockWise": true,
"FillMethod": 0,
"FillOrigin": 0,
"FlipX": false,
"FlipY": false,
"FrameColumn": 1,
"FrameRate": 0,
"FrameRow": 1,
"Outline": false,
"OutlineColor": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"OutlineWidth": 3,
"RaycastTarget": false,
"Type": 1,
"Enable": true
}
],
"@version": 1
}
},
{
"id": "0e000070-0000-4000-8000-00000e000070",
"path": "/ui/DefaultGroup/CharacterSelectHud/MageButton",