From 2df9ba0edd061ebff109694fac797e1f9a033e13 Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Sun, 27 Oct 2024 23:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=A4=A7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/core/engine.lua | 2 ++ lua/core/game_mode.lua | 1 + lua/core/room/abstract_room.lua | 7 +++++++ lua/fk_ex.lua | 3 +++ standard/init.lua | 1 + 5 files changed, 14 insertions(+) diff --git a/lua/core/engine.lua b/lua/core/engine.lua index 52da893..77c8a85 100644 --- a/lua/core/engine.lua +++ b/lua/core/engine.lua @@ -23,6 +23,7 @@ ---@field public translations table> @ 翻译表 ---@field public game_modes table @ 所有游戏模式 ---@field public game_mode_disabled table @ 游戏模式禁用的包 +---@field public main_mode_list table @ 主模式检索表 ---@field public currentResponsePattern string @ 要求用牌的种类(如要求用特定花色的桃···) ---@field public currentResponseReason string @ 要求用牌的原因(如濒死,被特定牌指定,使用特定技能···) ---@field public filtered_cards table @ 被锁视技影响的卡牌 @@ -70,6 +71,7 @@ function Engine:initialize() self.translations = {} -- srcText --> translated self.game_modes = {} self.game_mode_disabled = {} + self.main_mode_list = {} self.kingdoms = {} self.kingdom_map = {} self.damage_nature = { [fk.NormalDamage] = { "normal_damage", false } } diff --git a/lua/core/game_mode.lua b/lua/core/game_mode.lua index c33cc6a..4e64382 100644 --- a/lua/core/game_mode.lua +++ b/lua/core/game_mode.lua @@ -29,6 +29,7 @@ ---@field public whitelist? string[] | fun(self: GameMode, pkg: Package): bool @ 白名单 ---@field public blacklist? string[] | fun(self: GameMode, pkg: Package): bool @ 黑名单 ---@field public config_template? GameModeConfigEntry[] 游戏模式的配置页面,如此一个数组 +---@field public main_mode? string @ 主模式名(用于判断此模式是否为某模式的衍生) local GameMode = class("GameMode") --- 构造函数,不可随意调用。 diff --git a/lua/core/room/abstract_room.lua b/lua/core/room/abstract_room.lua index 02ad01a..3d94843 100644 --- a/lua/core/room/abstract_room.lua +++ b/lua/core/room/abstract_room.lua @@ -89,4 +89,11 @@ function AbstractRoom:loadJsonObject(o) end end +-- 判断当前模式是否为某类模式 +---@param mode string @ 需要判定的模式类型 +---@return boolean +function AbstractRoom:isGameMode(mode) + return table.contains(Fk.main_mode_list[mode] or {}, self.settings.gameMode) +end + return AbstractRoom diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua index f53a5bd..c842bd1 100644 --- a/lua/fk_ex.lua +++ b/lua/fk_ex.lua @@ -646,6 +646,9 @@ function fk.CreateGameMode(spec) ret.blacklist = spec.blacklist ret.rule = spec.rule ret.logic = spec.logic + ret.main_mode = spec.main_mode or spec.name + Fk.main_mode_list[ret.main_mode] = Fk.main_mode_list[ret.main_mode] or {} + table.insert(Fk.main_mode_list[ret.main_mode], ret.name) if spec.winner_getter then assert(type(spec.winner_getter) == "function") diff --git a/standard/init.lua b/standard/init.lua index 749ee4b..c09f81a 100644 --- a/standard/init.lua +++ b/standard/init.lua @@ -1242,6 +1242,7 @@ local role_mode = fk.CreateGameMode{ minPlayer = 2, maxPlayer = 8, logic = role_getlogic, + main_mode = "role_mode", is_counted = function(self, room) return #room.players >= 5 end, -- Gitee