fixup Amazing Grace and afterUse

This commit is contained in:
Ho-spair 2024-02-04 22:29:54 +08:00
parent bd723c02f1
commit 9815c6d9e2
3 changed files with 23 additions and 73 deletions

View File

@ -164,6 +164,20 @@ GameEvent.functions[GameEvent.UseCard] = function(self)
local room = self.room
local logic = room.logic
if type(cardUseEvent.attachedSkillAndUser) == "table" then
local attachedSkillAndUser = table.simpleClone(cardUseEvent.attachedSkillAndUser)
self:addExitFunc(function()
if
type(attachedSkillAndUser) == "table" and
Fk.skills[attachedSkillAndUser.skillName] and
Fk.skills[attachedSkillAndUser.skillName].afterUse
then
Fk.skills[attachedSkillAndUser.skillName]:afterUse(room:getPlayerById(attachedSkillAndUser.user), cardUseEvent)
end
end)
cardUseEvent.attachedSkillAndUser = nil
end
if cardUseEvent.card.skill then
cardUseEvent.card.skill:onUse(room, cardUseEvent)
end

View File

@ -2423,23 +2423,7 @@ end
---@param cardUseEvent CardUseStruct @ 使用数据
---@return boolean
function Room:useCard(cardUseEvent)
local attachedSkillAndUser
if type(cardUseEvent.attachedSkillAndUser) == "table" then
attachedSkillAndUser = table.simpleClone(cardUseEvent.attachedSkillAndUser)
cardUseEvent.attachedSkillAndUser = nil
end
local ret = execGameEvent(GameEvent.UseCard, cardUseEvent)
if
type(attachedSkillAndUser) == "table" and
Fk.skills[attachedSkillAndUser.skillName] and
Fk.skills[attachedSkillAndUser.skillName].afterUse
then
Fk.skills[attachedSkillAndUser.skillName]:afterUse(self:getPlayerById(attachedSkillAndUser.user), cardUseEvent)
end
return ret
return execGameEvent(GameEvent.UseCard, cardUseEvent)
end
---@param room Room
@ -2686,6 +2670,7 @@ function Room:doCardUseEffect(cardUseEvent)
for i = 1, (cardUseEvent.additionalEffect or 0) + 1 do
if #TargetGroup:getRealTargets(cardUseEvent.tos) > 0 and cardUseEvent.card.skill.onAction then
cardUseEvent.card.skill:onAction(self, cardUseEvent)
cardEffectEvent.extra_data = cardUseEvent.extra_data
end
-- Else: do effect to all targets

View File

@ -21,7 +21,7 @@ local slashSkill = fk.CreateActiveSkill{
max_phase_use_time = 1,
target_num = 1,
can_use = function(self, player, card, extra_data)
return (extra_data and extra_data.bypass_times) or
return (extra_data and extra_data.bypass_times) or player.phase ~= Player.Play or
table.find(Fk:currentRoom().alive_players, function(p)
return self:withinTimesLimit(player, Player.HistoryPhase, card, "slash", p)
end)
@ -36,7 +36,12 @@ local slashSkill = fk.CreateActiveSkill{
if #selected < self:getMaxTargetNum(Self, card) then
local player = Fk:currentRoom():getPlayerById(to_select)
return self:modTargetFilter(to_select, selected, Self.id, card, count_distances) and
(#selected > 0 or (extra_data and extra_data.bypass_times) or self:withinTimesLimit(Self, Player.HistoryPhase, card, "slash", player))
(
#selected > 0 or
Self.phase ~= Player.Play or
(extra_data and extra_data.bypass_times) or
self:withinTimesLimit(Self, Player.HistoryPhase, card, "slash", player)
)
end
end,
on_effect = function(self, room, effect)
@ -660,60 +665,6 @@ local amazingGraceSkill = fk.CreateActiveSkill{
end
}
local amazingGraceAction = fk.CreateTriggerSkill{
name = "amazing_grace_action",
global = true,
priority = { [fk.BeforeCardUseEffect] = 0, [fk.CardUseFinished] = 10 }, -- game rule
events = { fk.BeforeCardUseEffect, fk.CardUseFinished },
can_trigger = function(self, event, target, player, data)
local frameFilled = data.extra_data and data.extra_data.AGFilled
if event == fk.BeforeCardUseEffect then
return data.card.trueName == 'amazing_grace' and not frameFilled
else
return frameFilled
end
end,
on_trigger = function(self, event, target, player, data)
local room = player.room
if event == fk.BeforeCardUseEffect then
local toDisplay = room:getNCards(#TargetGroup:getRealTargets(data.tos))
room:moveCards({
ids = toDisplay,
toArea = Card.Processing,
moveReason = fk.ReasonPut,
})
table.forEach(room.players, function(p)
room:fillAG(p, toDisplay)
end)
data.extra_data = data.extra_data or {}
data.extra_data.AGFilled = toDisplay
else
table.forEach(room.players, function(p)
room:closeAG(p)
end)
if data.extra_data and data.extra_data.AGFilled then
local toDiscard = table.filter(data.extra_data.AGFilled, function(id)
return room:getCardArea(id) == Card.Processing
end)
if #toDiscard > 0 then
room:moveCards({
ids = toDiscard,
toArea = Card.DiscardPile,
moveReason = fk.ReasonPutIntoDiscardPile,
})
end
end
data.extra_data.AGFilled = nil
end
end,
}
Fk:addSkill(amazingGraceAction)
local amazingGrace = fk.CreateTrickCard{
name = "amazing_grace",
suit = Card.Heart,