From d1ecb9b9a2c9afcab2eb1ec55e2e892d9c6c8825 Mon Sep 17 00:00:00 2001 From: Forever_Railgun <14428346+Forever_Railgun@user.noreply.gitee.com> Date: Sun, 6 Jul 2025 14:51:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix=20=E5=8D=8A=E4=B8=AA=E9=9D=92=E9=87=AD?= =?UTF-8?q?=E5=89=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/core/events/hp.lua | 6 ++++ standard_cards/pkg/skills/qinggang_sword.lua | 30 +++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lua/core/events/hp.lua b/lua/core/events/hp.lua index 1712642..eeaf728 100644 --- a/lua/core/events/hp.lua +++ b/lua/core/events/hp.lua @@ -87,6 +87,9 @@ end function DamageData:preventDamage() self.damage = 0 self.prevented = true + if RoomInstance then + RoomInstance.logic:trigger(fk.DamagePrevented, self.to, self, true) + end end --- RecoverData 描述和回复体力有关的数据 @@ -147,6 +150,9 @@ fk.Damage = DamageEvent:subclass("fk.Damage") --- 受到伤害后 ---@class fk.Damaged: DamageEvent fk.Damaged = DamageEvent:subclass("fk.Damaged") +--- 伤害防止后 +---@class fk.DamageFinished: DamageEvent +fk.DamagePrevented = DamageEvent:subclass("fk.DamagePrevented") --- 伤害结算结束后 ---@class fk.DamageFinished: DamageEvent fk.DamageFinished = DamageEvent:subclass("fk.DamageFinished") diff --git a/standard_cards/pkg/skills/qinggang_sword.lua b/standard_cards/pkg/skills/qinggang_sword.lua index 4529da9..bdd406f 100644 --- a/standard_cards/pkg/skills/qinggang_sword.lua +++ b/standard_cards/pkg/skills/qinggang_sword.lua @@ -88,7 +88,35 @@ skill:addEffect(fk.DamageFinished, { room:removePlayerMark(player, MarkEnum.MarkArmorNullified) end, }) -skill:addEffect(fk.CardEffectFinished, { +skill:addEffect(fk.DamagePrevented, { + can_refresh = function(self, event, target, player, data) + local logic = player.room.logic + local game_event = logic:getCurrentEvent():findParent(GameEvent.SkillEffect) + if data.card == nil or data.to ~= player then return false end + if game_event.event ~= GameEvent.SkillEffect or game_event.data.skill.trueName ~= "slash_skill" then return false end + game_event = game_event.parent + if game_event.event ~= GameEvent.CardEffect then return false end + local effect = game_event.data + if player ~= effect.to or effect.qinggang_clean then return false end + game_event = game_event.parent + if game_event.event ~= GameEvent.UseCard then return false end + local use = game_event.data + + return use.additionalEffect == 0 and + use.extra_data and use.extra_data.qinggang_tag and table.contains(use.extra_data.qinggang_tag, player.id) + end, + on_refresh = function(self, event, target, player, data) + local room = player.room + local logic = room.logic + local cardEffectEvent = logic:getCurrentEvent():findParent(GameEvent.CardEffect, true) + if cardEffectEvent == nil then return end + local effect = cardEffectEvent.data + effect.qinggang_clean = true + table.removeOne(effect.extra_data.qinggang_tag, player.id) + room:removePlayerMark(player, MarkEnum.MarkArmorNullified) + end, +}) +skill:addEffect(fk.CardEffectFinished, { --FIXME:最后一张闪的技能生效青釭剑效果就结束,而不是被抵消后结束 can_refresh = function(self, event, target, player, data) local logic = player.room.logic local game_event = logic:getCurrentEvent() -- Gitee From a92d9f679bf97356e4ee95db283007aee471975b Mon Sep 17 00:00:00 2001 From: Forever_Railgun <14428346+Forever_Railgun@user.noreply.gitee.com> Date: Sun, 6 Jul 2025 14:54:49 +0800 Subject: [PATCH 2/3] fix --- standard_cards/pkg/skills/qinggang_sword.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/standard_cards/pkg/skills/qinggang_sword.lua b/standard_cards/pkg/skills/qinggang_sword.lua index bdd406f..c8d38bd 100644 --- a/standard_cards/pkg/skills/qinggang_sword.lua +++ b/standard_cards/pkg/skills/qinggang_sword.lua @@ -92,6 +92,7 @@ skill:addEffect(fk.DamagePrevented, { can_refresh = function(self, event, target, player, data) local logic = player.room.logic local game_event = logic:getCurrentEvent():findParent(GameEvent.SkillEffect) + if not game_event then return false end if data.card == nil or data.to ~= player then return false end if game_event.event ~= GameEvent.SkillEffect or game_event.data.skill.trueName ~= "slash_skill" then return false end game_event = game_event.parent -- Gitee From 08d7b5efe2be60470f7af6733b79ca52524748f3 Mon Sep 17 00:00:00 2001 From: Forever_Railgun <14428346+Forever_Railgun@user.noreply.gitee.com> Date: Sun, 6 Jul 2025 18:48:40 +0800 Subject: [PATCH 3/3] fix --- lua/core/skill_type/cardskill.lua | 4 +++ standard_cards/pkg/skills/qinggang_sword.lua | 30 +++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lua/core/skill_type/cardskill.lua b/lua/core/skill_type/cardskill.lua index 5208ba6..c587f30 100644 --- a/lua/core/skill_type/cardskill.lua +++ b/lua/core/skill_type/cardskill.lua @@ -230,6 +230,10 @@ function CardSkill:preEffect(room, cardEffectData) end end + if i == loopTimes then + cardEffectData.extra_data = cardEffectData.extra_data or {} + cardEffectData.extra_data.is_last_jink = true --for qinggang + end local params = { ---@type AskToUseCardParams pattern = "jink", skill_name = "jink", diff --git a/standard_cards/pkg/skills/qinggang_sword.lua b/standard_cards/pkg/skills/qinggang_sword.lua index c8d38bd..aab7745 100644 --- a/standard_cards/pkg/skills/qinggang_sword.lua +++ b/standard_cards/pkg/skills/qinggang_sword.lua @@ -117,7 +117,7 @@ skill:addEffect(fk.DamagePrevented, { room:removePlayerMark(player, MarkEnum.MarkArmorNullified) end, }) -skill:addEffect(fk.CardEffectFinished, { --FIXME:最后一张闪的技能生效青釭剑效果就结束,而不是被抵消后结束 +skill:addEffect(fk.CardEffectFinished, { can_refresh = function(self, event, target, player, data) local logic = player.room.logic local game_event = logic:getCurrentEvent() @@ -167,6 +167,34 @@ skill:addEffect(fk.CardEffectCancelledOut, { room:removePlayerMark(player, MarkEnum.MarkArmorNullified) end, }) +skill:addEffect(fk.AfterSkillEffect, { + can_refresh = function (self, event, target, player, data) + local logic = player.room.logic + local game_event = logic:getCurrentEvent() + if player ~= target or game_event.event ~= GameEvent.SkillEffect or data.skill.trueName ~= "jink_skill" then return false end + game_event = game_event.parent + if game_event.event ~= GameEvent.CardEffect then return false end + local effect = game_event.data.responseToEvent + if not effect or player ~= effect.to or effect.qinggang_clean or not (effect.extra_data or {}).is_last_jink then return false end + game_event = game_event.parent + if not effect.use then return false end + local use = effect.use + + return use.additionalEffect == 0 and + use.extra_data and use.extra_data.qinggang_tag and table.contains(use.extra_data.qinggang_tag, player.id) + end, + on_refresh = function (self, event, target, player, data) + local room = player.room + local logic = room.logic + local cardEffectEvent = logic:getCurrentEvent():findParent(GameEvent.CardEffect, true) + if cardEffectEvent == nil then return end + local effect = cardEffectEvent.data.responseToEvent + if not effect then return end + effect.qinggang_clean = true + table.removeOne(effect.extra_data.qinggang_tag, player.id) + room:removePlayerMark(player, MarkEnum.MarkArmorNullified) + end, +}) skill:addTest(function(room, me) local qinggang_sword = room:printCard("qinggang_sword") -- Gitee