diff --git a/lua/core/game_mode.lua b/lua/core/game_mode.lua index 4e643826e1d05aef84099dcff338aeb331df7920..17b77d6cd0e8712c895c29256373fd0784ea050e 100644 --- a/lua/core/game_mode.lua +++ b/lua/core/game_mode.lua @@ -101,4 +101,17 @@ function GameMode:getAdjustedProperty (player) return list end + +-- 执行死亡奖惩 +---@param victim ServerPlayer @ 死亡角色 +---@param killer? ServerPlayer @ 击杀者 +function GameMode:deathRewardAndPunish (victim, killer) + if not killer or killer.dead then return end + if victim.role == "rebel" then + killer:drawCards(3, "kill") + elseif victim.role == "loyalist" and killer.role == "lord" then + killer:throwAllCards("he") + end +end + return GameMode diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua index c842bd160bf98ab2a1b34c74475e9b30cbc203d7..13c9f0c8aa368c961a1926ba45170ce03e032e58 100644 --- a/lua/fk_ex.lua +++ b/lua/fk_ex.lua @@ -666,6 +666,10 @@ function fk.CreateGameMode(spec) assert(type(spec.get_adjusted) == "function") ret.getAdjustedProperty = spec.get_adjusted end + if spec.reward_punish then + assert(type(spec.reward_punish) == "function") + ret.deathRewardAndPunish = spec.reward_punish + end return ret end diff --git a/lua/server/events/gameflow.lua b/lua/server/events/gameflow.lua index 3c4f93589efb33cb5cd4b93cc17d664caaee4bdb..3c36e6b15a820ad58f3cd6ce2111483ba1f3e524 100644 --- a/lua/server/events/gameflow.lua +++ b/lua/server/events/gameflow.lua @@ -354,7 +354,7 @@ function Phase:main() ) - player:getMaxCards() room:broadcastProperty(player, "MaxCards") if discardNum > 0 then - room:askForDiscard(player, discardNum, discardNum, false, "game_rule", false) + room:askForDiscard(player, discardNum, discardNum, false, "phase_discard", false) end end, [Player.Finish] = function() diff --git a/lua/server/room.lua b/lua/server/room.lua index 1e33dd7bcbcb3a3d08cfbdcf7c0bca3d86fb0d5c..3a61e73b1173a6a4bc3a27a75c529a62cf61c63a 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -971,7 +971,7 @@ function Room:askForDiscard(player, minNum, maxNum, includeEquip, skillName, can return false end end - if skillName == "game_rule" then + if skillName == "phase_discard" then status_skills = Fk:currentRoom().status_skills[MaxCardsSkill] or Util.DummyTable for _, skill in ipairs(status_skills) do if skill:excludeFrom(player, card) then diff --git a/standard/game_rule.lua b/standard/game_rule.lua index 6e8c57fd6d3649c2e5697afbb7f894b2ca031065..fc09c62c2ad53d622785b7f0c7f1c7c65135e1e3 100644 --- a/standard/game_rule.lua +++ b/standard/game_rule.lua @@ -1,14 +1,5 @@ -- SPDX-License-Identifier: GPL-3.0-or-later ----@param killer ServerPlayer -local function rewardAndPunish(killer, victim) - if killer.dead then return end - if victim.role == "rebel" then - killer:drawCards(3, "kill") - elseif victim.role == "loyalist" and killer.role == "lord" then - killer:throwAllCards("he") - end -end GameRule = fk.CreateTriggerSkill{ name = "game_rule", @@ -95,8 +86,7 @@ GameRule = fk.CreateTriggerSkill{ end local damage = data.damage if damage and damage.from then - local killer = damage.from - rewardAndPunish(killer, player); + Fk.game_modes[room.settings.gameMode]:deathRewardAndPunish(player, damage.from) end end, default = function() diff --git a/standard/i18n/en_US.lua b/standard/i18n/en_US.lua index 64121e6f6e2bb387191c7403f5fe3dc68a1847f3..eae675673cb4faff7352aa467914ff5cde112e16 100644 --- a/standard/i18n/en_US.lua +++ b/standard/i18n/en_US.lua @@ -222,7 +222,7 @@ Fk:loadTranslationTable({ ["revealMain"] = "Reveal main character %arg", ["revealDeputy"] = "Reveal deputy character %arg", - ["game_rule"] = "Discard", + ["game_rule"] = "GameRule", }, "en_US") -- init diff --git a/standard/i18n/zh_CN.lua b/standard/i18n/zh_CN.lua index eab672cd0f0b76e1b5d088e6928096fd2d1cbf98..bf00b9ddb6173abf5c9225fc0300424218165c1c 100644 --- a/standard/i18n/zh_CN.lua +++ b/standard/i18n/zh_CN.lua @@ -529,13 +529,22 @@ Fk:loadTranslationTable{ ["ex__choose_skill"] = "选择", ["distribution_select_skill"] = "分配", ["choose_players_to_move_card_in_board"] = "选择角色", + + ["AskForUseActiveSkill"] = "使用技能", + ["AskForSkillInvoke"] = "发动技能", + ["AskForUseCard"] = "使用", + ["AskForResponseCard"] = "打出", + ["AskForDiscard"] = "弃牌", + ["AskForCardChosen"] = "选牌", + ["AskForCardsChosen"] = "选牌", + ["reveal_skill&"] = "亮将", ["#reveal_skill&"] = "选择一个武将亮将(点击左侧选择框展开)", [":reveal_skill&"] = "出牌阶段,你可明置一张有锁定技的武将。", ["revealMain"] = "明置主将 %arg", ["revealDeputy"] = "明置副将 %arg", - ["game_rule"] = "弃牌阶段", + ["game_rule"] = "游戏规则", ["replace_equip"] = "替换装备", ["#EquipmentChoice"] = "%arg", ["#GameRuleReplaceEquipment"] = "请选择要置入的区域", diff --git a/standard_cards/i18n/zh_CN.lua b/standard_cards/i18n/zh_CN.lua index 39d90453e35d63d3ce3d025a5f44759c31866e9a..39f9a4396db0d480f244a74597c3fe013d559524 100644 --- a/standard_cards/i18n/zh_CN.lua +++ b/standard_cards/i18n/zh_CN.lua @@ -26,10 +26,12 @@ Fk:loadTranslationTable{ ["basic_char"] = "基", ["trick_char"] = "锦", ["equip_char"] = "装", + ["non_basic_char"] = "非基", ["basic"] = "基本牌", ["trick"] = "锦囊牌", ["equip"] = "装备牌", + ["non_basic"] = "非基本牌", ["weapon"] = "武器牌", ["armor"] = "防具牌", ["defensive_horse"] = "防御坐骑牌",