From ba8aae852d821f6dc13f7dc686f5652a2ebad03a Mon Sep 17 00:00:00 2001 From: Nyutanislavsky Date: Tue, 18 Apr 2023 12:57:09 +0800 Subject: [PATCH] Fixbug (#123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【杀】的residue_func无效bug 【顺手牵羊】的distance_limit_func无效bug 重铸的moveReason调整为置入弃牌堆 --------- Signed-off-by: Mechanel --- lua/client/i18n/zh_CN.lua | 2 ++ lua/core/skill_type/active.lua | 3 ++- lua/core/skill_type/target_mod.lua | 4 ++++ lua/fk_ex.lua | 10 +++++----- packages/maneuvering/init.lua | 13 ++++++++++++- packages/standard_cards/init.lua | 8 ++++---- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lua/client/i18n/zh_CN.lua b/lua/client/i18n/zh_CN.lua index 7ffa5887..b17fc3ea 100644 --- a/lua/client/i18n/zh_CN.lua +++ b/lua/client/i18n/zh_CN.lua @@ -210,6 +210,8 @@ Fk:loadTranslationTable{ ["$UninstallEquip"] = "%from 卸载了 %card", ["#ShowCard"] = "%from 展示了牌 %card", + ["#Recast"] = "%from 重铸了 %card", + ["#RecastBySkill"] = "%from 发动了 “%arg” 重铸了 %card", -- phase ["#PhaseSkipped"] = "%from 跳过了 %arg", diff --git a/lua/core/skill_type/active.lua b/lua/core/skill_type/active.lua index 4c08bdb0..f71ebdcf 100644 --- a/lua/core/skill_type/active.lua +++ b/lua/core/skill_type/active.lua @@ -26,7 +26,8 @@ end --- Determine whether the skill can be used in playing phase ---@param player Player -function ActiveSkill:canUse(player) +---@param card Card @ helper +function ActiveSkill:canUse(player, card) return true end diff --git a/lua/core/skill_type/target_mod.lua b/lua/core/skill_type/target_mod.lua index 3e61fadc..db2b13d3 100644 --- a/lua/core/skill_type/target_mod.lua +++ b/lua/core/skill_type/target_mod.lua @@ -5,18 +5,22 @@ local TargetModSkill = StatusSkill:subclass("TargetModSkill") ---@param player Player ---@param card_skill ActiveSkill +---@param scope integer +---@param card Card function TargetModSkill:getResidueNum(player, card_skill, scope, card) return 0 end ---@param player Player ---@param card_skill ActiveSkill +---@param card Card function TargetModSkill:getDistanceLimit(player, card_skill, card) return 0 end ---@param player Player ---@param card_skill ActiveSkill +---@param card Card function TargetModSkill:getExtraTargetNum(player, card_skill, card) return 0 end diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua index 82989e6d..a4dc46ff 100644 --- a/lua/fk_ex.lua +++ b/lua/fk_ex.lua @@ -145,9 +145,9 @@ function fk.CreateTriggerSkill(spec) end ---@class ActiveSkillSpec: UsableSkillSpec ----@field public can_use fun(self: ActiveSkill, player: Player): boolean +---@field public can_use fun(self: ActiveSkill, player: Player, card: Card): boolean ---@field public card_filter fun(self: ActiveSkill, to_select: integer, selected: integer[], selected_targets: integer[]): boolean ----@field public target_filter fun(self: ActiveSkill, to_select: integer, selected: integer[], selected_cards: integer[]): boolean +---@field public target_filter fun(self: ActiveSkill, to_select: integer, selected: integer[], selected_cards: integer[], card: Card): boolean ---@field public feasible fun(self: ActiveSkill, selected: integer[], selected_cards: integer[]): boolean ---@field public on_use fun(self: ActiveSkill, room: Room, cardUseEvent: CardUseStruct): boolean ---@field public about_to_effect fun(self: ActiveSkill, room: Room, cardEffectEvent: CardEffectEvent): boolean @@ -286,9 +286,9 @@ function fk.CreateMaxCardsSkill(spec) end ---@class TargetModSpec: StatusSkillSpec ----@field public residue_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill, scope: integer) ----@field public distance_limit_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill) ----@field public extra_target_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill) +---@field public residue_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill, scope: integer, card: Card) +---@field public distance_limit_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill, card: Card) +---@field public extra_target_func fun(self: TargetModSkill, player: Player, skill: ActiveSkill, card: Card) ---@param spec TargetModSpec ---@return TargetModSkill diff --git a/packages/maneuvering/init.lua b/packages/maneuvering/init.lua index 0b51bf00..42206f74 100644 --- a/packages/maneuvering/init.lua +++ b/packages/maneuvering/init.lua @@ -198,7 +198,18 @@ local recast = fk.CreateActiveSkill{ target_num = 0, on_use = function(self, room, effect) local from = room:getPlayerById(effect.from) - room:throwCard(effect.cards, self.name, from) + room:moveCards({ + ids = effect.cards, + from = effect.from, + toArea = Card.DiscardPile, + skillName = "recast", + moveReason = fk.ReasonPutIntoDiscardPile, + }) + room:sendLog{ + type = "#Recast", + from = effect.from, + card = effect.cards, + } room:drawCards(from, #effect.cards, self.name) end } diff --git a/packages/standard_cards/init.lua b/packages/standard_cards/init.lua index 5454efa1..c243b089 100644 --- a/packages/standard_cards/init.lua +++ b/packages/standard_cards/init.lua @@ -7,8 +7,8 @@ local slashSkill = fk.CreateActiveSkill{ name = "slash_skill", max_phase_use_time = 1, target_num = 1, - can_use = function(self, player) - return player:usedCardTimes("slash", Player.HistoryPhase) < self:getMaxUseTime(Self, Player.HistoryPhase) + can_use = function(self, player, card) + return player:usedCardTimes("slash", Player.HistoryPhase) < self:getMaxUseTime(Self, Player.HistoryPhase, card) end, target_filter = function(self, to_select, selected, _, card) if #selected < self:getMaxTargetNum(Self, card) then @@ -199,10 +199,10 @@ extension:addCards({ local snatchSkill = fk.CreateActiveSkill{ name = "snatch_skill", distance_limit = 1, - target_filter = function(self, to_select, selected) + target_filter = function(self, to_select, selected, _, card) if #selected == 0 then local player = Fk:currentRoom():getPlayerById(to_select) - return Self ~= player and Self:distanceTo(player) <= self:getDistanceLimit(Self) + return Self ~= player and Self:distanceTo(player) <= self:getDistanceLimit(Self, card) -- for no distance limit for snatch and not player:isAllNude() end end,