From 95d6155086a20fca9e931a4f0ee98f5464d9040f Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 29 Jun 2026 23:34:19 +0900 Subject: [PATCH] Refine rogue progression and card pools --- RootDesk/MyDesk/SlayDeckController.codeblock | 142 +++++--------- data/cardframes.json | 14 +- data/cards.json | 196 +++++++++---------- data/cards.xlsx | Bin 24565 -> 24420 bytes data/characters.json | 4 +- tools/deck/cb/charselect.mjs | 18 +- tools/deck/cb/combat.mjs | 2 +- tools/deck/cb/deckview.mjs | 18 +- tools/deck/cb/jobs.mjs | 54 ++++- tools/deck/cb/reward.mjs | 5 +- tools/deck/cb/run.mjs | 166 +++------------- tools/deck/cb/screens.mjs | 2 +- tools/deck/lib/data.mjs | 35 +++- 13 files changed, 276 insertions(+), 380 deletions(-) diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index c99480b..01093bd 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -1041,7 +1041,7 @@ "Name": null }, "Arguments": [], - "Code": "self.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Attack\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"bandit\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"bandit\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"bandit\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"bandit\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"bandit\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"bandit\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"bandit\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"bandit\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"bandit\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"bandit\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"bandit\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"bandit\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"bandit\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"bandit\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"bandit\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"bandit\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"bandit\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다. 이번 턴에 카드를 사용할 때마다, 대상 적이 체력을 2 잃습니다.\", kind = \"Attack\", damage = 8, class = \"bandit\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"bandit\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"bandit\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"bandit\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"bandit\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"bandit\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"bandit\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"bandit\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"모든 적에게 부여된 중독과 동일한 만큼의 방어도를 얻습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"bandit\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 을 얻습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"bandit\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"bandit\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"bandit\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"bandit\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"bandit\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"bandit\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"bandit\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"bandit\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"적이 힘을 X 잃습니다. 약화를 X 부여합니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"를 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"대상 적에게 소멸된 카드 더미에 있는 모든 표창을 사용합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"bandit\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"bandit\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"bandit\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"bandit\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\tbandit = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tbandit = \"bandit\",\n\tcurse = \"bandit\",\n\tshiv = \"bandit\",\n\tpoisoner = \"bandit\",\n\ttrickster = \"bandit\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\tbandit = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself.SoulShopDef = {\n\t{ key = \"meso\", name = \"두둑한 지갑\", desc = \"런 시작 시 메소 +60\", cost = 3 },\n\t{ key = \"hp\", name = \"단련된 육체\", desc = \"시작 최대 HP +15\", cost = 4 },\n\t{ key = \"trim\", name = \"덱 정제\", desc = \"시작 덱에서 기본 카드 1장 제거\", cost = 5 },\n\t{ key = \"relic\", name = \"유물 수집가\", desc = \"런 시작 시 유물 1개 추가\", cost = 6 },\n}\nself.SoulUnlocks = {}\nself.SoulPoints = self.SoulPoints or 0\nlocal uiTries = 0\nlocal uiInit = 0\nuiInit = _TimerService:SetTimerRepeat(function()\n\tuiTries = uiTries + 1\n\tif _EntityService:GetEntityByPath(\"/ui/DeckUIGroup\") ~= nil then\n\t\tself:ActivateUIGroups()\n\t\t-- MainMenu는 한동안 비활성화: 시작 시 바로 로비로 진입.\n\t\t-- 추후 싱글/멀티/종료 선택 메뉴가 필요하면 self:ShowMainMenu()로 되돌린다(메서드·UI 유지됨).\n\t\tself:ShowLobby()\n\t\t_TimerService:ClearTimer(uiInit)\n\telseif uiTries > 80 then\n\t\t_TimerService:ClearTimer(uiInit)\n\tend\nend, 0.1)\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil then\n\tself:ReqLoadAscension(lp.PlayerComponent.UserId)\n\tself:ReqLoadSouls(lp.PlayerComponent.UserId)\nend\n_InputService:ConnectEvent(KeyDownEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = true\n\t\tlocal lp2 = _UserService.LocalPlayer\n\t\tif lp2 ~= nil and lp2.CurrentMapName == \"lobby\" and self.RunActive ~= true then\n\t\t\tself:PlayerAttackMotion()\n\t\tend\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = true\n\telseif e.key == KeyboardKey.C then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:OpenDebugCardPicker()\n\t\tend\n\telseif e.key == KeyboardKey.E then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:CheatFillEnergy()\n\t\tend\n\tend\nend)\n_InputService:ConnectEvent(KeyUpEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = false\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = false\n\tend\nend)", + "Code": "self.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Attack\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"rogue\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"rogue\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"rogue\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"rogue\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다. 이번 턴에 카드를 사용할 때마다, 대상 적이 체력을 2 잃습니다.\", kind = \"Attack\", damage = 8, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"rogue\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"rogue\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"rogue\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"rogue\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"모든 적에게 부여된 중독과 동일한 만큼의 방어도를 얻습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 을 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"rogue\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"rogue\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"rogue\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"rogue\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"rogue\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"적이 힘을 X 잃습니다. 약화를 X 부여합니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"를 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"대상 적에게 소멸된 카드 더미에 있는 모든 표창을 사용합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"rogue\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"rogue\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\tthief = \"rogue\",\n\thermit = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself.SoulShopDef = {\n\t{ key = \"meso\", name = \"두둑한 지갑\", desc = \"런 시작 시 메소 +60\", cost = 3 },\n\t{ key = \"hp\", name = \"단련된 육체\", desc = \"시작 최대 HP +15\", cost = 4 },\n\t{ key = \"trim\", name = \"덱 정제\", desc = \"시작 덱에서 기본 카드 1장 제거\", cost = 5 },\n\t{ key = \"relic\", name = \"유물 수집가\", desc = \"런 시작 시 유물 1개 추가\", cost = 6 },\n}\nself.SoulUnlocks = {}\nself.SoulPoints = self.SoulPoints or 0\nlocal uiTries = 0\nlocal uiInit = 0\nuiInit = _TimerService:SetTimerRepeat(function()\n\tuiTries = uiTries + 1\n\tif _EntityService:GetEntityByPath(\"/ui/DeckUIGroup\") ~= nil then\n\t\tself:ActivateUIGroups()\n\t\t-- MainMenu는 한동안 비활성화: 시작 시 바로 로비로 진입.\n\t\t-- 추후 싱글/멀티/종료 선택 메뉴가 필요하면 self:ShowMainMenu()로 되돌린다(메서드·UI 유지됨).\n\t\tself:ShowLobby()\n\t\t_TimerService:ClearTimer(uiInit)\n\telseif uiTries > 80 then\n\t\t_TimerService:ClearTimer(uiInit)\n\tend\nend, 0.1)\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil then\n\tself:ReqLoadAscension(lp.PlayerComponent.UserId)\n\tself:ReqLoadSouls(lp.PlayerComponent.UserId)\nend\n_InputService:ConnectEvent(KeyDownEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = true\n\t\tlocal lp2 = _UserService.LocalPlayer\n\t\tif lp2 ~= nil and lp2.CurrentMapName == \"lobby\" and self.RunActive ~= true then\n\t\t\tself:PlayerAttackMotion()\n\t\tend\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = true\n\telseif e.key == KeyboardKey.C then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:OpenDebugCardPicker()\n\t\tend\n\telseif e.key == KeyboardKey.E then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:CheatFillEnergy()\n\t\tend\n\tend\nend)\n_InputService:ConnectEvent(KeyUpEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = false\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = false\n\tend\nend)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1335,7 +1335,7 @@ "Name": null }, "Arguments": [], - "Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and (buttonEntity.ButtonComponent ~= nil or buttonEntity:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowLobby() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and (warrior.ButtonComponent ~= nil or warrior:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/BanditButton\")\nif thief ~= nil and (thief.ButtonComponent ~= nil or thief:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ThiefSelectHandler ~= nil then\n\t\tthief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)\n\t\tself.ThiefSelectHandler = nil\n\tend\n\tself.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"bandit\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and (mage.ButtonComponent ~= nil or mage:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal allDeckClose = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Close\")\nif allDeckClose ~= nil and (allDeckClose.ButtonComponent ~= nil or allDeckClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AllDeckCloseHandler ~= nil then\n\t\tallDeckClose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)\n\t\tself.AllDeckCloseHandler = nil\n\tend\n\tself.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:BindClassDeckTabs()\nlocal start = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and (start.ButtonComponent ~= nil or start:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal charBack = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/BackButton\")\nif charBack ~= nil and (charBack.ButtonComponent ~= nil or charBack:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.CharBackHandler ~= nil then\n\t\tcharBack:DisconnectEvent(ButtonClickEvent, self.CharBackHandler)\n\t\tself.CharBackHandler = nil\n\tend\n\tself.CharBackHandler = charBack:ConnectEvent(ButtonClickEvent, function() self:ShowLobby() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and (ascMinus.ButtonComponent ~= nil or ascMinus:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and (ascPlus.ButtonComponent ~= nil or ascPlus:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend", + "Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and (buttonEntity.ButtonComponent ~= nil or buttonEntity:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowLobby() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and (warrior.ButtonComponent ~= nil or warrior:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/BanditButton\")\nif thief ~= nil and (thief.ButtonComponent ~= nil or thief:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ThiefSelectHandler ~= nil then\n\t\tthief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)\n\t\tself.ThiefSelectHandler = nil\n\tend\nself.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"rogue\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and (mage.ButtonComponent ~= nil or mage:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal allDeckClose = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Close\")\nif allDeckClose ~= nil and (allDeckClose.ButtonComponent ~= nil or allDeckClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AllDeckCloseHandler ~= nil then\n\t\tallDeckClose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler)\n\t\tself.AllDeckCloseHandler = nil\n\tend\n\tself.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:BindClassDeckTabs()\nlocal start = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and (start.ButtonComponent ~= nil or start:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal charBack = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/CharacterSelectHud/BackButton\")\nif charBack ~= nil and (charBack.ButtonComponent ~= nil or charBack:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.CharBackHandler ~= nil then\n\t\tcharBack:DisconnectEvent(ButtonClickEvent, self.CharBackHandler)\n\t\tself.CharBackHandler = nil\n\tend\n\tself.CharBackHandler = charBack:ConnectEvent(ButtonClickEvent, function() self:ShowLobby() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and (ascMinus.ButtonComponent ~= nil or ascMinus:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and (ascPlus.ButtonComponent ~= nil or ascPlus:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1764,7 +1764,7 @@ "Name": null }, "Arguments": [], - "Code": "local base = \"/ui/SelectUIGroup/CharacterSelectHud\"\nlocal arts = { { p = \"/WarriorButton/Art\", c = \"warrior\" }, { p = \"/MageButton/Art\", c = \"magician\" }, { p = \"/BanditButton/Art\", c = \"bandit\" } }\nfor i = 1, #arts do\n\tlocal e = _EntityService:GetEntityByPath(base .. arts[i].p)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil and self.ClassPortraits ~= nil and self.ClassPortraits[arts[i].c] ~= nil then\n\t\te.SpriteGUIRendererComponent.ImageRUID = self.ClassPortraits[arts[i].c]\n\tend\nend\nlocal btns = { { p = \"/WarriorButton\", c = \"warrior\" }, { p = \"/MageButton\", c = \"magician\" }, { p = \"/BanditButton\", c = \"bandit\" } }\nfor i = 1, #btns do\n\tlocal e = _EntityService:GetEntityByPath(base .. btns[i].p)\n\tif e ~= nil then\n\t\tif e.MaskComponent == nil then\n\t\t\te:AddComponent(\"MaskComponent\")\n\t\tend\n\t\tif e.SpriteGUIRendererComponent ~= nil then\n\t\t\tif self.SelectedClass == btns[i].c then\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\t\telse\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(0.45, 0.5, 0.58, 1)\n\t\t\tend\n\t\tend\n\tend\nend\nlocal nl = string.char(10)\nlocal name = \"\"\nlocal eng = \"\"\nlocal desc = \"직업을 선택하고 시작하세요\"\nlocal btnName = \"\"\nif self.SelectedClass == \"warrior\" then\n\tname = \"전사\"\n\teng = \"Warrior\"\n\tbtnName = \"/WarriorButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"방어를 쌓고 버티다 강하게 역공하는 단단한 탱커.\"\nelseif self.SelectedClass == \"bandit\" then\n\tname = \"도적\"\n\teng = \"Thief\"\n\tbtnName = \"/BanditButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"표창 난사와 독으로 빠르게 몰아치는 민첩한 직업.\"\nelseif self.SelectedClass == \"magician\" then\n\tname = \"법사\"\n\teng = \"Magician\"\n\tbtnName = \"/MageButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"약하지만 게이지 운용으로 화력을 집중하는 원소 마법사.\"\nend\nif btnName ~= \"\" then\n\tlocal art = _EntityService:GetEntityByPath(base .. btnName .. \"/Art\")\n\tlocal target = _EntityService:GetEntityByPath(base .. \"/SelectedCharacterArt\")\n\tif art ~= nil and art.SpriteGUIRendererComponent ~= nil and target ~= nil and target.SpriteGUIRendererComponent ~= nil then\n\t\ttarget.SpriteGUIRendererComponent.ImageRUID = art.SpriteGUIRendererComponent.ImageRUID\n\tend\nend\nself:SetText(base .. \"/SelectedClass\", name)\nself:SetText(base .. \"/SelectedClass/SelectedClassEng\", eng)\nself:SetText(base .. \"/SelectedClassStatus\", desc)", + "Code": "local base = \"/ui/SelectUIGroup/CharacterSelectHud\"\nlocal arts = { { p = \"/WarriorButton/Art\", c = \"warrior\" }, { p = \"/MageButton/Art\", c = \"magician\" }, { p = \"/BanditButton/Art\", c = \"rogue\" } }\nfor i = 1, #arts do\n\tlocal e = _EntityService:GetEntityByPath(base .. arts[i].p)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil and self.ClassPortraits ~= nil and self.ClassPortraits[arts[i].c] ~= nil then\n\t\te.SpriteGUIRendererComponent.ImageRUID = self.ClassPortraits[arts[i].c]\n\tend\nend\nlocal btns = { { p = \"/WarriorButton\", c = \"warrior\" }, { p = \"/MageButton\", c = \"magician\" }, { p = \"/BanditButton\", c = \"rogue\" } }\nfor i = 1, #btns do\n\tlocal e = _EntityService:GetEntityByPath(base .. btns[i].p)\n\tif e ~= nil then\n\t\tif e.MaskComponent == nil then\n\t\t\te:AddComponent(\"MaskComponent\")\n\t\tend\n\t\tif e.SpriteGUIRendererComponent ~= nil then\n\t\t\tif self.SelectedClass == btns[i].c then\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\t\telse\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(0.45, 0.5, 0.58, 1)\n\t\t\tend\n\t\tend\n\tend\nend\nlocal nl = string.char(10)\nlocal name = \"\"\nlocal eng = \"\"\nlocal desc = \"직업을 선택하고 시작하세요\"\nlocal btnName = \"\"\nif self.SelectedClass == \"warrior\" then\n\tname = \"전사\"\n\teng = \"Warrior\"\n\tbtnName = \"/WarriorButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"방어를 쌓고 버티는 공격형 전사.\"\nelseif self.SelectedClass == \"rogue\" then\n\tname = \"도적\"\n\teng = \"Rogue\"\n\tbtnName = \"/BanditButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"기동성과 콤보로 빠르게 움직이는 도적.\"\nelseif self.SelectedClass == \"magician\" then\n\tname = \"마법사\"\n\teng = \"Magician\"\n\tbtnName = \"/MageButton\"\n\tdesc = \"직업군 · 모험가\" .. nl .. \"주문과 원소로 전장을 장악하는 마법사.\"\nend\nif btnName ~= \"\" then\n\tlocal art = _EntityService:GetEntityByPath(base .. btnName .. \"/Art\")\n\tlocal target = _EntityService:GetEntityByPath(base .. \"/SelectedCharacterArt\")\n\tif art ~= nil and art.SpriteGUIRendererComponent ~= nil and target ~= nil and target.SpriteGUIRendererComponent ~= nil then\n\t\ttarget.SpriteGUIRendererComponent.ImageRUID = art.SpriteGUIRendererComponent.ImageRUID\n\tend\nend\nself:SetText(base .. \"/SelectedClass\", name)\nself:SetText(base .. \"/SelectedClass/SelectedClassEng\", eng)\nself:SetText(base .. \"/SelectedClassStatus\", desc)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1779,7 +1779,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SelectedClass ~= \"warrior\" and self.SelectedClass ~= \"bandit\" and self.SelectedClass ~= \"magician\" then\n\tself:SetText(\"/ui/SelectUIGroup/CharacterSelectHud/SelectedClassStatus\", \"직업을 먼저 선택하세요\")\n\treturn\nend\nself:StartRun()", + "Code": "if self.SelectedClass ~= \"warrior\" and self.SelectedClass ~= \"rogue\" and self.SelectedClass ~= \"magician\" then\n\tself:SetText(\"/ui/SelectUIGroup/CharacterSelectHud/SelectedClassStatus\", \"직업을 먼저 선택하세요\")\n\treturn\nend\nself:StartRun()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1824,7 +1824,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\nself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelseif self.SelectedClass == \"bandit\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"Neutralize\", \"Survivor\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 메소 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n\toctopus = { name = \"문어\", maxHp = 15, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 4 } } },\n\tkapa_drake = { name = \"카파 드레이크\", maxHp = 24, intents = { { kind = \"Attack\", value = 9 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 11 } } },\n\tjunior_neki = { name = \"주니어 네키\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 8 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tjunior_bugi = { name = \"주니어 부기\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 9 } } },\n\tdile = { name = \"다일\", maxHp = 65, intents = { { kind = \"Attack\", value = 13 }, { kind = \"Defend\", value = 9 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 16 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tmano = { name = \"마노\", maxHp = 80, intents = { { kind = \"Defend\", value = 12 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\" },\n\t},\n\tbandit = {\n\t\t{ id = \"shiv\", name = \"Shiv\", desc = \"Many small attacks\\nBlade Dance\\nAccuracy · After Image\", starter = \"BladeDance\" },\n\t\t{ id = \"poisoner\", name = \"Poison\", desc = \"Poison scaling\\nDeadly Poison\\nCatalyst · Noxious Fumes\", starter = \"DeadlyPoison\" },\n\t\t{ id = \"trickster\", name = \"Trickster\", desc = \"Draw and tempo\\nAcrobatics\\nAdrenaline · Tools\", starter = \"Acrobatics\" },\n\t},\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\tbandit = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tbandit = \"bandit\",\n\tcurse = \"bandit\",\n\tshiv = \"bandit\",\n\tpoisoner = \"bandit\",\n\ttrickster = \"bandit\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\tbandit = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:ApplySoulUnlocks()\nself:RenderPotions()\nself:TeleportToActMap()\nself:ShowMap()", + "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelseif self.SelectedClass == \"rogue\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"Neutralize\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"Survivor\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 메소 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n\toctopus = { name = \"문어\", maxHp = 15, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 4 } } },\n\tkapa_drake = { name = \"카파 드레이크\", maxHp = 24, intents = { { kind = \"Attack\", value = 9 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 11 } } },\n\tjunior_neki = { name = \"주니어 네키\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 8 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tjunior_bugi = { name = \"주니어 부기\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 9 } } },\n\tdile = { name = \"다일\", maxHp = 65, intents = { { kind = \"Attack\", value = 13 }, { kind = \"Defend\", value = 9 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 16 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tmano = { name = \"마노\", maxHp = 80, intents = { { kind = \"Defend\", value = 12 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\" },\n\t},\n\trogue = {\n\t\t{ id = \"assassin\", name = \"어쌔신\", desc = \"단일 폭딜\\n표창 · 검무\\n치명타 연계\", starter = \"BladeDance\" },\n\t\t{ id = \"thief\", name = \"시프\", desc = \"독과 순환\\n중독 · 플라스크\\n손패 운영\", starter = \"DeadlyPoison\" },\n\t},\n\tassassin = {\n\t\t{ id = \"hermit\", name = \"허밋\", desc = \"교활한 마무리\\n회피 · 잔상\\n턴 순환\", starter = \"Footwork\" },\n\t},\n\tthief = {\n\t\t{ id = \"thiefmaster\", name = \"시프마스터\", desc = \"고급 운영\\n교활 · 반복\\n스킬 연계\", starter = \"MasterPlanner\" },\n\t},\n}\nself.ClassPools = {\n\twarrior = { warrior = true, fighter = true, page = true, spearman = true },\n\tmagician = { magician = true, firepoison = true, icelightning = true, cleric = true },\n\trogue = { rogue = true },\n\tassassin = { rogue = true, assassin = true },\n\tthief = { rogue = true, thief = true },\n\thermit = { rogue = true, assassin = true, hermit = true },\n\tthiefmaster = { rogue = true, thief = true, thiefmaster = true },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\tthief = \"rogue\",\n\thermit = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:ApplySoulUnlocks()\nself:RenderPotions()\nself:TeleportToActMap()\nself:ShowMap()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1854,94 +1854,12 @@ "Name": null }, "Arguments": [], - "Code": "self:ShowState(\"combat\")\nself:KickCombatCamera()\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/TooltipBox\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/DiscardPrompt\", false)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.BlockGainMultiplier = 1\nself.CardsDrawnThisCombat = 0\nself.HandCostZeroThisTurn = false\nself.DrawDisabledThisTurn = false\nself.NextSkillCostZero = false\nself.NextSkillRepeatCount = 0\nself.SkillCostReductionThisTurn = 0\nself.CombatCardCostReduction = {}\nself.SkillSlyOnPlayCards = {}\nself.TurnSkillSlyCards = {}\nself.ShivFirstDamageBonusUsed = false\nself.ActiveAttackDamageVsWeakMultiplier = 1\nself.DrawDamageThisTurn = 0\nself.DrawPoisonThisTurn = 0\nself.ShivAoeThisCombat = false\nself.PoisonApplicationsThisCombat = 0\nself.EnemyStrengthLossThisTurn = 0\nself.PlayerStr = 0\nself.PlayerDex = 0\nself.PlayerThorns = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerIntangible = 0\nself.BonusRewardScreens = 0\nself.ActiveKillReward = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.DiscardSelectRemaining = 0\nself.DiscardSelectTotal = 0\nself.DiscardPostShiv = 0\nself.DiscardShivPerPick = 0\nself.RetainSelectActive = false\nself.ReserveSelectActive = false\nself.NextTurnBlock = 0\nself.NextTurnDraw = 0\nself.NextTurnKeepBlock = false\nself.NextTurnAttackMultiplier = 1\nself.TurnAttackMultiplier = 1\nself.NextTurnSelectPrompt = \"\"\nself.NextTurnSelectCopies = 0\nself.NextTurnAddCards = {}\nself.CombatOver = false\nself.DiscardPile = {}\nself.ExhaustPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Attack\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"bandit\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"bandit\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"bandit\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"bandit\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"bandit\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"bandit\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"bandit\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"bandit\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"bandit\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"bandit\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"bandit\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"bandit\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"bandit\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"bandit\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"bandit\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"bandit\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"bandit\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"bandit\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"bandit\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다. 이번 턴에 카드를 사용할 때마다, 대상 적이 체력을 2 잃습니다.\", kind = \"Attack\", damage = 8, class = \"bandit\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"bandit\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"bandit\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"bandit\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"bandit\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"bandit\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"bandit\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"bandit\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"모든 적에게 부여된 중독과 동일한 만큼의 방어도를 얻습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"bandit\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"bandit\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 을 얻습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"bandit\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"bandit\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"bandit\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"bandit\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"bandit\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"bandit\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"bandit\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"bandit\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"bandit\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"적이 힘을 X 잃습니다. 약화를 X 부여합니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"를 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"대상 적에게 소멸된 카드 더미에 있는 모든 표창을 사용합니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"bandit\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"bandit\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"bandit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"bandit\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"bandit\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"bandit\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"bandit\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:PrepareCombatDrawPile()\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()\nlocal slotTid = 0\nslotTid = _TimerService:SetTimerRepeat(function()\n\tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then\n\t\t_TimerService:ClearTimer(slotTid)\n\t\treturn\n\tend\n\tfor i = 1, #self.Monsters do\n\t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then\n\t\t\tself:PositionMonsterSlot(i)\n\t\tend\n\tend\nend, 0.15)", + "Code": "self:ShowState(\"combat\")\nself:KickCombatCamera()\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/TooltipBox\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/DiscardPrompt\", false)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.BlockGainMultiplier = 1\nself.CardsDrawnThisCombat = 0\nself.HandCostZeroThisTurn = false\nself.DrawDisabledThisTurn = false\nself.NextSkillCostZero = false\nself.NextSkillRepeatCount = 0\nself.SkillCostReductionThisTurn = 0\nself.CombatCardCostReduction = {}\nself.SkillSlyOnPlayCards = {}\nself.TurnSkillSlyCards = {}\nself.ShivFirstDamageBonusUsed = false\nself.ActiveAttackDamageVsWeakMultiplier = 1\nself.DrawDamageThisTurn = 0\nself.DrawPoisonThisTurn = 0\nself.ShivAoeThisCombat = false\nself.PoisonApplicationsThisCombat = 0\nself.EnemyStrengthLossThisTurn = 0\nself.PlayerStr = 0\nself.PlayerDex = 0\nself.PlayerThorns = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerIntangible = 0\nself.BonusRewardScreens = 0\nself.ActiveKillReward = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.DiscardSelectRemaining = 0\nself.DiscardSelectTotal = 0\nself.DiscardPostShiv = 0\nself.DiscardShivPerPick = 0\nself.RetainSelectActive = false\nself.ReserveSelectActive = false\nself.NextTurnBlock = 0\nself.NextTurnDraw = 0\nself.NextTurnKeepBlock = false\nself.NextTurnAttackMultiplier = 1\nself.TurnAttackMultiplier = 1\nself.NextTurnSelectPrompt = \"\"\nself.NextTurnSelectCopies = 0\nself.NextTurnAddCards = {}\nself.CombatOver = false\nself.DiscardPile = {}\nself.ExhaustPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Attack\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"rogue\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"rogue\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"rogue\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"rogue\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다. 이번 턴에 카드를 사용할 때마다, 대상 적이 체력을 2 잃습니다.\", kind = \"Attack\", damage = 8, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"rogue\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"rogue\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"rogue\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"rogue\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"모든 적에게 부여된 중독과 동일한 만큼의 방어도를 얻습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 을 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"rogue\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"rogue\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"rogue\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"rogue\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"rogue\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"적이 힘을 X 잃습니다. 약화를 X 부여합니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"를 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"대상 적에게 소멸된 카드 더미에 있는 모든 표창을 사용합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"rogue\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"rogue\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:PrepareCombatDrawPile()\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()\nlocal slotTid = 0\nslotTid = _TimerService:SetTimerRepeat(function()\n\tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then\n\t\t_TimerService:ClearTimer(slotTid)\n\t\treturn\n\tend\n\tfor i = 1, #self.Monsters do\n\t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then\n\t\t\tself:PositionMonsterSlot(i)\n\t\tend\n\tend\nend, 0.15)", "Scope": 2, "ExecSpace": 6, "Attributes": [], "Name": "StartCombat" }, - { - "Return": { - "Type": "void", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": null - }, - "Arguments": [ - { - "Type": "any", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": "monster" - }, - { - "Type": "string", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": "enemyId" - }, - { - "Type": "string", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": "group" - }, - { - "Type": "string", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": "mapName" - } - ], - "Code": "if self.Registered == nil then\n\tself.Registered = {}\nend\nlocal g = group\nif g == nil or g == \"\" then g = \"combat\" end\nlocal mp = mapName\nif mp == nil then mp = \"\" end\ntable.insert(self.Registered, { entity = monster, enemyId = enemyId, group = g, map = mp })", - "Scope": 2, - "ExecSpace": 6, - "Attributes": [], - "Name": "RegisterMonster" - }, - { - "Return": { - "Type": "void", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": null - }, - "Arguments": [], - "Code": "self.Monsters = {}\nlocal g = \"combat\"\nlocal node = self.MapNodes[self.CurrentNodeId]\nif node ~= nil and node.type ~= nil then g = node.type end\nlocal pmap = \"\"\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil and lp.CurrentMapName ~= nil then pmap = lp.CurrentMapName end\nlocal reg = self.Registered or {}\nfor i = 1, #reg do\n\tif reg[i].entity ~= nil and isvalid(reg[i].entity) then\n\t\treg[i].entity:SetVisible(false)\n\tend\nend\nlocal byGroup = {}\nfor i = 1, #reg do\n\tlocal r = reg[i]\n\tif r.entity ~= nil and isvalid(r.entity) and (r.map == nil or r.map == \"\" or pmap == \"\" or r.map == pmap) then\n\t\tlocal gg = r.group\n\t\tif gg == nil or gg == \"\" then gg = \"combat\" end\n\t\tif byGroup[gg] == nil then byGroup[gg] = {} end\n\t\tlocal x = 0\n\t\tif r.entity.TransformComponent ~= nil then\n\t\t\tx = r.entity.TransformComponent.WorldPosition.x\n\t\tend\n\t\ttable.insert(byGroup[gg], { entity = r.entity, enemyId = r.enemyId, x = x })\n\tend\nend\n-- 노드 타입별 랜덤 구성: 일반 1~3 / 엘리트 1+일반0~2 / 보스 1\nlocal chosen = {}\nlocal function takeFrom(key, k)\n\tlocal src = byGroup[key] or {}\n\tlocal pool = {}\n\tfor i = 1, #src do pool[i] = src[i] end\n\tself:Shuffle(pool)\n\tlocal taken = 0\n\tfor i = 1, #pool do\n\t\tif taken >= k then break end\n\t\ttable.insert(chosen, pool[i])\n\t\ttaken = taken + 1\n\tend\nend\nif g == \"boss\" then\n\ttakeFrom(\"boss\", 1)\nelseif g == \"elite\" then\n\ttakeFrom(\"elite\", 1)\n\ttakeFrom(\"combat\", math.random(0, 2))\nelse\n\ttakeFrom(\"combat\", math.random(1, 3))\nend\nif #chosen == 0 then takeFrom(g, 1) end\nif #chosen == 0 then takeFrom(\"combat\", 1) end\ntable.sort(chosen, function(a, b) return a.x < b.x end)\nlocal mult = 1 + (self.Floor - 1) * 0.45\nif g == \"elite\" or g == \"boss\" then\n\tmult = mult + self:AscEliteBonus()\nend\nlocal n = #chosen\nif n > 4 then n = 4 end\nfor i = 1, n do\n\tlocal item = chosen[i]\n\tlocal e = self.Enemies[item.enemyId]\n\tif e == nil then e = { name = item.enemyId, maxHp = 10, intents = { { kind = \"Attack\", value = 5 } } } end\n\tlocal intents = {}\n\tfor k = 1, #e.intents do\n\t\tlocal v = e.intents[k].value or 0\n\t\tif e.intents[k].kind == \"Attack\" then\n\t\t\tv = math.floor(v * mult * self:AscAtkMult())\n\t\telseif e.intents[k].kind ~= \"Debuff\" then\n\t\t\tv = math.floor(v * mult)\n\t\tend\n\t\tintents[k] = { kind = e.intents[k].kind, value = v, effect = e.intents[k].effect, card = e.intents[k].card, count = e.intents[k].count }\n\tend\n\tlocal maxHp = math.floor(e.maxHp * mult * self:AscHpMult())\n\tlocal hitClip = nil\n\tlocal standClip = nil\n\tif item.entity.StateAnimationComponent ~= nil then\n\t\tpcall(function()\n\t\t\thitClip = item.entity.StateAnimationComponent.ActionSheet[\"hit\"]\n\t\t\tstandClip = item.entity.StateAnimationComponent.ActionSheet[\"stand\"]\n\t\tend)\n\tend\n\tlocal startIdx = 1\n\tif #intents > 0 then startIdx = math.random(1, #intents) end\n\tself.Monsters[i] = { entity = item.entity, enemyId = item.enemyId, name = e.name,\n\t\thp = maxHp, maxHp = maxHp, block = 0, str = e.str or 0, weak = 0, vuln = 0, poison = 0, artifact = e.artifact or 0,\n\t\thitClip = hitClip, standClip = standClip, motionBusy = false,\n\t\tintents = intents, intentIdx = startIdx, alive = true, slot = i }\n\tself:ReviveMonsterEntity(item.entity)\n\tself:PositionMonsterSlot(i)\nend\nself.TargetIndex = 1", - "Scope": 2, - "ExecSpace": 6, - "Attributes": [], - "Name": "BuildMonsters" - }, - { - "Return": { - "Type": "void", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": null - }, - "Arguments": [ - { - "Type": "any", - "DefaultValue": null, - "SyncDirection": 0, - "Attributes": [], - "Name": "monster" - } - ], - "Code": "if monster == nil or not isvalid(monster) then\n\treturn\nend\nmonster:SetEnable(true)\nmonster:SetVisible(true)", - "Scope": 2, - "ExecSpace": 6, - "Attributes": [], - "Name": "ReviveMonsterEntity" - }, { "Return": { "Type": "void", @@ -2344,7 +2262,7 @@ "Name": null }, "Arguments": [], - "Code": "local warriorTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/WarriorTab\")\nif warriorTab ~= nil and (warriorTab.ButtonComponent ~= nil or warriorTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.WarriorDeckTabHandler ~= nil then\n\t\twarriorTab:DisconnectEvent(ButtonClickEvent, self.WarriorDeckTabHandler)\n\t\tself.WarriorDeckTabHandler = nil\n\tend\n\tself.WarriorDeckTabHandler = warriorTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"warrior\") end)\nend\nlocal thiefTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/ThiefTab\")\nif thiefTab ~= nil and (thiefTab.ButtonComponent ~= nil or thiefTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ThiefDeckTabHandler ~= nil then\n\t\tthiefTab:DisconnectEvent(ButtonClickEvent, self.ThiefDeckTabHandler)\n\t\tself.ThiefDeckTabHandler = nil\n\tend\n\tself.ThiefDeckTabHandler = thiefTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"bandit\") end)\nend\nlocal mageTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/MageTab\")\nif mageTab ~= nil and (mageTab.ButtonComponent ~= nil or mageTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.MageDeckTabHandler ~= nil then\n\t\tmageTab:DisconnectEvent(ButtonClickEvent, self.MageDeckTabHandler)\n\t\tself.MageDeckTabHandler = nil\n\tend\n\tself.MageDeckTabHandler = mageTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"magician\") end)\nend", + "Code": "local warriorTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/WarriorTab\")\nif warriorTab ~= nil and (warriorTab.ButtonComponent ~= nil or warriorTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.WarriorDeckTabHandler ~= nil then\n\t\twarriorTab:DisconnectEvent(ButtonClickEvent, self.WarriorDeckTabHandler)\n\t\tself.WarriorDeckTabHandler = nil\n\tend\n\tself.WarriorDeckTabHandler = warriorTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"warrior\") end)\nend\nlocal thiefTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/ThiefTab\")\nif thiefTab ~= nil and (thiefTab.ButtonComponent ~= nil or thiefTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ThiefDeckTabHandler ~= nil then\n\t\tthiefTab:DisconnectEvent(ButtonClickEvent, self.ThiefDeckTabHandler)\n\t\tself.ThiefDeckTabHandler = nil\n\tend\n\tself.ThiefDeckTabHandler = thiefTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"rogue\") end)\nend\nlocal mageTab = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/MageTab\")\nif mageTab ~= nil and (mageTab.ButtonComponent ~= nil or mageTab:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.MageDeckTabHandler ~= nil then\n\t\tmageTab:DisconnectEvent(ButtonClickEvent, self.MageDeckTabHandler)\n\t\tself.MageDeckTabHandler = nil\n\tend\n\tself.MageDeckTabHandler = mageTab:ConnectEvent(ButtonClickEvent, function() self:SetClassDeckTab(\"magician\") end)\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2382,7 +2300,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.RunActive ~= true or self.CombatOver == true or self.Hand == nil then\n\tself:Toast(\"전투 중에만 테스트 카드를 추가할 수 있습니다\")\n\treturn\nend\nlocal className = self.SelectedClass\nif className ~= \"warrior\" and className ~= \"magician\" and className ~= \"bandit\" then\n\tclassName = \"bandit\"\nend\nself.CodexMode = false\nself.ClassDeckMode = true\nself.DebugCardPickerMode = true\nself.DeckAllOpen = true\nself:SetClassDeckTab(className)\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend\nself:Toast(\"테스트 카드 추가 모드\")", + "Code": "if self.RunActive ~= true or self.CombatOver == true or self.Hand == nil then\n\tself:Toast(\"전투 중에만 테스트 카드를 추가할 수 있습니다\")\n\treturn\nend\nlocal className = self.SelectedClass\nif className ~= \"warrior\" and className ~= \"magician\" and className ~= \"rogue\" then\n\tclassName = \"rogue\"\nend\nself.CodexMode = false\nself.ClassDeckMode = true\nself.DebugCardPickerMode = true\nself.DeckAllOpen = true\nself:SetClassDeckTab(className)\nlocal hud = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud\")\nif hud ~= nil then\n\thud.Enable = true\nend\nself:Toast(\"테스트 카드 추가 모드\")", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2405,7 +2323,7 @@ "Name": "className" } ], - "Code": "if self.ClassDeckMode ~= true then\n\treturn\nend\nself.ClassDeckCards = {}\nself.ClassDeckTitle = \"직업 덱\"\nif className ~= \"warrior\" and className ~= \"magician\" and className ~= \"bandit\" then\n\tclassName = \"bandit\"\nend\nself.ClassDeckClass = className\nlocal allowed = {}\nif className == \"warrior\" then\n\tallowed[\"warrior\"] = true\n\tallowed[\"fighter\"] = true\n\tallowed[\"page\"] = true\n\tallowed[\"spearman\"] = true\n\tself.ClassDeckTitle = \"전사 전체 덱\"\nelseif className == \"magician\" then\n\tallowed[\"magician\"] = true\n\tallowed[\"firepoison\"] = true\n\tallowed[\"icelightning\"] = true\n\tallowed[\"cleric\"] = true\n\tself.ClassDeckTitle = \"마법사 전체 덱\"\nelse\n\tallowed[\"bandit\"] = true\n\tallowed[\"shiv\"] = true\n\tallowed[\"poisoner\"] = true\n\tallowed[\"trickster\"] = true\n\tself.ClassDeckTitle = \"도적 전체 덱\"\nend\nfor id, c in pairs(self.Cards) do\n\tif c ~= nil and c.curse ~= true and allowed[c.class] == true then\n\t\ttable.insert(self.ClassDeckCards, id)\n\tend\nend\ntable.sort(self.ClassDeckCards, function(a, b)\n\tlocal ca = self.Cards[a]\n\tlocal cb = self.Cards[b]\n\tlocal na = a\n\tlocal nb = b\n\tif ca ~= nil and ca.name ~= nil then na = ca.name end\n\tif cb ~= nil and cb.name ~= nil then nb = cb.name end\n\tif na == nb then return a < b end\n\treturn na < nb\nend)\nself:RenderAllDeck()\nself:RenderClassDeckTabs()", + "Code": "if self.ClassDeckMode ~= true then\n\treturn\nend\nself.ClassDeckCards = {}\nself.ClassDeckTitle = \"직업 덱\"\nif className ~= \"warrior\" and className ~= \"magician\" and className ~= \"rogue\" then\n\tclassName = \"rogue\"\nend\nself.ClassDeckClass = className\nlocal allowed = {}\nif className == \"warrior\" then\n\tallowed[\"warrior\"] = true\n\tallowed[\"fighter\"] = true\n\tallowed[\"page\"] = true\n\tallowed[\"spearman\"] = true\n\tself.ClassDeckTitle = \"전사 전체 덱\"\nelseif className == \"magician\" then\n\tallowed[\"magician\"] = true\n\tallowed[\"firepoison\"] = true\n\tallowed[\"icelightning\"] = true\n\tallowed[\"cleric\"] = true\n\tself.ClassDeckTitle = \"마법사 전체 덱\"\nelse\n\tlocal pools = self.ClassPools or {}\n\tallowed = pools[className] or allowed\n\tself.ClassDeckTitle = \"도적 전체 덱\"\nend\nfor id, c in pairs(self.Cards) do\n\tif c ~= nil and c.curse ~= true and allowed[c.class] == true then\n\t\ttable.insert(self.ClassDeckCards, id)\n\tend\nend\ntable.sort(self.ClassDeckCards, function(a, b)\n\tlocal ca = self.Cards[a]\n\tlocal cb = self.Cards[b]\n\tlocal na = a\n\tlocal nb = b\n\tif ca ~= nil and ca.name ~= nil then na = ca.name end\n\tif cb ~= nil and cb.name ~= nil then nb = cb.name end\n\tif na == nb then return a < b end\n\treturn na < nb\nend)\nself:RenderAllDeck()\nself:RenderClassDeckTabs()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2420,7 +2338,7 @@ "Name": null }, "Arguments": [], - "Code": "local tabs = {\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/WarriorTab\", cls = \"warrior\" },\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/ThiefTab\", cls = \"bandit\" },\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/MageTab\", cls = \"magician\" },\n}\nfor i = 1, #tabs do\n\tself:SetEntityEnabled(tabs[i].path, self.ClassDeckMode == true)\n\tlocal e = _EntityService:GetEntityByPath(tabs[i].path)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ClassDeckClass == tabs[i].cls then\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.22, 0.28, 0.34, 1)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.11, 0.13, 0.16, 1)\n\t\tend\n\tend\nend", + "Code": "local tabs = {\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/WarriorTab\", cls = \"warrior\" },\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/ThiefTab\", cls = \"rogue\" },\n\t{ path = \"/ui/DeckUIGroup/DeckAllHud/MageTab\", cls = \"magician\" },\n}\nfor i = 1, #tabs do\n\tself:SetEntityEnabled(tabs[i].path, self.ClassDeckMode == true)\n\tlocal e = _EntityService:GetEntityByPath(tabs[i].path)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ClassDeckClass == tabs[i].cls then\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.22, 0.28, 0.34, 1)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.11, 0.13, 0.16, 1)\n\t\tend\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3854,7 +3772,7 @@ "Name": null }, "Arguments": [], - "Code": "local anyAlive = false\nfor i = 1, #self.Monsters do\n\tif self.Monsters[i].alive == true then anyAlive = true; break end\nend\nif anyAlive == false then\n\tself.CombatOver = true\n\tself:ClearCombatCards()\n\tself.Gold = self.Gold + math.floor(25 * self:AscGoldMult())\n\tself:ApplyRelics(\"combatEnd\")\n\tself:ApplyRelics(\"combatReward\")\n\tself:MaybeDropPotion()\n\tself:RenderRun()\n\tlocal node = self.MapNodes[self.CurrentNodeId]\n\tif node ~= nil and node.type == \"elite\" then\n\t\tself.Gold = self.Gold + 15\n\t\tlocal nid = self:PickNewRelic()\n\t\tif nid ~= \"\" then\n\t\t\tself:AddRelic(nid)\n\t\t\tlocal nr = self.Relics[nid]\n\t\t\tif nr ~= nil then\n\t\t\t\tself:Toast(\"유물 획득: \" .. nr.name)\n\t\t\tend\n\t\tend\n\tend\n\tif node ~= nil and node.type == \"boss\" then\n\t\tif self.PlayerJob == \"\" and self.Floor < self.RunLength then\n\t\t\tself:ShowJobChoice()\n\t\telse\n\t\t\tif self.PlayerJob ~= \"\" then self:AwardSouls(1) end\n\t\t\tlocal bid = self:PickNewRelic()\n\t\t\tif bid ~= \"\" then\n\t\t\t\tself:AddRelic(bid)\n\t\t\t\tlocal br = self.Relics[bid]\n\t\t\t\tif br ~= nil then\n\t\t\t\t\tself:Toast(\"유물 획득: \" .. br.name)\n\t\t\t\tend\n\t\t\tend\n\t\t\tself:ContinueAfterBoss()\n\t\tend\n\telse\n\t\tself:OfferReward()\n\tend\nelseif self.PlayerHp <= 0 then\n\tself.CombatOver = true\n\tself:EndRun(\"패배...\")\nend", + "Code": "local anyAlive = false\nfor i = 1, #self.Monsters do\n\tif self.Monsters[i].alive == true then anyAlive = true; break end\nend\nif anyAlive == false then\n\tself.CombatOver = true\n\tself:ClearCombatCards()\n\tself.Gold = self.Gold + math.floor(25 * self:AscGoldMult())\n\tself:ApplyRelics(\"combatEnd\")\n\tself:ApplyRelics(\"combatReward\")\n\tself:MaybeDropPotion()\n\tself:RenderRun()\n\tlocal node = self.MapNodes[self.CurrentNodeId]\n\tif node ~= nil and node.type == \"elite\" then\n\t\tself.Gold = self.Gold + 15\n\t\tlocal nid = self:PickNewRelic()\n\t\tif nid ~= \"\" then\n\t\t\tself:AddRelic(nid)\n\t\t\tlocal nr = self.Relics[nid]\n\t\t\tif nr ~= nil then\n\t\t\t\tself:Toast(\"유물 획득: \" .. nr.name)\n\t\t\tend\n\t\tend\n\tend\n\tif node ~= nil and node.type == \"boss\" then\n\t\tif self:ShouldOfferJobChoice() == true then\n\t\t\tself:ShowJobChoice()\n\t\telse\n\t\t\tif self.PlayerJob ~= \"\" then self:AwardSouls(1) end\n\t\t\tlocal bid = self:PickNewRelic()\n\t\t\tif bid ~= \"\" then\n\t\t\t\tself:AddRelic(bid)\n\t\t\t\tlocal br = self.Relics[bid]\n\t\t\t\tif br ~= nil then\n\t\t\t\t\tself:Toast(\"유물 획득: \" .. br.name)\n\t\t\t\tend\n\t\t\tend\n\t\t\tself:ContinueAfterBoss()\n\t\tend\n\telse\n\t\tself:OfferReward()\n\tend\nelseif self.PlayerHp <= 0 then\n\tself.CombatOver = true\n\tself:EndRun(\"패배...\")\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3913,6 +3831,36 @@ "Attributes": [], "Name": "PickJobReward" }, + { + "Return": { + "Type": "boolean", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "if self.Floor >= self.RunLength then\n\treturn false\nend\nif self.PlayerJob == \"\" then\n\treturn true\nend\nif self.PlayerJob == \"assassin\" or self.PlayerJob == \"thief\" then\n\treturn true\nend\nreturn false", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "ShouldOfferJobChoice" + }, + { + "Return": { + "Type": "any", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "if self.PlayerJob == \"\" then\n\tlocal baseClass = self.SelectedClass\n\tif baseClass == \"rogue\" then\n\t\treturn self.Jobs[\"rogue\"]\n\tend\n\treturn self.Jobs[baseClass] or self.Jobs[\"rogue\"]\nelseif self.PlayerJob == \"assassin\" then\n\treturn self.Jobs[\"assassin\"]\nelseif self.PlayerJob == \"thief\" then\n\treturn self.Jobs[\"thief\"]\nend\nreturn nil", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "CurrentJobChoices" + }, { "Return": { "Type": "void", @@ -3922,7 +3870,7 @@ "Name": null }, "Arguments": [], - "Code": "local opts = self.Jobs[self.SelectedClass]\nif opts == nil then\n\topts = self.Jobs[\"warrior\"]\nend\nself.JobOpts = opts\nfor i = 1, 3 do\n\tlocal base = \"/ui/SelectUIGroup/JobSelectHud/Job_slot\" .. tostring(i)\n\tlocal o = opts[i]\n\tif o ~= nil then\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", o.name)\n\t\tself:SetText(base .. \"/Desc\", o.desc)\n\t\tlocal sc = self.Cards[o.starter]\n\t\tif sc ~= nil then\n\t\t\tself:SetText(base .. \"/Starter\", \"대표 카드: \" .. sc.name)\n\t\tend\n\telse\n\t\tself:SetEntityEnabled(base, false)\n\tend\nend\nself:SetEntityEnabled(\"/ui/SelectUIGroup/JobSelectHud\", true)", + "Code": "local opts = self:CurrentJobChoices()\nif opts == nil or #opts <= 0 then\n\tself:ContinueAfterBoss()\n\treturn\nend\nself.JobOpts = opts\nfor i = 1, 3 do\n\tlocal base = \"/ui/SelectUIGroup/JobSelectHud/Job_slot\" .. tostring(i)\n\tlocal o = opts[i]\n\tif o ~= nil then\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", o.name)\n\t\tself:SetText(base .. \"/Desc\", o.desc)\n\t\tlocal sc = self.Cards[o.starter]\n\t\tif sc ~= nil then\n\t\t\tself:SetText(base .. \"/Starter\", \"기본 카드: \" .. sc.name)\n\t\tend\n\telse\n\t\tself:SetEntityEnabled(base, false)\n\tend\nend\nself:SetEntityEnabled(\"/ui/SelectUIGroup/JobSelectHud\", true)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3937,7 +3885,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.PlayerJob ~= \"\" and self.Jobs ~= nil then\n\tfor cls, list in pairs(self.Jobs) do\n\t\tfor i = 1, #list do\n\t\t\tif list[i].id == self.PlayerJob then\n\t\t\t\treturn list[i].name\n\t\t\tend\n\t\tend\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\treturn \"전사\"\nelseif self.SelectedClass == \"bandit\" then\n\treturn \"도적\"\nelseif self.SelectedClass == \"magician\" then\n\treturn \"마법사\"\nend\nreturn \"플레이어\"", + "Code": "if self.PlayerJob ~= \"\" and self.Jobs ~= nil then\n\tfor cls, list in pairs(self.Jobs) do\n\t\tfor i = 1, #list do\n\t\t\tif list[i].id == self.PlayerJob then\n\t\t\t\treturn list[i].name\n\t\t\tend\n\t\tend\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\treturn \"전사\"\nelseif self.SelectedClass == \"rogue\" then\n\treturn \"도적\"\nelseif self.SelectedClass == \"magician\" then\n\treturn \"마법사\"\nend\nreturn \"플레이어\"", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3960,7 +3908,7 @@ "Name": "jobId" } ], - "Code": "self.PlayerJob = jobId\nlocal starter = \"\"\nlocal opts = self.Jobs[self.SelectedClass] or {}\nfor i = 1, #opts do\n\tif opts[i].id == jobId then\n\t\tstarter = opts[i].starter\n\tend\nend\nif starter ~= \"\" then\n\ttable.insert(self.RunDeck, starter)\n\tlocal sc = self.Cards[starter]\n\tif sc ~= nil then\n\t\tself:Toast(\"2차 전직: \" .. self:JobLabel() .. \"! 신규 카드 — \" .. sc.name)\n\tend\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself:SetEntityEnabled(\"/ui/SelectUIGroup/JobSelectHud\", false)\nself:ContinueAfterBoss()", + "Code": "local prevJob = self.PlayerJob\nlocal tier = 2\nif prevJob == \"assassin\" or prevJob == \"thief\" then\n\ttier = 3\nend\nself.PlayerJob = jobId\nlocal starter = \"\"\nlocal opts = {}\nif prevJob == \"\" then\n\tlocal baseClass = self.SelectedClass\n\topts = self.Jobs[baseClass] or self.Jobs[\"rogue\"] or {}\nelseif prevJob == \"assassin\" then\n\topts = self.Jobs[\"assassin\"] or {}\nelseif prevJob == \"thief\" then\n\topts = self.Jobs[\"thief\"] or {}\nend\nfor i = 1, #opts do\n\tif opts[i].id == jobId then\n\t\tstarter = opts[i].starter\n\tend\nend\nif starter ~= \"\" then\n\ttable.insert(self.RunDeck, starter)\n\tlocal sc = self.Cards[starter]\n\tif sc ~= nil then\n\t\tself:Toast(tostring(tier) .. \"차 전직: \" .. self:JobLabel() .. \"! 신규 카드 — \" .. sc.name)\n\tend\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself:SetEntityEnabled(\"/ui/SelectUIGroup/JobSelectHud\", false)\nself:ContinueAfterBoss()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4314,7 +4262,7 @@ "Name": null }, "Arguments": [], - "Code": "local pool = {}\nfor id, c in pairs(self.Cards) do\n\tif c.token ~= true and (c.class == self.SelectedClass or (self.PlayerJob ~= \"\" and c.class == self.PlayerJob)) then\n\t\ttable.insert(pool, id)\n\tend\nend\ntable.sort(pool)\nreturn pool", + "Code": "local pool = {}\nfor id, c in pairs(self.Cards) do\n\tlocal pools = self.ClassPools or {}\n\tlocal basePool = pools[self.SelectedClass] or pools.rogue or {}\n\tlocal jobPool = pools[self.PlayerJob] or {}\n\tif c.token ~= true and ((basePool[c.class] == true) or (self.PlayerJob ~= \"\" and jobPool[c.class] == true)) then\n\t\ttable.insert(pool, id)\n\tend\nend\ntable.sort(pool)\nreturn pool", "Scope": 2, "ExecSpace": 6, "Attributes": [], diff --git a/data/cardframes.json b/data/cardframes.json index f869908..b358b6b 100644 --- a/data/cardframes.json +++ b/data/cardframes.json @@ -10,7 +10,7 @@ "unique": "f5def2e8022b4e59a17d3c16414034fe", "legend": "cff71f2e472041ce80c6fbd296f42e2d" }, - "bandit": { + "rogue": { "normal": "9487b06867bc46269ed1d855420f457f", "unique": "b3081fb2fb1445fa90b12b01481a78ef", "legend": "c357d2daf31a489d95b8fa47e50dd879" @@ -25,11 +25,13 @@ "firepoison": "magician", "icelightning": "magician", "cleric": "magician", - "bandit": "bandit", - "curse": "bandit", - "shiv": "bandit", - "poisoner": "bandit", - "trickster": "bandit" + "curse": "rogue", + "shiv": "rogue", + "rogue": "rogue", + "assassin": "rogue", + "thief": "rogue", + "hermit": "rogue", + "thiefmaster": "rogue" }, "rewardWeights": { "normal": 70, diff --git a/data/cards.json b/data/cards.json index 3303788..0548c53 100644 --- a/data/cards.json +++ b/data/cards.json @@ -376,7 +376,7 @@ "name": "무력화", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 3 줍니다. 약화를 1 부여합니다.", "weak": 1, @@ -387,7 +387,7 @@ "name": "타격", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 6 줍니다.", "damage": 6, @@ -397,7 +397,7 @@ "name": "생존자", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 8 얻습니다. 카드를 1장 버립니다.", "block": 8, @@ -408,7 +408,7 @@ "name": "수비", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 5 얻습니다.", "block": 5, @@ -418,7 +418,7 @@ "name": "칼질", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 6 줍니다.", "damage": 6, @@ -428,7 +428,7 @@ "name": "표창", "cost": 0, "kind": "Attack", - "class": "shiv", + "class": "rogue", "rarity": "normal", "desc": "피해를 4 줍니다. 소멸.", "damage": 4, @@ -440,7 +440,7 @@ "name": "단검 분사", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "모든 적에게 피해를 4만큼 2번 줍니다.", "aoe": true, @@ -452,7 +452,7 @@ "name": "단검 투척", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.", "drawUntilHandSize": 6, @@ -464,7 +464,7 @@ "name": "독 찌르기", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 6 줍니다. 중독을 3 부여합니다.", "poison": 3, @@ -475,7 +475,7 @@ "name": "불의의 일격", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 8 줍니다. 약화를 1 부여합니다.", "weak": 1, @@ -487,7 +487,7 @@ "name": "선제 타격", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.", "damage": 3, @@ -498,7 +498,7 @@ "name": "완수", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.", "damage": 7, @@ -510,7 +510,7 @@ "name": "재주넘기", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "교활. 모든 적에게 피해를 6 줍니다.", "aoe": true, @@ -522,7 +522,7 @@ "name": "도탄", "cost": 2, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "교활. 무작위 적에게 피해를 3만큼 4번 줍니다.", "damage": 3, @@ -535,7 +535,7 @@ "name": "예비", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "카드를 1장 뽑습니다. 카드를 1장 버립니다.", "blockPerDamageDealtThisTurn": 1, @@ -546,7 +546,7 @@ "name": "예측", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "이번 턴 동안 민첩을 2 얻습니다.", "dex": 2, @@ -556,7 +556,7 @@ "name": "튕겨내기", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 4 얻습니다.", "block": 4, @@ -566,7 +566,7 @@ "name": "검무", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "표창을 3장 손으로 가져옵니다. 소멸.", "addShiv": 3, @@ -577,7 +577,7 @@ "name": "공중제비", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 5 얻습니다. 카드를 2장 뽑습니다.", "block": 5, @@ -588,7 +588,7 @@ "name": "구르기", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다", "block": 4, @@ -599,7 +599,7 @@ "name": "귀를 찢는 비명", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.", "draw": 1, @@ -611,7 +611,7 @@ "name": "망토와 단검", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.", "block": 6, @@ -622,7 +622,7 @@ "name": "맹독", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "중독을 5 부여합니다.", "poison": 5, @@ -632,7 +632,7 @@ "name": "뱀 물기", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "보존. 중독을 7 부여합니다.", "poison": 7, @@ -643,7 +643,7 @@ "name": "범접 불가", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "normal", "desc": "교활. 방어도를 6 얻습니다.", "block": 6, @@ -654,7 +654,7 @@ "name": "꼬챙이", "cost": 2, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 8만큼 X번 줍니다.", "useAllEnergy": true, @@ -666,7 +666,7 @@ "name": "배신", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "선천성. 피해를 11 줍니다. 소멸.", "innate": true, @@ -677,7 +677,7 @@ "name": "정밀한 베기", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.", "damage": 13, @@ -688,7 +688,7 @@ "name": "마무리", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.", "damage": 0, @@ -699,7 +699,7 @@ "name": "메멘토 모리", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.", "damage": 9, @@ -710,7 +710,7 @@ "name": "목 조르기", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 8 줍니다. 이번 턴에 카드를 사용할 때마다, 대상 적이 체력을 2 잃습니다.", "damage": 8, @@ -720,7 +720,7 @@ "name": "프레췌", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "손에 있는 스킬 카드 1장당 피해를 5 줍니다.", "damage": 0, @@ -731,7 +731,7 @@ "name": "덮치기", "cost": 2, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.", "damage": 12, @@ -742,7 +742,7 @@ "name": "돌진", "cost": 2, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "방어도를 10 얻습니다. 피해를 10 줍니다.", "block": 10, @@ -753,7 +753,7 @@ "name": "천적", "cost": 2, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.", "nextTurnDraw": 2, @@ -764,7 +764,7 @@ "name": "정밀 사격", "cost": 3, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.", "damage": 15, @@ -775,7 +775,7 @@ "name": "계산된 도박", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.", "image": "c1e19219745e44c39ae6ac2f77e347d9", @@ -786,7 +786,7 @@ "name": "들춰내기", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.", "vuln": 2, @@ -799,7 +799,7 @@ "name": "숨겨진 단검", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.", "discard": 2, @@ -810,7 +810,7 @@ "name": "탈출구", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.", "draw": 1, @@ -821,7 +821,7 @@ "name": "곡예", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "카드를 3장 뽑습니다. 카드를 1장 버립니다.", "draw": 3, @@ -832,7 +832,7 @@ "name": "손기술", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.", "block": 7, @@ -843,7 +843,7 @@ "name": "신기루", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "모든 적에게 부여된 중독과 동일한 만큼의 방어도를 얻습니다. 소멸.", "draw": 1, @@ -853,7 +853,7 @@ "name": "전문성", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.", "image": "c1e19219745e44c39ae6ac2f77e347d9", @@ -863,7 +863,7 @@ "name": "차오르는 독", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "적이 중독을 보유하고 있다면, 중독을 9 부여합니다.", "poison": 9, @@ -874,7 +874,7 @@ "name": "흐릿함", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.", "block": 5, @@ -885,7 +885,7 @@ "name": "다리 걸기", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "약화를 2 부여합니다. 방어도를 11 얻습니다.", "block": 11, @@ -896,7 +896,7 @@ "name": "비책", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.", "addShiv": 3, @@ -907,7 +907,7 @@ "name": "탄성 플라스크", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "무작위 적에게 중독을 3만큼 3번 부여합니다.", "poison": 3, @@ -919,7 +919,7 @@ "name": "반사신경", "cost": 3, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "교활. 카드를 2장 뽑습니다.", "draw": 2, @@ -930,7 +930,7 @@ "name": "아지랑이", "cost": 3, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "교활. 모든 적에게 중독을 4 부여합니다.", "poison": 4, @@ -941,7 +941,7 @@ "name": "전략가", "cost": 3, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "교활. 을 얻습니다.", "gainEnergy": 1, @@ -952,7 +952,7 @@ "name": "괜찮은 전략", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "내 턴 종료 시, 카드를 최대 1장까지 보존합니다.", "powerEffect": "retainOne", @@ -963,7 +963,7 @@ "name": "무한의 검날", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "내 턴 시작 시, 표창을 1장 손으로 가져옵니다.", "turnStartShiv": 1, @@ -973,7 +973,7 @@ "name": "발놀림", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "민첩을 2 얻습니다.", "dex": 2, @@ -983,7 +983,7 @@ "name": "발병", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.", "image": "19361e72087946b1888684185b40d935", @@ -994,7 +994,7 @@ "name": "유독 가스", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.", "poison": 2, @@ -1006,7 +1006,7 @@ "name": "정밀", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "표창의 피해량이 4 증가합니다.", "shivDamageBonus": 4, @@ -1016,7 +1016,7 @@ "name": "환영검", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.", "shivRetain": true, @@ -1027,7 +1027,7 @@ "name": "스피드스터", "cost": 2, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "unique", "desc": "내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.", "aoe": true, @@ -1038,7 +1038,7 @@ "name": "대단원의 막", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.", "playableWhenDrawPileEmpty": true, @@ -1050,7 +1050,7 @@ "name": "암살", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.", "innate": true, @@ -1062,7 +1062,7 @@ "name": "메아리 참격", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.", "aoe": true, @@ -1074,7 +1074,7 @@ "name": "사냥", "cost": 1, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.", "damage": 10, @@ -1085,7 +1085,7 @@ "name": "살해", "cost": 3, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.", "damage": 1, @@ -1096,7 +1096,7 @@ "name": "불쾌", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "적이 힘을 X 잃습니다. 약화를 X 부여합니다. 소멸.", "useAllEnergy": true, @@ -1107,7 +1107,7 @@ "name": "아드레날린", "cost": 0, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "를 얻습니다. 카드를 2장 뽑습니다. 소멸.", "draw": 2, @@ -1118,7 +1118,7 @@ "name": "강철의 폭풍", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.", "discardAll": true, @@ -1129,7 +1129,7 @@ "name": "그림자 걸음", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.", "nextTurnAttackMultiplier": 2, @@ -1140,7 +1140,7 @@ "name": "그림자 은신", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "이번 턴 동안 얻는 방어도가 2배가 됩니다.", "blockGainMultiplier": 2, @@ -1150,7 +1150,7 @@ "name": "부식성 파도", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.", "drawPoison": 2, @@ -1160,7 +1160,7 @@ "name": "잉크 칼날", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "잉크투성이 표창을 2장 손으로 가져옵니다.", "addShiv": 2, @@ -1170,7 +1170,7 @@ "name": "폭주", "cost": 1, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.", "draw": 1, @@ -1181,7 +1181,7 @@ "name": "칼날 함정", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "대상 적에게 소멸된 카드 더미에 있는 모든 표창을 사용합니다.", "draw": 1, @@ -1191,7 +1191,7 @@ "name": "불릿 타임", "cost": 3, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.", "handCostZeroThisTurn": true, @@ -1202,7 +1202,7 @@ "name": "악몽", "cost": 3, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.", "nextTurnCopies": 3, @@ -1214,7 +1214,7 @@ "name": "작업 도구", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.", "turnStartDraw": 1, @@ -1225,7 +1225,7 @@ "name": "잔상", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "카드를 사용할 때마다, 방어도를 1 얻습니다.", "image": "0946f69d84464df29b24b94c744c868d", @@ -1235,7 +1235,7 @@ "name": "촉진제", "cost": 1, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "적 턴 시작 시 독이 한 번 더 틱합니다.", "image": "19361e72087946b1888684185b40d935", @@ -1245,7 +1245,7 @@ "name": "독 바르기", "cost": 2, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.", "attackPoison": 1, @@ -1255,7 +1255,7 @@ "name": "설계의 대가", "cost": 2, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "사용한 스킬 카드는 교활해집니다.", "image": "c1e19219745e44c39ae6ac2f77e347d9", @@ -1265,7 +1265,7 @@ "name": "추적", "cost": 2, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.", "attackDamageVsWeakMultiplier": 2, @@ -1275,7 +1275,7 @@ "name": "칼날 부채", "cost": 2, "kind": "Skill", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.", "addShiv": 4, @@ -1286,7 +1286,7 @@ "name": "구렁이의 형상", "cost": 3, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.", "cardPlayedRandomDamage": 4, @@ -1296,7 +1296,7 @@ "name": "연마", "cost": 3, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.", "dex": 1, @@ -1308,7 +1308,7 @@ "name": "진압", "cost": 0, "kind": "Attack", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "선천성. 피해를 11 줍니다. 약화를 3 부여합니다.", "innate": true, @@ -1320,7 +1320,7 @@ "name": "유령의 형상", "cost": 3, "kind": "Power", - "class": "bandit", + "class": "rogue", "rarity": "legend", "desc": "불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.", "intangible": 2, @@ -1353,18 +1353,18 @@ "MagicGuard", "MagicClaw" ], - "bandit": [ - "SilentStrike", - "SilentStrike", - "SilentStrike", - "SilentStrike", - "SilentStrike", - "SilentDefend", - "SilentDefend", - "SilentDefend", - "SilentDefend", - "SilentDefend", + "rogue": [ "Neutralize", + "SilentStrike", + "SilentStrike", + "SilentStrike", + "SilentStrike", + "SilentStrike", + "SilentDefend", + "SilentDefend", + "SilentDefend", + "SilentDefend", + "SilentDefend", "Survivor" ] } diff --git a/data/cards.xlsx b/data/cards.xlsx index 57de5bbff978d26148c1e622bdb26994329e1824..5bfe85b0d006564f038c0af5be96cf9f2888da78 100644 GIT binary patch delta 18234 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 lyi2x(e{8WM6ax8U!?*t@;VGyjyQ|= self.RunLength then + return false +end +if self.PlayerJob == "" then + return true +end +if self.PlayerJob == "assassin" or self.PlayerJob == "thief" then + return true +end +return false`, [], 0, 'boolean'), + method('CurrentJobChoices', `if self.PlayerJob == "" then + local baseClass = self.SelectedClass + if baseClass == "rogue" then + return self.Jobs["rogue"] + end + return self.Jobs[baseClass] or self.Jobs["rogue"] +elseif self.PlayerJob == "assassin" then + return self.Jobs["assassin"] +elseif self.PlayerJob == "thief" then + return self.Jobs["thief"] +end +return nil`, [], 0, 'any'), + method('ShowJobSelect', `local opts = self:CurrentJobChoices() +if opts == nil or #opts <= 0 then + self:ContinueAfterBoss() + return end self.JobOpts = opts for i = 1, 3 do @@ -34,7 +57,7 @@ for i = 1, 3 do self:SetText(base .. "/Desc", o.desc) local sc = self.Cards[o.starter] if sc ~= nil then - self:SetText(base .. "/Starter", "대표 카드: " .. sc.name) + self:SetText(base .. "/Starter", "기본 카드: " .. sc.name) end else self:SetEntityEnabled(base, false) @@ -52,15 +75,28 @@ self:SetEntityEnabled("/ui/SelectUIGroup/JobSelectHud", true)`), end if self.SelectedClass == "warrior" then return "전사" -elseif self.SelectedClass == "bandit" then +elseif self.SelectedClass == "rogue" then return "도적" elseif self.SelectedClass == "magician" then return "마법사" end return "플레이어"`, [], 0, 'string'), - method('SetJob', `self.PlayerJob = jobId + method('SetJob', `local prevJob = self.PlayerJob +local tier = 2 +if prevJob == "assassin" or prevJob == "thief" then + tier = 3 +end +self.PlayerJob = jobId local starter = "" -local opts = self.Jobs[self.SelectedClass] or {} +local opts = {} +if prevJob == "" then + local baseClass = self.SelectedClass + opts = self.Jobs[baseClass] or self.Jobs["rogue"] or {} +elseif prevJob == "assassin" then + opts = self.Jobs["assassin"] or {} +elseif prevJob == "thief" then + opts = self.Jobs["thief"] or {} +end for i = 1, #opts do if opts[i].id == jobId then starter = opts[i].starter @@ -70,7 +106,7 @@ 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()) diff --git a/tools/deck/cb/reward.mjs b/tools/deck/cb/reward.mjs index a10c01a..6173c59 100644 --- a/tools/deck/cb/reward.mjs +++ b/tools/deck/cb/reward.mjs @@ -5,7 +5,10 @@ import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, export const rewardMethods = [ method('CardPool', `local pool = {} for id, c in pairs(self.Cards) do - if c.token ~= true and (c.class == self.SelectedClass or (self.PlayerJob ~= "" and c.class == self.PlayerJob)) then + local pools = self.ClassPools or {} + local basePool = pools[self.SelectedClass] or pools.rogue or {} + local jobPool = pools[self.PlayerJob] or {} + if c.token ~= true and ((basePool[c.class] == true) or (self.PlayerJob ~= "" and jobPool[c.class] == true)) then table.insert(pool, id) end end diff --git a/tools/deck/cb/run.mjs b/tools/deck/cb/run.mjs index 243953b..1e87633 100644 --- a/tools/deck/cb/run.mjs +++ b/tools/deck/cb/run.mjs @@ -1,17 +1,17 @@ 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, luaCharsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs'; +import { CARDS, ENEMIES, CLASSES, JOBS, CLASS_POOLS, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaCharsTable, luaClassPoolsTable, 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'; export const runMethods = [ 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(', ')} } +\tself.PlayerMaxHp = ${CLASSES.magician.maxHp} +\tself.RunDeck = { ${CARDS.starterDecks.magician.map(luaStr).join(', ')} } +elseif self.SelectedClass == "rogue" then +\tself.PlayerMaxHp = ${CLASSES.rogue.maxHp} +\tself.RunDeck = { ${CARDS.starterDecks.rogue.map(luaStr).join(', ')} } else - self.PlayerMaxHp = ${CLASSES.warrior.maxHp} - self.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} } +\tself.PlayerMaxHp = ${CLASSES.warrior.maxHp} +\tself.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} } end self.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty() self.PlayerHp = self.PlayerMaxHp @@ -30,6 +30,7 @@ self.CurrentNodeId = "" self.CurrentEnemyId = "" self.PlayerJob = "" ${luaJobsTable(JOBS)} +${luaClassPoolsTable()} ${luaFramesTable()} ${luaNodeIconsTable()} ${luaCharsTable()} @@ -46,16 +47,16 @@ if lp ~= nil then cam = lp.CameraComponent end if cam == nil then cam = _CameraService:GetCurrentCameraComponent() end if cam ~= nil then cam.ConfineCameraArea = false end _TimerService:SetTimerOnce(function() - local cc = nil - local lp2 = _UserService.LocalPlayer - if lp2 ~= nil then cc = lp2.CameraComponent end - if cc == nil then cc = _CameraService:GetCurrentCameraComponent() end - if cc ~= nil then - cc.ZoomRatio = ${CAM.zoomRatio} - cc.CameraOffset = Vector2(${CAM.cameraOffsetX}, ${CAM.cameraOffsetY}) - cc.ScreenOffset = Vector2(${CAM.screenOffsetX}, ${CAM.screenOffsetY}) - cc.ConfineCameraArea = true - end +\tlocal cc = nil +\tlocal lp2 = _UserService.LocalPlayer +\tif lp2 ~= nil then cc = lp2.CameraComponent end +\tif cc == nil then cc = _CameraService:GetCurrentCameraComponent() end +\tif cc ~= nil then +\t\tcc.ZoomRatio = ${CAM.zoomRatio} +\t\tcc.CameraOffset = Vector2(${CAM.cameraOffsetX}, ${CAM.cameraOffsetY}) +\t\tcc.ScreenOffset = Vector2(${CAM.screenOffsetX}, ${CAM.screenOffsetY}) +\t\tcc.ConfineCameraArea = true +\tend end, 0.2)`), method('StartCombat', `self:ShowState("combat") self:KickCombatCamera() @@ -122,7 +123,7 @@ self.Hand = {} ${luaCardsTable(CARDS.cards)} self.DrawPile = {} for i = 1, #self.RunDeck do - self.DrawPile[i] = self.RunDeck[i] +\tself.DrawPile[i] = self.RunDeck[i] end self:Shuffle(self.DrawPile) self:PrepareCombatDrawPile() @@ -133,123 +134,14 @@ self:ApplyRelics("combatStart") self:RenderCombat() local slotTid = 0 slotTid = _TimerService:SetTimerRepeat(function() - if self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then - _TimerService:ClearTimer(slotTid) - return - end - for i = 1, #self.Monsters do - if self.Monsters[i] ~= nil and self.Monsters[i].alive == true then - self:PositionMonsterSlot(i) - end - end +\tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then +\t\t_TimerService:ClearTimer(slotTid) +\t\treturn +\tend +\tfor i = 1, #self.Monsters do +\t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then +\t\t\tself:PositionMonsterSlot(i) +\t\tend +\tend end, 0.15)`), - method('RegisterMonster', `if self.Registered == nil then - self.Registered = {} -end -local g = group -if g == nil or g == "" then g = "combat" end -local mp = mapName -if mp == nil then mp = "" end -table.insert(self.Registered, { entity = monster, enemyId = enemyId, group = g, map = mp })`, [ - { Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'monster' }, - { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'enemyId' }, - { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'group' }, - { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'mapName' }, - ]), - method('BuildMonsters', `self.Monsters = {} -local g = "combat" -local node = self.MapNodes[self.CurrentNodeId] -if node ~= nil and node.type ~= nil then g = node.type end -local pmap = "" -local lp = _UserService.LocalPlayer -if lp ~= nil and lp.CurrentMapName ~= nil then pmap = lp.CurrentMapName end -local reg = self.Registered or {} -for i = 1, #reg do - if reg[i].entity ~= nil and isvalid(reg[i].entity) then - reg[i].entity:SetVisible(false) - end -end -local byGroup = {} -for i = 1, #reg do - local r = reg[i] - if r.entity ~= nil and isvalid(r.entity) and (r.map == nil or r.map == "" or pmap == "" or r.map == pmap) then - local gg = r.group - if gg == nil or gg == "" then gg = "combat" end - if byGroup[gg] == nil then byGroup[gg] = {} end - local x = 0 - if r.entity.TransformComponent ~= nil then - x = r.entity.TransformComponent.WorldPosition.x - end - table.insert(byGroup[gg], { entity = r.entity, enemyId = r.enemyId, x = x }) - end -end --- 노드 타입별 랜덤 구성: 일반 1~3 / 엘리트 1+일반0~2 / 보스 1 -local chosen = {} -local function takeFrom(key, k) - local src = byGroup[key] or {} - local pool = {} - for i = 1, #src do pool[i] = src[i] end - self:Shuffle(pool) - local taken = 0 - for i = 1, #pool do - if taken >= k then break end - table.insert(chosen, pool[i]) - taken = taken + 1 - end -end -if g == "boss" then - takeFrom("boss", 1) -elseif g == "elite" then - takeFrom("elite", 1) - takeFrom("combat", math.random(0, 2)) -else - takeFrom("combat", math.random(1, 3)) -end -if #chosen == 0 then takeFrom(g, 1) end -if #chosen == 0 then takeFrom("combat", 1) end -table.sort(chosen, function(a, b) return a.x < b.x end) -local mult = 1 + (self.Floor - 1) * 0.45 -if g == "elite" or g == "boss" then - mult = mult + self:AscEliteBonus() -end -local n = #chosen -if n > ${MAX_MONSTERS} then n = ${MAX_MONSTERS} end -for i = 1, n do - local item = chosen[i] - local e = self.Enemies[item.enemyId] - if e == nil then e = { name = item.enemyId, maxHp = 10, intents = { { kind = "Attack", value = 5 } } } end - local intents = {} - for k = 1, #e.intents do - local v = e.intents[k].value or 0 - if e.intents[k].kind == "Attack" then - v = math.floor(v * mult * self:AscAtkMult()) - elseif e.intents[k].kind ~= "Debuff" then - v = math.floor(v * mult) - end - intents[k] = { kind = e.intents[k].kind, value = v, effect = e.intents[k].effect, card = e.intents[k].card, count = e.intents[k].count } - end - local maxHp = math.floor(e.maxHp * mult * self:AscHpMult()) - local hitClip = nil - local standClip = nil - if item.entity.StateAnimationComponent ~= nil then - pcall(function() - hitClip = item.entity.StateAnimationComponent.ActionSheet["hit"] - standClip = item.entity.StateAnimationComponent.ActionSheet["stand"] - end) - end - local startIdx = 1 - if #intents > 0 then startIdx = math.random(1, #intents) end - self.Monsters[i] = { entity = item.entity, enemyId = item.enemyId, name = e.name, - hp = maxHp, maxHp = maxHp, block = 0, str = e.str or 0, weak = 0, vuln = 0, poison = 0, artifact = e.artifact or 0, - hitClip = hitClip, standClip = standClip, motionBusy = false, - intents = intents, intentIdx = startIdx, alive = true, slot = i } - self:ReviveMonsterEntity(item.entity) - self:PositionMonsterSlot(i) -end -self.TargetIndex = 1`), - method('ReviveMonsterEntity', `if monster == nil or not isvalid(monster) then - return -end -monster:SetEnable(true) -monster:SetVisible(true)`, [{ Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'monster' }]), ]; diff --git a/tools/deck/cb/screens.mjs b/tools/deck/cb/screens.mjs index 7fe661c..7d7585c 100644 --- a/tools/deck/cb/screens.mjs +++ b/tools/deck/cb/screens.mjs @@ -75,7 +75,7 @@ if thief ~= nil and (thief.ButtonComponent ~= nil or thief:AddComponent("ButtonC thief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler) self.ThiefSelectHandler = nil end - self.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass("bandit") end) +self.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass("rogue") end) end local mage = _EntityService:GetEntityByPath("/ui/SelectUIGroup/CharacterSelectHud/MageButton") if mage ~= nil and (mage.ButtonComponent ~= nil or mage:AddComponent("ButtonComponent") ~= nil) then diff --git a/tools/deck/lib/data.mjs b/tools/deck/lib/data.mjs index 684d36d..d1bcf98 100644 --- a/tools/deck/lib/data.mjs +++ b/tools/deck/lib/data.mjs @@ -6,7 +6,7 @@ const ENEMIES = JSON.parse(readFileSync('data/enemies.json', 'utf8')); // 검증 (fail-fast): 잘못된 데이터면 생성 중단 const CLASSES = { warrior: { label: '전사', maxHp: 80 }, - bandit: { label: '도적', maxHp: 70 }, + rogue: { label: '도적', maxHp: 70 }, magician: { label: '마법사', maxHp: 70 }, }; for (const cls of Object.keys(CLASSES)) { @@ -27,18 +27,35 @@ 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' }, + rogue: [ + { id: 'assassin', name: '어쌔신', desc: '단일 폭딜\n표창 · 검무\n치명타 연계', starter: 'BladeDance' }, + { id: 'thief', name: '시프', desc: '독과 순환\n중독 · 플라스크\n손패 운영', starter: 'DeadlyPoison' }, ], + assassin: [ + { id: 'hermit', name: '허밋', desc: '교활한 마무리\n회피 · 잔상\n턴 순환', starter: 'Footwork' }, + ], + thief: [ + { id: 'thiefmaster', name: '시프마스터', desc: '고급 운영\n교활 · 반복\n스킬 연계', starter: 'MasterPlanner' }, + ], +}; +const CLASS_POOLS = { + warrior: ['warrior', 'fighter', 'page', 'spearman'], + magician: ['magician', 'firepoison', 'icelightning', 'cleric'], + rogue: ['rogue'], + assassin: ['rogue', 'assassin'], + thief: ['rogue', 'thief'], + hermit: ['rogue', 'assassin', 'hermit'], + thiefmaster: ['rogue', 'thief', 'thiefmaster'], }; for (const [cls, jobs] of Object.entries(JOBS)) { for (const j of jobs) { - if (!CARDS.cards[j.starter]) throw new Error(`[gen-slaydeck] JOBS.${cls}.${j.id} 대표 카드 없음: ${j.starter}`); + if (!CARDS.cards[j.starter]) throw new Error(`[gen-slaydeck] JOBS.${cls}.${j.id} starter 카드 없음: ${j.starter}`); } } -// 영혼(soul) 메타 해금 — 2차 전직 후 보스 클리어로 영혼 적립, 로비 영혼상점에서 구매 → 다음 런 이점 +function luaClassPoolsTable() { + const rows = Object.entries(CLASS_POOLS).map(([cls, list]) => '\t' + cls + ' = { ' + list.map((c) => c + ' = true').join(', ') + ' },').join('\n'); + return 'self.ClassPools = {\n' + rows + '\n}'; +} const SOUL_UNLOCKS = [ { key: 'meso', name: '두둑한 지갑', desc: '런 시작 시 메소 +60', cost: 3 }, { key: 'hp', name: '단련된 육체', desc: '시작 최대 HP +15', cost: 4 }, @@ -101,7 +118,7 @@ if (!/^[0-9a-f]{32}$/.test(NODEICONS.background || '')) throw new Error('[gen-sl // 캐릭터 선택 초상화 (메이커 임포트 RUID, data/characters.json 단일 소스 — 교체 시 이 파일만 수정 후 재생성) const CHARS = JSON.parse(readFileSync('data/characters.json', 'utf8')); -for (const c of ['warrior', 'magician', 'bandit']) { +for (const c of ['warrior', 'magician', 'rogue']) { if (!/^[0-9a-f]{32}$/.test((CHARS.portraits || {})[c] || '')) throw new Error(`[gen-slaydeck] characters.json portraits.${c} RUID 누락/형식오류`); } @@ -262,4 +279,4 @@ function luaDeckTable(deck) { return `self.DrawPile = { ${deck.map(luaStr).join(', ')} }`; } -export { CARDS, ENEMIES, CLASSES, JOBS, SOUL_UNLOCKS, luaSoulShopTable, CARDFRAMES, RARITIES, frameRuid, luaFramesTable, luaNodeIconsTable, luaCharsTable, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, luaRelicsTable, POTIONS, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable }; +export { CARDS, ENEMIES, CLASSES, JOBS, CLASS_POOLS, SOUL_UNLOCKS, luaSoulShopTable, CARDFRAMES, RARITIES, frameRuid, luaFramesTable, luaNodeIconsTable, luaCharsTable, luaClassPoolsTable, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, luaRelicsTable, POTIONS, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable };