Class Engine#

class Engine: Base.Engine, Base.ModManager#

Engine是整个FreeKill赖以运行的核心。

它包含了FreeKill涉及的所有武将、卡牌、游戏模式等等

同时也提供了许多常用的函数。

generals: table<string, General>#

所有武将

same_generals: table<string, string[]>#

所有同名武将组合

lords: string[]#

所有主公武将,用于常备主公

all_card_types: table<string, Card>#

所有的卡牌类型以及一张样板牌

all_card_names: string[]#

有序的所有的卡牌牌名,顺序:基本牌(杀置顶),普通锦囊,延时锦囊,按副类别排序的装备

cards: Card[]#

所有卡牌

game_modes: table<string, GameMode>#

所有游戏模式

game_mode_disabled: table<string, string[]>#

游戏模式禁用的包

main_mode_list: table<string, string[]>#

主模式检索表

currentResponsePattern: string#

要求用牌的种类(如要求用特定花色的桃···)

currentResponseReason: string#

要求用牌的原因(如濒死,被特定牌指定,使用特定技能···)

filtered_cards: table<integer, Card>#

被锁视技影响的卡牌

printed_cards: table<integer, Card>#

被某些房间现场打印的卡牌,id都是负数且从-2开始

kingdoms: string[]#

总势力

kingdom_map: table<string, string[]>#

势力映射表

damage_nature: table<any, [string, boolean]>#

伤害映射表

poxi_methods: table<string, PoxiSpec>#

“魄袭”框操作方法表

qml_marks: table<string, QmlMarkSpec>#

自定义Qml标记的表

mini_games: table<string, MiniGameSpec>#

自定义多人交互表

target_tips: table<string, TargetTipSpec>#

选择目标提示对应表

choose_general_rule: table<string, ChooseGeneralSpec>#

选将框操作方法表

skin_packages: table<string, string[]>#

Skins

skill_keys: table#

key --> {SkillSkeleton.createSkill, integer}

reloadPackages: function#

Don't do this

addSkillType(
    self: Engine,
    key: string,
    func: function,
    priority?: integer
)#

注册技能(effect)类型

Parameters:
  • key (string) -- 技能类型名

  • func (function) -- 技能类型创建函数

  • priority? (integer) -- 优先级,默认为1

addGeneral(self: Engine, general: General)#

加载一个武将到Engine中。

如果武将的trueName和name不同的话,那么也会将其加到同将清单中。

Parameters:

general (General) -- 要添加的武将

addGenerals(self: Engine, generals: General[])#

加载一系列武将。

Parameters:

generals (General[]) -- 要加载的武将列表

setLords(self: Engine)#

为所有武将加载主公技和主公判定

appendKingdomMap(self: Engine, kingdom: string, kingdoms: string[])#

为一个势力添加势力映射

这意味着原势力登场时必须改变为添加的几个势力之一(须存在)

Parameters:
  • kingdom (string) -- 原势力

  • kingdoms (string[]) -- 需要映射到的势力

getKingdomMap(self: Engine, kingdom: string): string[]#

获得一个势力所映射到的势力,若没有,返回空集

Parameters:

kingdom (string) -- 原势力

Returns:

_1 (string[]) -- 可用势力列表,可能是空的

addDamageNature(
    self: Engine,
    nature: string | number,
    name: string,
    can_chain?: boolean
)#

注册一个伤害

Parameters:
  • nature (string | number) -- 伤害ID

  • name (string) -- 属性伤害名

  • can_chain? (boolean) -- 是否可传导,默认可

getDamageNatures(self: Engine): table<any, [string, boolean]>#

返回伤害列表

Returns:

_1 (table<any, [string, boolean]>) -- 具体信息(伤害ID => {伤害名,是否可传导})

getDamageNature(self: Engine, nature: string | number): table#

由伤害ID获得伤害属性

Parameters:

nature (string | number) -- 伤害ID

Returns:

_1 (table) -- 具体信息({伤害名,是否可传导}),若不存在则为空

getDamageNatureName(self: Engine, nature: string | number): string#

由伤害ID获得伤害名

Parameters:

nature (string | number) -- 伤害ID

Returns:

_1 (string) -- 伤害名

canChain(self: Engine, nature: string | number): boolean?#

判断一种伤害是否可传导

Parameters:

nature (string | number) -- 伤害ID

canUseGeneral(self: Engine, g: string): boolean#

