From d546d627555732b43f1b1057457ef997862e3dd4 Mon Sep 17 00:00:00 2001 From: gahusb Date: Sun, 14 Jun 2026 00:38:52 +0900 Subject: [PATCH] =?UTF-8?q?feat(thief):=20=EB=8F=84=EC=A0=81=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20+=202=EC=B0=A8=20=EC=A0=84=EC=A7=81(?= =?UTF-8?q?=EC=96=B4=EC=8C=94=EC=8B=A0/=EC=8B=9C=ED=94=84)=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(P14-4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLASSES.thief(maxHp 75), JOBS.thief = [어쌔신(CriticalThrow), 시프(SavageBlow)] - 카드 11종: 도적1차(럭키세븐/더블스탭/다크사이트/헤이스트/드레인) · 어쌔신(크리티컬스로우/쉐도우스타/클로마스터리) · 시프(새비지블로우/스틸/메소가드), starterDecks.thief 추가 - cardframes classToFrame: thief/assassin/bandit → bandit 프레임(기존 RUID 재사용) - CharacterSelectHud Thief 해금, BindMenuButtons ThiefButton, RenderCharacterSelect· StartNewGame·StartRun·JobLabel 도적 분기. 전사/법사 2차는 기존 완비 확인 - 산출물 재생성(생성기 검증 통과) Co-Authored-By: Claude Opus 4.8 (1M context) --- RootDesk/MyDesk/SlayDeckController.codeblock | 19 +- data/cardframes.json | 1 + data/cards.json | 121 +++++++ tools/deck/gen-slaydeck.mjs | 33 +- ui/DefaultGroup.ui | 312 +------------------ 5 files changed, 181 insertions(+), 305 deletions(-) diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index 016d358..1c6729e 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -106,6 +106,13 @@ "Attributes": [], "Name": "MageSelectHandler" }, + { + "Type": "any", + "DefaultValue": "nil", + "SyncDirection": 0, + "Attributes": [], + "Name": "ThiefSelectHandler" + }, { "Type": "any", "DefaultValue": "nil", @@ -822,7 +829,7 @@ "Name": null }, "Arguments": [], - "Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and buttonEntity.ButtonComponent ~= nil then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowCharacterSelect() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.ButtonComponent ~= nil then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.ButtonComponent ~= nil then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal start = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and start.ButtonComponent ~= nil then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and ascMinus.ButtonComponent ~= nil then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and ascPlus.ButtonComponent ~= nil then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend", + "Code": "local buttonEntity = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/NewGameButton\")\nif buttonEntity ~= nil and buttonEntity.ButtonComponent ~= nil then\n\tif self.NewGameHandler ~= nil then\n\t\tbuttonEntity:DisconnectEvent(ButtonClickEvent, self.NewGameHandler)\n\t\tself.NewGameHandler = nil\n\tend\n\tself.NewGameHandler = buttonEntity:ConnectEvent(ButtonClickEvent, function() self:ShowCharacterSelect() end)\nend\nlocal warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.ButtonComponent ~= nil then\n\tif self.WarriorSelectHandler ~= nil then\n\t\twarrior:DisconnectEvent(ButtonClickEvent, self.WarriorSelectHandler)\n\t\tself.WarriorSelectHandler = nil\n\tend\n\tself.WarriorSelectHandler = warrior:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"warrior\") end)\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.ButtonComponent ~= nil then\n\tif self.MageSelectHandler ~= nil then\n\t\tmage:DisconnectEvent(ButtonClickEvent, self.MageSelectHandler)\n\t\tself.MageSelectHandler = nil\n\tend\n\tself.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"magician\") end)\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/ThiefButton\")\nif thief ~= nil and thief.ButtonComponent ~= nil then\n\tif self.ThiefSelectHandler ~= nil then\n\t\tthief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler)\n\t\tself.ThiefSelectHandler = nil\n\tend\n\tself.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass(\"thief\") end)\nend\nlocal start = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/StartButton\")\nif start ~= nil and start.ButtonComponent ~= nil then\n\tif self.StartGameHandler ~= nil then\n\t\tstart:DisconnectEvent(ButtonClickEvent, self.StartGameHandler)\n\t\tself.StartGameHandler = nil\n\tend\n\tself.StartGameHandler = start:ConnectEvent(ButtonClickEvent, function() self:StartNewGame() end)\nend\nlocal ascMinus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscMinus\")\nif ascMinus ~= nil and ascMinus.ButtonComponent ~= nil then\n\tif self.AscMinusHandler ~= nil then\n\t\tascMinus:DisconnectEvent(ButtonClickEvent, self.AscMinusHandler)\n\t\tself.AscMinusHandler = nil\n\tend\n\tself.AscMinusHandler = ascMinus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(-1) end)\nend\nlocal ascPlus = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/MainMenu/AscPlus\")\nif ascPlus ~= nil and ascPlus.ButtonComponent ~= nil then\n\tif self.AscPlusHandler ~= nil then\n\t\tascPlus:DisconnectEvent(ButtonClickEvent, self.AscPlusHandler)\n\t\tself.AscPlusHandler = nil\n\tend\n\tself.AscPlusHandler = ascPlus:ConnectEvent(ButtonClickEvent, function() self:AdjustAscension(1) end)\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -875,7 +882,7 @@ "Name": null }, "Arguments": [], - "Code": "local warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.SpriteGUIRendererComponent ~= nil then\n\tif self.SelectedClass == \"warrior\" then\n\t\twarrior.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)\n\telse\n\t\twarrior.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)\n\tend\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then\n\tif self.SelectedClass == \"magician\" then\n\t\tmage.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)\n\telse\n\t\tmage.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"전사 선택됨\")\nelseif self.SelectedClass == \"magician\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"마법사 선택됨\")\nelse\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"직업을 선택하고 시작하세요\")\nend", + "Code": "local warrior = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/WarriorButton\")\nif warrior ~= nil and warrior.SpriteGUIRendererComponent ~= nil then\n\tif self.SelectedClass == \"warrior\" then\n\t\twarrior.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)\n\telse\n\t\twarrior.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)\n\tend\nend\nlocal mage = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/MageButton\")\nif mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then\n\tif self.SelectedClass == \"magician\" then\n\t\tmage.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)\n\telse\n\t\tmage.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)\n\tend\nend\nlocal thief = _EntityService:GetEntityByPath(\"/ui/DefaultGroup/CharacterSelectHud/ThiefButton\")\nif thief ~= nil and thief.SpriteGUIRendererComponent ~= nil then\n\tif self.SelectedClass == \"thief\" then\n\t\tthief.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1)\n\telse\n\t\tthief.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1)\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"전사 선택됨\")\nelseif self.SelectedClass == \"magician\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"마법사 선택됨\")\nelseif self.SelectedClass == \"thief\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"도적 선택됨\")\nelse\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"직업을 선택하고 시작하세요\")\nend", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -890,7 +897,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SelectedClass ~= \"warrior\" and self.SelectedClass ~= \"magician\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"직업을 먼저 선택하세요\")\n\treturn\nend\nself:StartRun()", + "Code": "if self.SelectedClass ~= \"warrior\" and self.SelectedClass ~= \"magician\" and self.SelectedClass ~= \"thief\" then\n\tself:SetText(\"/ui/DefaultGroup/CharacterSelectHud/Status\", \"직업을 먼저 선택하세요\")\n\treturn\nend\nself:StartRun()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -935,7 +942,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 골드 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\" },\n\t},\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\tbandit = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"bandit\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:RenderPotions()\nself:ShowMap()", + "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelseif self.SelectedClass == \"thief\" then\n\tself.PlayerMaxHp = 75\n\tself.RunDeck = { \"LuckySeven\", \"LuckySeven\", \"LuckySeven\", \"LuckySeven\", \"LuckySeven\", \"DarkSight\", \"DarkSight\", \"DarkSight\", \"DarkSight\", \"DoubleStab\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 골드 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\" },\n\t},\n\tthief = {\n\t\t{ id = \"assassin\", name = \"어쌔신\", desc = \"표창·치명타 특화\\n크리티컬 스로우\\n쉐도우 스타 · 클로\", starter = \"CriticalThrow\" },\n\t\t{ id = \"bandit\", name = \"시프\", desc = \"단검 연타 특화\\n새비지 블로우\\n스틸 · 메소 가드\", starter = \"SavageBlow\" },\n\t},\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\tbandit = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tthief = \"bandit\",\n\tassassin = \"bandit\",\n\tbandit = \"bandit\",\n\tcurse = \"bandit\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:RenderPotions()\nself:ShowMap()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -950,7 +957,7 @@ "Name": null }, "Arguments": [], - "Code": "self:ShowState(\"combat\")\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/TooltipBox\", false)\nself:SetText(\"/ui/DefaultGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.PlayerStr = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.CombatOver = false\nself.DiscardPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", image = \"a71b116807904ef2b38e1dc013e2f9a2\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"1ae9b6741c5947a8b528a0f515b50e3e\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", image = \"d5bc2953fcab4cfe9062af81c35aff86\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"warrior\", rarity = \"legend\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"cef30ea340c74e768bcee4e2cbe0577a\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", image = \"3a3d4b8bb5bd4137847caf883e4bf38e\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", image = \"f1b7e3041909411eb67af884b446e1e1\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", image = \"7915c70952ad432f99519ad79bf929a4\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, image = \"e312e535a2bc4fed82d36f9c6027c9db\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", image = \"a1ee3069fce14498b92998542679ae40\" },\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, image = \"d6e7c04c436f42f19e9806ac5b4401ae\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", draw = 1, image = \"80c98c8e032b4f6c8371a24b4e1d8f14\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"16f79f571a964430bf1953edc9a14c73\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", image = \"78b9be4e711c440f84fc21e51e812bae\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"b4e8bd7508b54d208e4f2ad7414f8c0a\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"9859f3ab41b945f797d56cd83f95b25f\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, 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 = \"b2a7274d868241c78aa5780f2beecddf\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"b4127c181e2942e38821d4a9a1f14596\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"d45553db4a414011b67486dfa8a12fe5\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", image = \"0265e103b4904f178b1c2bdcd54d5975\" },\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}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()", + "Code": "self:ShowState(\"combat\")\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/DefaultGroup/CombatHud/TooltipBox\", false)\nself:SetText(\"/ui/DefaultGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.PlayerStr = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.CombatOver = false\nself.DiscardPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", image = \"a71b116807904ef2b38e1dc013e2f9a2\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"1ae9b6741c5947a8b528a0f515b50e3e\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", image = \"d5bc2953fcab4cfe9062af81c35aff86\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"매 턴 시작 시 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"warrior\", rarity = \"legend\", image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"cef30ea340c74e768bcee4e2cbe0577a\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", image = \"3a3d4b8bb5bd4137847caf883e4bf38e\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", image = \"f1b7e3041909411eb67af884b446e1e1\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", image = \"7915c70952ad432f99519ad79bf929a4\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, image = \"e312e535a2bc4fed82d36f9c6027c9db\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", image = \"a1ee3069fce14498b92998542679ae40\" },\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, image = \"d6e7c04c436f42f19e9806ac5b4401ae\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", draw = 1, image = \"80c98c8e032b4f6c8371a24b4e1d8f14\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"16f79f571a964430bf1953edc9a14c73\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", image = \"78b9be4e711c440f84fc21e51e812bae\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"b4e8bd7508b54d208e4f2ad7414f8c0a\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"9859f3ab41b945f797d56cd83f95b25f\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, 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 = \"b2a7274d868241c78aa5780f2beecddf\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"b4127c181e2942e38821d4a9a1f14596\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"d45553db4a414011b67486dfa8a12fe5\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", image = \"0265e103b4904f178b1c2bdcd54d5975\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"thief\", rarity = \"normal\", hits = 2 },\n\tDoubleStab = { name = \"더블 스탭\", cost = 2, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"thief\", rarity = \"normal\", hits = 2 },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"방어도 6\", kind = \"Skill\", block = 6, class = \"thief\", rarity = \"normal\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"thief\", rarity = \"normal\", draw = 1 },\n\tDrain = { name = \"드레인\", cost = 1, desc = \"피해 5, HP 3 회복\", kind = \"Attack\", damage = 5, class = \"thief\", rarity = \"unique\", heal = 3 },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 2, desc = \"피해 8 × 2회\", kind = \"Attack\", damage = 8, class = \"assassin\", rarity = \"unique\", hits = 2 },\n\tShadowStar = { name = \"쉐도우 스타\", cost = 1, desc = \"피해 6, 약화 1\", kind = \"Attack\", damage = 6, weak = 1, class = \"assassin\", rarity = \"unique\" },\n\tClawMastery = { name = \"클로 마스터리\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"assassin\", rarity = \"legend\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해 3 × 3회\", kind = \"Attack\", damage = 3, class = \"bandit\", rarity = \"unique\", hits = 3 },\n\tSteal = { name = \"스틸\", cost = 1, desc = \"방어도 4, 드로 1\", kind = \"Skill\", block = 4, class = \"bandit\", rarity = \"unique\", draw = 1 },\n\tMesoGuard = { name = \"메소 가드\", cost = 1, desc = \"매 턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"bandit\", rarity = \"legend\" },\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}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1973,7 +1980,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.PlayerJob ~= \"\" and self.Jobs ~= nil then\n\tfor cls, list in pairs(self.Jobs) do\n\t\tfor i = 1, #list do\n\t\t\tif list[i].id == self.PlayerJob then\n\t\t\t\treturn list[i].name\n\t\t\tend\n\t\tend\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\treturn \"전사\"\nelseif self.SelectedClass == \"magician\" then\n\treturn \"마법사\"\nend\nreturn \"플레이어\"", + "Code": "if self.PlayerJob ~= \"\" and self.Jobs ~= nil then\n\tfor cls, list in pairs(self.Jobs) do\n\t\tfor i = 1, #list do\n\t\t\tif list[i].id == self.PlayerJob then\n\t\t\t\treturn list[i].name\n\t\t\tend\n\t\tend\n\tend\nend\nif self.SelectedClass == \"warrior\" then\n\treturn \"전사\"\nelseif self.SelectedClass == \"magician\" then\n\treturn \"마법사\"\nelseif self.SelectedClass == \"thief\" then\n\treturn \"도적\"\nend\nreturn \"플레이어\"", "Scope": 2, "ExecSpace": 6, "Attributes": [], diff --git a/data/cardframes.json b/data/cardframes.json index 2c8a2f9..c8f06aa 100644 --- a/data/cardframes.json +++ b/data/cardframes.json @@ -7,6 +7,7 @@ "classToFrame": { "warrior": "warrior", "fighter": "warrior", "page": "warrior", "spearman": "warrior", "magician": "magician", "firepoison": "magician", "icelightning": "magician", "cleric": "magician", + "thief": "bandit", "assassin": "bandit", "bandit": "bandit", "curse": "bandit" }, "rewardWeights": { "normal": 70, "unique": 25, "legend": 5 } diff --git a/data/cards.json b/data/cards.json index cc9ed03..69a8d65 100644 --- a/data/cards.json +++ b/data/cards.json @@ -336,6 +336,115 @@ "image": "0265e103b4904f178b1c2bdcd54d5975", "rarity": "unique" }, + "LuckySeven": { + "name": "럭키 세븐", + "cost": 1, + "kind": "Attack", + "class": "thief", + "damage": 3, + "hits": 2, + "desc": "피해 3 × 2회", + "rarity": "normal" + }, + "DoubleStab": { + "name": "더블 스탭", + "cost": 2, + "kind": "Attack", + "class": "thief", + "damage": 5, + "hits": 2, + "desc": "피해 5 × 2회", + "rarity": "normal" + }, + "DarkSight": { + "name": "다크 사이트", + "cost": 1, + "kind": "Skill", + "class": "thief", + "block": 6, + "desc": "방어도 6", + "rarity": "normal" + }, + "Haste": { + "name": "헤이스트", + "cost": 1, + "kind": "Skill", + "class": "thief", + "block": 3, + "draw": 1, + "desc": "방어도 3, 드로 1", + "rarity": "normal" + }, + "Drain": { + "name": "드레인", + "cost": 1, + "kind": "Attack", + "class": "thief", + "damage": 5, + "heal": 3, + "desc": "피해 5, HP 3 회복", + "rarity": "unique" + }, + "CriticalThrow": { + "name": "크리티컬 스로우", + "cost": 2, + "kind": "Attack", + "class": "assassin", + "damage": 8, + "hits": 2, + "desc": "피해 8 × 2회", + "rarity": "unique" + }, + "ShadowStar": { + "name": "쉐도우 스타", + "cost": 1, + "kind": "Attack", + "class": "assassin", + "damage": 6, + "weak": 1, + "desc": "피해 6, 약화 1", + "rarity": "unique" + }, + "ClawMastery": { + "name": "클로 마스터리", + "cost": 1, + "kind": "Power", + "class": "assassin", + "powerEffect": "strengthPerTurn", + "value": 1, + "desc": "매 턴 힘 +1", + "rarity": "legend" + }, + "SavageBlow": { + "name": "새비지 블로우", + "cost": 1, + "kind": "Attack", + "class": "bandit", + "damage": 3, + "hits": 3, + "desc": "피해 3 × 3회", + "rarity": "unique" + }, + "Steal": { + "name": "스틸", + "cost": 1, + "kind": "Skill", + "class": "bandit", + "block": 4, + "draw": 1, + "desc": "방어도 4, 드로 1", + "rarity": "unique" + }, + "MesoGuard": { + "name": "메소 가드", + "cost": 1, + "kind": "Power", + "class": "bandit", + "powerEffect": "blockPerTurn", + "value": 3, + "desc": "매 턴 방어도 +3", + "rarity": "legend" + }, "Wound": { "name": "상처", "cost": 0, @@ -382,6 +491,18 @@ "MagicGuard", "MagicGuard", "MagicClaw" + ], + "thief": [ + "LuckySeven", + "LuckySeven", + "LuckySeven", + "LuckySeven", + "LuckySeven", + "DarkSight", + "DarkSight", + "DarkSight", + "DarkSight", + "DoubleStab" ] } } diff --git a/tools/deck/gen-slaydeck.mjs b/tools/deck/gen-slaydeck.mjs index 512b606..1a19028 100644 --- a/tools/deck/gen-slaydeck.mjs +++ b/tools/deck/gen-slaydeck.mjs @@ -7,6 +7,7 @@ const ENEMIES = JSON.parse(readFileSync('data/enemies.json', 'utf8')); const CLASSES = { warrior: { label: '전사', maxHp: 80 }, magician: { label: '마법사', maxHp: 70 }, + thief: { label: '도적', maxHp: 75 }, }; for (const cls of Object.keys(CLASSES)) { if (!CARDS.starterDecks?.[cls]) throw new Error(`[gen-slaydeck] starterDecks.${cls} 없음`); @@ -26,6 +27,10 @@ const JOBS = { { id: 'icelightning', name: '위자드(썬·콜)', desc: '광역·빙결 특화\n썬더 볼트(전체)\n콜드 빔 · 칠링 스텝', starter: 'ThunderBolt' }, { id: 'cleric', name: '클레릭', desc: '회복·축복 특화\n힐 · 블레스\n홀리 애로우', starter: 'Heal' }, ], + thief: [ + { id: 'assassin', name: '어쌔신', desc: '표창·치명타 특화\n크리티컬 스로우\n쉐도우 스타 · 클로', starter: 'CriticalThrow' }, + { id: 'bandit', name: '시프', desc: '단검 연타 특화\n새비지 블로우\n스틸 · 메소 가드', starter: 'SavageBlow' }, + ], }; for (const [cls, jobs] of Object.entries(JOBS)) { for (const j of jobs) { @@ -2247,7 +2252,7 @@ function upsertUi() { })); const classCards = [ { key: 'Warrior', label: '\uC804\uC0AC', desc: '\uAC15\uD55C \uACF5\uACA9\uACFC \uBC29\uC5B4', x: -360, enabled: true, tint: { r: 0.74, g: 0.32, b: 0.28, a: 1 } }, - { key: 'Thief', label: '\uB3C4\uC801', desc: '\uCD94\uD6C4 \uC5F4\uB9BC', x: 0, enabled: false, tint: { r: 0.18, g: 0.19, b: 0.21, a: 1 } }, + { key: 'Thief', label: '\uB3C4\uC801', desc: '\uBE60\uB978 \uB2E8\uAC80 \uC5F0\uD0C0', x: 0, enabled: true, tint: { r: 0.5, g: 0.32, b: 0.6, a: 1 } }, { key: 'Mage', label: '\uB9C8\uBC95\uC0AC', desc: '\uB9C8\uBC95 \uC6D0\uAC70\uB9AC \uB51C\uB7EC', x: 360, enabled: true, tint: { r: 0.3, g: 0.4, b: 0.75, a: 1 } }, ]; for (let i = 0; i < classCards.length; i++) { @@ -2438,6 +2443,7 @@ function writeCodeblocks() { prop('any', 'NewGameHandler'), prop('any', 'WarriorSelectHandler'), prop('any', 'MageSelectHandler'), + prop('any', 'ThiefSelectHandler'), prop('any', 'AscMinusHandler'), prop('any', 'AscPlusHandler'), prop('any', 'JobOpts'), @@ -2615,6 +2621,14 @@ if mage ~= nil and mage.ButtonComponent ~= nil then end self.MageSelectHandler = mage:ConnectEvent(ButtonClickEvent, function() self:SelectClass("magician") end) end +local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton") +if thief ~= nil and thief.ButtonComponent ~= nil then + if self.ThiefSelectHandler ~= nil then + thief:DisconnectEvent(ButtonClickEvent, self.ThiefSelectHandler) + self.ThiefSelectHandler = nil + end + self.ThiefSelectHandler = thief:ConnectEvent(ButtonClickEvent, function() self:SelectClass("thief") end) +end local start = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/StartButton") if start ~= nil and start.ButtonComponent ~= nil then if self.StartGameHandler ~= nil then @@ -2662,14 +2676,24 @@ if mage ~= nil and mage.SpriteGUIRendererComponent ~= nil then mage.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1) end end +local thief = _EntityService:GetEntityByPath("/ui/DefaultGroup/CharacterSelectHud/ThiefButton") +if thief ~= nil and thief.SpriteGUIRendererComponent ~= nil then + if self.SelectedClass == "thief" then + thief.SpriteGUIRendererComponent.Color = Color(0.28, 0.36, 0.46, 1) + else + thief.SpriteGUIRendererComponent.Color = Color(0.16, 0.2, 0.26, 1) + end +end if self.SelectedClass == "warrior" then self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "전사 선택됨") elseif self.SelectedClass == "magician" then self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "마법사 선택됨") +elseif self.SelectedClass == "thief" then + self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "도적 선택됨") else self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 선택하고 시작하세요") end`), - method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "magician" then + method('StartNewGame', `if self.SelectedClass ~= "warrior" and self.SelectedClass ~= "magician" and self.SelectedClass ~= "thief" then self:SetText("/ui/DefaultGroup/CharacterSelectHud/Status", "직업을 먼저 선택하세요") return end @@ -2684,6 +2708,9 @@ end`, [ method('StartRun', `if self.SelectedClass == "magician" then self.PlayerMaxHp = ${CLASSES.magician.maxHp} self.RunDeck = { ${CARDS.starterDecks.magician.map(luaStr).join(', ')} } +elseif self.SelectedClass == "thief" then + self.PlayerMaxHp = ${CLASSES.thief.maxHp} + self.RunDeck = { ${CARDS.starterDecks.thief.map(luaStr).join(', ')} } else self.PlayerMaxHp = ${CLASSES.warrior.maxHp} self.RunDeck = { ${CARDS.starterDecks.warrior.map(luaStr).join(', ')} } @@ -3805,6 +3832,8 @@ if self.SelectedClass == "warrior" then return "전사" elseif self.SelectedClass == "magician" then return "마법사" +elseif self.SelectedClass == "thief" then + return "도적" end return "플레이어"`, [], 0, 'string'), method('SetJob', `self.PlayerJob = jobId diff --git a/ui/DefaultGroup.ui b/ui/DefaultGroup.ui index d0493dd..11ded7b 100644 --- a/ui/DefaultGroup.ui +++ b/ui/DefaultGroup.ui @@ -229259,9 +229259,9 @@ "PreserveSprite": 0, "StartFrameIndex": 0, "Color": { - "r": 0.11, - "g": 0.12, - "b": 0.14, + "r": 0.16, + "g": 0.2, + "b": 0.26, "a": 1 }, "DropShadow": false, @@ -229291,7 +229291,7 @@ "a": 1 }, "OutlineWidth": 3, - "RaycastTarget": false, + "RaycastTarget": true, "Type": 1, "Enable": true }, @@ -229340,7 +229340,7 @@ "KeyCode": 0, "OverrideSorting": false, "Transition": 1, - "Enable": false + "Enable": true } ], "@version": 1 @@ -229498,9 +229498,9 @@ "DropShadowDistance": 32, "Font": 0, "FontColor": { - "r": 0.55, - "g": 0.58, - "b": 0.62, + "r": 0.94, + "g": 0.74, + "b": 0.26, "a": 1 }, "FontSize": 34, @@ -229635,9 +229635,9 @@ "PreserveSprite": 0, "StartFrameIndex": 0, "Color": { - "r": 0.18, - "g": 0.19, - "b": 0.21, + "r": 0.5, + "g": 0.32, + "b": 0.6, "a": 1 }, "DropShadow": false, @@ -229827,9 +229827,9 @@ "DropShadowDistance": 32, "Font": 0, "FontColor": { - "r": 0.52, - "g": 0.55, - "b": 0.59, + "r": 0.86, + "g": 0.9, + "b": 0.94, "a": 1 }, "FontSize": 20, @@ -229855,7 +229855,7 @@ "bottom": 0 }, "SizeFit": false, - "Text": "추후 열림", + "Text": "빠른 단검 연타", "UseOutLine": true, "Enable": true } @@ -229863,288 +229863,6 @@ "@version": 1 } }, - { - "id": "0e000097-0000-4000-8000-00000e000097", - "path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockBody", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", - "jsonString": { - "name": "LockBody", - "path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockBody", - "nameEditable": true, - "enable": true, - "visible": true, - "localize": true, - "displayOrder": 3, - "pathConstraints": "/////", - "revision": 1, - "origin": { - "type": "Model", - "entry_id": "UISprite", - "sub_entity_id": null, - "root_entity_id": null, - "replaced_model_id": null - }, - "modelId": "uisprite", - "@components": [ - { - "@type": "MOD.Core.UITransformComponent", - "ActivePlatform": 255, - "AlignmentOption": 0, - "AnchorsMax": { - "x": 0.5, - "y": 0.5 - }, - "AnchorsMin": { - "x": 0.5, - "y": 0.5 - }, - "MobileOnly": false, - "OffsetMax": { - "x": 38, - "y": 33 - }, - "OffsetMin": { - "x": -38, - "y": -25 - }, - "Pivot": { - "x": 0.5, - "y": 0.5 - }, - "RectSize": { - "x": 76, - "y": 58 - }, - "UIMode": 1, - "UIScale": { - "x": 1, - "y": 1, - "z": 1 - }, - "UIVersion": 2, - "anchoredPosition": { - "x": 0, - "y": 4 - }, - "Position": { - "x": 0, - "y": 4, - "z": 0 - }, - "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "Scale": { - "x": 1, - "y": 1, - "z": 1 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteGUIRendererComponent", - "AnimClipPlayType": 0, - "EndFrameIndex": 2147483647, - "ImageRUID": { - "DataId": "" - }, - "LocalPosition": { - "x": 0, - "y": 0 - }, - "LocalScale": { - "x": 1, - "y": 1 - }, - "OverrideSorting": false, - "PlayRate": 1, - "PreserveSprite": 0, - "StartFrameIndex": 0, - "Color": { - "r": 0.78, - "g": 0.69, - "b": 0.42, - "a": 1 - }, - "DropShadow": false, - "DropShadowAngle": 30, - "DropShadowColor": { - "r": 0, - "g": 0, - "b": 0, - "a": 0.72 - }, - "DropShadowDistance": 32, - "FillAmount": 1, - "FillCenter": true, - "FillClockWise": true, - "FillMethod": 0, - "FillOrigin": 0, - "FlipX": false, - "FlipY": false, - "FrameColumn": 1, - "FrameRate": 0, - "FrameRow": 1, - "Outline": false, - "OutlineColor": { - "r": 0, - "g": 0, - "b": 0, - "a": 1 - }, - "OutlineWidth": 3, - "RaycastTarget": false, - "Type": 1, - "Enable": true - } - ], - "@version": 1 - } - }, - { - "id": "0e0000a1-0000-4000-8000-00000e0000a1", - "path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockShackle", - "componentNames": "MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent", - "jsonString": { - "name": "LockShackle", - "path": "/ui/DefaultGroup/CharacterSelectHud/ThiefButton/LockShackle", - "nameEditable": true, - "enable": true, - "visible": true, - "localize": true, - "displayOrder": 4, - "pathConstraints": "/////", - "revision": 1, - "origin": { - "type": "Model", - "entry_id": "UISprite", - "sub_entity_id": null, - "root_entity_id": null, - "replaced_model_id": null - }, - "modelId": "uisprite", - "@components": [ - { - "@type": "MOD.Core.UITransformComponent", - "ActivePlatform": 255, - "AlignmentOption": 0, - "AnchorsMax": { - "x": 0.5, - "y": 0.5 - }, - "AnchorsMin": { - "x": 0.5, - "y": 0.5 - }, - "MobileOnly": false, - "OffsetMax": { - "x": 27, - "y": 69 - }, - "OffsetMin": { - "x": -27, - "y": 27 - }, - "Pivot": { - "x": 0.5, - "y": 0.5 - }, - "RectSize": { - "x": 54, - "y": 42 - }, - "UIMode": 1, - "UIScale": { - "x": 1, - "y": 1, - "z": 1 - }, - "UIVersion": 2, - "anchoredPosition": { - "x": 0, - "y": 48 - }, - "Position": { - "x": 0, - "y": 48, - "z": 0 - }, - "QuaternionRotation": { - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "Scale": { - "x": 1, - "y": 1, - "z": 1 - }, - "Enable": true - }, - { - "@type": "MOD.Core.SpriteGUIRendererComponent", - "AnimClipPlayType": 0, - "EndFrameIndex": 2147483647, - "ImageRUID": { - "DataId": "" - }, - "LocalPosition": { - "x": 0, - "y": 0 - }, - "LocalScale": { - "x": 1, - "y": 1 - }, - "OverrideSorting": false, - "PlayRate": 1, - "PreserveSprite": 0, - "StartFrameIndex": 0, - "Color": { - "r": 0.78, - "g": 0.69, - "b": 0.42, - "a": 1 - }, - "DropShadow": false, - "DropShadowAngle": 30, - "DropShadowColor": { - "r": 0, - "g": 0, - "b": 0, - "a": 0.72 - }, - "DropShadowDistance": 32, - "FillAmount": 1, - "FillCenter": true, - "FillClockWise": true, - "FillMethod": 0, - "FillOrigin": 0, - "FlipX": false, - "FlipY": false, - "FrameColumn": 1, - "FrameRate": 0, - "FrameRow": 1, - "Outline": false, - "OutlineColor": { - "r": 0, - "g": 0, - "b": 0, - "a": 1 - }, - "OutlineWidth": 3, - "RaycastTarget": false, - "Type": 1, - "Enable": true - } - ], - "@version": 1 - } - }, { "id": "0e000070-0000-4000-8000-00000e000070", "path": "/ui/DefaultGroup/CharacterSelectHud/MageButton",