From 1029459f23453a8c002bea6054ac9f61bb7d32ad Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 13 Jul 2026 01:59:11 +0900 Subject: [PATCH] Fix damage pop UI paths and card hover tooltip support --- RootDesk/MyDesk/SlayDeckController.codeblock | 112 +- docs/card-ui-standardization.md | 164 + tools/deck/cb/charselect.mjs | 3 + tools/deck/cb/combat.mjs | 14 +- tools/deck/cb/deckturn.mjs | 46 +- tools/deck/cb/deckview.mjs | 8 +- tools/deck/cb/hand.mjs | 16 +- tools/deck/cb/items.mjs | 4 +- tools/deck/cb/jobs.mjs | 2 +- tools/deck/cb/layout.mjs | 2 +- tools/deck/cb/map.mjs | 2 +- tools/deck/cb/render.mjs | 130 +- tools/deck/cb/reward.mjs | 2 +- tools/deck/cb/run.mjs | 1 + tools/deck/cb/shop.mjs | 2 +- tools/deck/cb/soul.mjs | 4 +- tools/deck/cb/tooltip.mjs | 11 +- tools/deck/gen-slaydeck.mjs | 3 + tools/deck/lib/data.mjs | 200 +- ui/DeckUIGroup.ui | 12 +- ui/RunUIGroup.ui | 4083 +++++++++++++++--- ui/ToolTipGroup.ui | 626 +++ 22 files changed, 4569 insertions(+), 878 deletions(-) create mode 100644 docs/card-ui-standardization.md create mode 100644 ui/ToolTipGroup.ui diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index 95fac7d..5da84b2 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -113,6 +113,20 @@ "Attributes": [], "Name": "DmgPopSlotQueue" }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "PlayerDmgPopIndex" + }, + { + "Type": "any", + "DefaultValue": "nil", + "SyncDirection": 0, + "Attributes": [], + "Name": "HpBarOrigins" + }, { "Type": "any", "DefaultValue": "nil", @@ -393,6 +407,13 @@ "Attributes": [], "Name": "GridHoverPath" }, + { + "Type": "boolean", + "DefaultValue": "false", + "SyncDirection": 0, + "Attributes": [], + "Name": "GridScrollActive" + }, { "Type": "any", "DefaultValue": "nil", @@ -1765,7 +1786,7 @@ "Name": null }, "Arguments": [], - "Code": "local defs = self.SoulShopDef or {}\nfor i = 1, 4 do\n\tlocal base = \"/ui/LobbyUIGroup/SoulShopHud/Item\" .. tostring(i)\n\tlocal d = defs[i]\n\tif d == nil then\n\t\tself:SetEntityEnabled(base, false)\n\telse\n\t\tlocal itemName = d.name or \"Unlock\"\n\t\tlocal itemDesc = d.desc or \"\"\n\t\tlocal itemKey = d.key\n\t\tlocal itemCost = d.cost or 0\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", itemName)\n\t\tself:SetText(base .. \"/Desc\", itemDesc)\n\t\tlocal owned = itemKey ~= nil and self.SoulUnlocks ~= nil and self.SoulUnlocks[itemKey] == true\n\t\tif owned then\n\t\t\tself:SetText(base .. \"/Status\", \"Owned\")\n\t\telseif (self.SoulPoints or 0) >= itemCost then\n\t\t\tself:SetText(base .. \"/Status\", tostring(itemCost) .. \" soul · buy\")\n\t\telse\n\t\t\tself:SetText(base .. \"/Status\", tostring(itemCost) .. \" soul · low\")\n\t\tend\n\tend\nend", + "Code": "local defs = self.SoulShopDef or {}\nfor i = 1, 4 do\n\tlocal base = \"/ui/LobbyUIGroup/SoulShopHud/Item\" .. self:IntStr(i)\n\tlocal d = defs[i]\n\tif d == nil then\n\t\tself:SetEntityEnabled(base, false)\n\telse\n\t\tlocal itemName = d.name or \"Unlock\"\n\t\tlocal itemDesc = d.desc or \"\"\n\t\tlocal itemKey = d.key\n\t\tlocal itemCost = d.cost or 0\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", itemName)\n\t\tself:SetText(base .. \"/Desc\", itemDesc)\n\t\tlocal owned = itemKey ~= nil and self.SoulUnlocks ~= nil and self.SoulUnlocks[itemKey] == true\n\t\tif owned then\n\t\t\tself:SetText(base .. \"/Status\", \"Owned\")\n\t\telseif (self.SoulPoints or 0) >= itemCost then\n\t\t\tself:SetText(base .. \"/Status\", tostring(itemCost) .. \" soul · buy\")\n\t\telse\n\t\t\tself:SetText(base .. \"/Status\", tostring(itemCost) .. \" soul · low\")\n\t\tend\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1780,7 +1801,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SoulShopBound == true then\n\treturn\nend\nself.SoulShopBound = true\nfor i = 1, 4 do\n\tlocal idx = i\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/LobbyUIGroup/SoulShopHud/Item\" .. tostring(i))\n\tif e ~= nil and (e.ButtonComponent ~= nil or e:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\te:ConnectEvent(ButtonClickEvent, function() self:BuySoulUnlock(idx) end)\n\tend\nend", + "Code": "if self.SoulShopBound == true then\n\treturn\nend\nself.SoulShopBound = true\nfor i = 1, 4 do\n\tlocal idx = i\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/LobbyUIGroup/SoulShopHud/Item\" .. self:IntStr(i))\n\tif e ~= nil and (e.ButtonComponent ~= nil or e:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\te:ConnectEvent(ButtonClickEvent, function() self:BuySoulUnlock(idx) end)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1899,6 +1920,29 @@ "Attributes": [], "Name": "SetEntityEnabled" }, + { + "Return": { + "Type": "string", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [ + { + "Type": "number", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": "n" + } + ], + "Code": "return string.format(\"%d\", math.floor((n or 0) + 0.00001))", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "IntStr" + }, { "Return": { "Type": "void", @@ -1938,7 +1982,7 @@ "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/ToolTipGroup/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.ActiveKillMaxHpGain = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.ComboCount = 0\nself.HolyChargeCount = 0\nself.DamagePowerStrengthUsed = false\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.CombatCameraShakeSeq = 0\nself.DmgPopSlotQueue = {}\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.ZeroCostCardIdsThisTurn = {}\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\tBash = { name = \"강타\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, vuln = 2, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tDefend = { name = \"수비\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tAnger = { name = \"분노\", cost = 0, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tMoltenFist = { name = \"불꽃 강타\", cost = 1, desc = \"피해 10, 취약 2. 소멸.\", kind = \"Attack\", damage = 10, vuln = 2, class = \"warrior\", rarity = \"normal\", exhaust = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tBodySlam = { name = \"방패 밀어치기\", cost = 1, desc = \"현재 방어도만큼 피해를 줍니다.\", kind = \"Attack\", damageFromCurrentBlock = 1, class = \"warrior\", rarity = \"normal\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tHeadbutt = { name = \"박치기\", cost = 1, desc = \"피해 9, 카드 1장 뽑기\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", draw = 1, fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tSwordBoomerang = { name = \"회전 검격\", cost = 1, desc = \"무작위 적에게 피해 3 x 3회\", kind = \"Attack\", damage = 3, class = \"warrior\", rarity = \"normal\", hits = 3, randomTargetEachHit = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tSetupStrike = { name = \"기선 타격\", cost = 1, desc = \"피해 7, 힘 +2\", kind = \"Attack\", damage = 7, strength = 2, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tTwinStrike = { name = \"연속 타격\", cost = 1, desc = \"피해 5 x 2회\", kind = \"Attack\", damage = 5, class = \"warrior\", rarity = \"normal\", hits = 2, fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBreakthrough = { name = \"전선 돌파\", cost = 1, desc = \"모든 적에게 피해 9\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", aoe = true, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tThunderclap = { name = \"전장의 벼락\", cost = 1, desc = \"모든 적에게 피해 4, 취약 1\", kind = \"Attack\", damage = 4, vuln = 1, class = \"warrior\", rarity = \"normal\", affectsAllEnemies = true, aoe = true, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"115e309771604743853abad2d8d186bc\" },\n\tIronWave = { name = \"강철 검기\", cost = 1, desc = \"피해 5, 방어도 5\", kind = \"Attack\", damage = 5, block = 5, class = \"warrior\", rarity = \"normal\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tPommelStrike = { name = \"칼자루 타격\", cost = 1, desc = \"피해 9, 카드 1장 뽑기\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", draw = 1, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPerfectedStrike = { name = \"숙련된 타격\", cost = 2, desc = \"피해 6. 보유한 이름에 \\\"타격\\\"이 포함된 카드마다 피해 +2\", kind = \"Attack\", damage = 6, damageNameMatch = \"타격\", damagePerOwnedNameMatch = 2, class = \"warrior\", rarity = \"normal\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tCinder = { name = \"잿불 검격\", cost = 2, desc = \"피해 18. 소멸.\", kind = \"Attack\", damage = 18, class = \"warrior\", rarity = \"normal\", exhaust = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tBloodletting = { name = \"투지 분출\", cost = 0, desc = \"에너지 +2\", kind = \"Skill\", class = \"warrior\", rarity = \"normal\", gainEnergy = 2, image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tTremble = { name = \"위압\", cost = 1, desc = \"취약 3. 소멸.\", kind = \"Skill\", vuln = 3, class = \"warrior\", rarity = \"normal\", exhaust = true, image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tArmaments = { name = \"전투장비\", cost = 1, desc = \"방어도 5, 카드 1장 뽑기\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", draw = 1, image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tTrueGrit = { name = \"강철 의지\", cost = 1, desc = \"방어도 7, 카드 1장 버리기\", kind = \"Skill\", block = 7, class = \"warrior\", rarity = \"normal\", discard = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tHavoc = { name = \"전투 전술\", cost = 1, desc = \"다음 스킬의 비용이 0\", kind = \"Skill\", class = \"warrior\", rarity = \"normal\", nextSkillCostZero = true, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tShrugItOff = { name = \"충격 흘리기\", cost = 1, desc = \"방어도 8, 카드 1장 뽑기\", kind = \"Skill\", block = 8, class = \"warrior\", rarity = \"normal\", draw = 1, image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBloodWall = { name = \"붉은 방벽\", cost = 2, desc = \"방어도 16\", kind = \"Skill\", block = 16, class = \"warrior\", rarity = \"normal\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tWhirlwind = { name = \"소용돌이\", cost = 0, desc = \"모든 에너지를 사용해 에너지당 모든 적에게 피해 5\", kind = \"Attack\", damage = 0, class = \"crusader\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 5, aoe = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tSpite = { name = \"맹공\", cost = 0, desc = \"피해 5 x 2회\", kind = \"Attack\", damage = 5, class = \"warrior\", rarity = \"unique\", hits = 2, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tBully = { name = \"전장의 압박\", cost = 0, desc = \"피해 4. 대상이 약화 상태면 피해 2배\", kind = \"Attack\", damage = 4, class = \"page\", rarity = \"unique\", attackDamageVsWeakMultiplier = 2, fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tPillage = { name = \"전리품 확보\", cost = 1, desc = \"피해 6, 카드 2장 뽑기\", kind = \"Attack\", damage = 6, class = \"fighter\", rarity = \"unique\", draw = 2, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tRampage = { name = \"거듭된 맹공\", cost = 2, desc = \"피해 12. 사용할 때마다 이번 전투에서 비용 1 감소\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", combatCostReductionOnPlay = 1, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tAshenStrike = { name = \"누적 타격\", cost = 1, desc = \"피해 6. 이번 전투에서 뽑은 카드마다 피해 +1\", kind = \"Attack\", damage = 6, damagePerCardDrawnThisCombat = 1, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tDismantle = { name = \"갑주 가르기\", cost = 1, desc = \"피해 8 x 2회\", kind = \"Attack\", damage = 8, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"115e309771604743853abad2d8d186bc\" },\n\tHemokinesis = { name = \"혼신의 일격\", cost = 1, desc = \"피해 15\", kind = \"Attack\", damage = 15, class = \"fighter\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tFightMe = { name = \"결투 신청\", cost = 2, desc = \"피해 5 x 2회, 힘 +3\", kind = \"Attack\", damage = 5, strength = 3, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tUnrelenting = { name = \"진격의 일격\", cost = 2, desc = \"피해 14, 에너지 +1\", kind = \"Attack\", damage = 14, class = \"fighter\", rarity = \"unique\", gainEnergy = 1, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tUppercut = { name = \"어퍼컷\", cost = 2, desc = \"피해 12, 약화 1, 취약 1\", kind = \"Attack\", damage = 12, weak = 1, vuln = 1, class = \"fighter\", rarity = \"unique\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tBludgeon = { name = \"대검 강타\", cost = 3, desc = \"피해 32\", kind = \"Attack\", damage = 32, class = \"crusader\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHowlFromBeyond = { name = \"전장의 포효\", cost = 3, desc = \"모든 적에게 피해 16. 소멸.\", kind = \"Attack\", damage = 16, class = \"crusader\", rarity = \"unique\", exhaust = true, aoe = true, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tStomp = { name = \"진형 붕괴\", cost = 3, desc = \"모든 적에게 피해 12. 이번 턴 사용한 공격 카드마다 피해 +2\", kind = \"Attack\", damage = 12, damagePerAttackPlayedThisTurn = 2, class = \"crusader\", rarity = \"unique\", aoe = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tRage = { name = \"격노\", cost = 0, desc = \"방어도 5, 카드 1장 뽑기\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"unique\", draw = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBattleTrance = { name = \"전투 집중\", cost = 0, desc = \"카드 3장 뽑기. 이번 턴 더 뽑을 수 없음\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", draw = 3, drawDisabledThisTurn = true, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tColossus = { name = \"철벽 자세\", cost = 1, desc = \"방어도 5, 무형 1\", kind = \"Skill\", intangible = 1, block = 5, class = \"page\", rarity = \"unique\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tSecondWind = { name = \"기사회생\", cost = 1, desc = \"손의 공격이 아닌 모든 카드를 소멸시키고, 소멸시킨 카드마다 방어도 5\", kind = \"Skill\", class = \"page\", rarity = \"unique\", exhaustHandNonAttack = true, blockPerExhaustedCard = 5, image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tTaunt = { name = \"도발\", cost = 1, desc = \"방어도 7, 취약 1\", kind = \"Skill\", block = 7, vuln = 1, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tBurningPact = { name = \"결사의 각오\", cost = 1, desc = \"카드 1장 버리고 카드 3장 뽑기\", kind = \"Skill\", class = \"fighter\", rarity = \"unique\", draw = 3, discard = 1, image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEvilEye = { name = \"빈틈없는 방어\", cost = 1, desc = \"방어도 16\", kind = \"Skill\", block = 16, class = \"page\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tForgottenRitual = { name = \"비상 전력\", cost = 1, desc = \"에너지 +2. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", gainEnergy = 2, exhaust = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tDrumOfBattle = { name = \"전투의 북소리\", cost = 1, desc = \"카드 2장 뽑기, 에너지 +1. 소멸.\", kind = \"Skill\", class = \"page\", rarity = \"unique\", draw = 2, gainEnergy = 1, exhaust = true, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tDominate = { name = \"제압\", cost = 1, desc = \"취약 2, 힘 +2. 소멸.\", kind = \"Skill\", strength = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", exhaust = true, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tInfernalBlade = { name = \"임시 무장\", cost = 1, desc = \"무작위 공격 카드 1장을 손으로 가져옵니다. 이번 턴 동안 그 카드를 비용 없이 사용할 수 있습니다. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", addRandomCardCount = 1, addRandomCardKind = \"Attack\", addRandomCardSameClass = true, addedCardsCostZeroThisTurn = true, exhaust = true, image = \"115e309771604743853abad2d8d186bc\" },\n\tExpectAFight = { name = \"싸움 준비\", cost = 1, desc = \"이번 턴 스킬 비용 1 감소\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tFlameBarrier = { name = \"화염 장벽\", cost = 2, desc = \"방어도 12, 가시 4\", kind = \"Skill\", block = 12, thorns = 4, class = \"page\", rarity = \"unique\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tStoneArmor = { name = \"강철 갑옷\", cost = 1, desc = \"매턴 방어도 +4\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 4, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tFeelNoPain = { name = \"고통 인내\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"page\", rarity = \"unique\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tInflame = { name = \"발화\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"fighter\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tInferno = { name = \"불바다\", cost = 1, desc = \"매턴 모든 적에게 피해 6\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 6, class = \"warrior\", rarity = \"unique\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tJuggling = { name = \"연속 공세\", cost = 1, desc = \"카드를 사용할 때마다 무작위 적에게 피해 3\", kind = \"Power\", cardPlayedRandomDamage = 3, class = \"fighter\", rarity = \"unique\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tRupture = { name = \"파열\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"fighter\", rarity = \"unique\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tVicious = { name = \"포악함\", cost = 1, desc = \"턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"warrior\", rarity = \"unique\", turnStartDraw = 1, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tStampede = { name = \"쇄도\", cost = 2, desc = \"카드를 사용할 때마다 무작위 적에게 피해 8\", kind = \"Power\", cardPlayedRandomDamage = 8, class = \"fighter\", rarity = \"unique\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tPactsEnd = { name = \"최후의 일격\", cost = 0, desc = \"뽑을 카드 더미가 비었을 때 모든 적에게 피해 17\", kind = \"Attack\", damage = 17, class = \"knight\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tThrash = { name = \"난타\", cost = 1, desc = \"피해 4 x 2회. 이번 턴 사용한 공격 카드마다 피해 +2\", kind = \"Attack\", damage = 4, damagePerAttackPlayedThisTurn = 2, class = \"crusader\", rarity = \"legend\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tConflagration = { name = \"대화재\", cost = 1, desc = \"모든 적에게 피해 2 x 4회\", kind = \"Attack\", damage = 2, class = \"crusader\", rarity = \"legend\", hits = 4, aoe = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tFeed = { name = \"포식\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 최대 체력이 3 증가합니다. 소멸.\", kind = \"Attack\", damage = 10, maxHpOnKill = 3, class = \"knight\", rarity = \"legend\", exhaust = true, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tTearAsunder = { name = \"삼연참\", cost = 2, desc = \"피해 5 x 3회\", kind = \"Attack\", damage = 5, class = \"crusader\", rarity = \"legend\", hits = 3, fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tFiendFire = { name = \"최후의 패\", cost = 2, desc = \"손의 다른 카드마다 피해 +7 후 모두 버리기. 소멸.\", kind = \"Attack\", damage = 0, damagePerOtherHandCard = 7, class = \"crusader\", rarity = \"legend\", discardAll = true, exhaust = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tMangle = { name = \"공포의 일격\", cost = 3, desc = \"피해 15. 이번 턴 적 힘 -10\", kind = \"Attack\", damage = 15, class = \"knight\", rarity = \"legend\", enemyStrengthLossThisTurn = 10, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tBrand = { name = \"낙인\", cost = 0, desc = \"카드 1장 버리기, 힘 +1\", kind = \"Skill\", strength = 1, class = \"warrior\", rarity = \"legend\", discard = 1, image = \"115e309771604743853abad2d8d186bc\" },\n\tCascade = { name = \"연속 전개\", cost = 0, desc = \"뽑을 카드 더미 맨 위의 카드 X장을 사용합니다. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"legend\", playTopDrawPileCountPerEnergy = 1, useAllEnergy = true, exhaust = true, image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tPrimalForce = { name = \"전사의 본능\", cost = 0, desc = \"이번 턴 손의 카드 비용이 0\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", handCostZeroThisTurn = true, image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tOffering = { name = \"전력 방출\", cost = 0, desc = \"에너지 +2, 카드 3장 뽑기. 소멸.\", kind = \"Skill\", class = \"crusader\", rarity = \"legend\", draw = 3, gainEnergy = 2, exhaust = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tOneTwoPunch = { name = \"연계 전술\", cost = 1, desc = \"다음 스킬을 1회 추가 발동\", kind = \"Skill\", class = \"warrior\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"251b6e12329048429490049a4f3cf564\" },\n\tStoke = { name = \"전투 재정비\", cost = 1, desc = \"손의 모든 카드를 소멸시키고, 소멸시킨 카드 수만큼 뽑습니다. 소멸.\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", exhaustHandAll = true, drawPerExhausted = 1, exhaust = true, image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tImpervious = { name = \"무적\", cost = 2, desc = \"방어도 30. 소멸.\", kind = \"Skill\", block = 30, class = \"knight\", rarity = \"legend\", exhaust = true, image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tNotYet = { name = \"불굴\", cost = 2, desc = \"HP 10 회복. 소멸.\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", heal = 10, exhaust = true, image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tAggression = { name = \"공격 태세\", cost = 1, desc = \"턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"warrior\", rarity = \"legend\", turnStartDraw = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tCruelty = { name = \"전투 광기\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"warrior\", rarity = \"legend\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tCrimsonMantle = { name = \"붉은 수호\", cost = 1, desc = \"매턴 방어도 +8\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 8, class = \"knight\", rarity = \"legend\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tPyre = { name = \"불의 심장\", cost = 2, desc = \"매턴 에너지 +1\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"knight\", rarity = \"legend\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tDarkEmbrace = { name = \"소멸의 숙련\", cost = 2, desc = \"카드가 소멸될 때마다 카드 1장 뽑기\", kind = \"Power\", drawOnExhaust = 1, class = \"knight\", rarity = \"legend\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tUnmovable = { name = \"요지부동\", cost = 2, desc = \"이번 전투 동안 방어도 획득량 2배\", kind = \"Power\", blockGainMultiplier = 2, powerEffect = \"blockPerTurn\", value = 0, class = \"knight\", rarity = \"legend\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tJuggernaut = { name = \"검격 파동\", cost = 2, desc = \"카드를 사용할 때마다 무작위 적에게 피해 5\", kind = \"Power\", cardPlayedRandomDamage = 5, class = \"knight\", rarity = \"legend\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tHellraiser = { name = \"타격의 달인\", cost = 2, desc = \"이름에 \\\"타격\\\"이 포함된 카드를 뽑을 때마다, 무작위 적에게 사용합니다.\", kind = \"Power\", drawNameMatchAutoPlay = \"타격\", class = \"warrior\", rarity = \"legend\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tBarricade = { name = \"바리케이드\", cost = 3, desc = \"내 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Power\", powerEffect = \"keepBlock\", value = 0, class = \"knight\", rarity = \"legend\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tDemonForm = { name = \"전신 투지\", cost = 3, desc = \"매턴 힘 +2\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 2, class = \"crusader\", rarity = \"legend\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSlashBlast = { name = \"슬래시 블러스트\", cost = 1, desc = \"모든 적에게 피해 7. 콤보당 피해 +1\", kind = \"Attack\", damage = 7, damagePerCombo = 1, class = \"warrior\", rarity = \"normal\", aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tWarriorLeap = { name = \"워리어 리프\", cost = 0, desc = \"방어도 4. 다음 턴 방어도 4. 소멸.\", kind = \"Skill\", block = 4, class = \"warrior\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tLeapAttack = { name = \"리프 어택\", cost = 1, desc = \"모든 적에게 피해 3 x 2회. 방어도 5\", kind = \"Attack\", damage = 3, block = 5, class = \"warrior\", rarity = \"normal\", hits = 2, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tIronBody = { name = \"아이언 바디\", cost = 1, desc = \"매턴 방어도 3. 가시 2\", kind = \"Power\", thorns = 2, powerEffect = \"blockPerTurn\", value = 3, class = \"warrior\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tWarriorMastery = { name = \"워리어 마스터리\", cost = 1, desc = \"힘 1. 민첩 1\", kind = \"Power\", strength = 1, dex = 1, class = \"warrior\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tBrandish = { name = \"브랜디쉬\", cost = 1, desc = \"피해 4 x 2회. 콤보당 피해 +1. 콤보 1 획득\", kind = \"Attack\", damage = 4, damagePerCombo = 1, class = \"fighter\", rarity = \"normal\", hits = 2, comboGain = 1, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tFlashSlash = { name = \"플래시 슬래시\", cost = 1, desc = \"모든 적에게 피해 2 x 5회. 방어도 4. 콤보 2 획득. 소멸.\", kind = \"Attack\", damage = 2, block = 4, class = \"fighter\", rarity = \"unique\", hits = 5, comboGain = 2, exhaust = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 0, desc = \"공격마다 콤보 1 획득. 모든 공격이 콤보 2당 피해 +1. 최대 5\", kind = \"Power\", attackDamagePerCombo = 0.5, comboOnAttack = 1, comboMax = 5, class = \"fighter\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSpiritBlade = { name = \"스피릿 블레이드\", cost = 2, desc = \"힘 2. 가시 5\", kind = \"Power\", strength = 2, thorns = 5, class = \"fighter\", rarity = \"unique\", image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tWeaponMastery = { name = \"웨폰 마스터리\", cost = 1, desc = \"힘 1. 공격 카드를 사용할 때마다 대상에게 피해 1\", kind = \"Power\", attackPlayedDamage = 1, strength = 1, class = \"fighter\", rarity = \"unique\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tWeaponAcceleration = { name = \"웨폰 액셀레이션\", cost = 1, desc = \"콤보 2 획득. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"fighter\", rarity = \"unique\", comboGain = 2, turnStartDraw = 1, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tFinalAttack = { name = \"파이널 어택\", cost = 1, desc = \"공격 카드를 사용할 때마다 대상에게 피해 3\", kind = \"Power\", attackPlayedDamage = 3, class = \"fighter\", rarity = \"legend\", image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tFighterPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1. 민첩 1. 매턴 방어도 2\", kind = \"Power\", strength = 1, dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"fighter\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tBraveSlash = { name = \"브레이브 슬래시\", cost = 2, desc = \"피해 5 x 3회. 콤보당 피해 +1. 콤보 1 획득\", kind = \"Attack\", damage = 5, damagePerCombo = 1, class = \"crusader\", rarity = \"normal\", hits = 3, comboGain = 1, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tAuraBlade = { name = \"오라 블레이드\", cost = 2, desc = \"모든 적에게 방어도를 무시하고 피해 4 x 4회. 소멸.\", kind = \"Attack\", damage = 4, class = \"crusader\", rarity = \"legend\", hits = 4, pierce = true, exhaust = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tRush = { name = \"돌진\", cost = 2, desc = \"모든 적에게 피해 8. 방어도 7. 콤보 1 획득\", kind = \"Attack\", damage = 8, block = 7, class = \"crusader\", rarity = \"unique\", comboGain = 1, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tScarringSword = { name = \"스카링 소드\", cost = 2, desc = \"공격 카드로 피해를 주면 대상에게 약화 1\", kind = \"Power\", attackWeak = 1, class = \"crusader\", rarity = \"legend\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tComboSynergy = { name = \"콤보 시너지\", cost = 1, desc = \"콤보 2 획득. 공격마다 콤보 1 획득. 모든 공격이 콤보 2당 피해 +1. 최대 5\", kind = \"Power\", attackDamagePerCombo = 0.5, comboOnAttack = 1, comboMax = 5, class = \"crusader\", rarity = \"legend\", comboGain = 2, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSelfRecovery = { name = \"셀프 리커버리\", cost = 1, desc = \"턴 시작 시 HP 3 회복\", kind = \"Power\", powerEffect = \"healPerTurn\", value = 3, class = \"crusader\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tChanceAttack = { name = \"찬스 어택\", cost = 1, desc = \"콤보 2 획득. 약화 상태인 적에게 주는 공격 피해 1.5배\", kind = \"Power\", class = \"crusader\", rarity = \"unique\", comboGain = 2, attackDamageVsWeakMultiplier = 1.5, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tEndure = { name = \"인듀어\", cost = 1, desc = \"약화와 취약을 제거합니다. 매턴 방어도 4\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 4, class = \"crusader\", rarity = \"unique\", removePlayerDebuffs = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tDivineSwing = { name = \"디바인 스윙\", cost = 2, desc = \"모든 적에게 피해 3 x 4회, 약화 1. 홀리 포스.\", kind = \"Attack\", damage = 3, weak = 1, class = \"page\", rarity = \"normal\", hits = 4, holyForce = true, affectsAllEnemies = true, aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tHolyCharge = { name = \"홀리 차지\", cost = 1, desc = \"홀리 포스 카드를 사용하면 홀리 차지 1 획득. 최대 3. 받는 피해 10% 감소\", kind = \"Power\", holyChargeOnHolyForce = 1, holyChargeMax = 3, damageTakenReduction = 0.1, class = \"page\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tPageOrder = { name = \"페이지 오더\", cost = 1, desc = \"모든 적에게 피해 3 x 2회, 약화 1. 카드 1장 뽑기\", kind = \"Attack\", damage = 3, weak = 1, class = \"page\", rarity = \"normal\", hits = 2, draw = 1, affectsAllEnemies = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tPageWeaponAcceleration = { name = \"웨폰 액셀레이션\", cost = 1, desc = \"힘 1. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", strength = 1, class = \"page\", rarity = \"unique\", turnStartDraw = 1, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tPageStance = { name = \"스탠스\", cost = 1, desc = \"매턴 방어도 3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"page\", rarity = \"normal\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPageWeaponMastery = { name = \"웨폰 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도 1\", kind = \"Power\", cardPlayedBlock = 1, class = \"page\", rarity = \"unique\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tPageFinalAttack = { name = \"파이널 어택\", cost = 1, desc = \"공격 카드를 사용할 때마다 대상에게 피해 2\", kind = \"Power\", attackPlayedDamage = 2, class = \"page\", rarity = \"legend\", image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tPagePhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘 1. 민첩 1. 매턴 방어도 2\", kind = \"Power\", strength = 1, dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tDivineCharge = { name = \"디바인 차지\", cost = 1, desc = \"모든 적에게 피해 3 x 4회, 약화 1. 홀리 차지당 피해 +1. 홀리 포스.\", kind = \"Attack\", damage = 3, damagePerHolyCharge = 1, weak = 1, class = \"knight\", rarity = \"unique\", hits = 4, holyForce = true, affectsAllEnemies = true, aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tRestoration = { name = \"리스토네이션\", cost = 0, desc = \"HP 6 회복. 홀리 차지당 추가로 4 회복한 뒤 모두 소비\", kind = \"Skill\", class = \"knight\", rarity = \"unique\", heal = 6, healPerHolyCharge = 4, holyChargeSpendAll = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tKnightRush = { name = \"돌진\", cost = 1, desc = \"모든 적에게 피해 7. 방어도 4, 홀리 차지당 방어도 +2\", kind = \"Attack\", damage = 7, block = 4, class = \"knight\", rarity = \"normal\", blockPerHolyCharge = 2, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tNobleDemand = { name = \"노블 디맨드\", cost = 1, desc = \"모든 적의 방어도를 제거하고 약화 2. 이번 턴 적 전체 힘 -3\", kind = \"Skill\", weak = 2, class = \"knight\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, enemyStrengthLossThisTurn = 3, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tParashockGuard = { name = \"파라쇼크 가드\", cost = 3, desc = \"힘 1. 가시 3. 카드를 사용할 때마다 방어도 1\", kind = \"Power\", strength = 1, thorns = 3, cardPlayedBlock = 1, class = \"knight\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tCombatOrders = { name = \"컴뱃 오더스\", cost = 1, desc = \"다음 스킬을 1회 추가 발동. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"knight\", rarity = \"legend\", turnStartDraw = 1, nextSkillRepeatCount = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tKnightShieldMastery = { name = \"실드 마스터리\", cost = 2, desc = \"매턴 방어도 4. 가시 1\", kind = \"Power\", thorns = 1, powerEffect = \"blockPerTurn\", value = 4, class = \"knight\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tAchilles = { name = \"아킬레스\", cost = 2, desc = \"받는 피해 25% 감소\", kind = \"Power\", damageTakenReduction = 0.25, class = \"knight\", rarity = \"legend\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tBlessingArmor = { name = \"블레싱 아머\", cost = 2, desc = \"HP 피해를 받으면 방어도 6. 전투 중 처음 발동할 때 힘 2\", kind = \"Power\", blockOnDamaged = 6, strengthOnDamagedOnce = 2, class = \"knight\", rarity = \"legend\", image = \"e2580523efc6457385114b78ad0d7cce\" },\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\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\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 = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검비\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"thief\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"비도 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"thief\", rarity = \"normal\", draw = 1, 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 = \"피해를 7 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 7, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"초보 표창 던지기\", cost = 1, desc = \"피해를 3 줍니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"연달아 찌르기\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"thief\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"커닝 난무\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"thief\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"통통 튀는 표창\", cost = 1, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"비장의 패\", cost = 1, desc = \"카드를 1장 버리고, 이번 턴에 준 피해의 절반만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 0.5, class = \"thief\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"럭키 예감\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", endTurnDexLoss = 2, 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 = \"assassin\", 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 = \"thief\", rarity = \"normal\", affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토 속 별\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"assassin\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독 조제\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"독니 단검\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"thief\", 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 = \"assassin\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"그림자 등찌르기\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 소멸.\", kind = \"Attack\", damage = 10, 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 = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마지막 칼끝\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"thief\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"사신의 장부\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"thief\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"그림자 올가미\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"표창 셈법\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"assassin\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"어둠을 가르는 도약\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"뒷골목 돌파\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"표창 끝의 추격\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"한 점 겨냥\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"메소 건 승부\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"약점 들추기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"thief\", rarity = \"unique\", removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨둔 표창\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", 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 = \"thief\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"재빠른 손놀림\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpertise = { name = \"노련한 단검술\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"독액 농축\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐린 잔영\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"thief\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"발목 베기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"소매 속 표창\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"통통 독병\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"찰나의 반응\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"보랏빛 독연기\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"골목길 책략\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"빈틈없는 작전\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"thief\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"끝없는 표창통\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"사뿐한 발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"독맥 터뜨리기\", cost = 2, desc = \"독이 3번 부여될 때마다 모든 적에게 6 피해를 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 6, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"숨막히는 독연기\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"thief\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tSpeedster = { name = \"그림자 속도전\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 1 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", drawDamage = 1, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"커닝의 대단원\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 45 줍니다.\", kind = \"Attack\", damage = 45, class = \"thiefmaster\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"어둠 속 급소\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 칼자국\", cost = 2, desc = \"모든 적에게 피해를 6 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"thiefmaster\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"커닝 현상금\", cost = 1, desc = \"피해를 10 줍니다. 이 카드로 적을 처치하면 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 6, rewardOnKill = 1, class = \"assassin\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"쌓여가는 살의\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"기운 빼는 독\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStormOfSteel = { name = \"쇠별 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 발자국\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"연막 속 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식 독물결\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"먹빛 표창\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"연속 술수\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"숨은 칼날덫\", cost = 2, desc = \"교활. 모든 적에게 피해를 7 주고 중독을 2 부여합니다.\", kind = \"Attack\", damage = 7, class = \"thiefmaster\", rarity = \"legend\", poison = 2, sly = true, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"멈춘 듯한 순간\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"검은 꿈\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"도적의 연장통\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMasterPlanner = { name = \"작전의 달인\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tFanOfKnives = { name = \"사방 표창비\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"독사의 몸놀림\", cost = 2, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"thiefmaster\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"거친 숫돌질\", cost = 2, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"thiefmaster\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"소리 없는 제압\", cost = 0, desc = \"선천성. 피해를 9 줍니다. 약화를 2 부여합니다. 소멸.\", kind = \"Attack\", damage = 9, weak = 2, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령 같은 몸놀림\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 1, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 이번 턴 동안 민첩을 1 얻습니다. 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", endTurnDexLoss = 1, block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 1, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버리고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 1, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 2, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 1.5배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 1.5, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 1, desc = \"방어도 4를 얻습니다. 카드를 2장 뽑고 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 6씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 6, firstCardDamageBonus = 2, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\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/ToolTipGroup/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.ActiveKillMaxHpGain = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.ComboCount = 0\nself.HolyChargeCount = 0\nself.DamagePowerStrengthUsed = false\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.CombatCameraShakeSeq = 0\nself.DmgPopSlotQueue = {}\nself.PlayerDmgPopIndex = 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.ZeroCostCardIdsThisTurn = {}\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\tBash = { name = \"강타\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, vuln = 2, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tDefend = { name = \"수비\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tAnger = { name = \"분노\", cost = 0, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tMoltenFist = { name = \"불꽃 강타\", cost = 1, desc = \"피해 10, 취약 2. 소멸.\", kind = \"Attack\", damage = 10, vuln = 2, class = \"warrior\", rarity = \"normal\", exhaust = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tBodySlam = { name = \"방패 밀어치기\", cost = 1, desc = \"현재 방어도만큼 피해를 줍니다.\", kind = \"Attack\", damageFromCurrentBlock = 1, class = \"warrior\", rarity = \"normal\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tHeadbutt = { name = \"박치기\", cost = 1, desc = \"피해 9, 카드 1장 뽑기\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", draw = 1, fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tSwordBoomerang = { name = \"회전 검격\", cost = 1, desc = \"무작위 적에게 피해 3 x 3회\", kind = \"Attack\", damage = 3, class = \"warrior\", rarity = \"normal\", hits = 3, randomTargetEachHit = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tSetupStrike = { name = \"기선 타격\", cost = 1, desc = \"피해 7, 힘 +2\", kind = \"Attack\", damage = 7, strength = 2, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tTwinStrike = { name = \"연속 타격\", cost = 1, desc = \"피해 5 x 2회\", kind = \"Attack\", damage = 5, class = \"warrior\", rarity = \"normal\", hits = 2, fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBreakthrough = { name = \"전선 돌파\", cost = 1, desc = \"모든 적에게 피해 9\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", aoe = true, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tThunderclap = { name = \"전장의 벼락\", cost = 1, desc = \"모든 적에게 피해 4, 취약 1\", kind = \"Attack\", damage = 4, vuln = 1, class = \"warrior\", rarity = \"normal\", affectsAllEnemies = true, aoe = true, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"115e309771604743853abad2d8d186bc\" },\n\tIronWave = { name = \"강철 검기\", cost = 1, desc = \"피해 5, 방어도 5\", kind = \"Attack\", damage = 5, block = 5, class = \"warrior\", rarity = \"normal\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tPommelStrike = { name = \"칼자루 타격\", cost = 1, desc = \"피해 9, 카드 1장 뽑기\", kind = \"Attack\", damage = 9, class = \"warrior\", rarity = \"normal\", draw = 1, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPerfectedStrike = { name = \"숙련된 타격\", cost = 2, desc = \"피해 6. 보유한 이름에 \\\"타격\\\"이 포함된 카드마다 피해 +2\", kind = \"Attack\", damage = 6, damageNameMatch = \"타격\", damagePerOwnedNameMatch = 2, class = \"warrior\", rarity = \"normal\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tCinder = { name = \"잿불 검격\", cost = 2, desc = \"피해 18. 소멸.\", kind = \"Attack\", damage = 18, class = \"warrior\", rarity = \"normal\", exhaust = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tBloodletting = { name = \"투지 분출\", cost = 0, desc = \"에너지 +2\", kind = \"Skill\", class = \"warrior\", rarity = \"normal\", gainEnergy = 2, image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tTremble = { name = \"위압\", cost = 1, desc = \"취약 3. 소멸.\", kind = \"Skill\", vuln = 3, class = \"warrior\", rarity = \"normal\", exhaust = true, image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tArmaments = { name = \"전투장비\", cost = 1, desc = \"방어도 5, 카드 1장 뽑기\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", draw = 1, image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tTrueGrit = { name = \"강철 의지\", cost = 1, desc = \"방어도 7, 카드 1장 버리기\", kind = \"Skill\", block = 7, class = \"warrior\", rarity = \"normal\", discard = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tHavoc = { name = \"전투 전술\", cost = 1, desc = \"다음 스킬의 비용이 0\", kind = \"Skill\", class = \"warrior\", rarity = \"normal\", nextSkillCostZero = true, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tShrugItOff = { name = \"충격 흘리기\", cost = 1, desc = \"방어도 8, 카드 1장 뽑기\", kind = \"Skill\", block = 8, class = \"warrior\", rarity = \"normal\", draw = 1, image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBloodWall = { name = \"붉은 방벽\", cost = 2, desc = \"방어도 16\", kind = \"Skill\", block = 16, class = \"warrior\", rarity = \"normal\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tWhirlwind = { name = \"소용돌이\", cost = 0, desc = \"모든 에너지를 사용해 에너지당 모든 적에게 피해 5\", kind = \"Attack\", damage = 0, class = \"crusader\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 5, aoe = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tSpite = { name = \"맹공\", cost = 0, desc = \"피해 5 x 2회\", kind = \"Attack\", damage = 5, class = \"warrior\", rarity = \"unique\", hits = 2, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tBully = { name = \"전장의 압박\", cost = 0, desc = \"피해 4. 대상이 약화 상태면 피해 2배\", kind = \"Attack\", damage = 4, class = \"page\", rarity = \"unique\", attackDamageVsWeakMultiplier = 2, fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tPillage = { name = \"전리품 확보\", cost = 1, desc = \"피해 6, 카드 2장 뽑기\", kind = \"Attack\", damage = 6, class = \"fighter\", rarity = \"unique\", draw = 2, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tRampage = { name = \"거듭된 맹공\", cost = 2, desc = \"피해 12. 사용할 때마다 이번 전투에서 비용 1 감소\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", combatCostReductionOnPlay = 1, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tAshenStrike = { name = \"누적 타격\", cost = 1, desc = \"피해 6. 이번 전투에서 뽑은 카드마다 피해 +1\", kind = \"Attack\", damage = 6, damagePerCardDrawnThisCombat = 1, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tDismantle = { name = \"갑주 가르기\", cost = 1, desc = \"피해 8 x 2회\", kind = \"Attack\", damage = 8, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"115e309771604743853abad2d8d186bc\" },\n\tHemokinesis = { name = \"혼신의 일격\", cost = 1, desc = \"피해 15\", kind = \"Attack\", damage = 15, class = \"fighter\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tFightMe = { name = \"결투 신청\", cost = 2, desc = \"피해 5 x 2회, 힘 +3\", kind = \"Attack\", damage = 5, strength = 3, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tUnrelenting = { name = \"진격의 일격\", cost = 2, desc = \"피해 14, 에너지 +1\", kind = \"Attack\", damage = 14, class = \"fighter\", rarity = \"unique\", gainEnergy = 1, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tUppercut = { name = \"어퍼컷\", cost = 2, desc = \"피해 12, 약화 1, 취약 1\", kind = \"Attack\", damage = 12, weak = 1, vuln = 1, class = \"fighter\", rarity = \"unique\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tBludgeon = { name = \"대검 강타\", cost = 3, desc = \"피해 32\", kind = \"Attack\", damage = 32, class = \"crusader\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHowlFromBeyond = { name = \"전장의 포효\", cost = 3, desc = \"모든 적에게 피해 16. 소멸.\", kind = \"Attack\", damage = 16, class = \"crusader\", rarity = \"unique\", exhaust = true, aoe = true, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tStomp = { name = \"진형 붕괴\", cost = 3, desc = \"모든 적에게 피해 12. 이번 턴 사용한 공격 카드마다 피해 +2\", kind = \"Attack\", damage = 12, damagePerAttackPlayedThisTurn = 2, class = \"crusader\", rarity = \"unique\", aoe = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tRage = { name = \"격노\", cost = 0, desc = \"방어도 5, 카드 1장 뽑기\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"unique\", draw = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBattleTrance = { name = \"전투 집중\", cost = 0, desc = \"카드 3장 뽑기. 이번 턴 더 뽑을 수 없음\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", draw = 3, drawDisabledThisTurn = true, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tColossus = { name = \"철벽 자세\", cost = 1, desc = \"방어도 5, 무형 1\", kind = \"Skill\", intangible = 1, block = 5, class = \"page\", rarity = \"unique\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tSecondWind = { name = \"기사회생\", cost = 1, desc = \"손의 공격이 아닌 모든 카드를 소멸시키고, 소멸시킨 카드마다 방어도 5\", kind = \"Skill\", class = \"page\", rarity = \"unique\", exhaustHandNonAttack = true, blockPerExhaustedCard = 5, image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tTaunt = { name = \"도발\", cost = 1, desc = \"방어도 7, 취약 1\", kind = \"Skill\", block = 7, vuln = 1, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tBurningPact = { name = \"결사의 각오\", cost = 1, desc = \"카드 1장 버리고 카드 3장 뽑기\", kind = \"Skill\", class = \"fighter\", rarity = \"unique\", draw = 3, discard = 1, image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEvilEye = { name = \"빈틈없는 방어\", cost = 1, desc = \"방어도 16\", kind = \"Skill\", block = 16, class = \"page\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tForgottenRitual = { name = \"비상 전력\", cost = 1, desc = \"에너지 +2. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", gainEnergy = 2, exhaust = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tDrumOfBattle = { name = \"전투의 북소리\", cost = 1, desc = \"카드 2장 뽑기, 에너지 +1. 소멸.\", kind = \"Skill\", class = \"page\", rarity = \"unique\", draw = 2, gainEnergy = 1, exhaust = true, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tDominate = { name = \"제압\", cost = 1, desc = \"취약 2, 힘 +2. 소멸.\", kind = \"Skill\", strength = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", exhaust = true, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tInfernalBlade = { name = \"임시 무장\", cost = 1, desc = \"무작위 공격 카드 1장을 손으로 가져옵니다. 이번 턴 동안 그 카드를 비용 없이 사용할 수 있습니다. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", addRandomCardCount = 1, addRandomCardKind = \"Attack\", addRandomCardSameClass = true, addedCardsCostZeroThisTurn = true, exhaust = true, image = \"115e309771604743853abad2d8d186bc\" },\n\tExpectAFight = { name = \"싸움 준비\", cost = 1, desc = \"이번 턴 스킬 비용 1 감소\", kind = \"Skill\", class = \"warrior\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tFlameBarrier = { name = \"화염 장벽\", cost = 2, desc = \"방어도 12, 가시 4\", kind = \"Skill\", block = 12, thorns = 4, class = \"page\", rarity = \"unique\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tStoneArmor = { name = \"강철 갑옷\", cost = 1, desc = \"매턴 방어도 +4\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 4, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tFeelNoPain = { name = \"고통 인내\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"page\", rarity = \"unique\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tInflame = { name = \"발화\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"fighter\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tInferno = { name = \"불바다\", cost = 1, desc = \"매턴 모든 적에게 피해 6\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 6, class = \"warrior\", rarity = \"unique\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tJuggling = { name = \"연속 공세\", cost = 1, desc = \"카드를 사용할 때마다 무작위 적에게 피해 3\", kind = \"Power\", cardPlayedRandomDamage = 3, class = \"fighter\", rarity = \"unique\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tRupture = { name = \"파열\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"fighter\", rarity = \"unique\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tVicious = { name = \"포악함\", cost = 1, desc = \"턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"warrior\", rarity = \"unique\", turnStartDraw = 1, image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tStampede = { name = \"쇄도\", cost = 2, desc = \"카드를 사용할 때마다 무작위 적에게 피해 8\", kind = \"Power\", cardPlayedRandomDamage = 8, class = \"fighter\", rarity = \"unique\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tPactsEnd = { name = \"최후의 일격\", cost = 0, desc = \"뽑을 카드 더미가 비었을 때 모든 적에게 피해 17\", kind = \"Attack\", damage = 17, class = \"knight\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tThrash = { name = \"난타\", cost = 1, desc = \"피해 4 x 2회. 이번 턴 사용한 공격 카드마다 피해 +2\", kind = \"Attack\", damage = 4, damagePerAttackPlayedThisTurn = 2, class = \"crusader\", rarity = \"legend\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tConflagration = { name = \"대화재\", cost = 1, desc = \"모든 적에게 피해 2 x 4회\", kind = \"Attack\", damage = 2, class = \"crusader\", rarity = \"legend\", hits = 4, aoe = true, fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tFeed = { name = \"포식\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 최대 체력이 3 증가합니다. 소멸.\", kind = \"Attack\", damage = 10, maxHpOnKill = 3, class = \"knight\", rarity = \"legend\", exhaust = true, fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tTearAsunder = { name = \"삼연참\", cost = 2, desc = \"피해 5 x 3회\", kind = \"Attack\", damage = 5, class = \"crusader\", rarity = \"legend\", hits = 3, fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tFiendFire = { name = \"최후의 패\", cost = 2, desc = \"손의 다른 카드마다 피해 +7 후 모두 버리기. 소멸.\", kind = \"Attack\", damage = 0, damagePerOtherHandCard = 7, class = \"crusader\", rarity = \"legend\", discardAll = true, exhaust = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tMangle = { name = \"공포의 일격\", cost = 3, desc = \"피해 15. 이번 턴 적 힘 -10\", kind = \"Attack\", damage = 15, class = \"knight\", rarity = \"legend\", enemyStrengthLossThisTurn = 10, fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tBrand = { name = \"낙인\", cost = 0, desc = \"카드 1장 버리기, 힘 +1\", kind = \"Skill\", strength = 1, class = \"warrior\", rarity = \"legend\", discard = 1, image = \"115e309771604743853abad2d8d186bc\" },\n\tCascade = { name = \"연속 전개\", cost = 0, desc = \"뽑을 카드 더미 맨 위의 카드 X장을 사용합니다. 소멸.\", kind = \"Skill\", class = \"warrior\", rarity = \"legend\", playTopDrawPileCountPerEnergy = 1, useAllEnergy = true, exhaust = true, image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tPrimalForce = { name = \"전사의 본능\", cost = 0, desc = \"이번 턴 손의 카드 비용이 0\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", handCostZeroThisTurn = true, image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tOffering = { name = \"전력 방출\", cost = 0, desc = \"에너지 +2, 카드 3장 뽑기. 소멸.\", kind = \"Skill\", class = \"crusader\", rarity = \"legend\", draw = 3, gainEnergy = 2, exhaust = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tOneTwoPunch = { name = \"연계 전술\", cost = 1, desc = \"다음 스킬을 1회 추가 발동\", kind = \"Skill\", class = \"warrior\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"251b6e12329048429490049a4f3cf564\" },\n\tStoke = { name = \"전투 재정비\", cost = 1, desc = \"손의 모든 카드를 소멸시키고, 소멸시킨 카드 수만큼 뽑습니다. 소멸.\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", exhaustHandAll = true, drawPerExhausted = 1, exhaust = true, image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tImpervious = { name = \"무적\", cost = 2, desc = \"방어도 30. 소멸.\", kind = \"Skill\", block = 30, class = \"knight\", rarity = \"legend\", exhaust = true, image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tNotYet = { name = \"불굴\", cost = 2, desc = \"HP 10 회복. 소멸.\", kind = \"Skill\", class = \"knight\", rarity = \"legend\", heal = 10, exhaust = true, image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tAggression = { name = \"공격 태세\", cost = 1, desc = \"턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"warrior\", rarity = \"legend\", turnStartDraw = 1, image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tCruelty = { name = \"전투 광기\", cost = 1, desc = \"매턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"warrior\", rarity = \"legend\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tCrimsonMantle = { name = \"붉은 수호\", cost = 1, desc = \"매턴 방어도 +8\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 8, class = \"knight\", rarity = \"legend\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tPyre = { name = \"불의 심장\", cost = 2, desc = \"매턴 에너지 +1\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"knight\", rarity = \"legend\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tDarkEmbrace = { name = \"소멸의 숙련\", cost = 2, desc = \"카드가 소멸될 때마다 카드 1장 뽑기\", kind = \"Power\", drawOnExhaust = 1, class = \"knight\", rarity = \"legend\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tUnmovable = { name = \"요지부동\", cost = 2, desc = \"이번 전투 동안 방어도 획득량 2배\", kind = \"Power\", blockGainMultiplier = 2, powerEffect = \"blockPerTurn\", value = 0, class = \"knight\", rarity = \"legend\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tJuggernaut = { name = \"검격 파동\", cost = 2, desc = \"카드를 사용할 때마다 무작위 적에게 피해 5\", kind = \"Power\", cardPlayedRandomDamage = 5, class = \"knight\", rarity = \"legend\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tHellraiser = { name = \"타격의 달인\", cost = 2, desc = \"이름에 \\\"타격\\\"이 포함된 카드를 뽑을 때마다, 무작위 적에게 사용합니다.\", kind = \"Power\", drawNameMatchAutoPlay = \"타격\", class = \"warrior\", rarity = \"legend\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tBarricade = { name = \"바리케이드\", cost = 3, desc = \"내 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Power\", powerEffect = \"keepBlock\", value = 0, class = \"knight\", rarity = \"legend\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tDemonForm = { name = \"전신 투지\", cost = 3, desc = \"매턴 힘 +2\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 2, class = \"crusader\", rarity = \"legend\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSlashBlast = { name = \"슬래시 블러스트\", cost = 1, desc = \"모든 적에게 피해 7. 콤보당 피해 +1\", kind = \"Attack\", damage = 7, damagePerCombo = 1, class = \"warrior\", rarity = \"normal\", aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tWarriorLeap = { name = \"워리어 리프\", cost = 0, desc = \"방어도 4. 다음 턴 방어도 4. 소멸.\", kind = \"Skill\", block = 4, class = \"warrior\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tLeapAttack = { name = \"리프 어택\", cost = 1, desc = \"모든 적에게 피해 3 x 2회. 방어도 5\", kind = \"Attack\", damage = 3, block = 5, class = \"warrior\", rarity = \"normal\", hits = 2, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tIronBody = { name = \"아이언 바디\", cost = 1, desc = \"매턴 방어도 3. 가시 2\", kind = \"Power\", thorns = 2, powerEffect = \"blockPerTurn\", value = 3, class = \"warrior\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tWarriorMastery = { name = \"워리어 마스터리\", cost = 1, desc = \"힘 1. 민첩 1\", kind = \"Power\", strength = 1, dex = 1, class = \"warrior\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tBrandish = { name = \"브랜디쉬\", cost = 1, desc = \"피해 4 x 2회. 콤보당 피해 +1. 콤보 1 획득\", kind = \"Attack\", damage = 4, damagePerCombo = 1, class = \"fighter\", rarity = \"normal\", hits = 2, comboGain = 1, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tFlashSlash = { name = \"플래시 슬래시\", cost = 1, desc = \"모든 적에게 피해 2 x 5회. 방어도 4. 콤보 2 획득. 소멸.\", kind = \"Attack\", damage = 2, block = 4, class = \"fighter\", rarity = \"unique\", hits = 5, comboGain = 2, exhaust = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 0, desc = \"공격마다 콤보 1 획득. 모든 공격이 콤보 2당 피해 +1. 최대 5\", kind = \"Power\", attackDamagePerCombo = 0.5, comboOnAttack = 1, comboMax = 5, class = \"fighter\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSpiritBlade = { name = \"스피릿 블레이드\", cost = 2, desc = \"힘 2. 가시 5\", kind = \"Power\", strength = 2, thorns = 5, class = \"fighter\", rarity = \"unique\", image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tWeaponMastery = { name = \"웨폰 마스터리\", cost = 1, desc = \"힘 1. 공격 카드를 사용할 때마다 대상에게 피해 1\", kind = \"Power\", attackPlayedDamage = 1, strength = 1, class = \"fighter\", rarity = \"unique\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tWeaponAcceleration = { name = \"웨폰 액셀레이션\", cost = 1, desc = \"콤보 2 획득. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"fighter\", rarity = \"unique\", comboGain = 2, turnStartDraw = 1, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tFinalAttack = { name = \"파이널 어택\", cost = 1, desc = \"공격 카드를 사용할 때마다 대상에게 피해 3\", kind = \"Power\", attackPlayedDamage = 3, class = \"fighter\", rarity = \"legend\", image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tFighterPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1. 민첩 1. 매턴 방어도 2\", kind = \"Power\", strength = 1, dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"fighter\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tBraveSlash = { name = \"브레이브 슬래시\", cost = 2, desc = \"피해 5 x 3회. 콤보당 피해 +1. 콤보 1 획득\", kind = \"Attack\", damage = 5, damagePerCombo = 1, class = \"crusader\", rarity = \"normal\", hits = 3, comboGain = 1, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tAuraBlade = { name = \"오라 블레이드\", cost = 2, desc = \"모든 적에게 방어도를 무시하고 피해 4 x 4회. 소멸.\", kind = \"Attack\", damage = 4, class = \"crusader\", rarity = \"legend\", hits = 4, pierce = true, exhaust = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tRush = { name = \"돌진\", cost = 2, desc = \"모든 적에게 피해 8. 방어도 7. 콤보 1 획득\", kind = \"Attack\", damage = 8, block = 7, class = \"crusader\", rarity = \"unique\", comboGain = 1, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tScarringSword = { name = \"스카링 소드\", cost = 2, desc = \"공격 카드로 피해를 주면 대상에게 약화 1\", kind = \"Power\", attackWeak = 1, class = \"crusader\", rarity = \"legend\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tComboSynergy = { name = \"콤보 시너지\", cost = 1, desc = \"콤보 2 획득. 공격마다 콤보 1 획득. 모든 공격이 콤보 2당 피해 +1. 최대 5\", kind = \"Power\", attackDamagePerCombo = 0.5, comboOnAttack = 1, comboMax = 5, class = \"crusader\", rarity = \"legend\", comboGain = 2, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tSelfRecovery = { name = \"셀프 리커버리\", cost = 1, desc = \"턴 시작 시 HP 3 회복\", kind = \"Power\", powerEffect = \"healPerTurn\", value = 3, class = \"crusader\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tChanceAttack = { name = \"찬스 어택\", cost = 1, desc = \"콤보 2 획득. 약화 상태인 적에게 주는 공격 피해 1.5배\", kind = \"Power\", class = \"crusader\", rarity = \"unique\", comboGain = 2, attackDamageVsWeakMultiplier = 1.5, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tEndure = { name = \"인듀어\", cost = 1, desc = \"약화와 취약을 제거합니다. 매턴 방어도 4\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 4, class = \"crusader\", rarity = \"unique\", removePlayerDebuffs = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tDivineSwing = { name = \"디바인 스윙\", cost = 2, desc = \"모든 적에게 피해 3 x 4회, 약화 1. 홀리 포스.\", kind = \"Attack\", damage = 3, weak = 1, class = \"page\", rarity = \"normal\", hits = 4, holyForce = true, affectsAllEnemies = true, aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tHolyCharge = { name = \"홀리 차지\", cost = 1, desc = \"홀리 포스 카드를 사용하면 홀리 차지 1 획득. 최대 3. 받는 피해 10% 감소\", kind = \"Power\", holyChargeOnHolyForce = 1, holyChargeMax = 3, damageTakenReduction = 0.1, class = \"page\", rarity = \"unique\", image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tPageOrder = { name = \"페이지 오더\", cost = 1, desc = \"모든 적에게 피해 3 x 2회, 약화 1. 카드 1장 뽑기\", kind = \"Attack\", damage = 3, weak = 1, class = \"page\", rarity = \"normal\", hits = 2, draw = 1, affectsAllEnemies = true, aoe = true, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tPageWeaponAcceleration = { name = \"웨폰 액셀레이션\", cost = 1, desc = \"힘 1. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", strength = 1, class = \"page\", rarity = \"unique\", turnStartDraw = 1, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tPageStance = { name = \"스탠스\", cost = 1, desc = \"매턴 방어도 3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"page\", rarity = \"normal\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPageWeaponMastery = { name = \"웨폰 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도 1\", kind = \"Power\", cardPlayedBlock = 1, class = \"page\", rarity = \"unique\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tPageFinalAttack = { name = \"파이널 어택\", cost = 1, desc = \"공격 카드를 사용할 때마다 대상에게 피해 2\", kind = \"Power\", attackPlayedDamage = 2, class = \"page\", rarity = \"legend\", image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tPagePhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘 1. 민첩 1. 매턴 방어도 2\", kind = \"Power\", strength = 1, dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tDivineCharge = { name = \"디바인 차지\", cost = 1, desc = \"모든 적에게 피해 3 x 4회, 약화 1. 홀리 차지당 피해 +1. 홀리 포스.\", kind = \"Attack\", damage = 3, damagePerHolyCharge = 1, weak = 1, class = \"knight\", rarity = \"unique\", hits = 4, holyForce = true, affectsAllEnemies = true, aoe = true, image = \"863812c5c2f84132ac7465b50ec2283e\" },\n\tRestoration = { name = \"리스토네이션\", cost = 0, desc = \"HP 6 회복. 홀리 차지당 추가로 4 회복한 뒤 모두 소비\", kind = \"Skill\", class = \"knight\", rarity = \"unique\", heal = 6, healPerHolyCharge = 4, holyChargeSpendAll = true, image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tKnightRush = { name = \"돌진\", cost = 1, desc = \"모든 적에게 피해 7. 방어도 4, 홀리 차지당 방어도 +2\", kind = \"Attack\", damage = 7, block = 4, class = \"knight\", rarity = \"normal\", blockPerHolyCharge = 2, aoe = true, image = \"997fa6999aa04dbb97a1dd99025fa2ba\" },\n\tNobleDemand = { name = \"노블 디맨드\", cost = 1, desc = \"모든 적의 방어도를 제거하고 약화 2. 이번 턴 적 전체 힘 -3\", kind = \"Skill\", weak = 2, class = \"knight\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, enemyStrengthLossThisTurn = 3, image = \"291b2298db88476f8ae3c6c78f53c9b7\" },\n\tParashockGuard = { name = \"파라쇼크 가드\", cost = 3, desc = \"힘 1. 가시 3. 카드를 사용할 때마다 방어도 1\", kind = \"Power\", strength = 1, thorns = 3, cardPlayedBlock = 1, class = \"knight\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tCombatOrders = { name = \"컴뱃 오더스\", cost = 1, desc = \"다음 스킬을 1회 추가 발동. 턴 시작 시 카드 1장 추가로 뽑기\", kind = \"Power\", class = \"knight\", rarity = \"legend\", turnStartDraw = 1, nextSkillRepeatCount = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tKnightShieldMastery = { name = \"실드 마스터리\", cost = 2, desc = \"매턴 방어도 4. 가시 1\", kind = \"Power\", thorns = 1, powerEffect = \"blockPerTurn\", value = 4, class = \"knight\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tAchilles = { name = \"아킬레스\", cost = 2, desc = \"받는 피해 25% 감소\", kind = \"Power\", damageTakenReduction = 0.25, class = \"knight\", rarity = \"legend\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tBlessingArmor = { name = \"블레싱 아머\", cost = 2, desc = \"HP 피해를 받으면 방어도 6. 전투 중 처음 발동할 때 힘 2\", kind = \"Power\", blockOnDamaged = 6, strengthOnDamagedOnce = 2, class = \"knight\", rarity = \"legend\", image = \"e2580523efc6457385114b78ad0d7cce\" },\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\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\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 = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검비\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"thief\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"비도 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"thief\", rarity = \"normal\", draw = 1, 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 = \"피해를 7 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 7, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"초보 표창 던지기\", cost = 1, desc = \"피해를 3 줍니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"연달아 찌르기\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"thief\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"커닝 난무\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"thief\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"통통 튀는 표창\", cost = 1, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"비장의 패\", cost = 1, desc = \"카드를 1장 버리고, 이번 턴에 준 피해의 절반만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 0.5, class = \"thief\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"럭키 예감\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", endTurnDexLoss = 2, 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 = \"assassin\", 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 = \"thief\", rarity = \"normal\", affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토 속 별\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"assassin\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독 조제\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"독니 단검\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"thief\", 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 = \"assassin\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"그림자 등찌르기\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 소멸.\", kind = \"Attack\", damage = 10, 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 = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마지막 칼끝\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"thief\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"사신의 장부\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"thief\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"그림자 올가미\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"표창 셈법\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"assassin\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"어둠을 가르는 도약\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"뒷골목 돌파\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"표창 끝의 추격\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"한 점 겨냥\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"메소 건 승부\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"약점 들추기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"thief\", rarity = \"unique\", removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨둔 표창\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", 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 = \"thief\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"재빠른 손놀림\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpertise = { name = \"노련한 단검술\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"독액 농축\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐린 잔영\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"thief\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"발목 베기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"소매 속 표창\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"통통 독병\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"찰나의 반응\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"보랏빛 독연기\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"골목길 책략\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"빈틈없는 작전\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"thief\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"끝없는 표창통\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"사뿐한 발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"독맥 터뜨리기\", cost = 2, desc = \"독이 3번 부여될 때마다 모든 적에게 6 피해를 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 6, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"숨막히는 독연기\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"thief\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tSpeedster = { name = \"그림자 속도전\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 1 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", drawDamage = 1, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"커닝의 대단원\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 45 줍니다.\", kind = \"Attack\", damage = 45, class = \"thiefmaster\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"어둠 속 급소\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 칼자국\", cost = 2, desc = \"모든 적에게 피해를 6 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"thiefmaster\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"커닝 현상금\", cost = 1, desc = \"피해를 10 줍니다. 이 카드로 적을 처치하면 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 6, rewardOnKill = 1, class = \"assassin\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"쌓여가는 살의\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"기운 빼는 독\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStormOfSteel = { name = \"쇠별 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 발자국\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"연막 속 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식 독물결\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"먹빛 표창\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"연속 술수\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"숨은 칼날덫\", cost = 2, desc = \"교활. 모든 적에게 피해를 7 주고 중독을 2 부여합니다.\", kind = \"Attack\", damage = 7, class = \"thiefmaster\", rarity = \"legend\", poison = 2, sly = true, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"멈춘 듯한 순간\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"검은 꿈\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"도적의 연장통\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMasterPlanner = { name = \"작전의 달인\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tFanOfKnives = { name = \"사방 표창비\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"독사의 몸놀림\", cost = 2, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"thiefmaster\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"거친 숫돌질\", cost = 2, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"thiefmaster\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"소리 없는 제압\", cost = 0, desc = \"선천성. 피해를 9 줍니다. 약화를 2 부여합니다. 소멸.\", kind = \"Attack\", damage = 9, weak = 2, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령 같은 몸놀림\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 1, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 이번 턴 동안 민첩을 1 얻습니다. 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", endTurnDexLoss = 1, block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 1, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버리고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 1, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 2, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 1.5배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 1.5, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 1, desc = \"방어도 4를 얻습니다. 카드를 2장 뽑고 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 6씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 6, firstCardDamageBonus = 2, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\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": [], @@ -2058,7 +2102,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.ButtonsBound == true then\n\treturn\nend\nself.ButtonsBound = true\nlocal endTurn = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/EndTurnButton\")\nif endTurn ~= nil and (endTurn.ButtonComponent ~= nil or endTurn:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.EndTurnHandler ~= nil then\n\t\tendTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler)\n\t\tself.EndTurnHandler = nil\n\tend\n\tself.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end)\nend\nlocal drawPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/DrawPile\")\nif drawPile ~= nil and (drawPile.ButtonComponent ~= nil or drawPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DrawPileHandler ~= nil then\n\t\tdrawPile:DisconnectEvent(ButtonClickEvent, self.DrawPileHandler)\n\t\tself.DrawPileHandler = nil\n\tend\n\tself.DrawPileHandler = drawPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"draw\") end)\nend\nlocal discardPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/DiscardPile\")\nif discardPile ~= nil and (discardPile.ButtonComponent ~= nil or discardPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DiscardPileHandler ~= nil then\n\t\tdiscardPile:DisconnectEvent(ButtonClickEvent, self.DiscardPileHandler)\n\t\tself.DiscardPileHandler = nil\n\tend\n\tself.DiscardPileHandler = discardPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"discard\") end)\nend\nlocal exhaustPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/ExhaustPile\")\nif exhaustPile ~= nil and (exhaustPile.ButtonComponent ~= nil or exhaustPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ExhaustPileHandler ~= nil then\n\t\texhaustPile:DisconnectEvent(ButtonClickEvent, self.ExhaustPileHandler)\n\t\tself.ExhaustPileHandler = nil\n\tend\n\tself.ExhaustPileHandler = exhaustPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"exhaust\") end)\nend\nlocal inspectClose = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Close\")\nif inspectClose ~= nil and (inspectClose.ButtonComponent ~= nil or inspectClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DeckInspectCloseHandler ~= nil then\n\t\tinspectClose:DisconnectEvent(ButtonClickEvent, self.DeckInspectCloseHandler)\n\t\tself.DeckInspectCloseHandler = nil\n\tend\n\tself.DeckInspectCloseHandler = inspectClose:ConnectEvent(ButtonClickEvent, function() self:CloseDeckInspect() end)\nend\nlocal allDeckButton = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/AllDeckButton\")\nif allDeckButton ~= nil and (allDeckButton.ButtonComponent ~= nil or allDeckButton:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AllDeckHandler ~= nil then\n\t\tallDeckButton:DisconnectEvent(ButtonClickEvent, self.AllDeckHandler)\n\t\tself.AllDeckHandler = nil\n\tend\n\tself.AllDeckHandler = allDeckButton:ConnectEvent(ButtonClickEvent, function() self:OpenAllDeck() 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\nself.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:BindClassDeckTabs()\nlocal allDeckGrid = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Grid\")\nif allDeckGrid ~= nil and (allDeckGrid.UITouchReceiveComponent ~= nil or allDeckGrid:AddComponent(\"UITouchReceiveComponent\") ~= nil) then\n\tallDeckGrid:ConnectEvent(UITouchEnterEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\", ev.TouchPoint) end)\n\tallDeckGrid:ConnectEvent(UITouchDownEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\", ev.TouchPoint) end)\n\tallDeckGrid:ConnectEvent(UITouchDragEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\", ev.TouchPoint) end)\n\tallDeckGrid:ConnectEvent(UITouchExitEvent, function() self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\") end)\nend\nfor i = 1, 120 do\n\tlocal allCard = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. tostring(i))\n\tif allCard ~= nil and (allCard.ButtonComponent ~= nil or allCard:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tif allCard.SpriteGUIRendererComponent ~= nil then\n\t\t\tallCard.SpriteGUIRendererComponent.RaycastTarget = true\n\t\tend\n\t\tlocal slot = i\n\t\tlocal cardPath = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. tostring(i)\n\t\tallCard:ConnectEvent(ButtonStateChangeEvent, function(ev)\n\t\t\tlocal state = nil\n\t\t\tif ev ~= nil then\n\t\t\t\tstate = ev.CurrentState or ev.ButtonState or ev.State\n\t\t\tend\n\t\t\tif state == ButtonState.Highlighted or state == ButtonState.Pressed or tostring(state) == \"1\" or tostring(state) == \"2\" then\n\t\t\t\tself:HoverCardByPath(cardPath)\n\t\t\telse\n\t\t\t\tself:UnhoverCardByPath(cardPath)\n\t\t\tend\n\t\tend)\n\t\tallCard:ConnectEvent(ButtonClickEvent, function() self:OnAllDeckCardButton(slot) end)\n\tend\nend\nlocal inspectGrid = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Grid\")\nif inspectGrid ~= nil and (inspectGrid.UITouchReceiveComponent ~= nil or inspectGrid:AddComponent(\"UITouchReceiveComponent\") ~= nil) then\n\tinspectGrid:ConnectEvent(UITouchEnterEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\", ev.TouchPoint) end)\n\tinspectGrid:ConnectEvent(UITouchDownEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\", ev.TouchPoint) end)\n\tinspectGrid:ConnectEvent(UITouchDragEvent, function(ev) self:HoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\", ev.TouchPoint) end)\n\tinspectGrid:ConnectEvent(UITouchExitEvent, function() self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\") end)\nend\nfor i = 1, 60 do\n\tlocal inspectCard = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. tostring(i))\n\tif inspectCard ~= nil and (inspectCard.ButtonComponent ~= nil or inspectCard:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tlocal cardPath = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. tostring(i)\n\t\tinspectCard:ConnectEvent(ButtonStateChangeEvent, function(ev)\n\t\t\tlocal state = nil\n\t\t\tif ev ~= nil then\n\t\t\t\tstate = ev.CurrentState or ev.ButtonState or ev.State\n\t\t\tend\n\t\t\tif state == ButtonState.Highlighted or state == ButtonState.Pressed or tostring(state) == \"1\" or tostring(state) == \"2\" then\n\t\t\t\tself:HoverCardByPath(cardPath)\n\t\t\telse\n\t\t\t\tself:UnhoverCardByPath(cardPath)\n\t\t\tend\n\t\tend)\n\tend\nend\nfor i = 1, 10 do\n\tlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(i))\n\tif cardEntity ~= nil and cardEntity.UITouchReceiveComponent ~= nil then\n\t\tlocal cardPath = \"/ui/RunUIGroup/CardHand/Card\" .. tostring(i)\n\t\tcardEntity:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\tcardEntity:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\tcardEntity:ConnectEvent(UITouchBeginDragEvent, function(ev) self:OnCardDragBegin(i) end)\n\t\tcardEntity:ConnectEvent(UITouchDragEvent, function(ev) self:OnCardDrag(i, ev.TouchPoint) end)\n\t\tcardEntity:ConnectEvent(UITouchEndDragEvent, function(ev) self:OnCardDragEnd(i, ev.TouchPoint) end)\n\t\tcardEntity:ConnectEvent(UITouchEnterEvent, function() self:HoverCard(i) end)\n\t\tcardEntity:ConnectEvent(UITouchExitEvent, function() self:UnhoverCard(i) end)\n\t\tif (cardEntity.ButtonComponent ~= nil or cardEntity:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\t\tcardEntity:ConnectEvent(ButtonClickEvent, function() self:OnCardButton(i) end)\n\t\tend\n\tend\nend\nfor i = 1, 3 do\n\tlocal rc = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RewardHud/Reward\" .. tostring(i))\n\tif rc ~= nil and (rc.ButtonComponent ~= nil or rc:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\trc:ConnectEvent(ButtonClickEvent, function() self:PickReward(i) end)\n\t\tif rc.UITouchReceiveComponent ~= nil then\n\t\t\tlocal cardPath = \"/ui/RunUIGroup/RewardHud/Reward\" .. tostring(i)\n\t\t\trc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\t\trc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\t\trc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end)\n\t\t\trc:ConnectEvent(UITouchExitEvent, function() self:UnhoverCardByPath(cardPath) end)\n\t\tend\n\tend\nend\nlocal skip = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RewardHud/Skip\")\nif skip ~= nil and (skip.ButtonComponent ~= nil or skip:AddComponent(\"ButtonComponent\") ~= nil) then\n\tskip:ConnectEvent(ButtonClickEvent, function() self:PickReward(0) end)\nend\nlocal mapNodeIds = {}\nfor r = 1, 6 do\n\tfor c = 1, 4 do\n\t\ttable.insert(mapNodeIds, \"r\" .. tostring(r) .. \"c\" .. tostring(c))\n\tend\nend\ntable.insert(mapNodeIds, \"boss\")\nfor i = 1, #mapNodeIds do\n\tlocal nid = mapNodeIds[i]\n\tlocal mn = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/MapHud/Node_\" .. nid)\n\tif mn ~= nil and (mn.ButtonComponent ~= nil or mn:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tmn:ConnectEvent(ButtonClickEvent, function() self:PickNode(nid) end)\n\tend\nend\nfor i = 1, 3 do\n\tlocal sc = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Card\" .. tostring(i))\n\tif sc ~= nil and (sc.ButtonComponent ~= nil or sc:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tsc:ConnectEvent(ButtonClickEvent, function() self:BuyCard(i) end)\n\t\tif sc.UITouchReceiveComponent ~= nil then\n\t\t\tlocal cardPath = \"/ui/RunUIGroup/ShopHud/Card\" .. tostring(i)\n\t\t\tsc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\t\tsc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\t\tsc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end)\n\t\t\tsc:ConnectEvent(UITouchExitEvent, function() self:UnhoverCardByPath(cardPath) end)\n\t\tend\n\tend\nend\nlocal shopLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Leave\")\nif shopLeave ~= nil and (shopLeave.ButtonComponent ~= nil or shopLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nlocal shopRelic = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Relic\")\nif shopRelic ~= nil and (shopRelic.ButtonComponent ~= nil or shopRelic:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopRelic:ConnectEvent(ButtonClickEvent, function() self:BuyRelic() end)\nend\nlocal restLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RestHud/Leave\")\nif restLeave ~= nil and (restLeave.ButtonComponent ~= nil or restLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\trestLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nfor i = 1, 4 do\n\tlocal ms = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(i))\n\tif ms ~= nil and (ms.ButtonComponent ~= nil or ms:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tms:ConnectEvent(ButtonClickEvent, function() self:SetTarget(i) end)\n\tend\nend\nfor i = 1, 10 do\n\tlocal rs = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/RelicSlot\" .. tostring(i))\n\tif rs ~= nil and rs.UITouchReceiveComponent ~= nil then\n\t\tlocal idx = i\n\t\trs:ConnectEvent(UITouchEnterEvent, function()\n\t\t\tlocal rid = nil\n\t\t\tif self.RunRelics ~= nil then rid = self.RunRelics[idx] end\n\t\t\tif rid ~= nil and self.Relics[rid] ~= nil then\n\t\t\t\tself:ShowTooltip(self.Relics[rid].name, self.Relics[rid].desc, -240 + (idx - 1) * 48)\n\t\t\tend\n\t\tend)\n\t\trs:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end)\n\tend\nend\nfor i = 1, 5 do\n\tlocal ps = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/PotionSlot\" .. tostring(i))\n\tif ps ~= nil and ps.UITouchReceiveComponent ~= nil then\n\t\tlocal idx = i\n\t\tps:ConnectEvent(UITouchEnterEvent, function()\n\t\t\tlocal pid = nil\n\t\t\tif self.RunPotions ~= nil then pid = self.RunPotions[idx] end\n\t\t\tif pid ~= nil and self.Potions[pid] ~= nil then\n\t\t\t\tself:ShowTooltip(self.Potions[pid].name, self.Potions[pid].desc, 240 + (idx - 1) * 44)\n\t\t\tend\n\t\tend)\n\t\tps:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end)\n\t\tps:ConnectEvent(UITouchDownEvent, function() self:OpenPotionMenu(idx) end)\n\tend\nend\nlocal pmUse = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Use\")\nif pmUse ~= nil and (pmUse.ButtonComponent ~= nil or pmUse:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmUse:ConnectEvent(ButtonClickEvent, function() self:UsePotion() end)\nend\nlocal pmToss = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Toss\")\nif pmToss ~= nil and (pmToss.ButtonComponent ~= nil or pmToss:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmToss:ConnectEvent(ButtonClickEvent, function() self:TossPotion() end)\nend\nlocal pmClose = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Close\")\nif pmClose ~= nil and (pmClose.ButtonComponent ~= nil or pmClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmClose:ConnectEvent(ButtonClickEvent, function() self:ClosePotionMenu() end)\nend\nlocal shopPotion = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Potion\")\nif shopPotion ~= nil and (shopPotion.ButtonComponent ~= nil or shopPotion:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopPotion:ConnectEvent(ButtonClickEvent, function() self:BuyPotion() end)\nend\nlocal chest = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/TreasureHud/Chest\")\nif chest ~= nil and (chest.ButtonComponent ~= nil or chest:AddComponent(\"ButtonComponent\") ~= nil) then\n\tchest:ConnectEvent(ButtonClickEvent, function() self:OpenChest() end)\nend\nlocal treasureLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/TreasureHud/Leave\")\nif treasureLeave ~= nil and (treasureLeave.ButtonComponent ~= nil or treasureLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\ttreasureLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nlocal jcRelic = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobChoiceHud/RelicButton\")\nif jcRelic ~= nil and (jcRelic.ButtonComponent ~= nil or jcRelic:AddComponent(\"ButtonComponent\") ~= nil) then\n\tjcRelic:ConnectEvent(ButtonClickEvent, function() self:PickJobReward(\"relic\") end)\nend\nlocal jcJob = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobChoiceHud/JobButton\")\nif jcJob ~= nil and (jcJob.ButtonComponent ~= nil or jcJob:AddComponent(\"ButtonComponent\") ~= nil) then\n\tjcJob:ConnectEvent(ButtonClickEvent, function() self:PickJobReward(\"job\") end)\nend\nfor i = 1, 3 do\n\tlocal slotIdx = i\n\tlocal jb = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobSelectHud/Job_slot\" .. tostring(i))\n\tif jb ~= nil and (jb.ButtonComponent ~= nil or jb:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tjb:ConnectEvent(ButtonClickEvent, function()\n\t\t\tif self.JobOpts ~= nil and self.JobOpts[slotIdx] ~= nil then\n\t\t\t\tself:SetJob(self.JobOpts[slotIdx].id)\n\t\t\tend\n\t\tend)\n\tend\nend", + "Code": "if self.ButtonsBound == true then\n\treturn\nend\nself.ButtonsBound = true\nlocal endTurn = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/EndTurnButton\")\nif endTurn ~= nil and (endTurn.ButtonComponent ~= nil or endTurn:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.EndTurnHandler ~= nil then\n\t\tendTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler)\n\t\tself.EndTurnHandler = nil\n\tend\n\tself.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end)\nend\nlocal drawPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/DrawPile\")\nif drawPile ~= nil and (drawPile.ButtonComponent ~= nil or drawPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DrawPileHandler ~= nil then\n\t\tdrawPile:DisconnectEvent(ButtonClickEvent, self.DrawPileHandler)\n\t\tself.DrawPileHandler = nil\n\tend\n\tself.DrawPileHandler = drawPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"draw\") end)\nend\nlocal discardPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/DiscardPile\")\nif discardPile ~= nil and (discardPile.ButtonComponent ~= nil or discardPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DiscardPileHandler ~= nil then\n\t\tdiscardPile:DisconnectEvent(ButtonClickEvent, self.DiscardPileHandler)\n\t\tself.DiscardPileHandler = nil\n\tend\n\tself.DiscardPileHandler = discardPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"discard\") end)\nend\nlocal exhaustPile = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/DeckHud/ExhaustPile\")\nif exhaustPile ~= nil and (exhaustPile.ButtonComponent ~= nil or exhaustPile:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.ExhaustPileHandler ~= nil then\n\t\texhaustPile:DisconnectEvent(ButtonClickEvent, self.ExhaustPileHandler)\n\t\tself.ExhaustPileHandler = nil\n\tend\n\tself.ExhaustPileHandler = exhaustPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect(\"exhaust\") end)\nend\nlocal inspectClose = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Close\")\nif inspectClose ~= nil and (inspectClose.ButtonComponent ~= nil or inspectClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.DeckInspectCloseHandler ~= nil then\n\t\tinspectClose:DisconnectEvent(ButtonClickEvent, self.DeckInspectCloseHandler)\n\t\tself.DeckInspectCloseHandler = nil\n\tend\n\tself.DeckInspectCloseHandler = inspectClose:ConnectEvent(ButtonClickEvent, function() self:CloseDeckInspect() end)\nend\nlocal allDeckButton = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/AllDeckButton\")\nif allDeckButton ~= nil and (allDeckButton.ButtonComponent ~= nil or allDeckButton:AddComponent(\"ButtonComponent\") ~= nil) then\n\tif self.AllDeckHandler ~= nil then\n\t\tallDeckButton:DisconnectEvent(ButtonClickEvent, self.AllDeckHandler)\n\t\tself.AllDeckHandler = nil\n\tend\n\tself.AllDeckHandler = allDeckButton:ConnectEvent(ButtonClickEvent, function() self:OpenAllDeck() 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\nself.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end)\nend\nself:BindClassDeckTabs()\nlocal allDeckGrid = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Grid\")\nif allDeckGrid ~= nil and (allDeckGrid.UITouchReceiveComponent ~= nil or allDeckGrid:AddComponent(\"UITouchReceiveComponent\") ~= nil) then\n\tallDeckGrid:ConnectEvent(UITouchEnterEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\", ev.TouchPoint) end)\n\tallDeckGrid:ConnectEvent(UITouchDownEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\", ev.TouchPoint) end)\n\tallDeckGrid:ConnectEvent(UITouchDragEvent, function(ev) self.GridScrollActive = true; self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\") end)\n\tallDeckGrid:ConnectEvent(UITouchEndDragEvent, function() self.GridScrollActive = false end)\n\tallDeckGrid:ConnectEvent(UITouchExitEvent, function() self.GridScrollActive = false; self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckAllHud/Grid\") end)\nend\nfor i = 1, 120 do\n\tlocal allCard = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. self:IntStr(i))\n\tif allCard ~= nil and (allCard.ButtonComponent ~= nil or allCard:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tif allCard.SpriteGUIRendererComponent ~= nil then\n\t\t\tallCard.SpriteGUIRendererComponent.RaycastTarget = true\n\t\tend\n\t\tlocal slot = i\n\t\tlocal cardPath = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. self:IntStr(i)\n\t\tallCard:ConnectEvent(ButtonStateChangeEvent, function(ev)\n\t\t\tlocal state = nil\n\t\t\tif ev ~= nil then\n\t\t\t\tstate = ev.CurrentState or ev.ButtonState or ev.State\n\t\t\tend\n\t\t\tif state == ButtonState.Highlighted or state == ButtonState.Pressed or tostring(state) == \"1\" or tostring(state) == \"2\" then\n\t\t\t\tself:HoverCardByPath(cardPath)\n\t\t\telse\n\t\t\t\tself:UnhoverCardByPath(cardPath)\n\t\t\tend\n\t\tend)\n\t\tallCard:ConnectEvent(ButtonClickEvent, function() self:OnAllDeckCardButton(slot) end)\n\tend\nend\nlocal inspectGrid = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Grid\")\nif inspectGrid ~= nil and (inspectGrid.UITouchReceiveComponent ~= nil or inspectGrid:AddComponent(\"UITouchReceiveComponent\") ~= nil) then\n\tinspectGrid:ConnectEvent(UITouchEnterEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\", ev.TouchPoint) end)\n\tinspectGrid:ConnectEvent(UITouchDownEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\", ev.TouchPoint) end)\n\tinspectGrid:ConnectEvent(UITouchDragEvent, function(ev) self.GridScrollActive = true; self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\") end)\n\tinspectGrid:ConnectEvent(UITouchEndDragEvent, function() self.GridScrollActive = false end)\n\tinspectGrid:ConnectEvent(UITouchExitEvent, function() self.GridScrollActive = false; self:UnhoverGridCard(\"/ui/DeckUIGroup/DeckInspectHud/Grid\") end)\nend\nfor i = 1, 60 do\n\tlocal inspectCard = _EntityService:GetEntityByPath(\"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. self:IntStr(i))\n\tif inspectCard ~= nil and (inspectCard.ButtonComponent ~= nil or inspectCard:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tlocal cardPath = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. self:IntStr(i)\n\t\tinspectCard:ConnectEvent(ButtonStateChangeEvent, function(ev)\n\t\t\tlocal state = nil\n\t\t\tif ev ~= nil then\n\t\t\t\tstate = ev.CurrentState or ev.ButtonState or ev.State\n\t\t\tend\n\t\t\tif state == ButtonState.Highlighted or state == ButtonState.Pressed or tostring(state) == \"1\" or tostring(state) == \"2\" then\n\t\t\t\tself:HoverCardByPath(cardPath)\n\t\t\telse\n\t\t\t\tself:UnhoverCardByPath(cardPath)\n\t\t\tend\n\t\tend)\n\tend\nend\nfor i = 1, 10 do\n\tlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(i))\n\tif cardEntity ~= nil and cardEntity.UITouchReceiveComponent ~= nil then\n\t\tlocal cardPath = \"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(i)\n\t\tcardEntity:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\tcardEntity:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\tcardEntity:ConnectEvent(UITouchBeginDragEvent, function(ev) self:OnCardDragBegin(i) end)\n\t\tcardEntity:ConnectEvent(UITouchDragEvent, function(ev) self:OnCardDrag(i, ev.TouchPoint) end)\n\t\tcardEntity:ConnectEvent(UITouchEndDragEvent, function(ev) self:OnCardDragEnd(i, ev.TouchPoint) end)\n\t\tcardEntity:ConnectEvent(UITouchEnterEvent, function() self:HoverCard(i) end)\n\t\tcardEntity:ConnectEvent(UITouchExitEvent, function() self:UnhoverCard(i) end)\n\t\tif (cardEntity.ButtonComponent ~= nil or cardEntity:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\t\tcardEntity:ConnectEvent(ButtonClickEvent, function() self:OnCardButton(i) end)\n\t\tend\n\tend\nend\nfor i = 1, 3 do\n\tlocal rc = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RewardHud/Reward\" .. self:IntStr(i))\n\tif rc ~= nil and (rc.ButtonComponent ~= nil or rc:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\trc:ConnectEvent(ButtonClickEvent, function() self:PickReward(i) end)\n\t\tif rc.UITouchReceiveComponent ~= nil then\n\t\t\tlocal cardPath = \"/ui/RunUIGroup/RewardHud/Reward\" .. self:IntStr(i)\n\t\t\trc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\t\trc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\t\trc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end)\n\t\t\trc:ConnectEvent(UITouchExitEvent, function() self:UnhoverCardByPath(cardPath) end)\n\t\tend\n\tend\nend\nlocal skip = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RewardHud/Skip\")\nif skip ~= nil and (skip.ButtonComponent ~= nil or skip:AddComponent(\"ButtonComponent\") ~= nil) then\n\tskip:ConnectEvent(ButtonClickEvent, function() self:PickReward(0) end)\nend\nlocal mapNodeIds = {}\nfor r = 1, 6 do\n\tfor c = 1, 4 do\n\t\ttable.insert(mapNodeIds, \"r\" .. tostring(r) .. \"c\" .. tostring(c))\n\tend\nend\ntable.insert(mapNodeIds, \"boss\")\nfor i = 1, #mapNodeIds do\n\tlocal nid = mapNodeIds[i]\n\tlocal mn = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/MapHud/Node_\" .. nid)\n\tif mn ~= nil and (mn.ButtonComponent ~= nil or mn:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tmn:ConnectEvent(ButtonClickEvent, function() self:PickNode(nid) end)\n\tend\nend\nfor i = 1, 3 do\n\tlocal sc = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Card\" .. self:IntStr(i))\n\tif sc ~= nil and (sc.ButtonComponent ~= nil or sc:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tsc:ConnectEvent(ButtonClickEvent, function() self:BuyCard(i) end)\n\t\tif sc.UITouchReceiveComponent ~= nil then\n\t\t\tlocal cardPath = \"/ui/RunUIGroup/ShopHud/Card\" .. self:IntStr(i)\n\t\t\tsc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end)\n\t\t\tsc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end)\n\t\t\tsc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end)\n\t\t\tsc:ConnectEvent(UITouchExitEvent, function() self:UnhoverCardByPath(cardPath) end)\n\t\tend\n\tend\nend\nlocal shopLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Leave\")\nif shopLeave ~= nil and (shopLeave.ButtonComponent ~= nil or shopLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nlocal shopRelic = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Relic\")\nif shopRelic ~= nil and (shopRelic.ButtonComponent ~= nil or shopRelic:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopRelic:ConnectEvent(ButtonClickEvent, function() self:BuyRelic() end)\nend\nlocal restLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/RestHud/Leave\")\nif restLeave ~= nil and (restLeave.ButtonComponent ~= nil or restLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\trestLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nfor i = 1, 4 do\n\tlocal ms = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(i))\n\tif ms ~= nil and (ms.ButtonComponent ~= nil or ms:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tms:ConnectEvent(ButtonClickEvent, function() self:SetTarget(i) end)\n\tend\nend\nfor i = 1, 10 do\n\tlocal rs = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/RelicSlot\" .. self:IntStr(i))\n\tif rs ~= nil and rs.UITouchReceiveComponent ~= nil then\n\t\tlocal idx = i\n\t\trs:ConnectEvent(UITouchEnterEvent, function()\n\t\t\tlocal rid = nil\n\t\t\tif self.RunRelics ~= nil then rid = self.RunRelics[idx] end\n\t\t\tif rid ~= nil and self.Relics[rid] ~= nil then\n\t\t\t\tself:ShowTooltip(self.Relics[rid].name, self.Relics[rid].desc, -240 + (idx - 1) * 48)\n\t\t\tend\n\t\tend)\n\t\trs:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end)\n\tend\nend\nfor i = 1, 5 do\n\tlocal ps = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/TopBar/PotionSlot\" .. self:IntStr(i))\n\tif ps ~= nil and ps.UITouchReceiveComponent ~= nil then\n\t\tlocal idx = i\n\t\tps:ConnectEvent(UITouchEnterEvent, function()\n\t\t\tlocal pid = nil\n\t\t\tif self.RunPotions ~= nil then pid = self.RunPotions[idx] end\n\t\t\tif pid ~= nil and self.Potions[pid] ~= nil then\n\t\t\t\tself:ShowTooltip(self.Potions[pid].name, self.Potions[pid].desc, 240 + (idx - 1) * 44)\n\t\t\tend\n\t\tend)\n\t\tps:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end)\n\t\tps:ConnectEvent(UITouchDownEvent, function() self:OpenPotionMenu(idx) end)\n\tend\nend\nlocal pmUse = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Use\")\nif pmUse ~= nil and (pmUse.ButtonComponent ~= nil or pmUse:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmUse:ConnectEvent(ButtonClickEvent, function() self:UsePotion() end)\nend\nlocal pmToss = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Toss\")\nif pmToss ~= nil and (pmToss.ButtonComponent ~= nil or pmToss:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmToss:ConnectEvent(ButtonClickEvent, function() self:TossPotion() end)\nend\nlocal pmClose = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/PotionMenu/Close\")\nif pmClose ~= nil and (pmClose.ButtonComponent ~= nil or pmClose:AddComponent(\"ButtonComponent\") ~= nil) then\n\tpmClose:ConnectEvent(ButtonClickEvent, function() self:ClosePotionMenu() end)\nend\nlocal shopPotion = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Potion\")\nif shopPotion ~= nil and (shopPotion.ButtonComponent ~= nil or shopPotion:AddComponent(\"ButtonComponent\") ~= nil) then\n\tshopPotion:ConnectEvent(ButtonClickEvent, function() self:BuyPotion() end)\nend\nlocal chest = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/TreasureHud/Chest\")\nif chest ~= nil and (chest.ButtonComponent ~= nil or chest:AddComponent(\"ButtonComponent\") ~= nil) then\n\tchest:ConnectEvent(ButtonClickEvent, function() self:OpenChest() end)\nend\nlocal treasureLeave = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/TreasureHud/Leave\")\nif treasureLeave ~= nil and (treasureLeave.ButtonComponent ~= nil or treasureLeave:AddComponent(\"ButtonComponent\") ~= nil) then\n\ttreasureLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)\nend\nlocal jcRelic = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobChoiceHud/RelicButton\")\nif jcRelic ~= nil and (jcRelic.ButtonComponent ~= nil or jcRelic:AddComponent(\"ButtonComponent\") ~= nil) then\n\tjcRelic:ConnectEvent(ButtonClickEvent, function() self:PickJobReward(\"relic\") end)\nend\nlocal jcJob = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobChoiceHud/JobButton\")\nif jcJob ~= nil and (jcJob.ButtonComponent ~= nil or jcJob:AddComponent(\"ButtonComponent\") ~= nil) then\n\tjcJob:ConnectEvent(ButtonClickEvent, function() self:PickJobReward(\"job\") end)\nend\nfor i = 1, 3 do\n\tlocal slotIdx = i\n\tlocal jb = _EntityService:GetEntityByPath(\"/ui/SelectUIGroup/JobSelectHud/Job_slot\" .. self:IntStr(i))\n\tif jb ~= nil and (jb.ButtonComponent ~= nil or jb:AddComponent(\"ButtonComponent\") ~= nil) then\n\t\tjb:ConnectEvent(ButtonClickEvent, function()\n\t\t\tif self.JobOpts ~= nil and self.JobOpts[slotIdx] ~= nil then\n\t\t\t\tself:SetJob(self.JobOpts[slotIdx].id)\n\t\t\tend\n\t\tend)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2383,7 +2427,7 @@ "Name": "title" } ], - "Code": "local count = 0\nif pile ~= nil then\n\tcount = #pile\nend\nlocal suffix = \" (\" .. tostring(count) .. \")\"\nif count > 60 then\n\tsuffix = suffix .. \" - 60장까지 표시\"\nend\nself:SetText(\"/ui/DeckUIGroup/DeckInspectHud/Title\", title .. suffix)\nself:SetEntityEnabled(\"/ui/DeckUIGroup/DeckInspectHud/Empty\", count <= 0)\nfor i = 1, 60 do\n\tlocal path = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. tostring(i)\n\tlocal cardId = nil\n\tif pile ~= nil then\n\t\tcardId = pile[i]\n\tend\n\tif cardId == nil then\n\t\tself:SetEntityEnabled(path, false)\n\telse\n\t\tself:SetEntityEnabled(path, true)\n\t\tself:ApplyInspectCardVisual(i, cardId)\n\tend\nend", + "Code": "local count = 0\nif pile ~= nil then\n\tcount = #pile\nend\nlocal suffix = \" (\" .. tostring(count) .. \")\"\nif count > 60 then\n\tsuffix = suffix .. \" - 60장까지 표시\"\nend\nself:SetText(\"/ui/DeckUIGroup/DeckInspectHud/Title\", title .. suffix)\nself:SetEntityEnabled(\"/ui/DeckUIGroup/DeckInspectHud/Empty\", count <= 0)\nfor i = 1, 60 do\n\tlocal path = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. self:IntStr(i)\n\tlocal cardId = nil\n\tif pile ~= nil then\n\t\tcardId = pile[i]\n\tend\n\tif cardId == nil then\n\t\tself:SetEntityEnabled(path, false)\n\telse\n\t\tself:SetEntityEnabled(path, true)\n\t\tself:ApplyInspectCardVisual(i, cardId)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2413,7 +2457,7 @@ "Name": "cardId" } ], - "Code": "self:ApplyCardFace(\"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. tostring(slot), cardId)", + "Code": "self:ApplyCardFace(\"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\" .. self:IntStr(slot), cardId)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2549,7 +2593,7 @@ "Name": null }, "Arguments": [], - "Code": "local pile = self.RunDeck or {}\nlocal title = \"모든 덱\"\nif self.ClassDeckMode == true then\n\tpile = self.ClassDeckCards or {}\n\ttitle = self.ClassDeckTitle\n\tif self.DebugCardPickerMode == true then\n\t\ttitle = title .. \" - 테스트 카드 추가\"\n\tend\nelseif self.CodexMode == true then\n\tpile = self.CodexCards or {}\n\ttitle = \"카드 도감\"\nend\nlocal count = #pile\nself:SetText(\"/ui/DeckUIGroup/DeckAllHud/Title\", title .. \" (\" .. tostring(count) .. \")\")\nself:RenderClassDeckTabs()\nself:SetEntityEnabled(\"/ui/DeckUIGroup/DeckAllHud/Empty\", count <= 0)\nfor i = 1, 120 do\n\tlocal path = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. tostring(i)\n\tlocal cardId = pile[i]\n\tif cardId == nil then\n\t\tself:SetEntityEnabled(path, false)\n\telse\n\t\tself:SetEntityEnabled(path, true)\n\t\tself:ApplyAllDeckCardVisual(i, cardId)\n\tend\nend", + "Code": "local pile = self.RunDeck or {}\nlocal title = \"모든 덱\"\nif self.ClassDeckMode == true then\n\tpile = self.ClassDeckCards or {}\n\ttitle = self.ClassDeckTitle\n\tif self.DebugCardPickerMode == true then\n\t\ttitle = title .. \" - 테스트 카드 추가\"\n\tend\nelseif self.CodexMode == true then\n\tpile = self.CodexCards or {}\n\ttitle = \"카드 도감\"\nend\nlocal count = #pile\nself:SetText(\"/ui/DeckUIGroup/DeckAllHud/Title\", title .. \" (\" .. tostring(count) .. \")\")\nself:RenderClassDeckTabs()\nself:SetEntityEnabled(\"/ui/DeckUIGroup/DeckAllHud/Empty\", count <= 0)\nfor i = 1, 120 do\n\tlocal path = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. self:IntStr(i)\n\tlocal cardId = pile[i]\n\tif cardId == nil then\n\t\tself:SetEntityEnabled(path, false)\n\telse\n\t\tself:SetEntityEnabled(path, true)\n\t\tself:ApplyAllDeckCardVisual(i, cardId)\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2579,7 +2623,7 @@ "Name": "cardId" } ], - "Code": "self:ApplyCardFace(\"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. tostring(slot), cardId)", + "Code": "self:ApplyCardFace(\"/ui/DeckUIGroup/DeckAllHud/Grid/Card\" .. self:IntStr(slot), cardId)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2663,7 +2707,7 @@ "Name": "animate" } ], - "Code": "local n = #self.Hand\nlocal spacing = 175\nif n > 8 then spacing = math.floor(1400 / n) end\nlocal startX = -((n - 1) * spacing) / 2\nlocal drawStart = Vector2(-590, 8)\nfor i = 1, 10 do\n\tlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(i))\n\tif cardEntity ~= nil then\n\t\tlocal cardId = self.Hand[i]\n\t\tif cardId == nil then\n\t\t\tcardEntity.Enable = false\n\t\telse\n\t\t\tcardEntity.Enable = true\n\t\t\tif cardEntity.UITransformComponent ~= nil then cardEntity.UITransformComponent.UIScale = Vector3(1, 1, 1) end\n\t\t\tself:ApplyCardVisual(i, cardId)\n\t\t\tlocal tx = self:GetHandSlotX(i)\n\t\t\tif animate == true then\n\t\t\t\tself:AnimateCardFrom(i, drawStart, Vector2(tx, 0), 0.16 + i * 0.03)\n\t\t\telse\n\t\t\t\tif cardEntity.UITransformComponent ~= nil then cardEntity.UITransformComponent.anchoredPosition = Vector2(tx, 0) end\n\t\t\tend\n\t\tend\n\tend\nend\nself:RenderPiles()", + "Code": "local n = #self.Hand\nlocal spacing = 175\nif n > 8 then spacing = math.floor(1400 / n) end\nlocal startX = -((n - 1) * spacing) / 2\nlocal drawStart = Vector2(-590, 8)\nfor i = 1, 10 do\n\tlocal cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(i))\n\tif cardEntity ~= nil then\n\t\tlocal cardId = self.Hand[i]\n\t\tif cardId == nil then\n\t\t\tcardEntity.Enable = false\n\t\telse\n\t\t\tcardEntity.Enable = true\n\t\t\tif cardEntity.UITransformComponent ~= nil then cardEntity.UITransformComponent.UIScale = Vector3(1, 1, 1) end\n\t\t\tself:ApplyCardVisual(i, cardId)\n\t\t\tlocal tx = self:GetHandSlotX(i)\n\t\t\tif animate == true then\n\t\t\t\tself:AnimateCardFrom(i, drawStart, Vector2(tx, 0), 0.16 + i * 0.03)\n\t\t\telse\n\t\t\t\tif cardEntity.UITransformComponent ~= nil then cardEntity.UITransformComponent.anchoredPosition = Vector2(tx, 0) end\n\t\t\tend\n\t\tend\n\tend\nend\nself:RenderPiles()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2723,7 +2767,7 @@ "Name": "hover" } ], - "Code": "local prefix = \"\"\nlocal count = 0\nlocal xs = {}\nlocal baseY = 0\nlocal hoverIndex = 0\nlocal push = 110\nif string.find(path, \"/ui/RunUIGroup/CardHand/Card\") == 1 then\n\tif self.DragSlot ~= nil and self.DragSlot > 0 then\n\t\treturn\n\tend\n\tprefix = \"/ui/RunUIGroup/CardHand/Card\"\n\tcount = 0\n\tif self.Hand ~= nil then count = #self.Hand end\n\tfor i = 1, count do\n\t\txs[i] = self:GetHandSlotX(i)\n\tend\n\tbaseY = 0\n\thoverIndex = tonumber(string.match(path, \"Card(%d+)\")) or 0\nelseif string.find(path, \"/ui/RunUIGroup/RewardHud/Reward\") == 1 then\n\tprefix = \"/ui/RunUIGroup/RewardHud/Reward\"\n\tcount = 3\n\txs = { -300, 0, 300 }\n\tbaseY = 0\n\thoverIndex = tonumber(string.match(path, \"Reward(%d+)\")) or 0\nelseif string.find(path, \"/ui/RunUIGroup/ShopHud/Card\") == 1 then\n\tprefix = \"/ui/RunUIGroup/ShopHud/Card\"\n\tcount = 3\n\txs = { -300, 0, 300 }\n\tbaseY = 20\n\thoverIndex = tonumber(string.match(path, \"Card(%d+)\")) or 0\nend\nif count <= 0 then\n\treturn\nend\nif self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then\n\t_TimerService:ClearTimer(self.CardHoverTweenId)\n\tself.CardHoverTweenId = 0\nend\nlocal items = {}\nfor i = 1, count do\n\tlocal e = _EntityService:GetEntityByPath(prefix .. tostring(i))\n\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\tlocal tr = e.UITransformComponent\n\t\tlocal tx = xs[i]\n\t\tlocal ty = baseY\n\t\tlocal sc = 1\n\t\tif hover == true and hoverIndex > 0 then\n\t\t\tif i == hoverIndex and e.Enable == true then\n\t\t\t\tsc = 1.5\n\t\t\telseif i < hoverIndex then\n\t\t\t\ttx = tx - push\n\t\t\telseif i > hoverIndex then\n\t\t\t\ttx = tx + push\n\t\t\tend\n\t\tend\n\t\ttable.insert(items, { tr = tr, sx = tr.anchoredPosition.x, sy = tr.anchoredPosition.y, ss = tr.UIScale.x, tx = tx, ty = ty, ts = sc })\n\tend\nend\nlocal elapsed = 0\nlocal duration = 0.12\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseOut, t)\n\tfor i = 1, #items do\n\t\tlocal it = items[i]\n\t\tlocal x = it.sx + (it.tx - it.sx) * eased\n\t\tlocal y = it.sy + (it.ty - it.sy) * eased\n\t\tlocal s = it.ss + (it.ts - it.ss) * eased\n\t\tit.tr.anchoredPosition = Vector2(x, y)\n\t\tit.tr.UIScale = Vector3(s, s, 1)\n\tend\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\t\tif self.CardHoverTweenId == eventId then\n\t\t\tself.CardHoverTweenId = 0\n\t\tend\n\tend\nend, 1 / 60)\nself.CardHoverTweenId = eventId", + "Code": "local prefix = \"\"\nlocal count = 0\nlocal xs = {}\nlocal baseY = 0\nlocal hoverIndex = 0\nlocal push = 110\nif string.find(path, \"/ui/RunUIGroup/CardHand/Card\") == 1 then\n\tif self.DragSlot ~= nil and self.DragSlot > 0 then\n\t\treturn\n\tend\n\tprefix = \"/ui/RunUIGroup/CardHand/Card\"\n\tcount = 0\n\tif self.Hand ~= nil then count = #self.Hand end\n\tfor i = 1, count do\n\t\txs[i] = self:GetHandSlotX(i)\n\tend\n\tbaseY = 0\n\thoverIndex = tonumber(string.match(path, \"Card(%d+)\")) or 0\nelseif string.find(path, \"/ui/RunUIGroup/RewardHud/Reward\") == 1 then\n\tprefix = \"/ui/RunUIGroup/RewardHud/Reward\"\n\tcount = 3\n\txs = { -300, 0, 300 }\n\tbaseY = 0\n\thoverIndex = tonumber(string.match(path, \"Reward(%d+)\")) or 0\nelseif string.find(path, \"/ui/RunUIGroup/ShopHud/Card\") == 1 then\n\tprefix = \"/ui/RunUIGroup/ShopHud/Card\"\n\tcount = 3\n\txs = { -300, 0, 300 }\n\tbaseY = 20\n\thoverIndex = tonumber(string.match(path, \"Card(%d+)\")) or 0\nend\nif count <= 0 then\n\treturn\nend\nif self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then\n\t_TimerService:ClearTimer(self.CardHoverTweenId)\n\tself.CardHoverTweenId = 0\nend\nlocal items = {}\nfor i = 1, count do\n\tlocal e = _EntityService:GetEntityByPath(prefix .. self:IntStr(i))\n\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\tlocal tr = e.UITransformComponent\n\t\tlocal tx = xs[i]\n\t\tlocal ty = baseY\n\t\tlocal sc = 1\n\t\tif hover == true and hoverIndex > 0 then\n\t\t\tif i == hoverIndex and e.Enable == true then\n\t\t\t\tsc = 1.5\n\t\t\telseif i < hoverIndex then\n\t\t\t\ttx = tx - push\n\t\t\telseif i > hoverIndex then\n\t\t\t\ttx = tx + push\n\t\t\tend\n\t\tend\n\t\ttable.insert(items, { tr = tr, sx = tr.anchoredPosition.x, sy = tr.anchoredPosition.y, ss = tr.UIScale.x, tx = tx, ty = ty, ts = sc })\n\tend\nend\nlocal elapsed = 0\nlocal duration = 0.12\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseOut, t)\n\tfor i = 1, #items do\n\t\tlocal it = items[i]\n\t\tlocal x = it.sx + (it.tx - it.sx) * eased\n\t\tlocal y = it.sy + (it.ty - it.sy) * eased\n\t\tlocal s = it.ss + (it.ts - it.ss) * eased\n\t\tit.tr.anchoredPosition = Vector2(x, y)\n\t\tit.tr.UIScale = Vector3(s, s, 1)\n\tend\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\t\tif self.CardHoverTweenId == eventId then\n\t\t\tself.CardHoverTweenId = 0\n\t\tend\n\tend\nend, 1 / 60)\nself.CardHoverTweenId = eventId", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2753,7 +2797,7 @@ "Name": "cardId" } ], - "Code": "self:ApplyCardFace(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot), cardId)", + "Code": "self:ApplyCardFace(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot), cardId)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2850,7 +2894,7 @@ "Name": "duration" } ], - "Code": "local cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\nif cardEntity == nil or cardEntity.UITransformComponent == nil then\n\treturn\nend\nlocal tr = cardEntity.UITransformComponent\ntr.anchoredPosition = fromPos\nlocal elapsed = 0\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseOut, t)\n\ttr.anchoredPosition = Vector2(fromPos.x + (toPos.x - fromPos.x) * eased, fromPos.y + (toPos.y - fromPos.y) * eased)\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\tend\nend, 1 / 60)", + "Code": "local cardEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\nif cardEntity == nil or cardEntity.UITransformComponent == nil then\n\treturn\nend\nlocal tr = cardEntity.UITransformComponent\ntr.anchoredPosition = fromPos\nlocal elapsed = 0\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseOut, t)\n\ttr.anchoredPosition = Vector2(fromPos.x + (toPos.x - fromPos.x) * eased, fromPos.y + (toPos.y - fromPos.y) * eased)\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\tend\nend, 1 / 60)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -2887,7 +2931,7 @@ "Name": "slots" } ], - "Code": "if cardIds == nil or slots == nil then\n\treturn\nend\nlocal target = Vector2(590, 8)\nlocal duration = 0.18\nfor i = 1, #cardIds do\n\tlocal slot = slots[i] or i\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\n\tif e ~= nil then\n\t\te.Enable = true\n\t\tself:ApplyCardFace(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot), cardIds[i])\n\t\tif e.UITransformComponent ~= nil then\n\t\t\tlocal sx = 0\n\t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end\n\t\t\te.UITransformComponent.anchoredPosition = Vector2(sx, 0)\n\t\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\tend\n\tend\nend\nlocal elapsed = 0\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseIn, t)\n\tfor i = 1, #cardIds do\n\t\tlocal slot = slots[i] or i\n\t\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\n\t\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\t\tlocal sx = 0\n\t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end\n\t\t\tlocal x = sx + (target.x - sx) * eased\n\t\t\tlocal y = 0 + (target.y - 0) * eased\n\t\t\tlocal s = 1 - 0.25 * eased\n\t\t\te.UITransformComponent.anchoredPosition = Vector2(x, y)\n\t\t\te.UITransformComponent.UIScale = Vector3(s, s, 1)\n\t\tend\n\tend\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\t\tfor i = 1, #cardIds do\n\t\t\tlocal slot = slots[i] or i\n\t\t\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\n\t\t\tif e ~= nil then\n\t\t\t\tif self.Hand ~= nil and self.Hand[slot] ~= nil then\n\t\t\t\t\te.Enable = true\n\t\t\t\t\tself:ApplyCardVisual(slot, self.Hand[slot])\n\t\t\t\t\tif e.UITransformComponent ~= nil then\n\t\t\t\t\t\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(slot), 0)\n\t\t\t\t\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\te.Enable = false\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend, 1 / 60)", + "Code": "if cardIds == nil or slots == nil then\n\treturn\nend\nlocal target = Vector2(590, 8)\nlocal duration = 0.18\nfor i = 1, #cardIds do\n\tlocal slot = slots[i] or i\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\n\tif e ~= nil then\n\t\te.Enable = true\n\t\tself:ApplyCardFace(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot), cardIds[i])\n\t\tif e.UITransformComponent ~= nil then\n\t\t\tlocal sx = 0\n\t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end\n\t\t\te.UITransformComponent.anchoredPosition = Vector2(sx, 0)\n\t\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\tend\n\tend\nend\nlocal elapsed = 0\nlocal eventId = 0\neventId = _TimerService:SetTimerRepeat(function()\n\telapsed = elapsed + 1 / 60\n\tlocal t = math.min(elapsed / duration, 1)\n\tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseIn, t)\n\tfor i = 1, #cardIds do\n\t\tlocal slot = slots[i] or i\n\t\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\n\t\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\t\tlocal sx = 0\n\t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end\n\t\t\tlocal x = sx + (target.x - sx) * eased\n\t\t\tlocal y = 0 + (target.y - 0) * eased\n\t\t\tlocal s = 1 - 0.25 * eased\n\t\t\te.UITransformComponent.anchoredPosition = Vector2(x, y)\n\t\t\te.UITransformComponent.UIScale = Vector3(s, s, 1)\n\t\tend\n\tend\n\tif t >= 1 then\n\t\t_TimerService:ClearTimer(eventId)\n\t\tfor i = 1, #cardIds do\n\t\t\tlocal slot = slots[i] or i\n\t\t\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\n\t\t\tif e ~= nil then\n\t\t\t\tif self.Hand ~= nil and self.Hand[slot] ~= nil then\n\t\t\t\t\te.Enable = true\n\t\t\t\t\tself:ApplyCardVisual(slot, self.Hand[slot])\n\t\t\t\t\tif e.UITransformComponent ~= nil then\n\t\t\t\t\t\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(slot), 0)\n\t\t\t\t\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\t\t\t\tend\n\t\t\t\telse\n\t\t\t\t\te.Enable = false\n\t\t\t\tend\n\t\t\tend\n\t\tend\n\tend\nend, 1 / 60)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3909,7 +3953,7 @@ "Name": null }, "Arguments": [], - "Code": "local dragActive = self.DragTargetIndex ~= nil and self.DragTargetIndex > 0\nlocal shownTarget = self.TargetIndex\nif dragActive == true then shownTarget = self.DragTargetIndex end\nfor i = 1, #self.Monsters do\n\tlocal m = self.Monsters[i]\n\tlocal active = false\n\tif m ~= nil and m.alive == true and i == shownTarget then active = true end\n\tself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(i) .. \"/TargetMarker\", active and dragActive)\n\tself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(i) .. \"/TargetMarker/Label\", active and dragActive)\nend", + "Code": "local dragActive = self.DragTargetIndex ~= nil and self.DragTargetIndex > 0\nlocal shownTarget = self.TargetIndex\nif dragActive == true then shownTarget = self.DragTargetIndex end\nfor i = 1, #self.Monsters do\n\tlocal m = self.Monsters[i]\n\tlocal active = false\n\tif m ~= nil and m.alive == true and i == shownTarget then active = true end\n\tself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(i) .. \"/TargetMarker\", active and dragActive)\n\tself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(i) .. \"/TargetMarker/Label\", active and dragActive)\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3932,7 +3976,7 @@ "Name": "slot" } ], - "Code": "if self.CombatOver == true or self.FxBusy == true or self.TurnBusy == true then\n\treturn\nend\nif self.Hand == nil or self.Hand[slot] == nil then\n\treturn\nend\nif self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then\n\t_TimerService:ClearTimer(self.CardHoverTweenId)\n\tself.CardHoverTweenId = 0\nend\nfor i = 1, 10 do\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(i))\n\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(i), 0)\n\tend\nend\nself.DragSlot = slot\nself.DragTargetIndex = 0\nself:RenderTargetFrames()", + "Code": "if self.CombatOver == true or self.FxBusy == true or self.TurnBusy == true then\n\treturn\nend\nif self.Hand == nil or self.Hand[slot] == nil then\n\treturn\nend\nif self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then\n\t_TimerService:ClearTimer(self.CardHoverTweenId)\n\tself.CardHoverTweenId = 0\nend\nfor i = 1, 10 do\n\tlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(i))\n\tif e ~= nil and e.UITransformComponent ~= nil then\n\t\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\n\t\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(i), 0)\n\tend\nend\nself.DragSlot = slot\nself.DragTargetIndex = 0\nself:RenderTargetFrames()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3962,7 +4006,7 @@ "Name": "touchPoint" } ], - "Code": "if self.DragSlot ~= slot then\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\tlocal ui = _UILogic:ScreenToUIPosition(touchPoint)\n\te.UITransformComponent.anchoredPosition = Vector2(ui.x, ui.y + 360)\nend\nlocal cardId = self.Hand[slot]\nlocal c = nil\nif cardId ~= nil then c = self.Cards[cardId] end\nif c ~= nil and c.kind == \"Attack\" then\n\tlocal best = self:FindMonsterAtTouch(touchPoint)\n\tif best ~= self.DragTargetIndex then\n\t\tself.DragTargetIndex = best\n\t\tself:RenderTargetFrames()\n\tend\nend", + "Code": "if self.DragSlot ~= slot then\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\tlocal ui = _UILogic:ScreenToUIPosition(touchPoint)\n\te.UITransformComponent.anchoredPosition = Vector2(ui.x, ui.y + 360)\nend\nlocal cardId = self.Hand[slot]\nlocal c = nil\nif cardId ~= nil then c = self.Cards[cardId] end\nif c ~= nil and c.kind == \"Attack\" then\n\tlocal best = self:FindMonsterAtTouch(touchPoint)\n\tif best ~= self.DragTargetIndex then\n\t\tself.DragTargetIndex = best\n\t\tself:RenderTargetFrames()\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -3992,7 +4036,7 @@ "Name": "touchPoint" } ], - "Code": "if self.DragSlot ~= slot then\n\treturn\nend\nself.DragSlot = 0\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(slot), 0)\n\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\nend\nself:ResolveCardDrop(slot, touchPoint)", + "Code": "if self.DragSlot ~= slot then\n\treturn\nend\nself.DragSlot = 0\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(slot), 0)\n\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\nend\nself:ResolveCardDrop(slot, touchPoint)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4278,7 +4322,7 @@ "Name": "slot" } ], - "Code": "local m = self.Monsters[slot]\nif m == nil then\n\treturn\nend\nm.alive = false\nif m.entity ~= nil and isvalid(m.entity) then\n\tlocal ent = m.entity\n\t_TimerService:SetTimerOnce(function() if isvalid(ent) then ent:SetVisible(false) end end, 0.4)\nend\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(slot), false)\nfor i = 1, #self.Monsters do\n\tif self.Monsters[i].alive == true then self.TargetIndex = i; break end\nend", + "Code": "local m = self.Monsters[slot]\nif m == nil then\n\treturn\nend\nm.alive = false\nif m.entity ~= nil and isvalid(m.entity) then\n\tlocal ent = m.entity\n\t_TimerService:SetTimerOnce(function() if isvalid(ent) then ent:SetVisible(false) end end, 0.4)\nend\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(slot), false)\nfor i = 1, #self.Monsters do\n\tif self.Monsters[i].alive == true then self.TargetIndex = i; break end\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4346,7 +4390,7 @@ "Name": "fromIndex" } ], - "Code": "local idx = 0\nfor i = fromIndex, #self.Monsters do\n\tif self.Monsters[i].alive == true then idx = i; break end\nend\nif idx == 0 or self.PlayerHp <= 0 then\n\tself:FinishEnemyTurn()\n\treturn\nend\nlocal m = self.Monsters[idx]\nlocal base = \"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(idx)\nself:SetEntityEnabled(base .. \"/ActFrame\", true)\n_TimerService:SetTimerOnce(function()\n\tlocal poisonTicks = 1\n\tlocal bonusTicks = self:AddPowerFieldTotal(\"extraPoisonTicks\")\n\tif bonusTicks ~= nil and bonusTicks > 0 then\n\t\tpoisonTicks = poisonTicks + bonusTicks\n\tend\n\tfor pt = 1, poisonTicks do\n\t\tif m.poison ~= nil and m.poison > 0 then\n\t\t\tm.hp = m.hp - m.poison\n\t\t\tself:ShowDmgPop(idx, m.poison)\n\t\t\tself:MonsterHitMotion(idx)\n\t\t\tm.poison = m.poison - 1\n\t\t\tif m.hp <= 0 then\n\t\t\t\tm.hp = 0\n\t\t\t\tself:KillMonster(m.slot)\n\t\t\t\tself:RenderCombat()\n\t\t\t\tself:SetEntityEnabled(base .. \"/ActFrame\", false)\n\t\t\t\t_TimerService:SetTimerOnce(function() self:EnemyActStep(idx + 1) end, 0.15)\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\tend\n\tm.block = 0\n\tlocal intent = m.intents[m.intentIdx]\n\tif intent ~= nil then\n\t\tif intent.kind == \"Attack\" then\n\t\t\tself:MonsterLunge(idx)\n\t\t\tlocal atk = intent.value + m.str\n\t\t\tif self.EnemyStrengthLossThisTurn ~= nil and self.EnemyStrengthLossThisTurn > 0 then\n\t\t\t\tatk = atk - self.EnemyStrengthLossThisTurn\n\t\t\t\tif atk < 0 then atk = 0 end\n\t\t\tend\n\t\t\tif m.weak > 0 then\n\t\t\t\tatk = math.floor(atk * 0.75)\n\t\t\tend\n\t\t\tif self.PlayerVuln > 0 then\n\t\t\t\tatk = math.floor(atk * 1.5)\n\t\t\tend\n\t\t\tlocal before = self.PlayerHp\n\t\t\tself:DealDamageToPlayer(atk, idx)\n\t\t\tself:ShowPlayerDmgPop(before - self.PlayerHp)\n\t\t\tself:PlayerHitMotion()\n\t\telseif intent.kind == \"Defend\" then\n\t\t\tm.block = m.block + intent.value\n\t\telseif intent.kind == \"Debuff\" then\n\t\t\tif intent.effect == \"weak\" then\n\t\t\t\tself.PlayerWeak = self.PlayerWeak + intent.value\n\t\t\telseif intent.effect == \"vuln\" then\n\t\t\t\tself.PlayerVuln = self.PlayerVuln + intent.value\n\t\t\tend\n\t\telseif intent.kind == \"AddCard\" then\n\t\t\tlocal cnt = intent.count or 1\n\t\t\tfor ci = 1, cnt do\n\t\t\t\ttable.insert(self.DiscardPile, intent.card)\n\t\t\tend\n\t\t\tself:RenderPiles()\n\t\t\tlocal cn = intent.card\n\t\t\tlocal cc = self.Cards[intent.card]\n\t\t\tif cc ~= nil then cn = cc.name end\n\t\t\tself:Toast(m.name .. \": \" .. cn .. \" 추가!\")\n\t\tend\n\tend\n\tif #m.intents > 0 then\n\t\tm.intentIdx = math.random(1, #m.intents)\n\tend\n\tif m.weak > 0 then m.weak = m.weak - 1 end\n\tif m.vuln > 0 then m.vuln = m.vuln - 1 end\n\tself:RenderCombat()\n\tself:SetEntityEnabled(base .. \"/ActFrame\", false)\n\t_TimerService:SetTimerOnce(function() self:EnemyActStep(idx + 1) end, 0.15)\nend, 0.45)", + "Code": "local idx = 0\nfor i = fromIndex, #self.Monsters do\n\tif self.Monsters[i].alive == true then idx = i; break end\nend\nif idx == 0 or self.PlayerHp <= 0 then\n\tself:FinishEnemyTurn()\n\treturn\nend\nlocal m = self.Monsters[idx]\nlocal base = \"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(idx)\nself:SetEntityEnabled(base .. \"/ActFrame\", true)\n_TimerService:SetTimerOnce(function()\n\tlocal poisonTicks = 1\n\tlocal bonusTicks = self:AddPowerFieldTotal(\"extraPoisonTicks\")\n\tif bonusTicks ~= nil and bonusTicks > 0 then\n\t\tpoisonTicks = poisonTicks + bonusTicks\n\tend\n\tfor pt = 1, poisonTicks do\n\t\tif m.poison ~= nil and m.poison > 0 then\n\t\t\tm.hp = m.hp - m.poison\n\t\t\tself:ShowDmgPop(idx, m.poison)\n\t\t\tself:MonsterHitMotion(idx)\n\t\t\tm.poison = m.poison - 1\n\t\t\tif m.hp <= 0 then\n\t\t\t\tm.hp = 0\n\t\t\t\tself:KillMonster(m.slot)\n\t\t\t\tself:RenderCombat()\n\t\t\t\tself:SetEntityEnabled(base .. \"/ActFrame\", false)\n\t\t\t\t_TimerService:SetTimerOnce(function() self:EnemyActStep(idx + 1) end, 0.15)\n\t\t\t\treturn\n\t\t\tend\n\t\tend\n\tend\n\tm.block = 0\n\tlocal intent = m.intents[m.intentIdx]\n\tif intent ~= nil then\n\t\tif intent.kind == \"Attack\" then\n\t\t\tself:MonsterLunge(idx)\n\t\t\tlocal atk = intent.value + m.str\n\t\t\tif self.EnemyStrengthLossThisTurn ~= nil and self.EnemyStrengthLossThisTurn > 0 then\n\t\t\t\tatk = atk - self.EnemyStrengthLossThisTurn\n\t\t\t\tif atk < 0 then atk = 0 end\n\t\t\tend\n\t\t\tif m.weak > 0 then\n\t\t\t\tatk = math.floor(atk * 0.75)\n\t\t\tend\n\t\t\tif self.PlayerVuln > 0 then\n\t\t\t\tatk = math.floor(atk * 1.5)\n\t\t\tend\n\t\t\tlocal before = self.PlayerHp\n\t\t\tself:DealDamageToPlayer(atk, idx)\n\t\t\tself:ShowPlayerDmgPop(before - self.PlayerHp)\n\t\t\tself:PlayerHitMotion()\n\t\telseif intent.kind == \"Defend\" then\n\t\t\tm.block = m.block + intent.value\n\t\telseif intent.kind == \"Debuff\" then\n\t\t\tif intent.effect == \"weak\" then\n\t\t\t\tself.PlayerWeak = self.PlayerWeak + intent.value\n\t\t\telseif intent.effect == \"vuln\" then\n\t\t\t\tself.PlayerVuln = self.PlayerVuln + intent.value\n\t\t\tend\n\t\telseif intent.kind == \"AddCard\" then\n\t\t\tlocal cnt = intent.count or 1\n\t\t\tfor ci = 1, cnt do\n\t\t\t\ttable.insert(self.DiscardPile, intent.card)\n\t\t\tend\n\t\t\tself:RenderPiles()\n\t\t\tlocal cn = intent.card\n\t\t\tlocal cc = self.Cards[intent.card]\n\t\t\tif cc ~= nil then cn = cc.name end\n\t\t\tself:Toast(m.name .. \": \" .. cn .. \" 추가!\")\n\t\tend\n\tend\n\tif #m.intents > 0 then\n\t\tm.intentIdx = math.random(1, #m.intents)\n\tend\n\tif m.weak > 0 then m.weak = m.weak - 1 end\n\tif m.vuln > 0 then m.vuln = m.vuln - 1 end\n\tself:RenderCombat()\n\tself:SetEntityEnabled(base .. \"/ActFrame\", false)\n\t_TimerService:SetTimerOnce(function() self:EnemyActStep(idx + 1) end, 0.15)\nend, 0.45)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4550,7 +4594,7 @@ "Name": null }, "Arguments": [], - "Code": "local current = self:CurrentClassId()\nlocal opts = nil\nif self.Jobs ~= nil then\n\topts = self.Jobs[current]\nend\nif opts == nil then\n\topts = {}\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 = nil\n\t\tif o.starter ~= nil and o.starter ~= \"\" then\n\t\t\tsc = self.Cards[o.starter]\n\t\tend\n\t\tif sc ~= nil then\n\t\t\tself:SetText(base .. \"/Starter\", \"대표 카드: \" .. sc.name)\n\t\telse\n\t\t\tself:SetText(base .. \"/Starter\", \"대표 카드: 계보 유지\")\n\t\tend\n\telse\n\t\tself:SetEntityEnabled(base, false)\n\tend\nend\nself:SetEntityEnabled(\"/ui/SelectUIGroup/JobSelectHud\", true)", + "Code": "local current = self:CurrentClassId()\nlocal opts = nil\nif self.Jobs ~= nil then\n\topts = self.Jobs[current]\nend\nif opts == nil then\n\topts = {}\nend\nself.JobOpts = opts\nfor i = 1, 3 do\n\tlocal base = \"/ui/SelectUIGroup/JobSelectHud/Job_slot\" .. self:IntStr(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 = nil\n\t\tif o.starter ~= nil and o.starter ~= \"\" then\n\t\t\tsc = self.Cards[o.starter]\n\t\tend\n\t\tif sc ~= nil then\n\t\t\tself:SetText(base .. \"/Starter\", \"대표 카드: \" .. sc.name)\n\t\telse\n\t\t\tself:SetText(base .. \"/Starter\", \"대표 카드: 계보 유지\")\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": [], @@ -4693,7 +4737,7 @@ "Name": null }, "Arguments": [], - "Code": "for i = 1, 4 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(i)\n\tlocal m = self.Monsters[i]\n\tif m ~= nil and m.alive == true then\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", m.name)\n\t\tself:SetText(base .. \"/Hp\", string.format(\"%d\", m.hp) .. \"/\" .. string.format(\"%d\", m.maxHp))\n\t\tlocal intent = m.intents[m.intentIdx]\n\t\tlocal t = \"\"\n\t\tif intent ~= nil then\n\t\t\tif intent.kind == \"Attack\" then\n\t\t\t\tlocal atk = intent.value + m.str\n\t\t\t\tif m.weak > 0 then atk = math.floor(atk * 0.75) end\n\t\t\t\tif self.PlayerVuln > 0 then atk = math.floor(atk * 1.5) end\n\t\t\t\tt = \"공격 \" .. tostring(atk)\n\t\t\telseif intent.kind == \"Defend\" then t = \"방어 \" .. tostring(intent.value)\n\t\t\telseif intent.kind == \"Debuff\" then\n\t\t\t\tif intent.effect == \"weak\" then t = \"약화 \" .. tostring(intent.value) .. \" 부여\"\n\t\t\t\telse t = \"취약 \" .. tostring(intent.value) .. \" 부여\" end\n\t\t\telseif intent.kind == \"AddCard\" then\n\t\t\t\tt = \"저주 카드 추가\"\n\t\t\tend\n\t\tend\n\t\tself:SetText(base .. \"/Intent\", t)\n\t\tlocal dragActive = self.DragTargetIndex ~= nil and self.DragTargetIndex > 0\n\t\tlocal shownTarget = self.TargetIndex\n\t\tif dragActive == true then shownTarget = self.DragTargetIndex end\n\t\tself:SetEntityEnabled(base .. \"/TargetMarker\", i == shownTarget and dragActive)\n\t\tself:SetEntityEnabled(base .. \"/TargetMarker/Label\", i == shownTarget and dragActive)\n\t\tlocal intentEntity = _EntityService:GetEntityByPath(base .. \"/Intent\")\n\t\tif intentEntity ~= nil and intentEntity.TextComponent ~= nil and intent ~= nil then\n\t\t\tif intent.kind == \"Attack\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(1, 0.45, 0.35, 1)\n\t\t\telseif intent.kind == \"Debuff\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.8, 0.5, 1, 1)\n\t\t\telseif intent.kind == \"AddCard\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.6, 0.85, 0.4, 1)\n\t\t\telse\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.5, 0.75, 1, 1)\n\t\t\tend\n\t\tend\n\t\tself:SetHpBar(base .. \"/HpBarFill\", m.hp, m.maxHp, 140)\n\t\tself:SetEntityEnabled(base .. \"/BlockBadge\", m.block > 0)\n\t\tself:SetText(base .. \"/BlockBadge/Value\", string.format(\"%d\", m.block))\n\t\tself:SetText(base .. \"/Buffs\", self:BuffsLabel(m.str, m.weak, m.vuln, m.poison or 0))\n\telse\n\t\tself:SetEntityEnabled(base, false)\n\tend\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/HpText\", string.format(\"%d\", self.PlayerHp) .. \"/\" .. string.format(\"%d\", self.PlayerMaxHp))\nself:SetHpBar(\"/ui/RunUIGroup/CombatHud/PlayerPanel/HpBarFill\", self.PlayerHp, self.PlayerMaxHp, 220)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PlayerPanel/BlockBadge\", self.PlayerBlock > 0)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/BlockBadge/Value\", string.format(\"%d\", self.PlayerBlock))\nlocal pb = self:BuffsLabel(self.PlayerStr, self.PlayerWeak, self.PlayerVuln, 0)\nif self.PlayerIntangible ~= nil and self.PlayerIntangible > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"불가침\" .. tostring(self.PlayerIntangible)\nend\nif self.PlayerDex ~= nil and self.PlayerDex > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"민첩+\" .. tostring(self.PlayerDex)\nend\nif self.PlayerThorns ~= nil and self.PlayerThorns > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"가시\" .. tostring(self.PlayerThorns)\nend\nif self.ComboCount ~= nil and self.ComboCount > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"콤보 \" .. tostring(self.ComboCount) .. \"/\" .. tostring(self:GetComboMax())\nend\nif self.HolyChargeCount ~= nil and self.HolyChargeCount > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"홀리 차지 \" .. tostring(self.HolyChargeCount) .. \"/\" .. tostring(self:GetHolyChargeMax())\nend\nif self.PlayerPowers ~= nil and #self.PlayerPowers > 0 then\n\tlocal names = {}\n\tfor i = 1, #self.PlayerPowers do\n\t\tlocal pc = self.Cards[self.PlayerPowers[i]]\n\t\tif pc ~= nil then table.insert(names, pc.name) end\n\tend\n\tif pb ~= \"\" then pb = pb .. \" · \" end\n\tpb = pb .. table.concat(names, \" \")\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Buffs\", pb)\nself:RenderRun()", + "Code": "for i = 1, 4 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(i)\n\tlocal m = self.Monsters[i]\n\tif m ~= nil and m.alive == true then\n\t\tself:SetEntityEnabled(base, true)\n\t\tself:SetText(base .. \"/Name\", m.name)\n\t\tself:SetText(base .. \"/Hp\", string.format(\"%d\", m.hp) .. \"/\" .. string.format(\"%d\", m.maxHp))\n\t\tlocal intent = m.intents[m.intentIdx]\n\t\tlocal t = \"\"\n\t\tif intent ~= nil then\n\t\t\tif intent.kind == \"Attack\" then\n\t\t\t\tlocal atk = intent.value + m.str\n\t\t\t\tif m.weak > 0 then atk = math.floor(atk * 0.75) end\n\t\t\t\tif self.PlayerVuln > 0 then atk = math.floor(atk * 1.5) end\n\t\t\t\tt = \"공격 \" .. tostring(atk)\n\t\t\telseif intent.kind == \"Defend\" then t = \"방어 \" .. tostring(intent.value)\n\t\t\telseif intent.kind == \"Debuff\" then\n\t\t\t\tif intent.effect == \"weak\" then t = \"약화 \" .. tostring(intent.value) .. \" 부여\"\n\t\t\t\telse t = \"취약 \" .. tostring(intent.value) .. \" 부여\" end\n\t\t\telseif intent.kind == \"AddCard\" then\n\t\t\t\tt = \"저주 카드 추가\"\n\t\t\tend\n\t\tend\n\t\tself:SetText(base .. \"/Intent\", t)\n\t\tlocal dragActive = self.DragTargetIndex ~= nil and self.DragTargetIndex > 0\n\t\tlocal shownTarget = self.TargetIndex\n\t\tif dragActive == true then shownTarget = self.DragTargetIndex end\n\t\tself:SetEntityEnabled(base .. \"/TargetMarker\", i == shownTarget and dragActive)\n\t\tself:SetEntityEnabled(base .. \"/TargetMarker/Label\", i == shownTarget and dragActive)\n\t\tlocal intentEntity = _EntityService:GetEntityByPath(base .. \"/Intent\")\n\t\tif intentEntity ~= nil and intentEntity.TextComponent ~= nil and intent ~= nil then\n\t\t\tif intent.kind == \"Attack\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(1, 0.45, 0.35, 1)\n\t\t\telseif intent.kind == \"Debuff\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.8, 0.5, 1, 1)\n\t\t\telseif intent.kind == \"AddCard\" then\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.6, 0.85, 0.4, 1)\n\t\t\telse\n\t\t\t\tintentEntity.TextComponent.FontColor = Color(0.5, 0.75, 1, 1)\n\t\t\tend\n\t\tend\n\t\tself:SetHpBar(base .. \"/HpBarFill\", m.hp, m.maxHp, 140)\n\t\tself:SetEntityEnabled(base .. \"/BlockBadge\", m.block > 0)\n\t\tself:SetText(base .. \"/BlockBadge/Value\", string.format(\"%d\", m.block))\n\t\tself:SetText(base .. \"/Buffs\", self:BuffsLabel(m.str, m.weak, m.vuln, m.poison or 0))\n\telse\n\t\tself:SetEntityEnabled(base, false)\n\tend\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/HpText\", string.format(\"%d\", self.PlayerHp) .. \"/\" .. string.format(\"%d\", self.PlayerMaxHp))\nself:SetHpBar(\"/ui/RunUIGroup/CombatHud/PlayerPanel/HpBarFill\", self.PlayerHp, self.PlayerMaxHp, 220)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PlayerPanel/BlockBadge\", self.PlayerBlock > 0)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/BlockBadge/Value\", string.format(\"%d\", self.PlayerBlock))\nlocal pb = self:BuffsLabel(self.PlayerStr, self.PlayerWeak, self.PlayerVuln, 0)\nif self.PlayerIntangible ~= nil and self.PlayerIntangible > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"불가침\" .. tostring(self.PlayerIntangible)\nend\nif self.PlayerDex ~= nil and self.PlayerDex > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"민첩+\" .. tostring(self.PlayerDex)\nend\nif self.PlayerThorns ~= nil and self.PlayerThorns > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"가시\" .. tostring(self.PlayerThorns)\nend\nif self.ComboCount ~= nil and self.ComboCount > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"콤보 \" .. tostring(self.ComboCount) .. \"/\" .. tostring(self:GetComboMax())\nend\nif self.HolyChargeCount ~= nil and self.HolyChargeCount > 0 then\n\tif pb ~= \"\" then pb = pb .. \" \" end\n\tpb = pb .. \"홀리 차지 \" .. tostring(self.HolyChargeCount) .. \"/\" .. tostring(self:GetHolyChargeMax())\nend\nif self.PlayerPowers ~= nil and #self.PlayerPowers > 0 then\n\tlocal names = {}\n\tfor i = 1, #self.PlayerPowers do\n\t\tlocal pc = self.Cards[self.PlayerPowers[i]]\n\t\tif pc ~= nil then table.insert(names, pc.name) end\n\tend\n\tif pb ~= \"\" then pb = pb .. \" · \" end\n\tpb = pb .. table.concat(names, \" \")\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Buffs\", pb)\nself:RenderRun()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4723,7 +4767,7 @@ "Name": "amount" } ], - "Code": "local slotKey = string.format(\"%d\", math.floor(slot or 0))\nif self.DmgPopSlotQueue == nil then\n\tself.DmgPopSlotQueue = {}\nend\nlocal popIndex = (self.DmgPopSlotQueue[slotKey] or 0) + 1\nif popIndex > 5 then\n\tpopIndex = 1\nend\nself.DmgPopSlotQueue[slotKey] = popIndex\nlocal base = \"/ui/RunUIGroup/CombatHud/DmgPop\" .. slotKey .. \"_\" .. tostring(popIndex)\nlocal pop = _EntityService:GetEntityByPath(base)\nif pop == nil then\n\treturn\nend\nlocal function showNow()\n self:SetEntityEnabled(base, false)\n self:SetText(base, \"\")\n local damageDigitRuids = { \"b94c19830538447f81617035d89bcc05\", \"01b023122a6f4a5789e1d4c61ff8f430\", \"57ff71d1b9eb471b9feb1c15348770c9\", \"cab92837798a42ad9143c67e93f999e1\", \"366f271f9ca94a0684083aad9298efad\", \"5c7a6ad38491466aa84bf450e0fdcf25\", \"7d82a6838e1b4f4a8a0f7420db34c985\", \"c0765bb1e47d46ffbe1df4ac19ea9b1b\", \"6ea0bfed61e149f88a9b3f22dd79774f\", \"82ad2acaae4e4b3fb87bf73635250d22\" }\n local shown = tostring(math.max(0, math.floor(amount)))\n if string.len(shown) > 5 then\n shown = string.sub(shown, 1, 5)\n end\n local digits = {}\n local digitPathsToEnable = {}\n for i = 1, string.len(shown) do\n table.insert(digits, tonumber(string.sub(shown, i, i)) or 0)\n end\n local totalW = #digits * 22 + math.max(0, #digits - 1) * -4\n local startX = -totalW / 2 + 22 / 2\n for i = 1, 5 do\n self:SetEntityEnabled(base .. \"/Digit\" .. tostring(i), false)\n end\n for i = 1, 5 do\n local digitPath = base .. \"/Digit\" .. tostring(i)\n local digitEntity = _EntityService:GetEntityByPath(digitPath)\n if digitEntity ~= nil and digitEntity.SpriteGUIRendererComponent ~= nil then\n if digits[i] ~= nil then\n digitEntity.SpriteGUIRendererComponent.ImageRUID = damageDigitRuids[digits[i] + 1]\n digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n if digitEntity.UITransformComponent ~= nil then\n digitEntity.UITransformComponent.anchoredPosition = Vector2(startX + (i - 1) * (22 + -4), 0)\n end\n table.insert(digitPathsToEnable, digitPath)\n else\n self:SetEntityEnabled(digitPath, false)\n end\n end\n end\n local popPos = nil\n local m = self.Monsters[slot]\n if m ~= nil and m.entity ~= nil and isvalid(m.entity) and m.entity.TransformComponent ~= nil then\n local wp = m.entity.TransformComponent.WorldPosition\n local screen = _UILogic:WorldToScreenPosition(Vector2(wp.x, wp.y + 1.8499999999999999))\n popPos = _UILogic:ScreenToUIPosition(screen)\n else\n local slotEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. slotKey)\n if slotEntity ~= nil and slotEntity.UITransformComponent ~= nil then\n local sp = slotEntity.UITransformComponent.anchoredPosition\n popPos = Vector2(sp.x, sp.y + 76)\n end\n end\n if pop.UITransformComponent ~= nil then\n if popPos ~= nil then\n pop.UITransformComponent.anchoredPosition = popPos\n else\n pop.UITransformComponent.anchoredPosition = Vector2(0, 120)\n end\n end\n self:SetEntityEnabled(base, true)\n for i = 1, #digitPathsToEnable do\n self:SetEntityEnabled(digitPathsToEnable[i], true)\n end\n for i = 1, 6 do\n _TimerService:SetTimerOnce(function()\n local p = _EntityService:GetEntityByPath(base)\n if p ~= nil and p.UITransformComponent ~= nil then\n local cur = p.UITransformComponent.anchoredPosition\n p.UITransformComponent.anchoredPosition = Vector2(cur.x, cur.y + 7)\n end\n local alpha = 1 - (i / 6)\n if alpha < 0 then alpha = 0 end\n for di = 1, 5 do\n local digitEntity = _EntityService:GetEntityByPath(base .. \"/Digit\" .. tostring(di))\n if digitEntity ~= nil and digitEntity.Enable == true and digitEntity.SpriteGUIRendererComponent ~= nil then\n digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, alpha)\n end\n end\n end, 0.05 * i)\n end\n _TimerService:SetTimerOnce(function()\n self:SetEntityEnabled(base, false)\n end, 0.3)\nend\nshowNow()", + "Code": "local slotKey = string.format(\"%d\", math.floor(slot or 0))\nif self.DmgPopSlotQueue == nil then\n\tself.DmgPopSlotQueue = {}\nend\nlocal popIndex = (self.DmgPopSlotQueue[slotKey] or 0) + 1\nif popIndex > 5 then\n\tpopIndex = 1\nend\nself.DmgPopSlotQueue[slotKey] = popIndex\nlocal base = \"/ui/RunUIGroup/CombatHud/DmgPop\" .. slotKey .. \"_\" .. self:IntStr(popIndex)\nlocal pop = _EntityService:GetEntityByPath(base)\nif pop == nil then\n\treturn\nend\nlocal function showNow()\n self:SetEntityEnabled(base, false)\n self:SetText(base, \"\")\n local damageDigitRuids = { \"b94c19830538447f81617035d89bcc05\", \"01b023122a6f4a5789e1d4c61ff8f430\", \"57ff71d1b9eb471b9feb1c15348770c9\", \"cab92837798a42ad9143c67e93f999e1\", \"366f271f9ca94a0684083aad9298efad\", \"5c7a6ad38491466aa84bf450e0fdcf25\", \"7d82a6838e1b4f4a8a0f7420db34c985\", \"c0765bb1e47d46ffbe1df4ac19ea9b1b\", \"6ea0bfed61e149f88a9b3f22dd79774f\", \"82ad2acaae4e4b3fb87bf73635250d22\" }\n local shown = tostring(math.max(0, math.floor(amount)))\n if string.len(shown) > 5 then\n shown = string.sub(shown, 1, 5)\n end\n local digits = {}\n local digitPathsToEnable = {}\n for i = 1, string.len(shown) do\n table.insert(digits, tonumber(string.sub(shown, i, i)) or 0)\n end\n local totalW = #digits * 22 + math.max(0, #digits - 1) * -4\n local startX = -totalW / 2 + 22 / 2\n for i = 1, 5 do\n self:SetEntityEnabled(base .. \"/Digit\" .. self:IntStr(i), false)\n end\n for i = 1, 5 do\n local digitPath = base .. \"/Digit\" .. self:IntStr(i)\n local digitEntity = _EntityService:GetEntityByPath(digitPath)\n if digitEntity ~= nil and digitEntity.SpriteGUIRendererComponent ~= nil then\n if digits[i] ~= nil then\n digitEntity.SpriteGUIRendererComponent.ImageRUID = damageDigitRuids[digits[i] + 1]\n digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n if digitEntity.UITransformComponent ~= nil then\n digitEntity.UITransformComponent.anchoredPosition = Vector2(startX + (i - 1) * (22 + -4), 0)\n end\n table.insert(digitPathsToEnable, digitPath)\n else\n self:SetEntityEnabled(digitPath, false)\n end\n end\n end\n local popPos = nil\n local m = self.Monsters[slot]\n if m ~= nil and m.entity ~= nil and isvalid(m.entity) and m.entity.TransformComponent ~= nil then\n local wp = m.entity.TransformComponent.WorldPosition\n local screen = _UILogic:WorldToScreenPosition(Vector2(wp.x, wp.y + 1.8499999999999999))\n popPos = _UILogic:ScreenToUIPosition(screen)\n else\n local slotEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. slotKey)\n if slotEntity ~= nil and slotEntity.UITransformComponent ~= nil then\n local sp = slotEntity.UITransformComponent.anchoredPosition\n popPos = Vector2(sp.x, sp.y + 76)\n end\n end\n if pop.UITransformComponent ~= nil then\n if popPos ~= nil then\n pop.UITransformComponent.anchoredPosition = popPos\n else\n pop.UITransformComponent.anchoredPosition = Vector2(0, 120)\n end\n end\n self:SetEntityEnabled(base, true)\n for i = 1, #digitPathsToEnable do\n self:SetEntityEnabled(digitPathsToEnable[i], true)\n end\n for i = 1, 6 do\n _TimerService:SetTimerOnce(function()\n local p = _EntityService:GetEntityByPath(base)\n if p ~= nil and p.UITransformComponent ~= nil then\n local cur = p.UITransformComponent.anchoredPosition\n p.UITransformComponent.anchoredPosition = Vector2(cur.x, cur.y + 7)\n end\n local alpha = 1 - (i / 6)\n if alpha < 0 then alpha = 0 end\n for di = 1, 5 do\n local digitEntity = _EntityService:GetEntityByPath(base .. \"/Digit\" .. self:IntStr(di))\n if digitEntity ~= nil and digitEntity.Enable == true and digitEntity.SpriteGUIRendererComponent ~= nil then\n digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, alpha)\n end\n end\n end, 0.05 * i)\n end\n _TimerService:SetTimerOnce(function()\n self:SetEntityEnabled(base, false)\n end, 0.3)\nend\nshowNow()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4746,7 +4790,7 @@ "Name": "amount" } ], - "Code": "local base = \"/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop\"\nif amount > 0 then\n\tself:SetText(base, \"-\" .. string.format(\"%d\", amount))\nelse\n\tself:SetText(base, \"막음\")\nend\nself:SetEntityEnabled(base, true)\n_TimerService:SetTimerOnce(function() self:SetEntityEnabled(base, false) end, 0.6)", + "Code": "local shownAmount = math.max(0, math.floor(amount or 0))\nif shownAmount <= 0 then\n\treturn\nend\nlocal function setEnabled(entity, enabled)\n\tif entity == nil then\n\t\treturn\n\tend\n\tentity.Enable = enabled\n\tif entity.SpriteGUIRendererComponent ~= nil then\n\t\tentity.SpriteGUIRendererComponent.Enable = enabled\n\tend\n\tif entity.TextComponent ~= nil then\n\t\tentity.TextComponent.Enable = enabled\n\tend\nend\nself.PlayerDmgPopIndex = (self.PlayerDmgPopIndex or 0) + 1\nif self.PlayerDmgPopIndex > 4 then\n\tself.PlayerDmgPopIndex = 1\nend\nlocal base = \"/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_\" .. self:IntStr(self.PlayerDmgPopIndex)\nlocal pop = _EntityService:GetEntityByPath(base)\nif pop == nil then\n\treturn\nend\nsetEnabled(pop, false)\nlocal damageDigitRuids = { \"b94c19830538447f81617035d89bcc05\", \"01b023122a6f4a5789e1d4c61ff8f430\", \"57ff71d1b9eb471b9feb1c15348770c9\", \"cab92837798a42ad9143c67e93f999e1\", \"366f271f9ca94a0684083aad9298efad\", \"5c7a6ad38491466aa84bf450e0fdcf25\", \"7d82a6838e1b4f4a8a0f7420db34c985\", \"c0765bb1e47d46ffbe1df4ac19ea9b1b\", \"6ea0bfed61e149f88a9b3f22dd79774f\", \"82ad2acaae4e4b3fb87bf73635250d22\" }\nlocal shown = tostring(shownAmount)\nif string.len(shown) > 5 then\n\tshown = string.sub(shown, 1, 5)\nend\nlocal digits = {}\nlocal digitEntitiesToEnable = {}\nfor i = 1, string.len(shown) do\n\ttable.insert(digits, tonumber(string.sub(shown, i, i)) or 0)\nend\nlocal totalW = #digits * 22 + math.max(0, #digits - 1) * -4\nlocal startX = -totalW / 2 + 22 / 2\nfor i = 1, 5 do\n\tlocal digitEntity = _EntityService:GetEntityByPath(base .. \"/Digit\" .. self:IntStr(i))\n\tsetEnabled(digitEntity, false)\nend\nfor i = 1, 5 do\n\tlocal digitPath = base .. \"/Digit\" .. self:IntStr(i)\n\tlocal digitEntity = _EntityService:GetEntityByPath(digitPath)\n\tif digitEntity ~= nil and digitEntity.SpriteGUIRendererComponent ~= nil then\n\t\tif digits[i] ~= nil then\n\t\t\tdigitEntity.SpriteGUIRendererComponent.ImageRUID = damageDigitRuids[digits[i] + 1]\n\t\t\tdigitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\t\tif digitEntity.UITransformComponent ~= nil then\n\t\t\t\tdigitEntity.UITransformComponent.anchoredPosition = Vector2(startX + (i - 1) * (22 + -4), 0)\n\t\t\tend\n\t\t\ttable.insert(digitEntitiesToEnable, digitEntity)\n\t\tend\n\tend\nend\nlocal startPos = Vector2(16, 34)\nif pop.UITransformComponent ~= nil then\n\tlocal cur = pop.UITransformComponent.anchoredPosition\n\tif math.abs(cur.x) < 240 and math.abs(cur.y) < 140 then\n\t\tstartPos = cur\n\tend\n\tpop.UITransformComponent.anchoredPosition = startPos\nend\nsetEnabled(pop, true)\nfor i = 1, #digitEntitiesToEnable do\n\tsetEnabled(digitEntitiesToEnable[i], true)\nend\nfor i = 1, 6 do\n\t_TimerService:SetTimerOnce(function()\n\t\tlocal p = _EntityService:GetEntityByPath(base)\n\t\tif p ~= nil and p.Enable == true and p.UITransformComponent ~= nil then\n\t\t\tlocal cur = p.UITransformComponent.anchoredPosition\n\t\t\tp.UITransformComponent.anchoredPosition = Vector2(cur.x, cur.y + 7)\n\t\tend\n\t\tlocal alpha = 1 - (i / 6)\n\t\tif alpha < 0 then alpha = 0 end\n\t\tfor di = 1, 5 do\n\t\t\tlocal digitEntity = _EntityService:GetEntityByPath(base .. \"/Digit\" .. self:IntStr(di))\n\t\t\tif digitEntity ~= nil and digitEntity.Enable == true and digitEntity.SpriteGUIRendererComponent ~= nil then\n\t\t\t\tdigitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, alpha)\n\t\t\tend\n\t\tend\n\tend, 0.05 * i)\nend\n_TimerService:SetTimerOnce(function()\n\tlocal p = _EntityService:GetEntityByPath(base)\n\tif p ~= nil and p.UITransformComponent ~= nil then\n\t\tp.UITransformComponent.anchoredPosition = startPos\n\tend\n\tsetEnabled(p, false)\nend, 0.3)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4881,7 +4925,7 @@ "Name": "width" } ], - "Code": "local e = _EntityService:GetEntityByPath(path)\nif e == nil or e.UITransformComponent == nil then\n\treturn\nend\nlocal ratio = 0\nif maxHp > 0 then ratio = hp / maxHp end\nif ratio < 0 then ratio = 0 end\nlocal w = width * ratio\ne.UITransformComponent.RectSize = Vector2(w, 14)", + "Code": "local e = _EntityService:GetEntityByPath(path)\nif e == nil or e.UITransformComponent == nil then\n\treturn\nend\nlocal ratio = 0\nif maxHp > 0 then ratio = hp / maxHp end\nif ratio < 0 then ratio = 0 end\nif ratio > 1 then ratio = 1 end\nif self.HpBarOrigins == nil then\n\tself.HpBarOrigins = {}\nend\nlocal t = e.UITransformComponent\nlocal origin = self.HpBarOrigins[path]\nif origin == nil then\n\tlocal pivotX = 0\n\tif t.Pivot ~= nil then\n\t\tpivotX = t.Pivot.x or 0\n\tend\n\torigin = {\n\t\tleft = t.anchoredPosition.x - (t.RectSize.x * pivotX),\n\t\ty = t.anchoredPosition.y,\n\t\theight = t.RectSize.y,\n\t\tpivotX = pivotX,\n\t}\n\tself.HpBarOrigins[path] = origin\nend\nlocal w = width * ratio\nt.RectSize = Vector2(w, origin.height or 14)\nt.anchoredPosition = Vector2(origin.left + (w * (origin.pivotX or 0)), origin.y or t.anchoredPosition.y)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -4942,7 +4986,7 @@ "Name": "slot" } ], - "Code": "local monster = self.Monsters[slot]\nif monster == nil or monster.entity == nil or not isvalid(monster.entity) then\n\treturn\nend\nlocal transform = monster.entity.TransformComponent\nif transform == nil then\n\treturn\nend\nlocal worldPos = transform.WorldPosition\nlocal screen = _UILogic:WorldToScreenPosition(Vector2(worldPos.x, worldPos.y + 1.4))\nlocal uipos = _UILogic:ScreenToUIPosition(screen)\nlocal slotEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. tostring(slot))\nif slotEntity ~= nil and slotEntity.UITransformComponent ~= nil then\n\tslotEntity.UITransformComponent.anchoredPosition = uipos\nend", + "Code": "local monster = self.Monsters[slot]\nif monster == nil or monster.entity == nil or not isvalid(monster.entity) then\n\treturn\nend\nlocal transform = monster.entity.TransformComponent\nif transform == nil then\n\treturn\nend\nlocal worldPos = transform.WorldPosition\nlocal screen = _UILogic:WorldToScreenPosition(Vector2(worldPos.x, worldPos.y + 1.4))\nlocal uipos = _UILogic:ScreenToUIPosition(screen)\nlocal slotEntity = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CombatHud/MonsterStatus\" .. self:IntStr(slot))\nif slotEntity ~= nil and slotEntity.UITransformComponent ~= nil then\n\tslotEntity.UITransformComponent.anchoredPosition = uipos\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5002,7 +5046,7 @@ "Name": "cardId" } ], - "Code": "self:ApplyCardFace(\"/ui/RunUIGroup/RewardHud/Reward\" .. tostring(slot), cardId)", + "Code": "self:ApplyCardFace(\"/ui/RunUIGroup/RewardHud/Reward\" .. self:IntStr(slot), cardId)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5162,7 +5206,7 @@ "Name": null }, "Arguments": [], - "Code": "for i = 1, 5 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/TopBar/PotionSlot\" .. tostring(i)\n\tlocal e = _EntityService:GetEntityByPath(base)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tlocal pid = nil\n\t\tif self.RunPotions ~= nil then\n\t\t\tpid = self.RunPotions[i]\n\t\tend\n\t\tif pid ~= nil and self.Potions[pid] ~= nil then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = self.Potions[pid].icon\n\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\telseif i > self.PotionSlots then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.1, 0.1, 0.12, 0.85)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.22, 0.25, 0.3, 0.9)\n\t\tend\n\tend\nend", + "Code": "for i = 1, 5 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/TopBar/PotionSlot\" .. self:IntStr(i)\n\tlocal e = _EntityService:GetEntityByPath(base)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tlocal pid = nil\n\t\tif self.RunPotions ~= nil then\n\t\t\tpid = self.RunPotions[i]\n\t\tend\n\t\tif pid ~= nil and self.Potions[pid] ~= nil then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = self.Potions[pid].icon\n\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\telseif i > self.PotionSlots then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.1, 0.1, 0.12, 0.85)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.22, 0.25, 0.3, 0.9)\n\t\tend\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5245,7 +5289,7 @@ "Name": null }, "Arguments": [], - "Code": "local count = 0\nif self.RunRelics ~= nil then\n\tcount = #self.RunRelics\nend\nfor i = 1, 10 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/TopBar/RelicSlot\" .. tostring(i)\n\tlocal e = _EntityService:GetEntityByPath(base)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tlocal rid = nil\n\t\tif self.RunRelics ~= nil then\n\t\t\trid = self.RunRelics[i]\n\t\tend\n\t\tif rid ~= nil and self.Relics[rid] ~= nil and (i < 10 or count <= 10) then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = self.Relics[rid].icon\n\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.15, 0.16, 0.2, 0.6)\n\t\tend\n\tend\nend\nlocal of = \"\"\nif count > 10 then\n\tof = \"+\" .. tostring(count - 9)\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/TopBar/RelicOverflow\", of)", + "Code": "local count = 0\nif self.RunRelics ~= nil then\n\tcount = #self.RunRelics\nend\nfor i = 1, 10 do\n\tlocal base = \"/ui/RunUIGroup/CombatHud/TopBar/RelicSlot\" .. self:IntStr(i)\n\tlocal e = _EntityService:GetEntityByPath(base)\n\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\tlocal rid = nil\n\t\tif self.RunRelics ~= nil then\n\t\t\trid = self.RunRelics[i]\n\t\tend\n\t\tif rid ~= nil and self.Relics[rid] ~= nil and (i < 10 or count <= 10) then\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = self.Relics[rid].icon\n\t\t\te.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)\n\t\telse\n\t\t\te.SpriteGUIRendererComponent.ImageRUID = \"\"\n\t\t\te.SpriteGUIRendererComponent.Color = Color(0.15, 0.16, 0.2, 0.6)\n\t\tend\n\tend\nend\nlocal of = \"\"\nif count > 10 then\n\tof = \"+\" .. tostring(count - 9)\nend\nself:SetText(\"/ui/RunUIGroup/CombatHud/TopBar/RelicOverflow\", of)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5344,7 +5388,7 @@ "Name": "touchPoint" } ], - "Code": "if gridPath == nil or gridPath == \"\" or touchPoint == nil then\n\treturn nil\nend\nlocal prefix = nil\nlocal maxSlots = 0\nif gridPath == \"/ui/DeckUIGroup/DeckAllHud/Grid\" then\n\tprefix = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\"\n\tmaxSlots = 120\nelseif gridPath == \"/ui/DeckUIGroup/DeckInspectHud/Grid\" then\n\tprefix = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\"\n\tmaxSlots = 60\nelse\n\treturn nil\nend\nlocal uiPos = _UILogic:ScreenToUIPosition(touchPoint)\nlocal bestPath = nil\nlocal bestDist = 999999\nfor i = 1, maxSlots do\n\tlocal path = prefix .. tostring(i)\n\tlocal cardEntity = _EntityService:GetEntityByPath(path)\n\tif cardEntity ~= nil and cardEntity.Enable == true and cardEntity.UITransformComponent ~= nil then\n\t\tlocal pos = self:GetUiPathPosition(path)\n\t\tlocal dx = uiPos.x - pos.x\n\t\tlocal dy = uiPos.y - pos.y\n\t\tif math.abs(dx) <= 90 and math.abs(dy) <= 125 then\n\t\t\tlocal dist = dx * dx + dy * dy\n\t\t\tif bestPath == nil or dist < bestDist then\n\t\t\t\tbestPath = path\n\t\t\t\tbestDist = dist\n\t\t\tend\n\t\tend\n\tend\nend\nreturn bestPath", + "Code": "if gridPath == nil or gridPath == \"\" or touchPoint == nil then\n\treturn nil\nend\nlocal prefix = nil\nlocal maxSlots = 0\nif gridPath == \"/ui/DeckUIGroup/DeckAllHud/Grid\" then\n\tprefix = \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\"\n\tmaxSlots = 120\nelseif gridPath == \"/ui/DeckUIGroup/DeckInspectHud/Grid\" then\n\tprefix = \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\"\n\tmaxSlots = 60\nelse\n\treturn nil\nend\nlocal uiPos = _UILogic:ScreenToUIPosition(touchPoint)\nlocal bestPath = nil\nlocal bestDist = 999999\nfor i = 1, maxSlots do\n\tlocal path = prefix .. self:IntStr(i)\n\tlocal cardEntity = _EntityService:GetEntityByPath(path)\n\tif cardEntity ~= nil and cardEntity.Enable == true and cardEntity.UITransformComponent ~= nil then\n\t\tlocal pos = self:GetUiPathPosition(path)\n\t\tlocal dx = uiPos.x - pos.x\n\t\tlocal dy = uiPos.y - pos.y\n\t\tif math.abs(dx) <= 90 and math.abs(dy) <= 125 then\n\t\t\tlocal dist = dx * dx + dy * dy\n\t\t\tif bestPath == nil or dist < bestDist then\n\t\t\t\tbestPath = path\n\t\t\t\tbestDist = dist\n\t\t\tend\n\t\tend\n\tend\nend\nreturn bestPath", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5413,7 +5457,7 @@ "Name": "path" } ], - "Code": "if path == nil or path == \"\" then\n\treturn\nend\nif self.DragSlot ~= nil and self.DragSlot > 0 and string.find(path, \"/ui/RunUIGroup/CardHand/Card\", 1, true) == 1 then\n\treturn\nend\nlocal cardId = self:GetHoveredCardId(path)\nif cardId == nil or self.Cards == nil then\n\tself:HideTooltip()\n\treturn\nend\nlocal c = self.Cards[cardId]\nif c == nil then\n\tself:HideTooltip()\n\treturn\nend\nlocal tip = self:BuildCardKeywordTooltip(c)\nif tip == nil or tip == \"\" then\n\tself:HideTooltip()\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(path)\nif e ~= nil and e.UITransformComponent ~= nil then\n\tif string.find(path, \"/ui/RunUIGroup/CardHand/Card\", 1, true) == 1 then\n\t\te.UITransformComponent.UIScale = Vector3(1.3, 1.3, 1)\n\tend\nend\nlocal anchor = self:GetTooltipAnchorForPath(path)\nself:ShowTooltipAt(\"키워드\", tip, anchor.x, anchor.y)", + "Code": "if path == nil or path == \"\" then\n\treturn\nend\nif self.DragSlot ~= nil and self.DragSlot > 0 and string.find(path, \"/ui/RunUIGroup/CardHand/Card\", 1, true) == 1 then\n\treturn\nend\nif self.GridScrollActive == true and (string.find(path, \"/ui/DeckUIGroup/DeckAllHud/Grid/Card\", 1, true) == 1 or string.find(path, \"/ui/DeckUIGroup/DeckInspectHud/Grid/Card\", 1, true) == 1) then\n\treturn\nend\nlocal cardId = self:GetHoveredCardId(path)\nif cardId == nil or self.Cards == nil then\n\tself:HideTooltip()\n\treturn\nend\nlocal c = self.Cards[cardId]\nif c == nil then\n\tself:HideTooltip()\n\treturn\nend\nlocal tip = self:BuildCardKeywordTooltip(c)\nif tip == nil or tip == \"\" then\n\tself:HideTooltip()\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(path)\nif e ~= nil and e.UITransformComponent ~= nil then\n\tif string.find(path, \"/ui/RunUIGroup/CardHand/Card\", 1, true) == 1 then\n\t\te.UITransformComponent.UIScale = Vector3(1.3, 1.3, 1)\n\tend\nend\nlocal anchor = self:GetTooltipAnchorForPath(path)\nself:ShowTooltipAt(\"키워드\", tip, anchor.x, anchor.y)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5512,7 +5556,7 @@ "Name": "slot" } ], - "Code": "if self.DragSlot ~= nil and self.DragSlot > 0 then\n\treturn\nend\nif self.Hand == nil then\n\treturn\nend\nlocal cardId = self.Hand[slot]\nif cardId == nil then\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.UIScale = Vector3(1.3, 1.3, 1)\nend\nlocal c = self.Cards[cardId]\nif c ~= nil then\n\tlocal tip = self:BuildCardKeywordTooltip(c)\n\tif tip ~= \"\" then\n\t\tlocal anchor = self:GetTooltipAnchorForPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\n\t\tself:ShowTooltipAt(\"키워드\", tip, anchor.x, anchor.y)\n\telse\n\t\tself:HideTooltip()\n\tend\nend", + "Code": "if self.DragSlot ~= nil and self.DragSlot > 0 then\n\treturn\nend\nif self.Hand == nil then\n\treturn\nend\nlocal cardId = self.Hand[slot]\nif cardId == nil then\n\treturn\nend\nlocal e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.UIScale = Vector3(1.3, 1.3, 1)\nend\nlocal c = self.Cards[cardId]\nif c ~= nil then\n\tlocal tip = self:BuildCardKeywordTooltip(c)\n\tif tip ~= \"\" then\n\t\tlocal anchor = self:GetTooltipAnchorForPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\n\t\tself:ShowTooltipAt(\"키워드\", tip, anchor.x, anchor.y)\n\telse\n\t\tself:HideTooltip()\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5535,7 +5579,7 @@ "Name": "slot" } ], - "Code": "local e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. tostring(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\nend\nself:HideTooltip()", + "Code": "local e = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/CardHand/Card\" .. self:IntStr(slot))\nif e ~= nil and e.UITransformComponent ~= nil then\n\te.UITransformComponent.UIScale = Vector3(1, 1, 1)\nend\nself:HideTooltip()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5744,7 +5788,7 @@ "Name": "toId" } ], - "Code": "local node = self.MapNodes[fromId]\nlocal has = false\nif node ~= nil then\n\tfor i = 1, #node.next do\n\t\tif node.next[i] == toId then has = true end\n\tend\nend\nfor k = 1, 3 do\n\tlocal d = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/MapHud/Dot_\" .. dotId .. \"_\" .. tostring(k))\n\tif d ~= nil then\n\t\td.Enable = has\n\t\tif has == true and d.SpriteGUIRendererComponent ~= nil then\n\t\t\tif fromId == self.CurrentNodeId then\n\t\t\t\td.SpriteGUIRendererComponent.Color = Color(0.95, 0.8, 0.3, 1)\n\t\t\telse\n\t\t\t\td.SpriteGUIRendererComponent.Color = Color(0.5, 0.5, 0.55, 0.8)\n\t\t\tend\n\t\tend\n\tend\nend", + "Code": "local node = self.MapNodes[fromId]\nlocal has = false\nif node ~= nil then\n\tfor i = 1, #node.next do\n\t\tif node.next[i] == toId then has = true end\n\tend\nend\nfor k = 1, 3 do\n\tlocal d = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/MapHud/Dot_\" .. dotId .. \"_\" .. self:IntStr(k))\n\tif d ~= nil then\n\t\td.Enable = has\n\t\tif has == true and d.SpriteGUIRendererComponent ~= nil then\n\t\t\tif fromId == self.CurrentNodeId then\n\t\t\t\td.SpriteGUIRendererComponent.Color = Color(0.95, 0.8, 0.3, 1)\n\t\t\telse\n\t\t\t\td.SpriteGUIRendererComponent.Color = Color(0.5, 0.5, 0.55, 0.8)\n\t\t\tend\n\t\tend\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -5812,7 +5856,7 @@ "Name": null }, "Arguments": [], - "Code": "self:SetText(\"/ui/RunUIGroup/ShopHud/Gold\", \"메소 \" .. string.format(\"%d\", self.Gold))\nfor i = 1, 3 do\n\tlocal cid = self.ShopChoices[i]\n\tlocal c = self.Cards[cid]\n\tlocal base = \"/ui/RunUIGroup/ShopHud/Card\" .. tostring(i)\n\tif c ~= nil then\n\t\tself:ApplyCardFace(base, cid)\n\t\tself:SetText(base .. \"/Price\", string.format(\"%d\", 30) .. \" 메소\")\n\t\tlocal e = _EntityService:GetEntityByPath(base)\n\t\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\t\tif self.ShopBought[i] == true then\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\t\tend\n\t\tend\n\tend\nend\nlocal rr = self.Relics[self.ShopRelic]\nif rr ~= nil then\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Relic/Label\", rr.name .. \" — \" .. rr.desc)\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Relic/Price\", string.format(\"%d\", 60) .. \" 메소\")\n\tlocal re = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Relic\")\n\tif re ~= nil and re.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ShopRelicBought == true then\n\t\t\tre.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\telse\n\t\t\tre.SpriteGUIRendererComponent.Color = Color(0.7, 0.55, 0.85, 1)\n\t\tend\n\tend\nend\nlocal pp = self.Potions[self.ShopPotion]\nif pp ~= nil then\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Potion/Label\", pp.name .. \" — \" .. pp.desc)\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Potion/Price\", string.format(\"%d\", 20) .. \" 메소\")\n\tlocal pe = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Potion\")\n\tif pe ~= nil and pe.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ShopPotionBought == true then\n\t\t\tpe.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\telse\n\t\t\tpe.SpriteGUIRendererComponent.Color = Color(0.45, 0.7, 0.55, 1)\n\t\tend\n\tend\nend", + "Code": "self:SetText(\"/ui/RunUIGroup/ShopHud/Gold\", \"메소 \" .. string.format(\"%d\", self.Gold))\nfor i = 1, 3 do\n\tlocal cid = self.ShopChoices[i]\n\tlocal c = self.Cards[cid]\n\tlocal base = \"/ui/RunUIGroup/ShopHud/Card\" .. self:IntStr(i)\n\tif c ~= nil then\n\t\tself:ApplyCardFace(base, cid)\n\t\tself:SetText(base .. \"/Price\", string.format(\"%d\", 30) .. \" 메소\")\n\t\tlocal e = _EntityService:GetEntityByPath(base)\n\t\tif e ~= nil and e.SpriteGUIRendererComponent ~= nil then\n\t\t\tif self.ShopBought[i] == true then\n\t\t\t\te.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\t\tend\n\t\tend\n\tend\nend\nlocal rr = self.Relics[self.ShopRelic]\nif rr ~= nil then\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Relic/Label\", rr.name .. \" — \" .. rr.desc)\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Relic/Price\", string.format(\"%d\", 60) .. \" 메소\")\n\tlocal re = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Relic\")\n\tif re ~= nil and re.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ShopRelicBought == true then\n\t\t\tre.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\telse\n\t\t\tre.SpriteGUIRendererComponent.Color = Color(0.7, 0.55, 0.85, 1)\n\t\tend\n\tend\nend\nlocal pp = self.Potions[self.ShopPotion]\nif pp ~= nil then\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Potion/Label\", pp.name .. \" — \" .. pp.desc)\n\tself:SetText(\"/ui/RunUIGroup/ShopHud/Potion/Price\", string.format(\"%d\", 20) .. \" 메소\")\n\tlocal pe = _EntityService:GetEntityByPath(\"/ui/RunUIGroup/ShopHud/Potion\")\n\tif pe ~= nil and pe.SpriteGUIRendererComponent ~= nil then\n\t\tif self.ShopPotionBought == true then\n\t\t\tpe.SpriteGUIRendererComponent.Color = Color(0.2, 0.22, 0.26, 0.6)\n\t\telse\n\t\t\tpe.SpriteGUIRendererComponent.Color = Color(0.45, 0.7, 0.55, 1)\n\t\tend\n\tend\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], diff --git a/docs/card-ui-standardization.md b/docs/card-ui-standardization.md new file mode 100644 index 0000000..e29e216 --- /dev/null +++ b/docs/card-ui-standardization.md @@ -0,0 +1,164 @@ +# Card UI Standardization + +## Goal + +Make every card-shaped UI use the same input structure so hover tooltip, +click, drag, and future interactions behave the same way everywhere. + +Target surfaces: + +- hand cards +- reward cards +- shop cards +- draw pile / discard pile / exhaust pile viewer cards +- all deck / class deck / codex cards + +## Standard Card Entity Shape + +Each visible card should have one root entity that owns input. + +```text +CardRoot +- UITransformComponent +- SpriteGUIRendererComponent +- ButtonComponent +- UITouchReceiveComponent +- Cost +- Name +- Desc +- Art +``` + +Rules: + +1. `CardRoot` covers the full card rect. +2. `CardRoot` owns both click and hover. +3. Child entities are display only. +4. Child entities must not become the primary input target. + +## Required Component Rules + +### Card root + +- `UITransformComponent` +- `SpriteGUIRendererComponent` +- `ButtonComponent` +- `UITouchReceiveComponent` + +Recommended sprite settings: + +- `RaycastTarget: true` +- card frame sprite on root + +### Card children + +- `Cost`, `Name`, `Desc`: text only +- `Art`: sprite only + +Recommended child sprite settings: + +- `RaycastTarget: false` + +That keeps hover/click ownership on the root card entity. + +## Path Rules + +Use the same path naming pattern everywhere: + +- hand: `/ui/.../CardHand/Card1` +- reward: `/ui/.../RewardHud/Reward1` +- shop: `/ui/.../ShopHud/Card1` +- inspect: `/ui/.../DeckInspectHud/Grid/Card1` +- all deck: `/ui/.../DeckAllHud/Grid/Card1` + +The important part is that each list has a stable root card path ending in a +numeric slot. That lets controller code resolve hover target -> slot -> card id +without special cases. + +## Controller Rules + +Once UI is standardized, controller logic should follow this shape: + +1. Resolve `path` +2. Resolve `slot` from `path` +3. Resolve `cardId` from current backing list +4. Show tooltip from `cardId` + +Preferred shared methods: + +- `GetHoveredCardId(path)` +- `HoverCardByPath(path)` +- `UnhoverCardByPath(path)` + +The hand should just become one caller of the same shared path-based hover +logic rather than having its own special tooltip flow. + +## Safe Rollout Order + +Do not standardize every card surface at once. + +### Step 1 + +Document current structures for: + +- `RewardHud/Reward1` +- `ShopHud/Card1` +- `DeckInspectHud/Grid/Card1` +- `DeckAllHud/Grid/Card1` + +### Step 2 + +Make `DeckInspectHud/Grid/CardN` match `RewardHud/RewardN` component structure. + +### Step 3 + +Verify game boot and UI load before changing controller hover bindings. + +### Step 4 + +Make `DeckAllHud/Grid/CardN` match the same structure. + +### Step 5 + +After both surfaces are stable, bind hover events in controller code. + +## Validation Checklist + +Before testing hover behavior: + +- game boots with no `LEA-3015 CannotLoad` +- `DefaultGroup.ui` loads cleanly +- card roots exist at expected paths +- root card sprite has `RaycastTarget: true` +- child art sprite has `RaycastTarget: false` +- root has both `ButtonComponent` and `UITouchReceiveComponent` + +After binding hover: + +- hand tooltip still works +- reward tooltip still works +- shop tooltip still works +- inspect tooltip works +- all deck tooltip works +- no duplicated tooltip flicker +- no drag regression on hand cards + +## What Not To Do + +- do not hand-edit `ui/DefaultGroup.ui` +- do not change multiple card surfaces in one shot +- do not mix root-input cards with child-input cards +- do not add hover logic before confirming the target card entity actually + receives input + +## Recommended Next Change + +The next implementation step should be: + +1. diff `DeckInspectHud/Grid/Card1` against `RewardHud/Reward1` +2. make only `DeckInspectHud` root card structure match +3. regenerate UI +4. boot test +5. then bind hover for inspect cards only + +That keeps the blast radius small. diff --git a/tools/deck/cb/charselect.mjs b/tools/deck/cb/charselect.mjs index b155cd0..6ace898 100644 --- a/tools/deck/cb/charselect.mjs +++ b/tools/deck/cb/charselect.mjs @@ -77,4 +77,7 @@ end`, [ { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'path' }, { Type: 'boolean', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'enabled' }, ], 2), + method('IntStr', `return string.format("%d", math.floor((n or 0) + 0.00001))`, [ + { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'n' }, + ], 0, 'string'), ]; diff --git a/tools/deck/cb/combat.mjs b/tools/deck/cb/combat.mjs index 4814ed3..0142688 100644 --- a/tools/deck/cb/combat.mjs +++ b/tools/deck/cb/combat.mjs @@ -172,8 +172,8 @@ for i = 1, #self.Monsters do local m = self.Monsters[i] local active = false if m ~= nil and m.alive == true and i == shownTarget then active = true end - self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(i) .. "/TargetMarker", active and dragActive) - self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(i) .. "/TargetMarker/Label", active and dragActive) + self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(i) .. "/TargetMarker", active and dragActive) + self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(i) .. "/TargetMarker/Label", active and dragActive) end`), method('OnCardDragBegin', `if self.CombatOver == true or self.FxBusy == true or self.TurnBusy == true then return @@ -186,7 +186,7 @@ if self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then self.CardHoverTweenId = 0 end for i = 1, 10 do - local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(i)) + local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(i)) if e ~= nil and e.UITransformComponent ~= nil then e.UITransformComponent.UIScale = Vector3(1, 1, 1) e.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(i), 0) @@ -198,7 +198,7 @@ self:RenderTargetFrames()`, [{ Type: 'number', DefaultValue: null, SyncDirection method('OnCardDrag', `if self.DragSlot ~= slot then return end -local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) if e ~= nil and e.UITransformComponent ~= nil then local ui = _UILogic:ScreenToUIPosition(touchPoint) e.UITransformComponent.anchoredPosition = Vector2(ui.x, ui.y + 360) @@ -220,7 +220,7 @@ end`, [ return end self.DragSlot = 0 -local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) if e ~= nil and e.UITransformComponent ~= nil then e.UITransformComponent.anchoredPosition = Vector2(self:GetHandSlotX(slot), 0) e.UITransformComponent.UIScale = Vector3(1, 1, 1) @@ -568,7 +568,7 @@ if m.entity ~= nil and isvalid(m.entity) then local ent = m.entity _TimerService:SetTimerOnce(function() if isvalid(ent) then ent:SetVisible(false) end end, 0.4) end -self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(slot), false) +self:SetEntityEnabled("/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(slot), false) for i = 1, #self.Monsters do if self.Monsters[i].alive == true then self.TargetIndex = i; break end end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), @@ -642,7 +642,7 @@ if idx == 0 or self.PlayerHp <= 0 then return end local m = self.Monsters[idx] -local base = "/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(idx) +local base = "/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(idx) self:SetEntityEnabled(base .. "/ActFrame", true) _TimerService:SetTimerOnce(function() local poisonTicks = 1 diff --git a/tools/deck/cb/deckturn.mjs b/tools/deck/cb/deckturn.mjs index a1f74e2..efbe12f 100644 --- a/tools/deck/cb/deckturn.mjs +++ b/tools/deck/cb/deckturn.mjs @@ -73,19 +73,20 @@ end self:BindClassDeckTabs() local allDeckGrid = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckAllHud/Grid") if allDeckGrid ~= nil and (allDeckGrid.UITouchReceiveComponent ~= nil or allDeckGrid:AddComponent("UITouchReceiveComponent") ~= nil) then - allDeckGrid:ConnectEvent(UITouchEnterEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid", ev.TouchPoint) end) - allDeckGrid:ConnectEvent(UITouchDownEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid", ev.TouchPoint) end) - allDeckGrid:ConnectEvent(UITouchDragEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid", ev.TouchPoint) end) - allDeckGrid:ConnectEvent(UITouchExitEvent, function() self:UnhoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid") end) + allDeckGrid:ConnectEvent(UITouchEnterEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid", ev.TouchPoint) end) + allDeckGrid:ConnectEvent(UITouchDownEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid", ev.TouchPoint) end) + allDeckGrid:ConnectEvent(UITouchDragEvent, function(ev) self.GridScrollActive = true; self:UnhoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid") end) + allDeckGrid:ConnectEvent(UITouchEndDragEvent, function() self.GridScrollActive = false end) + allDeckGrid:ConnectEvent(UITouchExitEvent, function() self.GridScrollActive = false; self:UnhoverGridCard("/ui/DeckUIGroup/DeckAllHud/Grid") end) end for i = 1, 120 do - local allCard = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. tostring(i)) + local allCard = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. self:IntStr(i)) if allCard ~= nil and (allCard.ButtonComponent ~= nil or allCard:AddComponent("ButtonComponent") ~= nil) then if allCard.SpriteGUIRendererComponent ~= nil then allCard.SpriteGUIRendererComponent.RaycastTarget = true end local slot = i - local cardPath = "/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. tostring(i) + local cardPath = "/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. self:IntStr(i) allCard:ConnectEvent(ButtonStateChangeEvent, function(ev) local state = nil if ev ~= nil then @@ -102,15 +103,16 @@ for i = 1, 120 do end local inspectGrid = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckInspectHud/Grid") if inspectGrid ~= nil and (inspectGrid.UITouchReceiveComponent ~= nil or inspectGrid:AddComponent("UITouchReceiveComponent") ~= nil) then - inspectGrid:ConnectEvent(UITouchEnterEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid", ev.TouchPoint) end) - inspectGrid:ConnectEvent(UITouchDownEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid", ev.TouchPoint) end) - inspectGrid:ConnectEvent(UITouchDragEvent, function(ev) self:HoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid", ev.TouchPoint) end) - inspectGrid:ConnectEvent(UITouchExitEvent, function() self:UnhoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid") end) + inspectGrid:ConnectEvent(UITouchEnterEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid", ev.TouchPoint) end) + inspectGrid:ConnectEvent(UITouchDownEvent, function(ev) self.GridScrollActive = false; self:HoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid", ev.TouchPoint) end) + inspectGrid:ConnectEvent(UITouchDragEvent, function(ev) self.GridScrollActive = true; self:UnhoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid") end) + inspectGrid:ConnectEvent(UITouchEndDragEvent, function() self.GridScrollActive = false end) + inspectGrid:ConnectEvent(UITouchExitEvent, function() self.GridScrollActive = false; self:UnhoverGridCard("/ui/DeckUIGroup/DeckInspectHud/Grid") end) end for i = 1, 60 do - local inspectCard = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. tostring(i)) + local inspectCard = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. self:IntStr(i)) if inspectCard ~= nil and (inspectCard.ButtonComponent ~= nil or inspectCard:AddComponent("ButtonComponent") ~= nil) then - local cardPath = "/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. tostring(i) + local cardPath = "/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. self:IntStr(i) inspectCard:ConnectEvent(ButtonStateChangeEvent, function(ev) local state = nil if ev ~= nil then @@ -125,9 +127,9 @@ for i = 1, 60 do end end for i = 1, 10 do - local cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(i)) + local cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(i)) if cardEntity ~= nil and cardEntity.UITouchReceiveComponent ~= nil then - local cardPath = "/ui/RunUIGroup/CardHand/Card" .. tostring(i) + local cardPath = "/ui/RunUIGroup/CardHand/Card" .. self:IntStr(i) cardEntity:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end) cardEntity:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end) cardEntity:ConnectEvent(UITouchBeginDragEvent, function(ev) self:OnCardDragBegin(i) end) @@ -141,11 +143,11 @@ for i = 1, 10 do end end for i = 1, 3 do - local rc = _EntityService:GetEntityByPath("/ui/RunUIGroup/RewardHud/Reward" .. tostring(i)) + local rc = _EntityService:GetEntityByPath("/ui/RunUIGroup/RewardHud/Reward" .. self:IntStr(i)) if rc ~= nil and (rc.ButtonComponent ~= nil or rc:AddComponent("ButtonComponent") ~= nil) then rc:ConnectEvent(ButtonClickEvent, function() self:PickReward(i) end) if rc.UITouchReceiveComponent ~= nil then - local cardPath = "/ui/RunUIGroup/RewardHud/Reward" .. tostring(i) + local cardPath = "/ui/RunUIGroup/RewardHud/Reward" .. self:IntStr(i) rc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end) rc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end) rc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end) @@ -172,11 +174,11 @@ for i = 1, #mapNodeIds do end end for i = 1, 3 do - local sc = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Card" .. tostring(i)) + local sc = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Card" .. self:IntStr(i)) if sc ~= nil and (sc.ButtonComponent ~= nil or sc:AddComponent("ButtonComponent") ~= nil) then sc:ConnectEvent(ButtonClickEvent, function() self:BuyCard(i) end) if sc.UITouchReceiveComponent ~= nil then - local cardPath = "/ui/RunUIGroup/ShopHud/Card" .. tostring(i) + local cardPath = "/ui/RunUIGroup/ShopHud/Card" .. self:IntStr(i) sc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end) sc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end) sc:ConnectEvent(UITouchEnterEvent, function() self:HoverCardByPath(cardPath) end) @@ -197,13 +199,13 @@ if restLeave ~= nil and (restLeave.ButtonComponent ~= nil or restLeave:AddCompon restLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end) end for i = 1, ${MAX_MONSTERS} do - local ms = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(i)) + local ms = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(i)) if ms ~= nil and (ms.ButtonComponent ~= nil or ms:AddComponent("ButtonComponent") ~= nil) then ms:ConnectEvent(ButtonClickEvent, function() self:SetTarget(i) end) end end for i = 1, 10 do - local rs = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/RelicSlot" .. tostring(i)) + local rs = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/RelicSlot" .. self:IntStr(i)) if rs ~= nil and rs.UITouchReceiveComponent ~= nil then local idx = i rs:ConnectEvent(UITouchEnterEvent, function() @@ -217,7 +219,7 @@ for i = 1, 10 do end end for i = 1, 5 do - local ps = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/PotionSlot" .. tostring(i)) + local ps = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/PotionSlot" .. self:IntStr(i)) if ps ~= nil and ps.UITouchReceiveComponent ~= nil then local idx = i ps:ConnectEvent(UITouchEnterEvent, function() @@ -265,7 +267,7 @@ if jcJob ~= nil and (jcJob.ButtonComponent ~= nil or jcJob:AddComponent("ButtonC end for i = 1, 3 do local slotIdx = i - local jb = _EntityService:GetEntityByPath("/ui/SelectUIGroup/JobSelectHud/Job_slot" .. tostring(i)) + local jb = _EntityService:GetEntityByPath("/ui/SelectUIGroup/JobSelectHud/Job_slot" .. self:IntStr(i)) if jb ~= nil and (jb.ButtonComponent ~= nil or jb:AddComponent("ButtonComponent") ~= nil) then jb:ConnectEvent(ButtonClickEvent, function() if self.JobOpts ~= nil and self.JobOpts[slotIdx] ~= nil then diff --git a/tools/deck/cb/deckview.mjs b/tools/deck/cb/deckview.mjs index edd3999..98a3176 100644 --- a/tools/deck/cb/deckview.mjs +++ b/tools/deck/cb/deckview.mjs @@ -44,7 +44,7 @@ end self:SetText("/ui/DeckUIGroup/DeckInspectHud/Title", title .. suffix) self:SetEntityEnabled("/ui/DeckUIGroup/DeckInspectHud/Empty", count <= 0) for i = 1, 60 do - local path = "/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. tostring(i) + local path = "/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. self:IntStr(i) local cardId = nil if pile ~= nil then cardId = pile[i] @@ -59,7 +59,7 @@ end`, [ { Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'pile' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'title' }, ]), - method('ApplyInspectCardVisual', `self:ApplyCardFace("/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. tostring(slot), cardId)`, [ + method('ApplyInspectCardVisual', `self:ApplyCardFace("/ui/DeckUIGroup/DeckInspectHud/Grid/Card" .. self:IntStr(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), @@ -223,7 +223,7 @@ self:SetText("/ui/DeckUIGroup/DeckAllHud/Title", title .. " (" .. tostring(count self:RenderClassDeckTabs() self:SetEntityEnabled("/ui/DeckUIGroup/DeckAllHud/Empty", count <= 0) for i = 1, 120 do - local path = "/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. tostring(i) + local path = "/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. self:IntStr(i) local cardId = pile[i] if cardId == nil then self:SetEntityEnabled(path, false) @@ -232,7 +232,7 @@ for i = 1, 120 do self:ApplyAllDeckCardVisual(i, cardId) end end`), - method('ApplyAllDeckCardVisual', `self:ApplyCardFace("/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. tostring(slot), cardId)`, [ + method('ApplyAllDeckCardVisual', `self:ApplyCardFace("/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. self:IntStr(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), diff --git a/tools/deck/cb/hand.mjs b/tools/deck/cb/hand.mjs index effe407..183a425 100644 --- a/tools/deck/cb/hand.mjs +++ b/tools/deck/cb/hand.mjs @@ -56,7 +56,7 @@ if n > 8 then spacing = math.floor(1400 / n) end local startX = -((n - 1) * spacing) / 2 local drawStart = Vector2(-590, 8) for i = 1, 10 do -\tlocal cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(i)) +\tlocal cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(i)) \tif cardEntity ~= nil then \t\tlocal cardId = self.Hand[i] \t\tif cardId == nil then @@ -151,7 +151,7 @@ if self.CardHoverTweenId ~= nil and self.CardHoverTweenId ~= 0 then end local items = {} for i = 1, count do - local e = _EntityService:GetEntityByPath(prefix .. tostring(i)) + local e = _EntityService:GetEntityByPath(prefix .. self:IntStr(i)) if e ~= nil and e.UITransformComponent ~= nil then local tr = e.UITransformComponent local tx = xs[i] @@ -195,7 +195,7 @@ self.CardHoverTweenId = eventId`, [ { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'path' }, { Type: 'boolean', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'hover' }, ]), - method('ApplyCardVisual', `self:ApplyCardFace("/ui/RunUIGroup/CardHand/Card" .. tostring(slot), cardId)`, [ + method('ApplyCardVisual', `self:ApplyCardFace("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), @@ -217,7 +217,7 @@ if math.abs(n - math.floor(n)) < 0.00001 then return string.format("%d", math.floor(n)) end return tostring(n)`, [{ Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'value' }], 0, 'string'), - method('AnimateCardFrom', `local cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) + method('AnimateCardFrom', `local cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) if cardEntity == nil or cardEntity.UITransformComponent == nil then \treturn end @@ -246,10 +246,10 @@ local target = Vector2(590, 8) local duration = 0.18 for i = 1, #cardIds do \tlocal slot = slots[i] or i -\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) \tif e ~= nil then \t\te.Enable = true -\t\tself:ApplyCardFace("/ui/RunUIGroup/CardHand/Card" .. tostring(slot), cardIds[i]) +\t\tself:ApplyCardFace("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot), cardIds[i]) \t\tif e.UITransformComponent ~= nil then \t\t\tlocal sx = 0 \t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end @@ -266,7 +266,7 @@ eventId = _TimerService:SetTimerRepeat(function() \tlocal eased = _TweenLogic:Ease(0, 1, 1, EaseType.SineEaseIn, t) \tfor i = 1, #cardIds do \t\tlocal slot = slots[i] or i -\t\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +\t\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) \t\tif e ~= nil and e.UITransformComponent ~= nil then \t\t\tlocal sx = 0 \t\t\tif startXs ~= nil and startXs[i] ~= nil then sx = startXs[i] else sx = self:GetHandSlotX(slot) end @@ -281,7 +281,7 @@ eventId = _TimerService:SetTimerRepeat(function() \t\t_TimerService:ClearTimer(eventId) \t\tfor i = 1, #cardIds do \t\t\tlocal slot = slots[i] or i -\t\t\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +\t\t\tlocal e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) \t\t\tif e ~= nil then \t\t\t\tif self.Hand ~= nil and self.Hand[slot] ~= nil then \t\t\t\t\te.Enable = true diff --git a/tools/deck/cb/items.mjs b/tools/deck/cb/items.mjs index 9717ff0..e7ead2c 100644 --- a/tools/deck/cb/items.mjs +++ b/tools/deck/cb/items.mjs @@ -95,7 +95,7 @@ if self:AddPotion(pid) == true then self:Toast("물약 획득: " .. p.name) end`), method('RenderPotions', `for i = 1, 5 do - local base = "/ui/RunUIGroup/CombatHud/TopBar/PotionSlot" .. tostring(i) + local base = "/ui/RunUIGroup/CombatHud/TopBar/PotionSlot" .. self:IntStr(i) local e = _EntityService:GetEntityByPath(base) if e ~= nil and e.SpriteGUIRendererComponent ~= nil then local pid = nil @@ -188,7 +188,7 @@ if self.RunRelics ~= nil then count = #self.RunRelics end for i = 1, 10 do - local base = "/ui/RunUIGroup/CombatHud/TopBar/RelicSlot" .. tostring(i) + local base = "/ui/RunUIGroup/CombatHud/TopBar/RelicSlot" .. self:IntStr(i) local e = _EntityService:GetEntityByPath(base) if e ~= nil and e.SpriteGUIRendererComponent ~= nil then local rid = nil diff --git a/tools/deck/cb/jobs.mjs b/tools/deck/cb/jobs.mjs index f571268..db6f090 100644 --- a/tools/deck/cb/jobs.mjs +++ b/tools/deck/cb/jobs.mjs @@ -71,7 +71,7 @@ if opts == nil then end self.JobOpts = opts for i = 1, 3 do - local base = "/ui/SelectUIGroup/JobSelectHud/Job_slot" .. tostring(i) + local base = "/ui/SelectUIGroup/JobSelectHud/Job_slot" .. self:IntStr(i) local o = opts[i] if o ~= nil then self:SetEntityEnabled(base, true) diff --git a/tools/deck/cb/layout.mjs b/tools/deck/cb/layout.mjs index dac0bbb..e0374e9 100644 --- a/tools/deck/cb/layout.mjs +++ b/tools/deck/cb/layout.mjs @@ -14,7 +14,7 @@ end local worldPos = transform.WorldPosition local screen = _UILogic:WorldToScreenPosition(Vector2(worldPos.x, worldPos.y + ${HEAD_OFFSET_Y})) local uipos = _UILogic:ScreenToUIPosition(screen) -local slotEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(slot)) +local slotEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(slot)) if slotEntity ~= nil and slotEntity.UITransformComponent ~= nil then slotEntity.UITransformComponent.anchoredPosition = uipos end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), diff --git a/tools/deck/cb/map.mjs b/tools/deck/cb/map.mjs index 504423a..6aeedb3 100644 --- a/tools/deck/cb/map.mjs +++ b/tools/deck/cb/map.mjs @@ -162,7 +162,7 @@ if node ~= nil then end end for k = 1, 3 do - local d = _EntityService:GetEntityByPath("/ui/RunUIGroup/MapHud/Dot_" .. dotId .. "_" .. tostring(k)) + local d = _EntityService:GetEntityByPath("/ui/RunUIGroup/MapHud/Dot_" .. dotId .. "_" .. self:IntStr(k)) if d ~= nil then d.Enable = has if has == true and d.SpriteGUIRendererComponent ~= nil then diff --git a/tools/deck/cb/render.mjs b/tools/deck/cb/render.mjs index cd8ed55..25fd540 100644 --- a/tools/deck/cb/render.mjs +++ b/tools/deck/cb/render.mjs @@ -15,7 +15,7 @@ return table.concat(parts, " ")`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'poison' }, ], 0, 'string'), method('RenderCombat', `for i = 1, ${MAX_MONSTERS} do - local base = "/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(i) + local base = "/ui/RunUIGroup/CombatHud/MonsterStatus" .. self:IntStr(i) local m = self.Monsters[i] if m ~= nil and m.alive == true then self:SetEntityEnabled(base, true) @@ -108,7 +108,7 @@ if popIndex > 5 then popIndex = 1 end self.DmgPopSlotQueue[slotKey] = popIndex -local base = "/ui/RunUIGroup/CombatHud/DmgPop" .. slotKey .. "_" .. tostring(popIndex) +local base = "/ui/RunUIGroup/CombatHud/DmgPop" .. slotKey .. "_" .. self:IntStr(popIndex) local pop = _EntityService:GetEntityByPath(base) if pop == nil then return @@ -129,10 +129,10 @@ local function showNow() local totalW = #digits * ${DAMAGE_POP_DIGIT_W} + math.max(0, #digits - 1) * ${DAMAGE_POP_DIGIT_SPACING} local startX = -totalW / 2 + ${DAMAGE_POP_DIGIT_W} / 2 for i = 1, ${DAMAGE_POP_MAX_DIGITS} do - self:SetEntityEnabled(base .. "/Digit" .. tostring(i), false) + self:SetEntityEnabled(base .. "/Digit" .. self:IntStr(i), false) end for i = 1, ${DAMAGE_POP_MAX_DIGITS} do - local digitPath = base .. "/Digit" .. tostring(i) + local digitPath = base .. "/Digit" .. self:IntStr(i) local digitEntity = _EntityService:GetEntityByPath(digitPath) if digitEntity ~= nil and digitEntity.SpriteGUIRendererComponent ~= nil then if digits[i] ~= nil then @@ -181,7 +181,7 @@ local function showNow() local alpha = 1 - (i / 6) if alpha < 0 then alpha = 0 end for di = 1, ${DAMAGE_POP_MAX_DIGITS} do - local digitEntity = _EntityService:GetEntityByPath(base .. "/Digit" .. tostring(di)) + local digitEntity = _EntityService:GetEntityByPath(base .. "/Digit" .. self:IntStr(di)) if digitEntity ~= nil and digitEntity.Enable == true and digitEntity.SpriteGUIRendererComponent ~= nil then digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, alpha) end @@ -196,14 +196,98 @@ showNow()`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }, ]), - method('ShowPlayerDmgPop', `local base = "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop" -if amount > 0 then - self:SetText(base, "-" .. string.format("%d", amount)) -else - self:SetText(base, "막음") + method('ShowPlayerDmgPop', `local shownAmount = math.max(0, math.floor(amount or 0)) +if shownAmount <= 0 then + return end -self:SetEntityEnabled(base, true) -_TimerService:SetTimerOnce(function() self:SetEntityEnabled(base, false) end, 0.6)`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), +local function setEnabled(entity, enabled) + if entity == nil then + return + end + entity.Enable = enabled + if entity.SpriteGUIRendererComponent ~= nil then + entity.SpriteGUIRendererComponent.Enable = enabled + end + if entity.TextComponent ~= nil then + entity.TextComponent.Enable = enabled + end +end +self.PlayerDmgPopIndex = (self.PlayerDmgPopIndex or 0) + 1 +if self.PlayerDmgPopIndex > 4 then + self.PlayerDmgPopIndex = 1 +end +local base = "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_" .. self:IntStr(self.PlayerDmgPopIndex) +local pop = _EntityService:GetEntityByPath(base) +if pop == nil then + return +end +setEnabled(pop, false) +local damageDigitRuids = { ${DAMAGE_DIGIT_RUIDS.map(luaStr).join(', ')} } +local shown = tostring(shownAmount) +if string.len(shown) > ${DAMAGE_POP_MAX_DIGITS} then + shown = string.sub(shown, 1, ${DAMAGE_POP_MAX_DIGITS}) +end +local digits = {} +local digitEntitiesToEnable = {} +for i = 1, string.len(shown) do + table.insert(digits, tonumber(string.sub(shown, i, i)) or 0) +end +local totalW = #digits * ${DAMAGE_POP_DIGIT_W} + math.max(0, #digits - 1) * ${DAMAGE_POP_DIGIT_SPACING} +local startX = -totalW / 2 + ${DAMAGE_POP_DIGIT_W} / 2 +for i = 1, ${DAMAGE_POP_MAX_DIGITS} do + local digitEntity = _EntityService:GetEntityByPath(base .. "/Digit" .. self:IntStr(i)) + setEnabled(digitEntity, false) +end +for i = 1, ${DAMAGE_POP_MAX_DIGITS} do + local digitPath = base .. "/Digit" .. self:IntStr(i) + local digitEntity = _EntityService:GetEntityByPath(digitPath) + if digitEntity ~= nil and digitEntity.SpriteGUIRendererComponent ~= nil then + if digits[i] ~= nil then + digitEntity.SpriteGUIRendererComponent.ImageRUID = damageDigitRuids[digits[i] + 1] + digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1) + if digitEntity.UITransformComponent ~= nil then + digitEntity.UITransformComponent.anchoredPosition = Vector2(startX + (i - 1) * (${DAMAGE_POP_DIGIT_W} + ${DAMAGE_POP_DIGIT_SPACING}), 0) + end + table.insert(digitEntitiesToEnable, digitEntity) + end + end +end +local startPos = Vector2(16, 34) +if pop.UITransformComponent ~= nil then + local cur = pop.UITransformComponent.anchoredPosition + if math.abs(cur.x) < 240 and math.abs(cur.y) < 140 then + startPos = cur + end + pop.UITransformComponent.anchoredPosition = startPos +end +setEnabled(pop, true) +for i = 1, #digitEntitiesToEnable do + setEnabled(digitEntitiesToEnable[i], true) +end +for i = 1, 6 do + _TimerService:SetTimerOnce(function() + local p = _EntityService:GetEntityByPath(base) + if p ~= nil and p.Enable == true and p.UITransformComponent ~= nil then + local cur = p.UITransformComponent.anchoredPosition + p.UITransformComponent.anchoredPosition = Vector2(cur.x, cur.y + 7) + end + local alpha = 1 - (i / 6) + if alpha < 0 then alpha = 0 end + for di = 1, ${DAMAGE_POP_MAX_DIGITS} do + local digitEntity = _EntityService:GetEntityByPath(base .. "/Digit" .. self:IntStr(di)) + if digitEntity ~= nil and digitEntity.Enable == true and digitEntity.SpriteGUIRendererComponent ~= nil then + digitEntity.SpriteGUIRendererComponent.Color = Color(1, 1, 1, alpha) + end + end + end, 0.05 * i) +end +_TimerService:SetTimerOnce(function() + local p = _EntityService:GetEntityByPath(base) + if p ~= nil and p.UITransformComponent ~= nil then + p.UITransformComponent.anchoredPosition = startPos + end + setEnabled(p, false) +end, 0.3)`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), method('ShakeCombatCamera', `local lp = _UserService.LocalPlayer local cam = nil if lp ~= nil then @@ -342,8 +426,28 @@ end local ratio = 0 if maxHp > 0 then ratio = hp / maxHp end if ratio < 0 then ratio = 0 end +if ratio > 1 then ratio = 1 end +if self.HpBarOrigins == nil then + self.HpBarOrigins = {} +end +local t = e.UITransformComponent +local origin = self.HpBarOrigins[path] +if origin == nil then + local pivotX = 0 + if t.Pivot ~= nil then + pivotX = t.Pivot.x or 0 + end + origin = { + left = t.anchoredPosition.x - (t.RectSize.x * pivotX), + y = t.anchoredPosition.y, + height = t.RectSize.y, + pivotX = pivotX, + } + self.HpBarOrigins[path] = origin +end local w = width * ratio -e.UITransformComponent.RectSize = Vector2(w, 14)`, [ +t.RectSize = Vector2(w, origin.height or 14) +t.anchoredPosition = Vector2(origin.left + (w * (origin.pivotX or 0)), origin.y or t.anchoredPosition.y)`, [ { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'path' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'hp' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'maxHp' }, diff --git a/tools/deck/cb/reward.mjs b/tools/deck/cb/reward.mjs index 32b0740..b2f928f 100644 --- a/tools/deck/cb/reward.mjs +++ b/tools/deck/cb/reward.mjs @@ -34,7 +34,7 @@ local hud = _EntityService:GetEntityByPath("/ui/RunUIGroup/RewardHud") if hud ~= nil then hud.Enable = true end`), - method('ApplyRewardVisual', `self:ApplyCardFace("/ui/RunUIGroup/RewardHud/Reward" .. tostring(slot), cardId)`, [ + method('ApplyRewardVisual', `self:ApplyCardFace("/ui/RunUIGroup/RewardHud/Reward" .. self:IntStr(slot), cardId)`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }, { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, ]), diff --git a/tools/deck/cb/run.mjs b/tools/deck/cb/run.mjs index 768bb72..4073e9e 100644 --- a/tools/deck/cb/run.mjs +++ b/tools/deck/cb/run.mjs @@ -108,6 +108,7 @@ self.DamageDealtThisTurn = 0 self.DmgPopSeq = 0 self.CombatCameraShakeSeq = 0 self.DmgPopSlotQueue = {} +self.PlayerDmgPopIndex = 0 self.FirstHpLossDone = false self.ClayBlockNext = 0 self.DiscardSelectRemaining = 0 diff --git a/tools/deck/cb/shop.mjs b/tools/deck/cb/shop.mjs index eb9056c..301dfeb 100644 --- a/tools/deck/cb/shop.mjs +++ b/tools/deck/cb/shop.mjs @@ -24,7 +24,7 @@ self:ShowState("shop")`), for i = 1, 3 do local cid = self.ShopChoices[i] local c = self.Cards[cid] - local base = "/ui/RunUIGroup/ShopHud/Card" .. tostring(i) + local base = "/ui/RunUIGroup/ShopHud/Card" .. self:IntStr(i) if c ~= nil then self:ApplyCardFace(base, cid) self:SetText(base .. "/Price", string.format("%d", ${CARD_PRICE}) .. " 메소") diff --git a/tools/deck/cb/soul.mjs b/tools/deck/cb/soul.mjs index d32d245..c9161c0 100644 --- a/tools/deck/cb/soul.mjs +++ b/tools/deck/cb/soul.mjs @@ -75,7 +75,7 @@ self:RenderSoulLabel() self:RenderSoulShop()`, [{ Type: "number", DefaultValue: null, SyncDirection: 0, Attributes: [], Name: "slot" }]), method('RenderSoulShop', `local defs = self.SoulShopDef or {} for i = 1, 4 do - local base = "/ui/LobbyUIGroup/SoulShopHud/Item" .. tostring(i) + local base = "/ui/LobbyUIGroup/SoulShopHud/Item" .. self:IntStr(i) local d = defs[i] if d == nil then self:SetEntityEnabled(base, false) @@ -103,7 +103,7 @@ end self.SoulShopBound = true for i = 1, 4 do local idx = i - local e = _EntityService:GetEntityByPath("/ui/LobbyUIGroup/SoulShopHud/Item" .. tostring(i)) + local e = _EntityService:GetEntityByPath("/ui/LobbyUIGroup/SoulShopHud/Item" .. self:IntStr(i)) if e ~= nil and (e.ButtonComponent ~= nil or e:AddComponent("ButtonComponent") ~= nil) then e:ConnectEvent(ButtonClickEvent, function() self:BuySoulUnlock(idx) end) end diff --git a/tools/deck/cb/tooltip.mjs b/tools/deck/cb/tooltip.mjs index 94c2137..ad9b09d 100644 --- a/tools/deck/cb/tooltip.mjs +++ b/tools/deck/cb/tooltip.mjs @@ -173,7 +173,7 @@ local uiPos = _UILogic:ScreenToUIPosition(touchPoint) local bestPath = nil local bestDist = 999999 for i = 1, maxSlots do - local path = prefix .. tostring(i) + local path = prefix .. self:IntStr(i) local cardEntity = _EntityService:GetEntityByPath(path) if cardEntity ~= nil and cardEntity.Enable == true and cardEntity.UITransformComponent ~= nil then local pos = self:GetUiPathPosition(path) @@ -255,6 +255,9 @@ end if self.DragSlot ~= nil and self.DragSlot > 0 and string.find(path, "/ui/RunUIGroup/CardHand/Card", 1, true) == 1 then return end +if self.GridScrollActive == true and (string.find(path, "/ui/DeckUIGroup/DeckAllHud/Grid/Card", 1, true) == 1 or string.find(path, "/ui/DeckUIGroup/DeckInspectHud/Grid/Card", 1, true) == 1) then + return +end local cardId = self:GetHoveredCardId(path) if cardId == nil or self.Cards == nil then self:HideTooltip() @@ -320,7 +323,7 @@ local cardId = self.Hand[slot] if cardId == nil then return end -local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) +local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) if e ~= nil and e.UITransformComponent ~= nil then e.UITransformComponent.UIScale = Vector3(1.3, 1.3, 1) end @@ -328,13 +331,13 @@ local c = self.Cards[cardId] if c ~= nil then local tip = self:BuildCardKeywordTooltip(c) if tip ~= "" then - local anchor = self:GetTooltipAnchorForPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) + local anchor = self:GetTooltipAnchorForPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) self:ShowTooltipAt("키워드", tip, anchor.x, anchor.y) else self:HideTooltip() end end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), - method('UnhoverCard', `local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(slot)) + method('UnhoverCard', `local e = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. self:IntStr(slot)) if e ~= nil and e.UITransformComponent ~= nil then e.UITransformComponent.UIScale = Vector3(1, 1, 1) end diff --git a/tools/deck/gen-slaydeck.mjs b/tools/deck/gen-slaydeck.mjs index 7044943..5fd78ba 100644 --- a/tools/deck/gen-slaydeck.mjs +++ b/tools/deck/gen-slaydeck.mjs @@ -38,6 +38,8 @@ function writeCodeblocks() { prop('number', 'DmgPopSeq', '0'), prop('number', 'CombatCameraShakeSeq', '0'), prop('any', 'DmgPopSlotQueue'), + prop('number', 'PlayerDmgPopIndex', '0'), + prop('any', 'HpBarOrigins'), prop('any', 'EndTurnHandler'), prop('any', 'NewGameHandler'), prop('any', 'WarriorSelectHandler'), @@ -78,6 +80,7 @@ function writeCodeblocks() { prop('string', 'ClassDeckTitle', '""'), prop('string', 'ClassDeckClass', '""'), prop('string', 'GridHoverPath', '""'), + prop('boolean', 'GridScrollActive', 'false'), prop('any', 'SoulUnlocks'), prop('any', 'SoulShopDef'), prop('boolean', 'SoulShopBound', 'false'), diff --git a/tools/deck/lib/data.mjs b/tools/deck/lib/data.mjs index 0333085..22e1985 100644 --- a/tools/deck/lib/data.mjs +++ b/tools/deck/lib/data.mjs @@ -100,7 +100,7 @@ const SOUL_UNLOCKS = [ { key: 'relic', name: '유물 수집가', desc: '런 시작 시 유물 1개 추가', cost: 6 }, ]; function luaSoulShopTable(unlocks) { - const items = unlocks.map((u) => `\t{ key = ${luaStr(u.key)}, name = ${luaStr(u.name)}, desc = ${luaStr(u.desc)}, cost = ${u.cost} },`).join('\n'); + const items = unlocks.map((u) => `\t{ key = ${luaStr(u.key)}, name = ${luaStr(u.name)}, desc = ${luaStr(u.desc)}, cost = ${luaNum(u.cost)} },`).join('\n'); return `self.SoulShopDef = {\n${items}\n}`; } if (!ENEMIES.enemies[ENEMIES.activeEnemy]) { @@ -165,7 +165,7 @@ for (const id of RELICS.relicPool) { } function luaRelicsTable(relics) { const lines = Object.entries(relics).map(([id, r]) => - `\t${id} = { name = ${luaStr(r.name)}, desc = ${luaStr(r.desc)}, hook = ${luaStr(r.hook)}, effect = ${luaStr(r.effect)}, value = ${r.value}, icon = ${luaStr(r.icon || '')} },`); + `\t${id} = { name = ${luaStr(r.name)}, desc = ${luaStr(r.desc)}, hook = ${luaStr(r.hook)}, effect = ${luaStr(r.effect)}, value = ${luaNum(r.value)}, icon = ${luaStr(r.icon || '')} },`); return `self.Relics = {\n${lines.join('\n')}\n}`; } @@ -175,32 +175,38 @@ for (const [pid, p] of Object.entries(POTIONS.potions)) { } function luaPotionsTable(potions) { const lines = Object.entries(potions).map(([id, p]) => - `\t${id} = { name = ${luaStr(p.name)}, desc = ${luaStr(p.desc)}, effect = ${luaStr(p.effect)}, value = ${p.value}, icon = ${luaStr(p.icon || '')} },`); + `\t${id} = { name = ${luaStr(p.name)}, desc = ${luaStr(p.desc)}, effect = ${luaStr(p.effect)}, value = ${luaNum(p.value)}, icon = ${luaStr(p.icon || '')} },`); return `self.Potions = {\n${lines.join('\n')}\n}`; } function luaIntentsArray(intents) { return '{ ' + intents.map((it) => { - const fields = [`kind = ${luaStr(it.kind)}`, `value = ${it.value != null ? it.value : 0}`]; + const fields = [`kind = ${luaStr(it.kind)}`, `value = ${luaNum(it.value != null ? it.value : 0)}`]; if (it.effect != null) fields.push(`effect = ${luaStr(it.effect)}`); if (it.card != null) fields.push(`card = ${luaStr(it.card)}`); - if (it.count != null) fields.push(`count = ${it.count}`); + if (it.count != null) fields.push(`count = ${luaNum(it.count)}`); return `{ ${fields.join(', ')} }`; }).join(', ') + ' }'; } function luaEnemiesTable(enemies) { const lines = Object.entries(enemies).map(([id, e]) => - `\t${id} = { name = ${luaStr(e.name)}, maxHp = ${e.maxHp}, intents = ${luaIntentsArray(e.intents)} },`); + `\t${id} = { name = ${luaStr(e.name)}, maxHp = ${luaNum(e.maxHp)}, intents = ${luaIntentsArray(e.intents)} },`); return `self.Enemies = {\n${lines.join('\n')}\n}`; } function luaStr(s) { return '"' + String(s).replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n') + '"'; } +function luaNum(n) { + const v = Number(n); + if (!Number.isFinite(v)) return '0'; + if (Number.isInteger(v)) return String(v); + return String(v); +} function luaJobsTable(jobs) { const cls = Object.entries(jobs).map(([clsId, list]) => { const items = list.map((j) => - `\t\t{ id = ${luaStr(j.id)}, name = ${luaStr(j.name)}, desc = ${luaStr(j.desc)}, starter = ${luaStr(j.starter)}, tier = ${j.tier ?? 2}, parent = ${luaStr(j.parent ?? clsId)} },`).join('\n'); + `\t\t{ id = ${luaStr(j.id)}, name = ${luaStr(j.name)}, desc = ${luaStr(j.desc)}, starter = ${luaStr(j.starter)}, tier = ${luaNum(j.tier ?? 2)}, parent = ${luaStr(j.parent ?? clsId)} },`).join('\n'); return `\t${clsId} = {\n${items}\n\t},`; }).join('\n'); return `self.Jobs = {\n${cls}\n}`; @@ -217,133 +223,133 @@ function luaClassLineagesTable(lineages) { } function luaJobMetaTable(meta) { const rows = Object.entries(meta).map(([jobId, entry]) => - `\t${jobId} = { name = ${luaStr(entry.name)}, starter = ${luaStr(entry.starter)}, tier = ${entry.tier}, parent = ${luaStr(entry.parent)}, sourceClass = ${luaStr(entry.sourceClass)} },`); + `\t${jobId} = { name = ${luaStr(entry.name)}, starter = ${luaStr(entry.starter)}, tier = ${luaNum(entry.tier)}, parent = ${luaStr(entry.parent)}, sourceClass = ${luaStr(entry.sourceClass)} },`); return `self.JobMeta = {\n${rows.join('\n')}\n}`; } function luaCardsTable(cards) { const lines = Object.entries(cards).map(([id, c]) => { - const fields = [`name = ${luaStr(c.name)}`, `cost = ${c.cost}`, `desc = ${luaStr(c.desc)}`, `kind = ${luaStr(c.kind)}`]; - if (c.damage != null) fields.push(`damage = ${c.damage}`); - if (c.damageFromCurrentBlock != null) fields.push(`damageFromCurrentBlock = ${c.damageFromCurrentBlock}`); - if (c.damagePerCombo != null) fields.push(`damagePerCombo = ${c.damagePerCombo}`); - if (c.damagePerHolyCharge != null) fields.push(`damagePerHolyCharge = ${c.damagePerHolyCharge}`); - if (c.attackDamagePerCombo != null) fields.push(`attackDamagePerCombo = ${c.attackDamagePerCombo}`); + const fields = [`name = ${luaStr(c.name)}`, `cost = ${luaNum(c.cost)}`, `desc = ${luaStr(c.desc)}`, `kind = ${luaStr(c.kind)}`]; + if (c.damage != null) fields.push(`damage = ${luaNum(c.damage)}`); + if (c.damageFromCurrentBlock != null) fields.push(`damageFromCurrentBlock = ${luaNum(c.damageFromCurrentBlock)}`); + if (c.damagePerCombo != null) fields.push(`damagePerCombo = ${luaNum(c.damagePerCombo)}`); + if (c.damagePerHolyCharge != null) fields.push(`damagePerHolyCharge = ${luaNum(c.damagePerHolyCharge)}`); + if (c.attackDamagePerCombo != null) fields.push(`attackDamagePerCombo = ${luaNum(c.attackDamagePerCombo)}`); if (c.damageNameMatch != null) fields.push(`damageNameMatch = ${luaStr(c.damageNameMatch)}`); - if (c.damagePerOwnedNameMatch != null) fields.push(`damagePerOwnedNameMatch = ${c.damagePerOwnedNameMatch}`); - if (c.damagePerOtherHandCard != null) fields.push(`damagePerOtherHandCard = ${c.damagePerOtherHandCard}`); - if (c.damagePerAttackPlayedThisTurn != null) fields.push(`damagePerAttackPlayedThisTurn = ${c.damagePerAttackPlayedThisTurn}`); - if (c.damagePerDiscardedThisTurn != null) fields.push(`damagePerDiscardedThisTurn = ${c.damagePerDiscardedThisTurn}`); - if (c.damagePerSkillInHand != null) fields.push(`damagePerSkillInHand = ${c.damagePerSkillInHand}`); - if (c.damagePerCardDrawnThisCombat != null) fields.push(`damagePerCardDrawnThisCombat = ${c.damagePerCardDrawnThisCombat}`); - if (c.damagePerTurn != null) fields.push(`damagePerTurn = ${c.damagePerTurn}`); - if (c.cardPlayedDamage != null) fields.push(`cardPlayedDamage = ${c.cardPlayedDamage}`); - if (c.cardPlayedRandomDamage != null) fields.push(`cardPlayedRandomDamage = ${c.cardPlayedRandomDamage}`); - if (c.attackPlayedDamage != null) fields.push(`attackPlayedDamage = ${c.attackPlayedDamage}`); - if (c.firstCardDamageBonus != null) fields.push(`firstCardDamageBonus = ${c.firstCardDamageBonus}`); - if (c.rewardOnKill != null) fields.push(`rewardOnKill = ${c.rewardOnKill}`); - if (c.maxHpOnKill != null) fields.push(`maxHpOnKill = ${c.maxHpOnKill}`); - if (c.intangible != null) fields.push(`intangible = ${c.intangible}`); - if (c.endTurnDexLoss != null) fields.push(`endTurnDexLoss = ${c.endTurnDexLoss}`); - if (c.poisonPerTurn != null) fields.push(`poisonPerTurn = ${c.poisonPerTurn}`); - if (c.attackPoison != null) fields.push(`attackPoison = ${c.attackPoison}`); - if (c.otherHandAtLeast != null) fields.push(`otherHandAtLeast = ${c.otherHandAtLeast}`); - if (c.bonusHitsWhenOtherHandAtLeast != null) fields.push(`bonusHitsWhenOtherHandAtLeast = ${c.bonusHitsWhenOtherHandAtLeast}`); - if (c.block != null) fields.push(`block = ${c.block}`); - if (c.blockGainMultiplier != null) fields.push(`blockGainMultiplier = ${c.blockGainMultiplier}`); - if (c.blockPerDamageDealtThisTurn != null) fields.push(`blockPerDamageDealtThisTurn = ${c.blockPerDamageDealtThisTurn}`); - if (c.strength != null) fields.push(`strength = ${c.strength}`); - if (c.dex != null) fields.push(`dex = ${c.dex}`); - if (c.thorns != null) fields.push(`thorns = ${c.thorns}`); - if (c.cardPlayedBlock != null) fields.push(`cardPlayedBlock = ${c.cardPlayedBlock}`); - if (c.comboOnAttack != null) fields.push(`comboOnAttack = ${c.comboOnAttack}`); - if (c.comboMax != null) fields.push(`comboMax = ${c.comboMax}`); - if (c.attackWeak != null) fields.push(`attackWeak = ${c.attackWeak}`); - if (c.holyChargeOnHolyForce != null) fields.push(`holyChargeOnHolyForce = ${c.holyChargeOnHolyForce}`); - if (c.holyChargeMax != null) fields.push(`holyChargeMax = ${c.holyChargeMax}`); - if (c.damageTakenReduction != null) fields.push(`damageTakenReduction = ${c.damageTakenReduction}`); - if (c.blockOnDamaged != null) fields.push(`blockOnDamaged = ${c.blockOnDamaged}`); - if (c.strengthOnDamagedOnce != null) fields.push(`strengthOnDamagedOnce = ${c.strengthOnDamagedOnce}`); - if (c.drawOnExhaust != null) fields.push(`drawOnExhaust = ${c.drawOnExhaust}`); + if (c.damagePerOwnedNameMatch != null) fields.push(`damagePerOwnedNameMatch = ${luaNum(c.damagePerOwnedNameMatch)}`); + if (c.damagePerOtherHandCard != null) fields.push(`damagePerOtherHandCard = ${luaNum(c.damagePerOtherHandCard)}`); + if (c.damagePerAttackPlayedThisTurn != null) fields.push(`damagePerAttackPlayedThisTurn = ${luaNum(c.damagePerAttackPlayedThisTurn)}`); + if (c.damagePerDiscardedThisTurn != null) fields.push(`damagePerDiscardedThisTurn = ${luaNum(c.damagePerDiscardedThisTurn)}`); + if (c.damagePerSkillInHand != null) fields.push(`damagePerSkillInHand = ${luaNum(c.damagePerSkillInHand)}`); + if (c.damagePerCardDrawnThisCombat != null) fields.push(`damagePerCardDrawnThisCombat = ${luaNum(c.damagePerCardDrawnThisCombat)}`); + if (c.damagePerTurn != null) fields.push(`damagePerTurn = ${luaNum(c.damagePerTurn)}`); + if (c.cardPlayedDamage != null) fields.push(`cardPlayedDamage = ${luaNum(c.cardPlayedDamage)}`); + if (c.cardPlayedRandomDamage != null) fields.push(`cardPlayedRandomDamage = ${luaNum(c.cardPlayedRandomDamage)}`); + if (c.attackPlayedDamage != null) fields.push(`attackPlayedDamage = ${luaNum(c.attackPlayedDamage)}`); + if (c.firstCardDamageBonus != null) fields.push(`firstCardDamageBonus = ${luaNum(c.firstCardDamageBonus)}`); + if (c.rewardOnKill != null) fields.push(`rewardOnKill = ${luaNum(c.rewardOnKill)}`); + if (c.maxHpOnKill != null) fields.push(`maxHpOnKill = ${luaNum(c.maxHpOnKill)}`); + if (c.intangible != null) fields.push(`intangible = ${luaNum(c.intangible)}`); + if (c.endTurnDexLoss != null) fields.push(`endTurnDexLoss = ${luaNum(c.endTurnDexLoss)}`); + if (c.poisonPerTurn != null) fields.push(`poisonPerTurn = ${luaNum(c.poisonPerTurn)}`); + if (c.attackPoison != null) fields.push(`attackPoison = ${luaNum(c.attackPoison)}`); + if (c.otherHandAtLeast != null) fields.push(`otherHandAtLeast = ${luaNum(c.otherHandAtLeast)}`); + if (c.bonusHitsWhenOtherHandAtLeast != null) fields.push(`bonusHitsWhenOtherHandAtLeast = ${luaNum(c.bonusHitsWhenOtherHandAtLeast)}`); + if (c.block != null) fields.push(`block = ${luaNum(c.block)}`); + if (c.blockGainMultiplier != null) fields.push(`blockGainMultiplier = ${luaNum(c.blockGainMultiplier)}`); + if (c.blockPerDamageDealtThisTurn != null) fields.push(`blockPerDamageDealtThisTurn = ${luaNum(c.blockPerDamageDealtThisTurn)}`); + if (c.strength != null) fields.push(`strength = ${luaNum(c.strength)}`); + if (c.dex != null) fields.push(`dex = ${luaNum(c.dex)}`); + if (c.thorns != null) fields.push(`thorns = ${luaNum(c.thorns)}`); + if (c.cardPlayedBlock != null) fields.push(`cardPlayedBlock = ${luaNum(c.cardPlayedBlock)}`); + if (c.comboOnAttack != null) fields.push(`comboOnAttack = ${luaNum(c.comboOnAttack)}`); + if (c.comboMax != null) fields.push(`comboMax = ${luaNum(c.comboMax)}`); + if (c.attackWeak != null) fields.push(`attackWeak = ${luaNum(c.attackWeak)}`); + if (c.holyChargeOnHolyForce != null) fields.push(`holyChargeOnHolyForce = ${luaNum(c.holyChargeOnHolyForce)}`); + if (c.holyChargeMax != null) fields.push(`holyChargeMax = ${luaNum(c.holyChargeMax)}`); + if (c.damageTakenReduction != null) fields.push(`damageTakenReduction = ${luaNum(c.damageTakenReduction)}`); + if (c.blockOnDamaged != null) fields.push(`blockOnDamaged = ${luaNum(c.blockOnDamaged)}`); + if (c.strengthOnDamagedOnce != null) fields.push(`strengthOnDamagedOnce = ${luaNum(c.strengthOnDamagedOnce)}`); + if (c.drawOnExhaust != null) fields.push(`drawOnExhaust = ${luaNum(c.drawOnExhaust)}`); if (c.drawNameMatchAutoPlay != null) fields.push(`drawNameMatchAutoPlay = ${luaStr(c.drawNameMatchAutoPlay)}`); - if (c.weak != null) fields.push(`weak = ${c.weak}`); - if (c.vuln != null) fields.push(`vuln = ${c.vuln}`); + if (c.weak != null) fields.push(`weak = ${luaNum(c.weak)}`); + if (c.vuln != null) fields.push(`vuln = ${luaNum(c.vuln)}`); if (c.powerEffect != null) fields.push(`powerEffect = ${luaStr(c.powerEffect)}`); - if (c.value != null) fields.push(`value = ${c.value}`); + if (c.value != null) fields.push(`value = ${luaNum(c.value)}`); if (!c.class) throw new Error(`[gen-slaydeck] 카드 ${id}에 class 누락`); fields.push(`class = ${luaStr(c.class)}`); fields.push(`rarity = ${luaStr(c.rarity)}`); - if (c.hits != null) fields.push(`hits = ${c.hits}`); + if (c.hits != null) fields.push(`hits = ${luaNum(c.hits)}`); if (c.pierce === true) fields.push('pierce = true'); - if (c.selfVuln != null) fields.push(`selfVuln = ${c.selfVuln}`); - if (c.draw != null) fields.push(`draw = ${c.draw}`); - if (c.drawUntilHandSize != null) fields.push(`drawUntilHandSize = ${c.drawUntilHandSize}`); - if (c.drawSkillBlock != null) fields.push(`drawSkillBlock = ${c.drawSkillBlock}`); - if (c.drawDamage != null) fields.push(`drawDamage = ${c.drawDamage}`); - if (c.drawPoison != null) fields.push(`drawPoison = ${c.drawPoison}`); + if (c.selfVuln != null) fields.push(`selfVuln = ${luaNum(c.selfVuln)}`); + if (c.draw != null) fields.push(`draw = ${luaNum(c.draw)}`); + if (c.drawUntilHandSize != null) fields.push(`drawUntilHandSize = ${luaNum(c.drawUntilHandSize)}`); + if (c.drawSkillBlock != null) fields.push(`drawSkillBlock = ${luaNum(c.drawSkillBlock)}`); + if (c.drawDamage != null) fields.push(`drawDamage = ${luaNum(c.drawDamage)}`); + if (c.drawPoison != null) fields.push(`drawPoison = ${luaNum(c.drawPoison)}`); if (c.exhaustHandNonAttack === true) fields.push('exhaustHandNonAttack = true'); if (c.exhaustHandAll === true) fields.push('exhaustHandAll = true'); - if (c.drawPerExhausted != null) fields.push(`drawPerExhausted = ${c.drawPerExhausted}`); - if (c.blockPerExhaustedCard != null) fields.push(`blockPerExhaustedCard = ${c.blockPerExhaustedCard}`); - if (c.addRandomCardCount != null) fields.push(`addRandomCardCount = ${c.addRandomCardCount}`); - if (c.addRandomCardPerExhausted != null) fields.push(`addRandomCardPerExhausted = ${c.addRandomCardPerExhausted}`); + if (c.drawPerExhausted != null) fields.push(`drawPerExhausted = ${luaNum(c.drawPerExhausted)}`); + if (c.blockPerExhaustedCard != null) fields.push(`blockPerExhaustedCard = ${luaNum(c.blockPerExhaustedCard)}`); + if (c.addRandomCardCount != null) fields.push(`addRandomCardCount = ${luaNum(c.addRandomCardCount)}`); + if (c.addRandomCardPerExhausted != null) fields.push(`addRandomCardPerExhausted = ${luaNum(c.addRandomCardPerExhausted)}`); if (c.addRandomCardKind != null) fields.push(`addRandomCardKind = ${luaStr(c.addRandomCardKind)}`); if (c.addRandomCardSameClass === true) fields.push('addRandomCardSameClass = true'); if (c.addedCardsCostZeroThisTurn === true) fields.push('addedCardsCostZeroThisTurn = true'); - if (c.playTopDrawPileCount != null) fields.push(`playTopDrawPileCount = ${c.playTopDrawPileCount}`); - if (c.playTopDrawPileCountPerEnergy != null) fields.push(`playTopDrawPileCountPerEnergy = ${c.playTopDrawPileCountPerEnergy}`); - if (c.heal != null) fields.push(`heal = ${c.heal}`); - if (c.healPerHolyCharge != null) fields.push(`healPerHolyCharge = ${c.healPerHolyCharge}`); - if (c.gainEnergy != null) fields.push(`gainEnergy = ${c.gainEnergy}`); - if (c.comboGain != null) fields.push(`comboGain = ${c.comboGain}`); + if (c.playTopDrawPileCount != null) fields.push(`playTopDrawPileCount = ${luaNum(c.playTopDrawPileCount)}`); + if (c.playTopDrawPileCountPerEnergy != null) fields.push(`playTopDrawPileCountPerEnergy = ${luaNum(c.playTopDrawPileCountPerEnergy)}`); + if (c.heal != null) fields.push(`heal = ${luaNum(c.heal)}`); + if (c.healPerHolyCharge != null) fields.push(`healPerHolyCharge = ${luaNum(c.healPerHolyCharge)}`); + if (c.gainEnergy != null) fields.push(`gainEnergy = ${luaNum(c.gainEnergy)}`); + if (c.comboGain != null) fields.push(`comboGain = ${luaNum(c.comboGain)}`); if (c.removePlayerDebuffs === true) fields.push('removePlayerDebuffs = true'); if (c.holyForce === true) fields.push('holyForce = true'); - if (c.holyChargeGain != null) fields.push(`holyChargeGain = ${c.holyChargeGain}`); - if (c.blockPerHolyCharge != null) fields.push(`blockPerHolyCharge = ${c.blockPerHolyCharge}`); + if (c.holyChargeGain != null) fields.push(`holyChargeGain = ${luaNum(c.holyChargeGain)}`); + if (c.blockPerHolyCharge != null) fields.push(`blockPerHolyCharge = ${luaNum(c.blockPerHolyCharge)}`); if (c.holyChargeSpendAll === true) fields.push('holyChargeSpendAll = true'); - if (c.poison != null) fields.push(`poison = ${c.poison}`); - if (c.discard != null) fields.push(`discard = ${c.discard}`); + if (c.poison != null) fields.push(`poison = ${luaNum(c.poison)}`); + if (c.discard != null) fields.push(`discard = ${luaNum(c.discard)}`); if (c.discardAll === true) fields.push('discardAll = true'); - if (c.drawPerDiscarded != null) fields.push(`drawPerDiscarded = ${c.drawPerDiscarded}`); - if (c.addShiv != null) fields.push(`addShiv = ${c.addShiv}`); - if (c.turnStartShiv != null) fields.push(`turnStartShiv = ${c.turnStartShiv}`); - if (c.turnStartDraw != null) fields.push(`turnStartDraw = ${c.turnStartDraw}`); - if (c.turnStartDiscard != null) fields.push(`turnStartDiscard = ${c.turnStartDiscard}`); + if (c.drawPerDiscarded != null) fields.push(`drawPerDiscarded = ${luaNum(c.drawPerDiscarded)}`); + if (c.addShiv != null) fields.push(`addShiv = ${luaNum(c.addShiv)}`); + if (c.turnStartShiv != null) fields.push(`turnStartShiv = ${luaNum(c.turnStartShiv)}`); + if (c.turnStartDraw != null) fields.push(`turnStartDraw = ${luaNum(c.turnStartDraw)}`); + if (c.turnStartDiscard != null) fields.push(`turnStartDiscard = ${luaNum(c.turnStartDiscard)}`); if (c.handCostZeroThisTurn === true) fields.push('handCostZeroThisTurn = true'); if (c.drawDisabledThisTurn === true) fields.push('drawDisabledThisTurn = true'); if (c.addShivPerDiscard === true) fields.push('addShivPerDiscard = true'); if (c.useAllEnergy === true) fields.push('useAllEnergy = true'); - if (c.shivDamageBonus != null) fields.push(`shivDamageBonus = ${c.shivDamageBonus}`); - if (c.firstShivDamageBonus != null) fields.push(`firstShivDamageBonus = ${c.firstShivDamageBonus}`); + if (c.shivDamageBonus != null) fields.push(`shivDamageBonus = ${luaNum(c.shivDamageBonus)}`); + if (c.firstShivDamageBonus != null) fields.push(`firstShivDamageBonus = ${luaNum(c.firstShivDamageBonus)}`); if (c.shivRetain === true) fields.push('shivRetain = true'); if (c.shivAoe === true) fields.push('shivAoe = true'); - if (c.attackDamageVsWeakMultiplier != null) fields.push(`attackDamageVsWeakMultiplier = ${c.attackDamageVsWeakMultiplier}`); - if (c.poisonHits != null) fields.push(`poisonHits = ${c.poisonHits}`); + if (c.attackDamageVsWeakMultiplier != null) fields.push(`attackDamageVsWeakMultiplier = ${luaNum(c.attackDamageVsWeakMultiplier)}`); + if (c.poisonHits != null) fields.push(`poisonHits = ${luaNum(c.poisonHits)}`); if (c.poisonRandomTargets === true) fields.push('poisonRandomTargets = true'); if (c.poisonIfTargetPoisoned === true) fields.push('poisonIfTargetPoisoned = true'); - if (c.xDamagePerEnergy != null) fields.push(`xDamagePerEnergy = ${c.xDamagePerEnergy}`); - if (c.xWeakPerEnergy != null) fields.push(`xWeakPerEnergy = ${c.xWeakPerEnergy}`); - if (c.nextTurnBlock != null) fields.push(`nextTurnBlock = ${c.nextTurnBlock}`); - if (c.nextTurnDraw != null) fields.push(`nextTurnDraw = ${c.nextTurnDraw}`); + if (c.xDamagePerEnergy != null) fields.push(`xDamagePerEnergy = ${luaNum(c.xDamagePerEnergy)}`); + if (c.xWeakPerEnergy != null) fields.push(`xWeakPerEnergy = ${luaNum(c.xWeakPerEnergy)}`); + if (c.nextTurnBlock != null) fields.push(`nextTurnBlock = ${luaNum(c.nextTurnBlock)}`); + if (c.nextTurnDraw != null) fields.push(`nextTurnDraw = ${luaNum(c.nextTurnDraw)}`); if (c.nextTurnKeepBlock === true) fields.push('nextTurnKeepBlock = true'); - if (c.nextTurnAttackMultiplier != null) fields.push(`nextTurnAttackMultiplier = ${c.nextTurnAttackMultiplier}`); - if (c.nextTurnCopies != null) fields.push(`nextTurnCopies = ${c.nextTurnCopies}`); + if (c.nextTurnAttackMultiplier != null) fields.push(`nextTurnAttackMultiplier = ${luaNum(c.nextTurnAttackMultiplier)}`); + if (c.nextTurnCopies != null) fields.push(`nextTurnCopies = ${luaNum(c.nextTurnCopies)}`); if (c.nextTurnSelectHandCard === true) fields.push('nextTurnSelectHandCard = true'); if (c.nextTurnSelectPrompt != null) fields.push(`nextTurnSelectPrompt = ${luaStr(c.nextTurnSelectPrompt)}`); - if (c.nextSkillRepeatCount != null) fields.push(`nextSkillRepeatCount = ${c.nextSkillRepeatCount}`); + if (c.nextSkillRepeatCount != null) fields.push(`nextSkillRepeatCount = ${luaNum(c.nextSkillRepeatCount)}`); if (c.nextSkillCostZero === true) fields.push('nextSkillCostZero = true'); - if (c.skillCostReductionThisTurn != null) fields.push(`skillCostReductionThisTurn = ${c.skillCostReductionThisTurn}`); + if (c.skillCostReductionThisTurn != null) fields.push(`skillCostReductionThisTurn = ${luaNum(c.skillCostReductionThisTurn)}`); if (c.skillSlyOnPlay === true) fields.push('skillSlyOnPlay = true'); - if (c.turnHandSlyCount != null) fields.push(`turnHandSlyCount = ${c.turnHandSlyCount}`); - if (c.combatCostReductionOnPlay != null) fields.push(`combatCostReductionOnPlay = ${c.combatCostReductionOnPlay}`); + if (c.turnHandSlyCount != null) fields.push(`turnHandSlyCount = ${luaNum(c.turnHandSlyCount)}`); + if (c.combatCostReductionOnPlay != null) fields.push(`combatCostReductionOnPlay = ${luaNum(c.combatCostReductionOnPlay)}`); if (c.randomTargetEachHit === true) fields.push('randomTargetEachHit = true'); if (c.repeatOnKill === true) fields.push('repeatOnKill = true'); if (c.affectsAllEnemies === true) fields.push('affectsAllEnemies = true'); if (c.removeEnemyBlock === true) fields.push('removeEnemyBlock = true'); if (c.removeEnemyArtifact === true) fields.push('removeEnemyArtifact = true'); - if (c.enemyStrengthLossThisTurn != null) fields.push(`enemyStrengthLossThisTurn = ${c.enemyStrengthLossThisTurn}`); - if (c.extraPoisonTicks != null) fields.push(`extraPoisonTicks = ${c.extraPoisonTicks}`); - if (c.poisonApplicationBurstEvery != null) fields.push(`poisonApplicationBurstEvery = ${c.poisonApplicationBurstEvery}`); - if (c.poisonApplicationBurstDamage != null) fields.push(`poisonApplicationBurstDamage = ${c.poisonApplicationBurstDamage}`); + if (c.enemyStrengthLossThisTurn != null) fields.push(`enemyStrengthLossThisTurn = ${luaNum(c.enemyStrengthLossThisTurn)}`); + if (c.extraPoisonTicks != null) fields.push(`extraPoisonTicks = ${luaNum(c.extraPoisonTicks)}`); + if (c.poisonApplicationBurstEvery != null) fields.push(`poisonApplicationBurstEvery = ${luaNum(c.poisonApplicationBurstEvery)}`); + if (c.poisonApplicationBurstDamage != null) fields.push(`poisonApplicationBurstDamage = ${luaNum(c.poisonApplicationBurstDamage)}`); if (c.innate === true) fields.push('innate = true'); if (c.playableWhenDrawPileEmpty === true) fields.push('playableWhenDrawPileEmpty = true'); if (c.sly === true) fields.push('sly = true'); @@ -353,7 +359,7 @@ function luaCardsTable(cards) { if (c.unplayable === true) fields.push('unplayable = true'); if (c.curse === true) fields.push('curse = true'); if (c.token === true) fields.push('token = true'); - if (c.endTurnDamage != null) fields.push(`endTurnDamage = ${c.endTurnDamage}`); + if (c.endTurnDamage != null) fields.push(`endTurnDamage = ${luaNum(c.endTurnDamage)}`); if (c.fx != null) fields.push(`fx = ${luaStr(c.fx)}`); if (c.image != null) fields.push(`image = ${luaStr(c.image)}`); return `\t${id} = { ${fields.join(', ')} },`; diff --git a/ui/DeckUIGroup.ui b/ui/DeckUIGroup.ui index c16ee0f..c18199e 100644 --- a/ui/DeckUIGroup.ui +++ b/ui/DeckUIGroup.ui @@ -1539,7 +1539,7 @@ { "id": "0e200005-0000-4000-8000-00000e200005", "path": "/ui/DeckUIGroup/DeckAllHud/Grid", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ScrollLayoutGroupComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ScrollLayoutGroupComponent,MOD.Core.UITouchReceiveComponent", "jsonString": { "name": "Grid", "path": "/ui/DeckUIGroup/DeckAllHud/Grid", @@ -1728,6 +1728,10 @@ "UseScroll": true, "VerticalScrollBarDirection": 1, "Enable": true + }, + { + "@type": "MOD.Core.UITouchReceiveComponent", + "Enable": true } ], "@version": 1 @@ -106038,7 +106042,7 @@ { "id": "0e100005-0000-4000-8000-00000e100005", "path": "/ui/DeckUIGroup/DeckInspectHud/Grid", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ScrollLayoutGroupComponent", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.ScrollLayoutGroupComponent,MOD.Core.UITouchReceiveComponent", "jsonString": { "name": "Grid", "path": "/ui/DeckUIGroup/DeckInspectHud/Grid", @@ -106227,6 +106231,10 @@ "UseScroll": true, "VerticalScrollBarDirection": 1, "Enable": true + }, + { + "@type": "MOD.Core.UITouchReceiveComponent", + "Enable": true } ], "@version": 1 diff --git a/ui/RunUIGroup.ui b/ui/RunUIGroup.ui index b1aaa63..1d458a6 100644 --- a/ui/RunUIGroup.ui +++ b/ui/RunUIGroup.ui @@ -52719,7 +52719,7 @@ "name": "CombatHud", "path": "/ui/RunUIGroup/CombatHud", "nameEditable": true, - "enable": false, + "enable": true, "visible": true, "localize": true, "displayOrder": 7, @@ -59864,30 +59864,30 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 1, "AnchorsMax": { - "x": 0.5, + "x": 0.0, "y": 0.5 }, "AnchorsMin": { - "x": 0.5, + "x": 0.0, "y": 0.5 }, "MobileOnly": false, "OffsetMax": { - "x": -631.0187, - "y": -388.000153 + "x": 390.726929, + "y": 191.220444 }, "OffsetMin": { - "x": -931.0187, - "y": -510.440826 + "x": 61.93605, + "y": 68.77977 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 300.0, + "x": 328.790863, "y": 122.440674 }, "UIMode": 1, @@ -59898,12 +59898,12 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": -781.0187, - "y": -449.2205 + "x": 226.331482, + "y": 130.0001 }, "Position": { - "x": -781.0187, - "y": -449.2205, + "x": -733.6685, + "y": 130.0001, "z": 0.0 }, "QuaternionRotation": { @@ -59942,7 +59942,7 @@ "r": 0.08, "g": 0.09, "b": 0.11, - "a": 0.78 + "a": 0.0 }, "DropShadow": false, "DropShadowAngle": 30.0, @@ -59987,7 +59987,7 @@ "name": "Name", "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/Name", "nameEditable": true, - "enable": true, + "enable": false, "visible": true, "localize": true, "displayOrder": 0, @@ -60017,11 +60017,11 @@ "MobileOnly": false, "OffsetMax": { "x": 140.0, - "y": 42.0 + "y": 56.56 }, "OffsetMin": { "x": -140.0, - "y": 14.0 + "y": 28.5600014 }, "Pivot": { "x": 0.5, @@ -60040,11 +60040,11 @@ "UIVersion": 2, "anchoredPosition": { "x": 0.0, - "y": 28.0 + "y": 42.56 }, "Position": { "x": 0.0, - "y": 28.0, + "y": 42.56, "z": 0.0 }, "QuaternionRotation": { @@ -60193,31 +60193,31 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 2, "AnchorsMax": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "AnchorsMin": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "MobileOnly": false, "OffsetMax": { - "x": 140.0, - "y": 2.0 + "x": -19.0, + "y": 3.0 }, "OffsetMin": { - "x": -140.0, - "y": -14.0 + "x": -241.0, + "y": -15.0 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 280.0, - "y": 16.0 + "x": 222.0, + "y": 18.0 }, "UIMode": 1, "UIScale": { @@ -60227,11 +60227,11 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": 0.0, + "x": -130.0, "y": -6.0 }, "Position": { - "x": 0.0, + "x": 34.3954468, "y": -6.0, "z": 0.0 }, @@ -60334,30 +60334,30 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 2, "AnchorsMax": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "AnchorsMin": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "MobileOnly": false, "OffsetMax": { - "x": 140.0, - "y": 2.2202 + "x": -20.0, + "y": 2.0 }, "OffsetMin": { - "x": -140.0, - "y": -13.7798 + "x": -240.0, + "y": -14.0 }, "Pivot": { - "x": 0.0, + "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 280.0, + "x": 220.0, "y": 16.0 }, "UIMode": 1, @@ -60368,12 +60368,12 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": -140.0, - "y": -5.7798 + "x": -130.0, + "y": -6.0 }, "Position": { - "x": -140.0, - "y": -5.7798, + "x": 34.3954468, + "y": -6.0, "z": 0.0 }, "QuaternionRotation": { @@ -60475,30 +60475,30 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 2, "AnchorsMax": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "AnchorsMin": { - "x": 0.5, + "x": 1.0, "y": 0.5 }, "MobileOnly": false, "OffsetMax": { - "x": 108.5797, - "y": -14.7796 + "x": -19.9999924, + "y": 7.0 }, "OffsetMin": { - "x": -111.4203, - "y": -38.7796021 + "x": -240.0, + "y": -17.0 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 220.0, + "x": 220.000015, "y": 24.0 }, "UIMode": 1, @@ -60509,12 +60509,12 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": -1.4203, - "y": -26.7796 + "x": -130.0, + "y": -5.0 }, "Position": { - "x": -1.4203, - "y": -26.7796, + "x": 34.3954468, + "y": -5.0, "z": 0.0 }, "QuaternionRotation": { @@ -60663,31 +60663,31 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 4, "AnchorsMax": { - "x": 0.5, - "y": 0.5 + "x": 0.0, + "y": 1.0 }, "AnchorsMin": { - "x": 0.5, - "y": 0.5 + "x": 0.0, + "y": 1.0 }, "MobileOnly": false, "OffsetMax": { - "x": -95.3294, - "y": 50.2206 + "x": 61.6262436, + "y": -33.4703369 }, "OffsetMin": { - "x": -139.3294, - "y": 10.2206 + "x": 1.62624359, + "y": -100.970337 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 44.0, - "y": 40.0 + "x": 60.0, + "y": 67.5 }, "UIMode": 1, "UIScale": { @@ -60697,12 +60697,12 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": -117.3294, - "y": 30.2206 + "x": 31.6262436, + "y": -67.22034 }, "Position": { - "x": -117.3294, - "y": 30.2206, + "x": -132.7692, + "y": -6.0, "z": 0.0 }, "QuaternionRotation": { @@ -60723,7 +60723,7 @@ "AnimClipPlayType": 0, "EndFrameIndex": 2147483647, "ImageRUID": { - "DataId": "" + "DataId": "c9a656da011f46d896fd8a5dbb3a1696" }, "LocalPosition": { "x": 0.0, @@ -60738,9 +60738,9 @@ "PreserveSprite": 0, "StartFrameIndex": 0, "Color": { - "r": 0.32, - "g": 0.5, - "b": 0.85, + "r": 1.0, + "g": 1.0, + "b": 1.0, "a": 1.0 }, "DropShadow": false, @@ -60771,7 +60771,7 @@ }, "OutlineWidth": 3.0, "RaycastTarget": false, - "Type": 1, + "Type": 0, "Enable": true } ], @@ -60815,11 +60815,11 @@ }, "MobileOnly": false, "OffsetMax": { - "x": 22.0, + "x": 19.0, "y": 18.0 }, "OffsetMin": { - "x": -22.0, + "x": -25.0, "y": -18.0 }, "Pivot": { @@ -60838,11 +60838,11 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": 0.0, + "x": -3.0, "y": 0.0 }, "Position": { - "x": 0.0, + "x": -3.0, "y": 0.0, "z": 0.0 }, @@ -60992,30 +60992,30 @@ { "@type": "MOD.Core.UITransformComponent", "ActivePlatform": 255, - "AlignmentOption": 0, + "AlignmentOption": 3, "AnchorsMax": { "x": 0.5, - "y": 0.5 + "y": 1.0 }, "AnchorsMin": { "x": 0.5, - "y": 0.5 + "y": 1.0 }, "MobileOnly": false, "OffsetMax": { "x": 140.0, - "y": -33.0 + "y": -19.0 }, "OffsetMin": { - "x": -140.0, - "y": -55.0 + "x": -90.0, + "y": -41.0 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 280.0, + "x": 230.0, "y": 22.0 }, "UIMode": 1, @@ -61026,12 +61026,12 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": 0.0, - "y": -44.0 + "x": 25.0, + "y": -30.0 }, "Position": { - "x": 0.0, - "y": -44.0, + "x": 25.0, + "y": 31.2203369, "z": 0.0 }, "QuaternionRotation": { @@ -61155,14 +61155,14 @@ } }, { - "id": "0cb00104-0000-4000-8000-00000cb00104", - "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "id": "48b75e83-6db1-4712-88dd-ae0e22b4bedf", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", "jsonString": { - "name": "DmgPop", - "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop", + "name": "DmgPop_1", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1", "nameEditable": true, - "enable": true, + "enable": false, "visible": true, "localize": true, "displayOrder": 6, @@ -61170,12 +61170,12 @@ "revision": 1, "origin": { "type": "Model", - "entry_id": "UIText", + "entry_id": "UISprite", "sub_entity_id": null, "root_entity_id": null, "replaced_model_id": null }, - "modelId": "uitext", + "modelId": "uisprite", "@components": [ { "@type": "MOD.Core.UITransformComponent", @@ -61191,20 +61191,20 @@ }, "MobileOnly": false, "OffsetMax": { - "x": 83.3426, - "y": 97.2203 + "x": 765.9998, + "y": 217.9998 }, "OffsetMin": { - "x": -76.6574, - "y": 67.2203 + "x": 573.9998, + "y": 161.9998 }, "Pivot": { "x": 0.5, "y": 0.5 }, "RectSize": { - "x": 160.0, - "y": 30.0 + "x": 192.0, + "y": 56.0 }, "UIMode": 1, "UIScale": { @@ -61214,25 +61214,31 @@ }, "UIVersion": 2, "anchoredPosition": { - "x": 3.34259987, - "y": 82.2203 + "x": 669.9998, + "y": 189.9998 + }, + "Rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 }, "Position": { - "x": 3.34259987, - "y": 82.2203, + "x": 669.9998, + "y": 189.9998, "z": 0.0 }, "QuaternionRotation": { "x": 0.0, "y": 0.0, "z": 0.0, - "w": 1.0 + "w": -1.0 }, "Scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, + "ZRotation": 0.0, "Enable": true }, { @@ -61253,6 +61259,7 @@ "OverrideSorting": false, "PlayRate": 1.0, "PreserveSprite": 0, + "SortingLayer": "MapLayer0", "StartFrameIndex": 0, "Color": { "r": 0.0, @@ -61290,11 +61297,118 @@ "RaycastTarget": false, "Type": 1, "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "35407abf-fbff-44d2-a496-75946d8352fd", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit1", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit1", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit1", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true }, { - "@type": "MOD.Core.TextComponent", - "Alignment": 4, - "Bold": true, + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, "DropShadow": false, "DropShadowAngle": 30.0, "DropShadowColor": { @@ -61304,38 +61418,3168 @@ "a": 0.72 }, "DropShadowDistance": 32.0, - "Font": 0, - "FontColor": { - "r": 1.0, - "g": 0.4, - "b": 0.35, - "a": 1.0 - }, - "FontSize": 22, - "MaxSize": 22, - "MinSize": 8, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, "OutlineColor": { - "r": 0.08, - "g": 0.08, - "b": 0.08, + "r": 0.0, + "g": 0.0, + "b": 0.0, "a": 1.0 }, - "OutlineDistance": { + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "939afcaa-2565-4d49-b362-81be02930d40", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit2", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit2", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { "x": 1.0, - "y": -1.0 + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 }, - "OutlineWidth": 1.0, - "Overflow": 0, "OverrideSorting": false, - "Padding": { - "left": 0, - "right": 0, - "top": 0, - "bottom": 0 + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 }, - "SizeFit": false, - "Text": "", - "UseOutLine": true, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "054d7bb6-e796-498f-9c1f-50351679df0e", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit3", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit3", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit3", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 2, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "13a8d9d5-bdc1-40d0-989a-60b0398a96e6", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit4", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit4", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit4", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 3, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "a68ac4bc-02ae-4dc1-934f-b79d65c34cb0", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit5", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit5", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_1/Digit5", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "09f154c3-4ad3-4159-9664-d7ce2a967053", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "DmgPop_2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2", + "nameEditable": true, + "enable": false, + "visible": true, + "localize": true, + "displayOrder": 7, + "pathConstraints": "/////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 735.9998, + "y": 247.9998 + }, + "OffsetMin": { + "x": 543.9998, + "y": 191.9998 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 192.0, + "y": 56.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 639.9998, + "y": 219.9998 + }, + "Rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "Position": { + "x": 639.9998, + "y": 219.9998, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": -1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "ZRotation": 0.0, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0b6dd289-a337-4ff9-8d94-6a8ade8ece39", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit1", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit1", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit1", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "7bfdfc92-7b10-4a0b-a913-8b71945265cf", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit2", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit2", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "32af5513-d3b0-4586-8f6d-a0f6d257363e", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit3", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit3", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit3", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 2, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "95f7eb1f-9a61-4207-98b1-796574c97c12", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit4", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit4", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit4", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 3, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "cd377100-548a-4c3c-b4fc-1bc31d600bd0", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit5", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit5", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_2/Digit5", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "67587ecb-3a8d-4662-8bbe-5bfb36f0ca5d", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "DmgPop_3", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3", + "nameEditable": true, + "enable": false, + "visible": true, + "localize": true, + "displayOrder": 8, + "pathConstraints": "/////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 705.9998, + "y": 277.999817 + }, + "OffsetMin": { + "x": 513.9998, + "y": 221.9998 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 192.0, + "y": 56.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 609.9998, + "y": 249.9998 + }, + "Rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "Position": { + "x": 609.9998, + "y": 249.9998, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": -1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "ZRotation": 0.0, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "83554fe9-dbff-4217-924b-a126ffec3a39", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit1", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit1", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit1", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0b3d24f0-99ab-4fd3-92cc-bc12bd595ccd", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit2", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit2", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "8789bf6b-9c5d-4e44-b1ef-cb9c318f3101", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit3", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit3", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit3", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 2, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "e6a6e211-5fe6-484c-9c57-606414e5a299", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit4", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit4", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit4", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 3, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cdf3ce9-ae08-4b9f-b3c0-9826c94e9ff6", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit5", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit5", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_3/Digit5", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "bf35db25-1ec0-46e5-94b6-92420b8291c2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "DmgPop_4", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4", + "nameEditable": true, + "enable": false, + "visible": true, + "localize": true, + "displayOrder": 9, + "pathConstraints": "/////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 675.9998, + "y": 307.999817 + }, + "OffsetMin": { + "x": 483.999817, + "y": 251.999817 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 192.0, + "y": 56.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 579.9998, + "y": 279.999817 + }, + "Rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "Position": { + "x": 579.9998, + "y": 279.999817, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": -1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "ZRotation": 0.0, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "d41f4db7-2032-49fb-815d-24f197035641", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit1", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit1", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit1", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "1379b973-058a-4a56-b4f5-05b3c03f3b58", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit2", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit2", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit2", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "7a1ec764-39a0-424b-9d69-8fe6f6823fa7", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit3", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit3", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit3", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 2, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "e742a62e-7679-466a-9740-638757e603c8", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit4", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit4", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit4", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 3, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "4a31bca3-5aed-4079-9f83-3fd2e605f109", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit5", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "Digit5", + "path": "/ui/RunUIGroup/CombatHud/PlayerPanel/DmgPop_4/Digit5", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 4, + "pathConstraints": "//////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 11.0, + "y": 16.0 + }, + "OffsetMin": { + "x": -11.0, + "y": -16.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 22.0, + "y": 32.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "b94c19830538447f81617035d89bcc05" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "SortingLayer": "MapLayer0", + "StartFrameIndex": 0, + "Color": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 0, "Enable": true } ], @@ -64552,523 +67796,6 @@ "@version": 1 } }, - { - "id": "0cb0014a-0000-4000-8000-00000cb0014a", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", - "jsonString": { - "name": "TooltipBox", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox", - "nameEditable": true, - "enable": false, - "visible": true, - "localize": true, - "displayOrder": 6, - "pathConstraints": "////", - "revision": 1, - "origin": { - "type": "Model", - "entry_id": "UISprite", - "sub_entity_id": null, - "root_entity_id": null, - "replaced_model_id": null - }, - "modelId": "uisprite", - "@components": [ - { - "@type": "MOD.Core.UITransformComponent", - "ActivePlatform": 255, - "AlignmentOption": 0, - "AnchorsMax": { - "x": 0.5, - "y": 0.5 - }, - "AnchorsMin": { - "x": 0.5, - "y": 0.5 - }, - "MobileOnly": false, - "OffsetMax": { - "x": 180.0, - "y": 475.0 - }, - "OffsetMin": { - "x": -180.0, - "y": 325.0 - }, - "Pivot": { - "x": 0.5, - "y": 0.5 - }, - "RectSize": { - "x": 360.0, - "y": 150.0 - }, - "UIMode": 1, - "UIScale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "UIVersion": 2, - "anchoredPosition": { - "x": 0.0, - "y": 400.0 - }, - "Position": { - "x": 0.0, - "y": 400.0, - "z": 0.0 - }, - "QuaternionRotation": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 1.0 - }, - "Scale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteGUIRendererComponent", - "AnimClipPlayType": 0, - "EndFrameIndex": 2147483647, - "ImageRUID": { - "DataId": "" - }, - "LocalPosition": { - "x": 0.0, - "y": 0.0 - }, - "LocalScale": { - "x": 1.0, - "y": 1.0 - }, - "OverrideSorting": false, - "PlayRate": 1.0, - "PreserveSprite": 0, - "StartFrameIndex": 0, - "Color": { - "r": 0.04, - "g": 0.05, - "b": 0.08, - "a": 0.96 - }, - "DropShadow": false, - "DropShadowAngle": 30.0, - "DropShadowColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.72 - }, - "DropShadowDistance": 32.0, - "FillAmount": 1.0, - "FillCenter": true, - "FillClockWise": true, - "FillMethod": 0, - "FillOrigin": 0, - "FlipX": false, - "FlipY": false, - "FrameColumn": 1, - "FrameRate": 0, - "FrameRow": 1, - "Outline": false, - "OutlineColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 1.0 - }, - "OutlineWidth": 3.0, - "RaycastTarget": false, - "Type": 1, - "Enable": true - } - ], - "@version": 1 - } - }, - { - "id": "0cb0014b-0000-4000-8000-00000cb0014b", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox/Name", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", - "jsonString": { - "name": "Name", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox/Name", - "nameEditable": true, - "enable": true, - "visible": true, - "localize": true, - "displayOrder": 0, - "pathConstraints": "/////", - "revision": 1, - "origin": { - "type": "Model", - "entry_id": "UIText", - "sub_entity_id": null, - "root_entity_id": null, - "replaced_model_id": null - }, - "modelId": "uitext", - "@components": [ - { - "@type": "MOD.Core.UITransformComponent", - "ActivePlatform": 255, - "AlignmentOption": 0, - "AnchorsMax": { - "x": 0.5, - "y": 0.5 - }, - "AnchorsMin": { - "x": 0.5, - "y": 0.5 - }, - "MobileOnly": false, - "OffsetMax": { - "x": 166.0, - "y": 66.0 - }, - "OffsetMin": { - "x": -166.0, - "y": 38.0 - }, - "Pivot": { - "x": 0.5, - "y": 0.5 - }, - "RectSize": { - "x": 332.0, - "y": 28.0 - }, - "UIMode": 1, - "UIScale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "UIVersion": 2, - "anchoredPosition": { - "x": 0.0, - "y": 52.0 - }, - "Position": { - "x": 0.0, - "y": 52.0, - "z": 0.0 - }, - "QuaternionRotation": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 1.0 - }, - "Scale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteGUIRendererComponent", - "AnimClipPlayType": 0, - "EndFrameIndex": 2147483647, - "ImageRUID": { - "DataId": "" - }, - "LocalPosition": { - "x": 0.0, - "y": 0.0 - }, - "LocalScale": { - "x": 1.0, - "y": 1.0 - }, - "OverrideSorting": false, - "PlayRate": 1.0, - "PreserveSprite": 0, - "StartFrameIndex": 0, - "Color": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "DropShadow": false, - "DropShadowAngle": 30.0, - "DropShadowColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.72 - }, - "DropShadowDistance": 32.0, - "FillAmount": 1.0, - "FillCenter": true, - "FillClockWise": true, - "FillMethod": 0, - "FillOrigin": 0, - "FlipX": false, - "FlipY": false, - "FrameColumn": 1, - "FrameRate": 0, - "FrameRow": 1, - "Outline": false, - "OutlineColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 1.0 - }, - "OutlineWidth": 3.0, - "RaycastTarget": false, - "Type": 1, - "Enable": true - }, - { - "@type": "MOD.Core.TextComponent", - "Alignment": 4, - "Bold": true, - "DropShadow": false, - "DropShadowAngle": 30.0, - "DropShadowColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.72 - }, - "DropShadowDistance": 32.0, - "Font": 0, - "FontColor": { - "r": 0.94, - "g": 0.74, - "b": 0.26, - "a": 1.0 - }, - "FontSize": 19, - "MaxSize": 19, - "MinSize": 8, - "OutlineColor": { - "r": 0.08, - "g": 0.08, - "b": 0.08, - "a": 1.0 - }, - "OutlineDistance": { - "x": 1.0, - "y": -1.0 - }, - "OutlineWidth": 1.0, - "Overflow": 0, - "OverrideSorting": false, - "Padding": { - "left": 0, - "right": 0, - "top": 0, - "bottom": 0 - }, - "SizeFit": false, - "Text": "", - "UseOutLine": true, - "Enable": true - } - ], - "@version": 1 - } - }, - { - "id": "0cb0014c-0000-4000-8000-00000cb0014c", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox/Desc", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", - "jsonString": { - "name": "Desc", - "path": "/ui/RunUIGroup/CombatHud/TooltipBox/Desc", - "nameEditable": true, - "enable": true, - "visible": true, - "localize": true, - "displayOrder": 1, - "pathConstraints": "/////", - "revision": 1, - "origin": { - "type": "Model", - "entry_id": "UIText", - "sub_entity_id": null, - "root_entity_id": null, - "replaced_model_id": null - }, - "modelId": "uitext", - "@components": [ - { - "@type": "MOD.Core.UITransformComponent", - "ActivePlatform": 255, - "AlignmentOption": 0, - "AnchorsMax": { - "x": 0.5, - "y": 0.5 - }, - "AnchorsMin": { - "x": 0.5, - "y": 0.5 - }, - "MobileOnly": false, - "OffsetMax": { - "x": 166.0, - "y": 33.0 - }, - "OffsetMin": { - "x": -166.0, - "y": -69.0 - }, - "Pivot": { - "x": 0.5, - "y": 0.5 - }, - "RectSize": { - "x": 332.0, - "y": 102.0 - }, - "UIMode": 1, - "UIScale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "UIVersion": 2, - "anchoredPosition": { - "x": 0.0, - "y": -18.0 - }, - "Position": { - "x": 0.0, - "y": -18.0, - "z": 0.0 - }, - "QuaternionRotation": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 1.0 - }, - "Scale": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteGUIRendererComponent", - "AnimClipPlayType": 0, - "EndFrameIndex": 2147483647, - "ImageRUID": { - "DataId": "" - }, - "LocalPosition": { - "x": 0.0, - "y": 0.0 - }, - "LocalScale": { - "x": 1.0, - "y": 1.0 - }, - "OverrideSorting": false, - "PlayRate": 1.0, - "PreserveSprite": 0, - "StartFrameIndex": 0, - "Color": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "DropShadow": false, - "DropShadowAngle": 30.0, - "DropShadowColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.72 - }, - "DropShadowDistance": 32.0, - "FillAmount": 1.0, - "FillCenter": true, - "FillClockWise": true, - "FillMethod": 0, - "FillOrigin": 0, - "FlipX": false, - "FlipY": false, - "FrameColumn": 1, - "FrameRate": 0, - "FrameRow": 1, - "Outline": false, - "OutlineColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 1.0 - }, - "OutlineWidth": 3.0, - "RaycastTarget": false, - "Type": 1, - "Enable": true - }, - { - "@type": "MOD.Core.TextComponent", - "Alignment": 0, - "Bold": false, - "DropShadow": false, - "DropShadowAngle": 30.0, - "DropShadowColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.72 - }, - "DropShadowDistance": 32.0, - "Font": 0, - "FontColor": { - "r": 0.92, - "g": 0.92, - "b": 0.95, - "a": 1.0 - }, - "FontSize": 15, - "MaxSize": 15, - "MinSize": 8, - "OutlineColor": { - "r": 0.08, - "g": 0.08, - "b": 0.08, - "a": 1.0 - }, - "OutlineDistance": { - "x": 1.0, - "y": -1.0 - }, - "OutlineWidth": 1.0, - "Overflow": 0, - "OverrideSorting": false, - "Padding": { - "left": 0, - "right": 0, - "top": 0, - "bottom": 0 - }, - "SizeFit": false, - "Text": "", - "UseOutLine": true, - "Enable": true - } - ], - "@version": 1 - } - }, { "id": "0cb0014d-0000-4000-8000-00000cb0014d", "path": "/ui/RunUIGroup/CombatHud/DiscardPrompt", @@ -65080,7 +67807,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 7, + "displayOrder": 6, "pathConstraints": "////", "revision": 1, "origin": { @@ -65268,7 +67995,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 8, + "displayOrder": 7, "pathConstraints": "////", "revision": 1, "origin": { @@ -66161,7 +68888,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 9, + "displayOrder": 8, "pathConstraints": "////", "revision": 1, "origin": { @@ -66302,7 +69029,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 10, + "displayOrder": 9, "pathConstraints": "////", "revision": 1, "origin": { @@ -66490,7 +69217,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 11, + "displayOrder": 10, "pathConstraints": "////", "revision": 1, "origin": { @@ -67342,7 +70069,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 12, + "displayOrder": 11, "pathConstraints": "////", "revision": 1, "origin": { @@ -68194,7 +70921,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 13, + "displayOrder": 12, "pathConstraints": "////", "revision": 1, "origin": { @@ -69046,7 +71773,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 14, + "displayOrder": 13, "pathConstraints": "////", "revision": 1, "origin": { @@ -69898,7 +72625,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 15, + "displayOrder": 14, "pathConstraints": "////", "revision": 1, "origin": { @@ -70750,7 +73477,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 16, + "displayOrder": 15, "pathConstraints": "////", "revision": 1, "origin": { @@ -71602,7 +74329,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 17, + "displayOrder": 16, "pathConstraints": "////", "revision": 1, "origin": { @@ -72454,7 +75181,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 18, + "displayOrder": 17, "pathConstraints": "////", "revision": 1, "origin": { @@ -73306,7 +76033,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 19, + "displayOrder": 18, "pathConstraints": "////", "revision": 1, "origin": { @@ -74158,7 +76885,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 20, + "displayOrder": 19, "pathConstraints": "////", "revision": 1, "origin": { @@ -75010,7 +77737,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 21, + "displayOrder": 20, "pathConstraints": "////", "revision": 1, "origin": { @@ -75862,7 +78589,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 22, + "displayOrder": 21, "pathConstraints": "////", "revision": 1, "origin": { @@ -76714,7 +79441,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 23, + "displayOrder": 22, "pathConstraints": "////", "revision": 1, "origin": { @@ -77566,7 +80293,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 24, + "displayOrder": 23, "pathConstraints": "////", "revision": 1, "origin": { @@ -78418,7 +81145,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 25, + "displayOrder": 24, "pathConstraints": "////", "revision": 1, "origin": { @@ -79270,7 +81997,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 26, + "displayOrder": 25, "pathConstraints": "////", "revision": 1, "origin": { @@ -80122,7 +82849,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 27, + "displayOrder": 26, "pathConstraints": "////", "revision": 1, "origin": { @@ -80974,7 +83701,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 28, + "displayOrder": 27, "pathConstraints": "////", "revision": 1, "origin": { @@ -81826,7 +84553,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 29, + "displayOrder": 28, "pathConstraints": "////", "revision": 1, "origin": { @@ -82678,7 +85405,7 @@ "enable": false, "visible": true, "localize": true, - "displayOrder": 30, + "displayOrder": 29, "pathConstraints": "////", "revision": 1, "origin": { diff --git a/ui/ToolTipGroup.ui b/ui/ToolTipGroup.ui new file mode 100644 index 0000000..53e8dbd --- /dev/null +++ b/ui/ToolTipGroup.ui @@ -0,0 +1,626 @@ +{ + "Id": "", + "GameId": "", + "EntryKey": "ui://8208cc46-b682-444c-91a0-906bd01d39e1", + "ContentType": "x-mod/ui", + "Content": "", + "Usage": 0, + "UsePublish": 1, + "UseService": 0, + "CoreVersion": "26.5.0.0", + "StudioVersion": "0.1.0.0", + "DynamicLoading": 0, + "ContentProto": { + "Use": "Binary", + "Entities": [ + { + "id": "8208cc46-b682-444c-91a0-906bd01d39e1", + "path": "/ui/ToolTipGroup", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.UIGroupComponent,MOD.Core.CanvasGroupComponent", + "jsonString": { + "name": "ToolTipGroup", + "path": "/ui/ToolTipGroup", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 7, + "pathConstraints": "//", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "uigroup", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uigroup", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "AlignmentOption": 15, + "AnchorsMax": { + "x": 1.0, + "y": 1.0 + }, + "AnchorsMin": { + "x": 0.0, + "y": 0.0 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 0.0, + "y": 0.0 + }, + "OffsetMin": { + "x": 0.0, + "y": 0.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 1920.0, + "y": 1080.0 + }, + "UIMode": 1, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 0.0 + }, + "Position": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.UIGroupComponent", + "DefaultShow": true, + "GroupOrder": 7, + "GroupType": 2, + "Enable": true + }, + { + "@type": "MOD.Core.CanvasGroupComponent", + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb0014a-0000-4000-8000-00000cb0014a", + "path": "/ui/ToolTipGroup/TooltipBox", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", + "jsonString": { + "name": "TooltipBox", + "path": "/ui/ToolTipGroup/TooltipBox", + "nameEditable": true, + "enable": false, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "///", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UISprite", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uisprite", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 179.9999, + "y": 475.0001 + }, + "OffsetMin": { + "x": -180.0001, + "y": 325.0001 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 360.0, + "y": 150.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": -0.0001, + "y": 400.0001 + }, + "Rotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "Position": { + "x": -0.0001, + "y": 400.0001, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": -1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "ZRotation": 0.0, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0.04, + "g": 0.05, + "b": 0.08, + "a": 0.96 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb0014b-0000-4000-8000-00000cb0014b", + "path": "/ui/ToolTipGroup/TooltipBox/Name", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "Name", + "path": "/ui/ToolTipGroup/TooltipBox/Name", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 0, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 166.0, + "y": 66.0 + }, + "OffsetMin": { + "x": -166.0, + "y": 38.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 332.0, + "y": 28.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": 52.0 + }, + "Position": { + "x": 0.0, + "y": 52.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 4, + "Bold": true, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "Font": 0, + "FontColor": { + "r": 0.94, + "g": 0.74, + "b": 0.26, + "a": 1.0 + }, + "FontSize": 19, + "MaxSize": 19, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1.0 + }, + "OutlineDistance": { + "x": 1.0, + "y": -1.0 + }, + "OutlineWidth": 1.0, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + }, + { + "id": "0cb0014c-0000-4000-8000-00000cb0014c", + "path": "/ui/ToolTipGroup/TooltipBox/Desc", + "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent", + "jsonString": { + "name": "Desc", + "path": "/ui/ToolTipGroup/TooltipBox/Desc", + "nameEditable": true, + "enable": true, + "visible": true, + "localize": true, + "displayOrder": 1, + "pathConstraints": "////", + "revision": 1, + "origin": { + "type": "Model", + "entry_id": "UIText", + "sub_entity_id": null, + "root_entity_id": null, + "replaced_model_id": null + }, + "modelId": "uitext", + "@components": [ + { + "@type": "MOD.Core.UITransformComponent", + "ActivePlatform": 255, + "AlignmentOption": 0, + "AnchorsMax": { + "x": 0.5, + "y": 0.5 + }, + "AnchorsMin": { + "x": 0.5, + "y": 0.5 + }, + "MobileOnly": false, + "OffsetMax": { + "x": 166.0, + "y": 33.0 + }, + "OffsetMin": { + "x": -166.0, + "y": -69.0 + }, + "Pivot": { + "x": 0.5, + "y": 0.5 + }, + "RectSize": { + "x": 332.0, + "y": 102.0 + }, + "UIMode": 1, + "UIScale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "UIVersion": 2, + "anchoredPosition": { + "x": 0.0, + "y": -18.0 + }, + "Position": { + "x": 0.0, + "y": -18.0, + "z": 0.0 + }, + "QuaternionRotation": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + }, + "Scale": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + }, + "Enable": true + }, + { + "@type": "MOD.Core.SpriteGUIRendererComponent", + "AnimClipPlayType": 0, + "EndFrameIndex": 2147483647, + "ImageRUID": { + "DataId": "" + }, + "LocalPosition": { + "x": 0.0, + "y": 0.0 + }, + "LocalScale": { + "x": 1.0, + "y": 1.0 + }, + "OverrideSorting": false, + "PlayRate": 1.0, + "PreserveSprite": 0, + "StartFrameIndex": 0, + "Color": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "FillAmount": 1.0, + "FillCenter": true, + "FillClockWise": true, + "FillMethod": 0, + "FillOrigin": 0, + "FlipX": false, + "FlipY": false, + "FrameColumn": 1, + "FrameRate": 0, + "FrameRow": 1, + "Outline": false, + "OutlineColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "OutlineWidth": 3.0, + "RaycastTarget": false, + "Type": 1, + "Enable": true + }, + { + "@type": "MOD.Core.TextComponent", + "Alignment": 0, + "Bold": false, + "DropShadow": false, + "DropShadowAngle": 30.0, + "DropShadowColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.72 + }, + "DropShadowDistance": 32.0, + "Font": 0, + "FontColor": { + "r": 0.92, + "g": 0.92, + "b": 0.95, + "a": 1.0 + }, + "FontSize": 15, + "MaxSize": 15, + "MinSize": 8, + "OutlineColor": { + "r": 0.08, + "g": 0.08, + "b": 0.08, + "a": 1.0 + }, + "OutlineDistance": { + "x": 1.0, + "y": -1.0 + }, + "OutlineWidth": 1.0, + "Overflow": 0, + "OverrideSorting": false, + "Padding": { + "left": 0, + "right": 0, + "top": 0, + "bottom": 0 + }, + "SizeFit": false, + "Text": "", + "UseOutLine": true, + "Enable": true + } + ], + "@version": 1 + } + } + ] + } +} \ No newline at end of file -- 2.49.1