diff --git a/Fk/Cheat/PlayerDetail.qml b/Fk/Cheat/PlayerDetail.qml
index 1b99f0e1..7bc104c3 100644
--- a/Fk/Cheat/PlayerDetail.qml
+++ b/Fk/Cheat/PlayerDetail.qml
@@ -119,7 +119,7 @@ Flickable {
const run = gamedata[2];
const winRate = (win / total) * 100;
const runRate = (run / total) * 100;
- playerGameData.text = total === 0 ? "Newbie" : "
" + Backend.translate("Win=%1 Run=%2 Total=%3").arg(winRate.toFixed(2))
+ playerGameData.text = total === 0 ? Backend.translate("Newbie") : "
" + Backend.translate("Win=%1 Run=%2 Total=%3").arg(winRate.toFixed(2))
.arg(runRate.toFixed(2)).arg(total);
}
diff --git a/lua/core/skill_type/usable_skill.lua b/lua/core/skill_type/usable_skill.lua
index 02122102..b97221ba 100644
--- a/lua/core/skill_type/usable_skill.lua
+++ b/lua/core/skill_type/usable_skill.lua
@@ -31,7 +31,15 @@ function UsableSkill:withinTimesLimit(player, scope, card, card_name, to)
if skill:bypassTimesCheck(player, self, scope, card, to) then return true end
end
card_name = card_name or card.trueName
- return player:usedCardTimes(card_name, scope) < self:getMaxUseTime(player, scope, card, to)
+ return player:usedCardTimes(card_name, scope) < self:getMaxUseTime(player, scope, card, to) or
+ (player:getMark(MarkEnum.BypassTimesLimit) ~= 0 or
+ table.find(MarkEnum.TempMarkSuffix, function(s)
+ return player:getMark(MarkEnum.BypassTimesLimit .. s) ~= 0
+ end)) or
+ (to:getMark(MarkEnum.BypassTimesLimitTo) ~= 0 or
+ table.find(MarkEnum.TempMarkSuffix, function(s)
+ return to:getMark(MarkEnum.BypassTimesLimitTo .. s) ~= 0
+ end))
end
function UsableSkill:withinDistanceLimit(player, isattack, card, to)
@@ -39,7 +47,15 @@ function UsableSkill:withinDistanceLimit(player, isattack, card, to)
for _, skill in ipairs(status_skills) do
if skill:bypassDistancesCheck(player, self, card, to) then return true end
end
- return isattack and player:inMyAttackRange(to, self:getDistanceLimit(player, card, to)) or player:distanceTo(to) <= self:getDistanceLimit(player, card, to)
+ return isattack and player:inMyAttackRange(to, self:getDistanceLimit(player, card, to)) or player:distanceTo(to) <= self:getDistanceLimit(player, card, to) or
+ (player:getMark(MarkEnum.BypassDistancesLimit) ~= 0 or
+ table.find(MarkEnum.TempMarkSuffix, function(s)
+ return player:getMark(MarkEnum.BypassDistancesLimit .. s) ~= 0
+ end)) or
+ (to:getMark(MarkEnum.BypassDistancesLimitTo) ~= 0 or
+ table.find(MarkEnum.TempMarkSuffix, function(s)
+ return to:getMark(MarkEnum.BypassDistancesLimitTo .. s) ~= 0
+ end))
end
return UsableSkill
diff --git a/lua/server/mark_enum.lua b/lua/server/mark_enum.lua
index ccb054be..d070ca02 100644
--- a/lua/server/mark_enum.lua
+++ b/lua/server/mark_enum.lua
@@ -7,7 +7,7 @@ MarkEnum.StraightToWake = "_straight_to_wake"
---@field SwithSkillPreName string @ 转换技状态标记前缀(整体为前缀+转换技技能)
MarkEnum.SwithSkillPreName = "__switcher_"
----@field SwithSkillPreName string @ 转换技状态标记前缀(整体为前缀+转换技技能)
+---@field QuestSkillPreName string @ 使命技状态标记前缀(整体为前缀+使命技技能)
MarkEnum.QuestSkillPreName = "__questPre_"
---@field AddMaxCards string @ 增加标记值数量的手牌上限
@@ -19,10 +19,14 @@ MarkEnum.MinusMaxCards = "MinusMaxCards"
---@field AddMaxCards string @ 于本回合内减少标记值数量的手牌上限
MarkEnum.MinusMaxCardsInTurn = "MinusMaxCards-turn"
----@field BypassTimesLimit string @ 对其使用牌无次数限制,可带清除标记后缀
-MarkEnum.BypassTimesLimit = "bypasstimeslimit"
----@field BypassDistanceLimit string @ 对其使用牌无距离限制,可带清除标记后缀
-MarkEnum.BypassDistanceLimit = "bypassdistancelimit"
+---@field BypassTimesLimit string @ 使用牌无次数限制,可带清除标记后缀
+MarkEnum.BypassTimesLimit = "BypassTimesLimit"
+---@field BypassDistancesLimit string @ 使用牌无距离限制,可带清除标记后缀
+MarkEnum.BypassDistancesLimit = "BypassDistancesLimit"
+---@field BypassTimesLimitTo string @ 对其使用牌无次数限制,可带清除标记后缀
+MarkEnum.BypassTimesLimitTo = "BypassTimesLimitTo"
+---@field BypassDistancesLimitTo string @ 对其使用牌无距离限制,可带清除标记后缀
+MarkEnum.BypassDistancesLimitTo = "BypassDistancesLimitTo"
---@field UncompulsoryInvalidity string @ 非锁定技失效,可带清除标记后缀
MarkEnum.UncompulsoryInvalidity = "uncompulsoryInvalidity"
diff --git a/lua/server/room.lua b/lua/server/room.lua
index 2bf64f51..2a8a0725 100644
--- a/lua/server/room.lua
+++ b/lua/server/room.lua
@@ -1539,6 +1539,8 @@ end
-- available extra_data:
-- * must_targets: integer[]
-- * exclusive_targets: integer[]
+-- * bypass_distances: boolean
+-- * bypass_times: boolean
--- 询问玩家使用一张牌。
---@param player ServerPlayer @ 要询问的玩家
---@param card_name string @ 使用牌的牌名,若pattern指定了则可随意写,它影响的是烧条的提示信息
@@ -1566,6 +1568,14 @@ function Room:askForUseCard(player, card_name, pattern, prompt, cancelable, extr
card_name = table.concat(splitedCardNames, ",")
end
+ if extra_data then
+ if extra_data.bypass_distances then
+ player.room:setPlayerMark(player, MarkEnum.BypassDistancesLimit, 1)
+ end
+ if extra_data.bypass_times then
+ player.room:setPlayerMark(player, MarkEnum.BypassTimesLimit, 1)
+ end
+ end
local command = "AskForUseCard"
self:notifyMoveFocus(player, card_name)
cancelable = (cancelable == nil) and true or cancelable
@@ -1583,6 +1593,8 @@ function Room:askForUseCard(player, card_name, pattern, prompt, cancelable, extr
self.logic:trigger(fk.AskForCardUse, player, askForUseCardData)
if askForUseCardData.result and type(askForUseCardData.result) == 'table' then
+ player.room:setPlayerMark(player, MarkEnum.BypassDistancesLimit, 0)
+ player.room:setPlayerMark(player, MarkEnum.BypassTimesLimit, 0)
return askForUseCardData.result
else
local data = {card_name, pattern, prompt, cancelable, extra_data}
@@ -1592,9 +1604,13 @@ function Room:askForUseCard(player, card_name, pattern, prompt, cancelable, extr
Fk.currentResponsePattern = nil
if result ~= "" then
+ player.room:setPlayerMark(player, MarkEnum.BypassDistancesLimit, 0)
+ player.room:setPlayerMark(player, MarkEnum.BypassTimesLimit, 0)
return self:handleUseCardReply(player, result)
end
end
+ player.room:setPlayerMark(player, MarkEnum.BypassDistancesLimit, 0)
+ player.room:setPlayerMark(player, MarkEnum.BypassTimesLimit, 0)
return nil
end
diff --git a/packages/standard/aux_skills.lua b/packages/standard/aux_skills.lua
index 2d07ccd0..587a3041 100644
--- a/packages/standard/aux_skills.lua
+++ b/packages/standard/aux_skills.lua
@@ -122,27 +122,6 @@ local uncompulsoryInvalidity = fk.CreateInvaliditySkill {
end
}
-local noTimesLimit = fk.CreateTargetModSkill{
- name = "noTimesLimit",
- global = true,
- bypass_times = function(self, player, skill, scope, card, to)
- return to:getMark(MarkEnum.BypassTimesLimit) ~= 0 or
- table.find(MarkEnum.TempMarkSuffix, function(s)
- return to:getMark(MarkEnum.BypassTimesLimit .. s) ~= 0
- end)
- end
-}
-
-local noDistanceLimit = fk.CreateAttackRangeSkill{
- name = "noDistanceLimit",
- global = true,
- within_func = function(self, player, to)
- return to:getMark(MarkEnum.BypassDistanceLimit) ~= 0 or
- table.find(MarkEnum.TempMarkSuffix, function(s)
- return to:getMark(MarkEnum.BypassDistanceLimit .. s) ~= 0
- end)
- end
-}
AuxSkills = {
discardSkill,
chooseCardsSkill,
@@ -150,6 +129,4 @@ AuxSkills = {
maxCardsSkill,
choosePlayersToMoveCardInBoardSkill,
uncompulsoryInvalidity,
- noTimesLimit,
- noDistanceLimit,
}
diff --git a/packages/standard_cards/init.lua b/packages/standard_cards/init.lua
index 57583ccc..f99dd7ed 100644
--- a/packages/standard_cards/init.lua
+++ b/packages/standard_cards/init.lua
@@ -941,12 +941,8 @@ local bladeSkill = fk.CreateTriggerSkill{
end,
on_cost = function(self, event, target, player, data)
local room = player.room
- room:setPlayerMark(target, MarkEnum.BypassDistanceLimit, 1)
- room:setPlayerMark(target, MarkEnum.BypassTimesLimit, 1)
local use = room:askForUseCard(player, "slash", nil, "#blade_slash:" .. target.id,
- true, { must_targets = {target.id}, exclusive_targets = {target.id} })
- room:setPlayerMark(target, MarkEnum.BypassDistanceLimit, 0)
- room:setPlayerMark(target, MarkEnum.BypassTimesLimit, 0)
+ true, { must_targets = {target.id}, exclusive_targets = {target.id}, bypass_distances = true, bypass_times = true })
if use then
use.extraUse = true
self.cost_data = use