判断一个武将是否在本房间可用。

Parameters:

g (string) -- 武将名

getSameGenerals(self: Engine, name: string): string[]#

根据武将名称,获取它的同名武将。

注意以此法返回的同名武将列表不包含他自己。

Parameters:

name (string) -- 要查询的武将名字

Returns:

_1 (string[]) -- 这个武将对应的同名武将列表

addCard(self: Engine, card: Card)#

向Engine中加载一张卡牌。

卡牌在加载的时候,会被赋予一个唯一的id。(从1开始)

Parameters:

card (Card) -- 要加载的卡牌

addCards(self: Engine, cards: Card[])#

向Engine中加载一系列卡牌。

Parameters:

cards (Card[]) -- 要加载的卡牌列表

cloneCard(
    self: Engine,
    name: string,
    suit?: integer,
    number?: integer
): Card#

根据牌名、花色、点数,复制一张牌。

返回的牌是一张虚拟牌。

Parameters:
  • name (string) -- 牌名

  • suit? (integer) -- 花色

  • number? (integer) -- 点数

loadCardNames(self: Engine)#

为所有加载的卡牌牌名排序

addGameModes(self: Engine, game_modes: GameMode[])#

向Engine中添加一系列游戏模式。

Parameters:

game_modes (GameMode[]) -- 要添加的游戏模式列表

addGameMode(self: Engine, game_mode: GameMode)#

向Engine中添加一个游戏模式。

Parameters:

game_mode (GameMode) -- 要添加的游戏模式

addGameEvent(
    self: Engine,
    name: string,
    pfunc?: function,
    mfunc: function,
    cfunc?: function,
    efunc?: function
)#

向Engine中添加一个自定义事件。

Parameters:
  • name (string) -- 名称

  • pfunc? (function) -- prepare function

  • mfunc (function) -- (main) function

  • cfunc? (function) -- cleaner function

  • efunc? (function) -- exit function

getGeneralsRandomly(
    self: Engine,
    num: integer,
    generalPool?: General[],
    except?: string[],
    filter?: fun(g: General): boolean?
): General[]#

从已经开启的拓展包中,随机选出若干名武将。

对于同名武将不会重复选取。

如果符合条件的武将不够,那么就不能保证能选出那么多武将。

Parameters:
  • num (integer) -- 要选出的武将数量

  • generalPool? (General[]) -- 选择的范围,默认是已经启用的所有武将

  • except? (string[]) -- 特别要排除掉的武将名列表,默认是空表

  • filter? (fun(g: General): boolean?) -- 可选参数,若这个函数返回true的话这个武将被排除在外

Returns:

_1 (General[]) -- 随机选出的武将列表

getAllGenerals(self: Engine, except?: General[]): General[]#

获取已经启用的所有武将的列表。

Parameters:

except? (General[]) -- 特别指明要排除在外的武将

Returns:

_1 (General[]) -- 所有武将的列表

getAllCardIds(self: Engine, except?: integer[]): integer[]#

获取当前已经启用的所有卡牌。

Parameters:

except? (integer[]) -- 特别指定要排除在外的id列表

Returns:

_1 (integer[]) -- 所有卡牌id的列表

getAllCardNames(
    self: Engine,
    card_type: string,
    true_name?: boolean,
    is_derived?: boolean
): string[]#

获取加入游戏的卡的牌名(暂不考虑装备牌),常用于泛转化技能的interaction

Parameters:
  • card_type (string) -- 卡牌的类别,b 基本牌,t - 普通锦囊牌,d - 延时锦囊牌,e - 装备牌

  • true_name? (boolean) -- 是否使用真实卡名(即不区分【杀】、【无懈可击】等的具体种类)

  • is_derived? (boolean) -- 是否包括衍生牌,默认不包括

Returns:

_1 (string[]) -- 返回牌名列表

getCardById(self: Engine, id: integer, ignoreFilter?: boolean): Card#

根据id返回相应的卡牌。

Parameters:
  • id (integer) -- 牌的id

  • ignoreFilter? (boolean) -- 是否要无视掉锁定视为技,直接获得真牌

Returns:

_1 (Card) -- 这个id对应的卡牌

filterCard(self: Engine, id: integer, player?: Player)#

对那个id应用锁定视为技,将它变成要被锁定视为的牌。

Parameters:
  • id (integer) -- 要处理的id

  • player? (Player) -- 和这张牌有关的角色。若无则还原为原卡牌