import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs'; import { CARDS, ENEMIES, CLASSES, JOBS, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs'; import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, DISABLED_STOCK_CONTROLS, TRANSPARENT, DARK, GOLD, ATTACK, DEFEND, SKILL, DAMAGE_DIGIT_RUIDS, DAMAGE_POP_MAX_DIGITS, DAMAGE_POP_DIGIT_W, DAMAGE_POP_DIGIT_H, DAMAGE_POP_DIGIT_SPACING, MAX_MONSTERS, HEAD_OFFSET_Y, HP_BAR_W, WHITE, CARD_NAME_TEXT, CARD_DESC_TEXT, cardFaceLayout, CARD_W, CARD_H, CARD_SPACING, CARD_XS, ALIGN_CENTER, ALIGN_BOTTOM_CENTER, guid, transform, sprite, button, text, scrollLayoutGroup, popupLayerFor, uiOrderFor, displayOrderFor, applySortingOverride, entity, uiPath, sectionRoot, isGeneratedUiEntity, appendUiSection } from '../lib/ui-helpers.mjs'; export const deckTurnMethods = [ method('Shuffle', `if list == nil then \treturn end for i = #list, 2, -1 do \tlocal j = math.random(1, i) \tlist[i], list[j] = list[j], list[i] end`, [{ Type: 'any', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'list' }]), method('BindButtons', `if self.ButtonsBound == true then return end self.ButtonsBound = true local endTurn = _EntityService:GetEntityByPath("/ui/RunUIGroup/DeckHud/EndTurnButton") if endTurn ~= nil and (endTurn.ButtonComponent ~= nil or endTurn:AddComponent("ButtonComponent") ~= nil) then if self.EndTurnHandler ~= nil then endTurn:DisconnectEvent(ButtonClickEvent, self.EndTurnHandler) self.EndTurnHandler = nil end self.EndTurnHandler = endTurn:ConnectEvent(ButtonClickEvent, function() self:EndPlayerTurn() end) end local drawPile = _EntityService:GetEntityByPath("/ui/RunUIGroup/DeckHud/DrawPile") if drawPile ~= nil and (drawPile.ButtonComponent ~= nil or drawPile:AddComponent("ButtonComponent") ~= nil) then if self.DrawPileHandler ~= nil then drawPile:DisconnectEvent(ButtonClickEvent, self.DrawPileHandler) self.DrawPileHandler = nil end self.DrawPileHandler = drawPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect("draw") end) end local discardPile = _EntityService:GetEntityByPath("/ui/RunUIGroup/DeckHud/DiscardPile") if discardPile ~= nil and (discardPile.ButtonComponent ~= nil or discardPile:AddComponent("ButtonComponent") ~= nil) then if self.DiscardPileHandler ~= nil then discardPile:DisconnectEvent(ButtonClickEvent, self.DiscardPileHandler) self.DiscardPileHandler = nil end self.DiscardPileHandler = discardPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect("discard") end) end local exhaustPile = _EntityService:GetEntityByPath("/ui/RunUIGroup/DeckHud/ExhaustPile") if exhaustPile ~= nil and (exhaustPile.ButtonComponent ~= nil or exhaustPile:AddComponent("ButtonComponent") ~= nil) then if self.ExhaustPileHandler ~= nil then exhaustPile:DisconnectEvent(ButtonClickEvent, self.ExhaustPileHandler) self.ExhaustPileHandler = nil end self.ExhaustPileHandler = exhaustPile:ConnectEvent(ButtonClickEvent, function() self:OpenDeckInspect("exhaust") end) end local inspectClose = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckInspectHud/Close") if inspectClose ~= nil and (inspectClose.ButtonComponent ~= nil or inspectClose:AddComponent("ButtonComponent") ~= nil) then if self.DeckInspectCloseHandler ~= nil then inspectClose:DisconnectEvent(ButtonClickEvent, self.DeckInspectCloseHandler) self.DeckInspectCloseHandler = nil end self.DeckInspectCloseHandler = inspectClose:ConnectEvent(ButtonClickEvent, function() self:CloseDeckInspect() end) end local allDeckButton = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/AllDeckButton") if allDeckButton ~= nil and (allDeckButton.ButtonComponent ~= nil or allDeckButton:AddComponent("ButtonComponent") ~= nil) then if self.AllDeckHandler ~= nil then allDeckButton:DisconnectEvent(ButtonClickEvent, self.AllDeckHandler) self.AllDeckHandler = nil end self.AllDeckHandler = allDeckButton:ConnectEvent(ButtonClickEvent, function() self:OpenAllDeck() end) end local allDeckClose = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckAllHud/Close") if allDeckClose ~= nil and (allDeckClose.ButtonComponent ~= nil or allDeckClose:AddComponent("ButtonComponent") ~= nil) then if self.AllDeckCloseHandler ~= nil then allDeckClose:DisconnectEvent(ButtonClickEvent, self.AllDeckCloseHandler) self.AllDeckCloseHandler = nil end self.AllDeckCloseHandler = allDeckClose:ConnectEvent(ButtonClickEvent, function() self:CloseAllDeck() end) end self:BindClassDeckTabs() for i = 1, 120 do local allCard = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckAllHud/Grid/Card" .. tostring(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 allCard:ConnectEvent(ButtonClickEvent, function() self:OnAllDeckCardButton(slot) end) end end for i = 1, 10 do local cardEntity = _EntityService:GetEntityByPath("/ui/RunUIGroup/CardHand/Card" .. tostring(i)) if cardEntity ~= nil and cardEntity.UITouchReceiveComponent ~= nil then local cardPath = "/ui/RunUIGroup/CardHand/Card" .. tostring(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) cardEntity:ConnectEvent(UITouchDragEvent, function(ev) self:OnCardDrag(i, ev.TouchPoint) end) cardEntity:ConnectEvent(UITouchEndDragEvent, function(ev) self:OnCardDragEnd(i, ev.TouchPoint) end) cardEntity:ConnectEvent(UITouchEnterEvent, function() self:HoverCard(i) end) cardEntity:ConnectEvent(UITouchExitEvent, function() self:UnhoverCard(i) end) if (cardEntity.ButtonComponent ~= nil or cardEntity:AddComponent("ButtonComponent") ~= nil) then cardEntity:ConnectEvent(ButtonClickEvent, function() self:OnCardButton(i) end) end end end for i = 1, 3 do local rc = _EntityService:GetEntityByPath("/ui/RunUIGroup/RewardHud/Reward" .. tostring(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) rc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end) rc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end) end end end local skip = _EntityService:GetEntityByPath("/ui/RunUIGroup/RewardHud/Skip") if skip ~= nil and (skip.ButtonComponent ~= nil or skip:AddComponent("ButtonComponent") ~= nil) then skip:ConnectEvent(ButtonClickEvent, function() self:PickReward(0) end) end local mapNodeIds = {} for r = 1, ${MAP_ROWS} do for c = 1, ${MAP_COLS} do table.insert(mapNodeIds, "r" .. tostring(r) .. "c" .. tostring(c)) end end table.insert(mapNodeIds, "boss") for i = 1, #mapNodeIds do local nid = mapNodeIds[i] local mn = _EntityService:GetEntityByPath("/ui/RunUIGroup/MapHud/Node_" .. nid) if mn ~= nil and (mn.ButtonComponent ~= nil or mn:AddComponent("ButtonComponent") ~= nil) then mn:ConnectEvent(ButtonClickEvent, function() self:PickNode(nid) end) end end for i = 1, 3 do local sc = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Card" .. tostring(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) sc:ConnectEvent(UITouchEnterEvent, function() self:SetCardHover(cardPath, true) end) sc:ConnectEvent(UITouchExitEvent, function() self:SetCardHover(cardPath, false) end) end end end local shopLeave = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Leave") if shopLeave ~= nil and (shopLeave.ButtonComponent ~= nil or shopLeave:AddComponent("ButtonComponent") ~= nil) then shopLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end) end local shopRelic = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Relic") if shopRelic ~= nil and (shopRelic.ButtonComponent ~= nil or shopRelic:AddComponent("ButtonComponent") ~= nil) then shopRelic:ConnectEvent(ButtonClickEvent, function() self:BuyRelic() end) end local restLeave = _EntityService:GetEntityByPath("/ui/RunUIGroup/RestHud/Leave") if restLeave ~= nil and (restLeave.ButtonComponent ~= nil or restLeave:AddComponent("ButtonComponent") ~= nil) then restLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end) end for i = 1, ${MAX_MONSTERS} do local ms = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/MonsterStatus" .. tostring(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)) if rs ~= nil and rs.UITouchReceiveComponent ~= nil then local idx = i rs:ConnectEvent(UITouchEnterEvent, function() local rid = nil if self.RunRelics ~= nil then rid = self.RunRelics[idx] end if rid ~= nil and self.Relics[rid] ~= nil then self:ShowTooltip(self.Relics[rid].name, self.Relics[rid].desc, -240 + (idx - 1) * 48) end end) rs:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end) end end for i = 1, 5 do local ps = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/TopBar/PotionSlot" .. tostring(i)) if ps ~= nil and ps.UITouchReceiveComponent ~= nil then local idx = i ps:ConnectEvent(UITouchEnterEvent, function() local pid = nil if self.RunPotions ~= nil then pid = self.RunPotions[idx] end if pid ~= nil and self.Potions[pid] ~= nil then self:ShowTooltip(self.Potions[pid].name, self.Potions[pid].desc, 240 + (idx - 1) * 44) end end) ps:ConnectEvent(UITouchExitEvent, function() self:HideTooltip() end) ps:ConnectEvent(UITouchDownEvent, function() self:OpenPotionMenu(idx) end) end end local pmUse = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/PotionMenu/Use") if pmUse ~= nil and (pmUse.ButtonComponent ~= nil or pmUse:AddComponent("ButtonComponent") ~= nil) then pmUse:ConnectEvent(ButtonClickEvent, function() self:UsePotion() end) end local pmToss = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/PotionMenu/Toss") if pmToss ~= nil and (pmToss.ButtonComponent ~= nil or pmToss:AddComponent("ButtonComponent") ~= nil) then pmToss:ConnectEvent(ButtonClickEvent, function() self:TossPotion() end) end local pmClose = _EntityService:GetEntityByPath("/ui/RunUIGroup/CombatHud/PotionMenu/Close") if pmClose ~= nil and (pmClose.ButtonComponent ~= nil or pmClose:AddComponent("ButtonComponent") ~= nil) then pmClose:ConnectEvent(ButtonClickEvent, function() self:ClosePotionMenu() end) end local shopPotion = _EntityService:GetEntityByPath("/ui/RunUIGroup/ShopHud/Potion") if shopPotion ~= nil and (shopPotion.ButtonComponent ~= nil or shopPotion:AddComponent("ButtonComponent") ~= nil) then shopPotion:ConnectEvent(ButtonClickEvent, function() self:BuyPotion() end) end local chest = _EntityService:GetEntityByPath("/ui/RunUIGroup/TreasureHud/Chest") if chest ~= nil and (chest.ButtonComponent ~= nil or chest:AddComponent("ButtonComponent") ~= nil) then chest:ConnectEvent(ButtonClickEvent, function() self:OpenChest() end) end local treasureLeave = _EntityService:GetEntityByPath("/ui/RunUIGroup/TreasureHud/Leave") if treasureLeave ~= nil and (treasureLeave.ButtonComponent ~= nil or treasureLeave:AddComponent("ButtonComponent") ~= nil) then treasureLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end) end local jcRelic = _EntityService:GetEntityByPath("/ui/SelectUIGroup/JobChoiceHud/RelicButton") if jcRelic ~= nil and (jcRelic.ButtonComponent ~= nil or jcRelic:AddComponent("ButtonComponent") ~= nil) then jcRelic:ConnectEvent(ButtonClickEvent, function() self:PickJobReward("relic") end) end local jcJob = _EntityService:GetEntityByPath("/ui/SelectUIGroup/JobChoiceHud/JobButton") if jcJob ~= nil and (jcJob.ButtonComponent ~= nil or jcJob:AddComponent("ButtonComponent") ~= nil) then jcJob:ConnectEvent(ButtonClickEvent, function() self:PickJobReward("job") end) end for i = 1, 3 do local slotIdx = i local jb = _EntityService:GetEntityByPath("/ui/SelectUIGroup/JobSelectHud/Job_slot" .. tostring(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 self:SetJob(self.JobOpts[slotIdx].id) end end) end end`), method('StartPlayerTurn', `self.Turn = self.Turn + 1 self.RetainSelectActive = false self.ReserveSelectActive = false self.TurnAttackCardsPlayed = 0 self.TurnDiscardedCards = 0 self.TurnCardsPlayedThisTurn = 0 self.DamageDealtThisTurn = 0 self.NextTurnSelectCopies = 0 self.NextTurnSelectPrompt = "" self.SkillCostReductionThisTurn = 0 self:UpdateDiscardPrompt() self.Energy = self.MaxEnergy self.BlockGainMultiplier = 1 self:ApplyRelics("turnStart") if self.NextTurnKeepBlock == true then self.NextTurnKeepBlock = false else self.PlayerBlock = 0 end if self.ClayBlockNext > 0 then self.PlayerBlock = self.PlayerBlock + self.ClayBlockNext self.ClayBlockNext = 0 end self.TurnAttackMultiplier = self.NextTurnAttackMultiplier or 1 self.NextTurnAttackMultiplier = 1 self.CardsDrawnThisCombat = self.CardsDrawnThisCombat or 0 self.ShivFirstDamageBonusUsed = false self.ActiveAttackDamageVsWeakMultiplier = 1 self.DrawDamageThisTurn = 0 self.DrawPoisonThisTurn = 0 self.ShivAoeThisCombat = false self.SkillSlyOnPlayCards = self.SkillSlyOnPlayCards or {} self.TurnSkillSlyCards = {} self.EnemyStrengthLossThisTurn = 0 self.HandCostZeroThisTurn = false self.DrawDisabledThisTurn = false local powerTurnDraw = 0 local powerTurnDiscard = 0 if self.PlayerPowers ~= nil then for i = 1, #self.PlayerPowers do local pc = self.Cards[self.PlayerPowers[i]] if pc ~= nil then if pc.powerEffect == "strengthPerTurn" then self.PlayerStr = self.PlayerStr + pc.value elseif pc.powerEffect == "energyPerTurn" then self.Energy = self.Energy + pc.value elseif pc.powerEffect == "blockPerTurn" then self.PlayerBlock = self.PlayerBlock + pc.value elseif pc.powerEffect == "poisonPerTurn" then if self.Monsters ~= nil then for j = 1, #self.Monsters do local tm = self.Monsters[j] if tm ~= nil and tm.alive == true then self:ApplyPoisonToMonster(tm, pc.value) end end end elseif pc.powerEffect == "damagePerTurn" then if self.Monsters ~= nil then self:PlayAoeFx(pc.fx or pc.image, pc.value or 0) end end if pc.turnStartShiv ~= nil then self:AddCardsToHand("Shiv", pc.turnStartShiv) end if pc.turnStartDraw ~= nil then powerTurnDraw = powerTurnDraw + pc.turnStartDraw end if pc.turnStartDiscard ~= nil then powerTurnDiscard = powerTurnDiscard + pc.turnStartDiscard end end end end if self.NextTurnBlock ~= nil and self.NextTurnBlock > 0 then self:AddCardBlock(self.NextTurnBlock) self.NextTurnBlock = 0 end if self.NextTurnAddCards ~= nil then for i = 1, #self.NextTurnAddCards do local entry = self.NextTurnAddCards[i] if entry ~= nil and entry.cardId ~= nil and entry.amount ~= nil and entry.amount > 0 then self:AddCardsToHand(entry.cardId, entry.amount) end end self.NextTurnAddCards = {} end local drawN = 5 + (self.NextTurnDraw or 0) + powerTurnDraw self.NextTurnDraw = 0 self:DrawCards(drawN) self:RenderHand(true) self:RenderCombat() if powerTurnDiscard > 0 then self:BeginDiscardSelection({ discard = math.min(powerTurnDiscard, #self.Hand) }) return end self:RenderCombat()`), method('PrepareCombatDrawPile', `if self.DrawPile == nil or self.Cards == nil then return end local rest = {} local innate = {} for i = 1, #self.DrawPile do local cardId = self.DrawPile[i] local c = self.Cards[cardId] if c ~= nil and c.innate == true then table.insert(innate, cardId) else table.insert(rest, cardId) end end self.DrawPile = {} for i = 1, #rest do table.insert(self.DrawPile, rest[i]) end for i = 1, #innate do table.insert(self.DrawPile, innate[i]) end`, []), method('HasPowerEffect', `if self.PlayerPowers == nil then return false end for i = 1, #self.PlayerPowers do local pc = self.Cards[self.PlayerPowers[i]] if pc ~= nil and pc.powerEffect == effect then return true end end return false`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'effect' }], 0, 'boolean'), method('HasPowerField', `if self.PlayerPowers == nil then return false end for i = 1, #self.PlayerPowers do local pc = self.Cards[self.PlayerPowers[i]] if pc ~= nil and pc[field] ~= nil and pc[field] ~= 0 then return true end end return false`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'field' }], 0, 'boolean'), method('AddPowerFieldTotal', `local total = 0 if self.PlayerPowers == nil then return total end for i = 1, #self.PlayerPowers do local pc = self.Cards[self.PlayerPowers[i]] if pc ~= nil and pc[field] ~= nil then total = total + pc[field] end end return total`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'field' }], 0, 'number'), method('ShouldOfferRetain', `if self:HasPowerEffect("retainOne") ~= true then return false end if self.Hand == nil or #self.Hand <= 0 then return false end for i = 1, #self.Hand do local c = self.Cards[self.Hand[i]] if c ~= nil and c.retain ~= true then return true end end return false`, [], 0, 'boolean'), method('BeginRetainSelection', `self.RetainSelectActive = true self:UpdateDiscardPrompt() self:Toast("보존할 카드를 선택하세요") self:RenderHand(false)`, []), method('EndPlayerTurn', `if self.CombatOver == true or self.FxBusy == true or self.TurnBusy == true then return end if self:IsDiscardSelecting() == true then self:Toast("버릴 카드를 먼저 선택하세요") return end if self:IsRetainSelecting() == true then self:FinishPlayerTurn(0) return end if self:IsReserveSelecting() == true then self:Toast("예약할 카드를 먼저 선택하세요") return end if self:ShouldOfferRetain() == true then self:BeginRetainSelection() return end self:FinishPlayerTurn(0)`), method('FinishPlayerTurn', `self.RetainSelectActive = false self.ReserveSelectActive = false self.NextTurnSelectCopies = 0 self.NextTurnSelectPrompt = "" self:UpdateDiscardPrompt() local burn = 0 for bi = 1, #self.Hand do \tlocal hc = self.Cards[self.Hand[bi]] \tif hc ~= nil and hc.endTurnDamage ~= nil then burn = burn + hc.endTurnDamage end end if burn > 0 then \tself.PlayerHp = self.PlayerHp - burn \tif self.PlayerHp < 0 then self.PlayerHp = 0 end \tself:ShowPlayerDmgPop(burn) \tself:RenderCombat() end local kept = {} for i = 1, #self.Hand do \tlocal cardId = self.Hand[i] \tlocal c = self.Cards[cardId] \tif c ~= nil and (c.retain == true or (c.class == "shiv" and self:HasPowerField("shivRetain") == true) or i == retainSlot) then \t\ttable.insert(kept, cardId) \telse \t\ttable.insert(self.DiscardPile, cardId) \tend end self.Hand = kept if self.PlayerPowers ~= nil then for i = 1, #self.PlayerPowers do local pc = self.Cards[self.PlayerPowers[i]] if pc ~= nil and pc.endTurnDexLoss ~= nil and pc.endTurnDexLoss > 0 then self.PlayerDex = self.PlayerDex - pc.endTurnDexLoss if self.PlayerDex < 0 then self.PlayerDex = 0 end end end end if self.PlayerIntangible ~= nil and self.PlayerIntangible > 0 then self.PlayerIntangible = self.PlayerIntangible - 1 if self.PlayerIntangible < 0 then self.PlayerIntangible = 0 end end if self.PlayerWeak > 0 then self.PlayerWeak = self.PlayerWeak - 1 end if self.PlayerVuln > 0 then self.PlayerVuln = self.PlayerVuln - 1 end self:RenderHand(false) self:RenderPiles() self.TurnSkillSlyCards = {} self:EnemyTurn()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'retainSlot' }]), method('DrawCards', `local drawnSlots = {} local drawnCards = {} local drewAny = false if self.DrawDisabledThisTurn == true then \treturn drawnCards end for i = 1, amount do \tif #self.DrawPile <= 0 then \t\tself:RecycleDiscardIntoDraw() \tend \tif #self.DrawPile <= 0 then \t\tbreak \tend \tlocal cardId = table.remove(self.DrawPile) \ttable.insert(drawnCards, cardId) \tself.CardsDrawnThisCombat = (self.CardsDrawnThisCombat or 0) + 1 \tself:ApplyDrawTrigger() \tif #self.Hand >= 10 then \t\ttable.insert(self.DiscardPile, cardId) \t\tself:TriggerSly(cardId) \telse \t\ttable.insert(self.Hand, cardId) \t\tdrewAny = true \t\ttable.insert(drawnSlots, #self.Hand) \tend end self:RenderPiles() if drewAny == true then \tself:RenderHand(false) end if animate == true and #drawnSlots > 0 then \tlocal drawStart = Vector2(-590, 8) \tfor i = 1, #drawnSlots do \t\tlocal slot = drawnSlots[i] \t\tself:AnimateCardFrom(slot, drawStart, Vector2(self:GetHandSlotX(slot), 0), 0.08 + i * 0.045) \tend return drawnCards end`, [ { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }, { Type: 'boolean', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'animate' }, ], 0, 'any'), method('AddCardsToHand', `if self.Hand == nil then self.Hand = {} end if self.DiscardPile == nil then self.DiscardPile = {} end for i = 1, amount do if #self.Hand >= 10 then table.insert(self.DiscardPile, cardId) else table.insert(self.Hand, cardId) end end self:RenderHand(false) self:RenderPiles()`, [ { Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'cardId' }, { Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }, ]), method('RecycleDiscardIntoDraw', `if self.DiscardPile == nil or #self.DiscardPile <= 0 then \treturn end self.DrawPile = {} for i = 1, #self.DiscardPile do \tself.DrawPile[i] = self.DiscardPile[i] end self.DiscardPile = {} self:Shuffle(self.DrawPile)`), method('RenderPiles', `self:SetText("/ui/RunUIGroup/DeckHud/DrawPile/Count", self:FormatNumber(#self.DrawPile)) self:SetText("/ui/RunUIGroup/DeckHud/DiscardPile/Count", self:FormatNumber(#self.DiscardPile)) self:SetText("/ui/RunUIGroup/DeckHud/ExhaustPile/Count", self:FormatNumber(#(self.ExhaustPile or {}))) self:SetText("/ui/RunUIGroup/DeckHud/EnergyOrb/Value", string.format("%d", self.Energy) .. "/" .. string.format("%d", self.MaxEnergy)) local inspect = _EntityService:GetEntityByPath("/ui/DeckUIGroup/DeckInspectHud") if inspect ~= nil and inspect.Enable == true and self.DeckInspectKind ~= "" then self:OpenDeckInspect(self.DeckInspectKind) end`), ];