From ec45438b3c18dd0bed53b6cb28c52ad69e482b56 Mon Sep 17 00:00:00 2001 From: gahusb Date: Wed, 10 Jun 2026 01:13:33 +0900 Subject: [PATCH] =?UTF-8?q?feat(combat):=20PlayCard=20=ED=83=80=EA=B2=9F?= =?UTF-8?q?=20=EB=AA=AC=EC=8A=A4=ED=84=B0=20=EA=B3=B5=EA=B2=A9=20+=20?= =?UTF-8?q?=EC=82=AC=EB=A7=9D=20=EC=B2=98=EB=A6=AC/=EC=97=B0=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- tools/deck/gen-slaydeck.mjs | 43 ++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/tools/deck/gen-slaydeck.mjs b/tools/deck/gen-slaydeck.mjs index 89ca538..b0a5bcd 100644 --- a/tools/deck/gen-slaydeck.mjs +++ b/tools/deck/gen-slaydeck.mjs @@ -1339,7 +1339,7 @@ end self.Energy = self.Energy - c.cost if c.kind == "Attack" then if c.damage ~= nil then - self:DealDamageToEnemy(c.damage) + self:DealDamageToTarget(c.damage) end self:ApplyRelics("cardPlayed") elseif c.kind == "Skill" then @@ -1354,16 +1354,43 @@ self:RenderPiles() self:RenderCombat() self:CheckCombatEnd()`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]), method('Toast', `log(message)`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'message' }]), - method('DealDamageToEnemy', `local dmg = amount -if self.EnemyBlock > 0 then - local absorbed = math.min(self.EnemyBlock, dmg) - self.EnemyBlock = self.EnemyBlock - absorbed + method('DealDamageToTarget', `local m = self.Monsters[self.TargetIndex] +if m == nil or m.alive ~= true then + m = nil + for i = 1, #self.Monsters do + if self.Monsters[i].alive == true then m = self.Monsters[i]; self.TargetIndex = i; break end + end +end +if m == nil then + return +end +local dmg = amount +if m.block > 0 then + local absorbed = math.min(m.block, dmg) + m.block = m.block - absorbed dmg = dmg - absorbed end -self.EnemyHp = self.EnemyHp - dmg -if self.EnemyHp < 0 then - self.EnemyHp = 0 +m.hp = m.hp - dmg +if m.hp <= 0 then + m.hp = 0 + self:KillMonster(m.slot) end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'amount' }]), + method('KillMonster', `local m = self.Monsters[slot] +if m == nil then + return +end +m.alive = false +if m.entity ~= nil and isvalid(m.entity) then + if m.entity.StateComponent ~= nil then + m.entity.StateComponent:ChangeState("DEAD") + end + local ent = m.entity + _TimerService:SetTimerOnce(function() if isvalid(ent) then ent:SetVisible(false) end end, 0.6) +end +self:SetEntityEnabled("/ui/DefaultGroup/CombatHud/MonsterSlot" .. tostring(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' }]), method('DealDamageToPlayer', `local dmg = amount if self.PlayerBlock > 0 then local absorbed = math.min(self.PlayerBlock, dmg)