diff --git a/Fk/Pages/Room.qml b/Fk/Pages/Room.qml
index b9d19dac..86adad99 100644
--- a/Fk/Pages/Room.qml
+++ b/Fk/Pages/Room.qml
@@ -479,8 +479,6 @@ Item {
onCardSelected: function(card) {
Logic.enableTargets(card);
- roomScene.resetPrompt();
-
if (typeof card === "number" && card !== -1 && roomScene.state === "playing"
&& JSON.parse(Backend.callLuaFunction("GetPlayerHandcards", [Self.id])).includes(card)) {
diff --git a/Fk/RoomElement/Dashboard.qml b/Fk/RoomElement/Dashboard.qml
index 9e87ab6c..53986a8f 100644
--- a/Fk/RoomElement/Dashboard.qml
+++ b/Fk/RoomElement/Dashboard.qml
@@ -267,6 +267,7 @@ RowLayout {
} else {
handcardAreaItem.unselectAll();
selected_card = -1;
+ roomScene.resetPrompt();
}
cardSelected(selected_card);
}
diff --git a/lua/client/client.lua b/lua/client/client.lua
index 3b79f51a..138c355a 100644
--- a/lua/client/client.lua
+++ b/lua/client/client.lua
@@ -109,8 +109,8 @@ function Client:moveCards(moves)
pcardMax = from:getMaxCards(),
id = move.from,
})
- if from.id ~= Self.id and move.fromArea == Card.PlayerHand then
- for i = 1, #move.ids do
+ if move.fromArea == Card.PlayerHand and not Self:isBuddy(self:getPlayerById(move.from)) then
+ for _ = 1, #move.ids do
table.remove(from.player_cards[Player.Hand])
end
else
diff --git a/lua/client/client_util.lua b/lua/client/client_util.lua
index 4e6e131a..f8e552b2 100644
--- a/lua/client/client_util.lua
+++ b/lua/client/client_util.lua
@@ -613,7 +613,7 @@ end
function GetPlayerHandcards(pid)
local c = ClientInstance
local p = c:getPlayerById(pid)
- return json.encode(p.player_cards[Player.Hand])
+ return p and json.encode(p.player_cards[Player.Hand]) or ""
end
function GetPlayerEquips(pid)
diff --git a/lua/core/skill_type/filter.lua b/lua/core/skill_type/filter.lua
index aafe5def..2538a2a8 100644
--- a/lua/core/skill_type/filter.lua
+++ b/lua/core/skill_type/filter.lua
@@ -4,11 +4,14 @@
local FilterSkill = StatusSkill:subclass("FilterSkill")
---@param card Card
+---@param player Player
+---@param isJudgeEvent bool
function FilterSkill:cardFilter(card, player, isJudgeEvent)
return false
end
---@param card Card
+---@param player Player
---@return Card
function FilterSkill:viewAs(card, player)
return nil
diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua
index dca92384..2a8dec69 100644
--- a/lua/fk_ex.lua
+++ b/lua/fk_ex.lua
@@ -227,7 +227,7 @@ end
---@field public pattern? string
---@field public enabled_at_play? fun(self: ViewAsSkill, player: Player): boolean?
---@field public enabled_at_response? fun(self: ViewAsSkill, player: Player, response: boolean): boolean?
----@field public before_use? fun(self: ViewAsSkill, player: ServerPlayer, use: CardUseStruct)
+---@field public before_use? fun(self: ViewAsSkill, player: ServerPlayer, use: CardUseStruct): string?
---@field public prompt? string|fun(self: ActiveSkill, selected: integer[], selected_cards: integer[]): string
---@param spec ViewAsSkillSpec
@@ -396,7 +396,7 @@ function fk.CreateTargetModSkill(spec)
end
---@class FilterSpec: StatusSkillSpec
----@field public card_filter? fun(self: FilterSkill, card: Card, player: Player): boolean?
+---@field public card_filter? fun(self: FilterSkill, card: Card, player: Player, isJudgeEvent: boolean): boolean?
---@field public view_as? fun(self: FilterSkill, card: Card, player: Player): Card?
---@param spec FilterSpec
diff --git a/packages/standard_cards/i18n/en_US.lua b/packages/standard_cards/i18n/en_US.lua
index db6a662d..c53ace84 100644
--- a/packages/standard_cards/i18n/en_US.lua
+++ b/packages/standard_cards/i18n/en_US.lua
@@ -14,7 +14,7 @@ Fk:loadTranslationTable({
-- ["club"] = "Club",
-- ["diamond"] = "Diamond",
["nosuit"] = "No suit",
- ["black"] = '黑色',
+ ["black"] = 'Black',
["red"] = 'Red',
["nocolor"] = 'NoColor',
-- ["suit"] = "花色",
@@ -122,6 +122,7 @@ Fk:loadTranslationTable({
["qinggang_sword"] = "Qinggang Sword",
[":qinggang_sword"] = "Qinggang Sword (equip card, weapon)
ATK range: 2
Weapon skill: Your Slash ignores the target's armor.",
+ ["#qinggang_sword_skill"] = "Qinggang Sword",
["ice_sword"] = "Ice Sword",
[":ice_sword"] = "Ice Sword (equip card, weapon)
ATK range: 2
Weapon skill: When your used Slash is about to cause DMG to a player who has cards, you can prevent this DMG and discard him 2 cards successively.",
diff --git a/packages/standard_cards/i18n/zh_CN.lua b/packages/standard_cards/i18n/zh_CN.lua
index 4cda3e1a..3136ecd3 100644
--- a/packages/standard_cards/i18n/zh_CN.lua
+++ b/packages/standard_cards/i18n/zh_CN.lua
@@ -122,6 +122,7 @@ Fk:loadTranslationTable{
["qinggang_sword"] = "青釭剑",
[":qinggang_sword"] = "装备牌·武器
攻击范围:2
武器技能:锁定技,你的【杀】无视目标角色的防具。",
+ ["#qinggang_sword_skill"] = "青釭剑",
["ice_sword"] = "寒冰剑",
[":ice_sword"] = "装备牌·武器
攻击范围:2
武器技能:当你使用【杀】对目标角色造成伤害时,若该角色有牌,你可以防止此伤害,然后依次弃置其两张牌。",