Class GameEventWrappers#

class GameEventWrappers: (
    MiscEventWrappers,
    HpEventWrappers,
    DeathEventWrappers,
    MoveEventWrappers,
    UseCardEventWrappers,
    SkillEventWrappers,
    JudgeEventWrappers,
    PindianEventWrappers
)#

给Room.lua瘦身:一系列GameEvent的封装

class MiscEventWrappers: Object#
changeHero(
    self: MiscEventWrappers,
    player: ServerPlayer,
    new_general: string,
    full?: boolean,
    isDeputy?: boolean,
    sendLog?: boolean,
    maxHpChange?: boolean,
    kingdomChange?: boolean
)#

改变角色的武将

Parameters:
  • player (ServerPlayer) -- 要换将的玩家

  • new_general (string) -- 要变更的武将,若不存在则变身为孙策,孙策不存在变身为士兵

  • full? (boolean) -- 是否血量满状态变身,默认否

  • isDeputy? (boolean) -- 是否变的是副将

  • sendLog? (boolean) -- 是否发Log,默认否

  • maxHpChange? (boolean) -- 是否改变体力上限,默认改变

  • kingdomChange? (boolean) -- 是否改变势力(仅更改主将时变更),默认改变

changeKingdom(
    self: MiscEventWrappers,
    player: ServerPlayer,
    kingdom: string,
    sendLog?: boolean
)#
Parameters:
  • player (ServerPlayer) -- 要变更势力的玩家

  • kingdom (string) -- 要变更的势力

  • sendLog? (boolean) -- 是否发Log

class HpEventWrappers: Object#
changeHp(
    self: HpEventWrappers,
    player: ServerPlayer,
    num: integer,
    reason?: string,
    skillName?: string,
    damageData?: DamageData
): boolean#

改变一名玩家的体力。

Parameters:
  • player (ServerPlayer) -- 玩家

  • num (integer) -- 变化量

  • reason? (string) -- 原因

  • skillName? (string) -- 技能名

  • damageData? (DamageData) -- 伤害数据

damage(self: HpEventWrappers, damageData: DamageDataSpec): boolean#

根据伤害数据造成伤害。

loseHp(
    self: HpEventWrappers,
    player: ServerPlayer,
    num: integer,
    skillName?: string
): boolean#

令一名玩家失去体力。

Parameters:
  • player (ServerPlayer) -- 玩家

  • num (integer) -- 失去的数量

  • skillName? (string) -- 技能名

recover(
    self: HpEventWrappers,
    recoverDataSpec: RecoverDataSpec
): boolean#

根据回复数据回复体力。

Returns:

_1 (boolean) -- 是否成功回复体力

changeMaxHp(
    self: HpEventWrappers,
    player: ServerPlayer,
    num: integer
): boolean#

改变一名玩家的体力上限。

Parameters:
  • player (ServerPlayer) -- 玩家

  • num (integer) -- 变化量

class DeathEventWrappers: Object#
enterDying(
    self: DeathEventWrappers,
    dyingDataSpec: DyingDataSpec
): boolean#

根据濒死数据让人进入濒死。

killPlayer(
    self: DeathEventWrappers,
    deathDataSpec: DeathDataSpec
): boolean#

根据死亡数据杀死角色。

revivePlayer(
    self: DeathEventWrappers,
    player: ServerPlayer,
    sendLog?: boolean,
    reason?: string
): boolean#

复活一个角色

Parameters:
  • player (ServerPlayer) -- 要复活的角色

  • sendLog? (boolean) -- 是否播放战报

  • reason? (string) -- 复活原因

class MoveEventWrappers: Object#
moveCards(self: MoveEventWrappers, ...: CardsMoveInfo): boolean?#

传入一系列移牌信息,去实际移动这些牌

notifyMoveCards(
    self: MoveEventWrappers,
    players?: ServerPlayer[],
    moveDatas: MoveCardsData[],
    event_id?: integer
)#

向多名玩家告知一次移牌行为。

Parameters:
  • players? (ServerPlayer[]) -- 要被告知的玩家列表,默认为全员

  • moveDatas (MoveCardsData[]) -- 要告知的移牌信息列表

  • event_id? (integer) -- 当前事件id

obtainCard(
    self: MoveEventWrappers,
    player: ServerPlayer,
    card: integer | Card | Card[] | integer[],
    visible?: boolean,
    reason?: integer,
    proposer?: ServerPlayer,
    skill_name?: string,
    moveMark?: string | table,
    visiblePlayers?: ServerPlayer | ServerPlayer[]
)#

让一名玩家获得一张牌

Parameters:
  • player (ServerPlayer) -- 要拿牌的玩家

  • card (integer | Card | Card[] | integer[]) -- 要拿到的卡牌

  • visible? (boolean) -- 是否明着拿

  • reason? (integer) -- 卡牌移动的原因

  • proposer? (ServerPlayer) -- 移动操作者

  • skill_name? (string) -- 技能名

  • moveMark? (string | table) -- 移动后自动赋予标记,格式:{标记名(支持-inarea后缀,移出值代表区域后清除), 值}

  • visiblePlayers? (ServerPlayer | ServerPlayer[]) -- 控制移动对特定角色可见(在moveVisible为false时生效)

drawCards(
    self: MoveEventWrappers,
    player: ServerPlayer,
    num: integer,
    skillName?: string,
    fromPlace?: "bottom" | "top",
    moveMark?: string | table
): integer[]#

让玩家摸牌

Parameters:
  • player (ServerPlayer) -- 摸牌的玩家

  • num (integer) -- 摸牌数

  • skillName? (string) -- 技能名

  • fromPlace? ("bottom" | "top") -- 摸牌的位置,默认牌堆顶

  • moveMark? (string | table) -- 移动后自动赋予标记,格式:{标记名(支持-inarea后缀,移出值代表区域后清除), 值}

Returns:

_1 (integer[]) -- 摸到的牌

moveCardTo(
    self: MoveEventWrappers,
    card: integer | Card | Card[] | integer[],
    to_place: integer,
    target?: ServerPlayer,
    reason?: integer,
    skill_name?: string,
    special_name?: string,
    visible?: boolean,
    proposer?: ServerPlayer,
    moveMark?: string | table,
    visiblePlayers?: ServerPlayer | ServerPlayer[]
)#

将一张或多张牌移动到某处

Parameters:
  • card (integer | Card | Card[] | integer[]) -- 要移动的牌

  • to_place (integer) -- 移动的目标位置

  • target? (ServerPlayer) -- 移动的目标角色

  • reason? (integer) -- 移动时使用的移牌原因

  • skill_name? (string) -- 技能名

  • special_name? (string) -- 私人牌堆名

  • visible? (boolean) -- 是否明置

  • proposer? (ServerPlayer) -- 移动操作者

  • moveMark? (string | table) -- 移动后自动赋予标记,格式:{标记名(支持-inarea后缀,移出值代表区域后清除), 值}

  • visiblePlayers? (ServerPlayer | ServerPlayer[]) -- 控制移动对特定角色可见(在moveVisible为false时生效)

throwCard(
    self: MoveEventWrappers,
    card_ids: integer | Card | Card[] | integer[],
    skillName?: string,
    who: ServerPlayer,
    thrower?: ServerPlayer
)#

弃置一名角色的牌。

Parameters:
  • card_ids (integer | Card | Card[] | integer[]) -- 被弃掉的牌

  • skillName? (string) -- 技能名

  • who (ServerPlayer) -- 被弃牌的人

  • thrower? (ServerPlayer) -- 弃别人牌的人

recastCard(
    self: MoveEventWrappers,
    card_ids: integer[],
    who: ServerPlayer,
    skillName?: string,
    moveMark?: string | table
): integer[]#

重铸一名角色的牌。

Parameters:
  • card_ids (integer[]) -- 被重铸的牌

  • who (ServerPlayer) -- 重铸的角色

  • skillName? (string) -- 技能名,默认为“重铸”

  • moveMark? (string | table) -- 移动后自动赋予标记,格式:{标记名(支持-inarea后缀,移出值代表区域后清除), 值}

Returns:

_1 (integer[]) -- 摸到的牌

doYiji(
    self: MoveEventWrappers,
    list: table<integer, integer[]>,
    proposer?: ServerPlayer,
    skillName?: string,
    moveMark?: string | table
): integer[]#

将一些卡牌同时分配给一些角色。

Parameters:
  • list (table<integer, integer[]>) -- 分配牌和角色的数据表,键为角色id,值为分配给其的牌id数组

  • proposer? (ServerPlayer) -- 操作者的。默认为空

  • skillName? (string) -- 技能名。默认为“分配”

  • moveMark? (string | table) -- 移动后自动赋予标记,格式:{标记名(支持-inarea后缀,移出值代表区域后清除), 值}

Returns:

_1 (integer[]) -- 返回成功分配的卡牌

moveCardIntoEquip(
    self: MoveEventWrappers,
    target: ServerPlayer,
    cards: integer | Card | Card[] | integer[],
    skillName?: string,
    convert?: boolean,
    proposer?: ServerPlayer
): integer[]#

将一张牌移动至某角色的装备区,若不合法则置入弃牌堆。

Parameters:
  • target (ServerPlayer) -- 接受牌的角色

  • cards (integer | Card | Card[] | integer[]) -- 移动的牌,这些牌同副类别不可相同

  • skillName? (string) -- 技能名

  • convert? (boolean) -- 是否可以替换装备(默认可以)

  • proposer? (ServerPlayer) -- 操作者

Returns:

_1 (integer[]) -- 成功置入装备区的牌

turnOverCardsFromDrawPile(
    self: MoveEventWrappers,
    player: ServerPlayer,
    card_ids: integer[],
    skillName: string,
    moveVisible?: boolean,
    visiblePlayers?: ServerPlayer[]
)#

从牌堆亮出一些牌移动到处理区

Parameters:
  • player (ServerPlayer) -- 进行操作的角色

  • card_ids (integer[]) -- 要亮出的牌,通常用getNCards获得

  • skillName (string) -- 技能名

  • moveVisible? (boolean) -- 是否正面向上移动

  • visiblePlayers? (ServerPlayer[]) -- 控制移动对特定角色可见(默认对自己可见,若想完全不可见则设为空表)

returnCardsToDrawPile(
    self: MoveEventWrappers,
    player: ServerPlayer,
    cards: integer[],
    skillName: string,
    toPlace?: "bottom" | "top",
    moveVisible?: boolean,
    visiblePlayers?: ServerPlayer[]
)#

将处理区的卡牌返回牌堆

Parameters:
  • player (ServerPlayer) -- 进行操作的角色

  • cards (integer[]) -- 返回牌堆的卡牌

  • skillName (string) -- 技能名

  • toPlace? ("bottom" | "top") -- 返回牌堆的位置,默认牌堆顶

  • moveVisible? (boolean) -- 是否正面向上移动

  • visiblePlayers? (ServerPlayer[]) -- 控制移动对特定角色可见(默认对自己可见,若想完全不可见则设为空表)

swapCards(
    self: MoveEventWrappers,
    player: ServerPlayer,
    card_data: any,
    skillName: string,
    toArea?: integer
)#

令两名角色交换特定的牌(FIXME:暂时只能正面朝上移动过)

Parameters:
  • player (ServerPlayer) -- 进行操作的角色

  • card_data (any) -- {{角色1, 角色1的卡牌}, {角色2, 角色2的卡牌}}

  • skillName (string) -- 技能名

  • toArea? (integer) -- 交换牌的目标区域,默认为手牌

swapAllCards(
    self: MoveEventWrappers,
    player: ServerPlayer,
    targets: ServerPlayer[],
    skillName: string,
    flag?: "e" | "h" | "j"
)#

令两名角色交换一个区域内所有牌

Parameters:
  • player (ServerPlayer) -- 进行操作的角色

  • targets (ServerPlayer[]) -- 交换手牌的两名角色

  • skillName (string) -- 技能名

  • flag? ("e" | "h" | "j") -- 交换的区域。默认是手牌

swapCardsWithPile(
    self: MoveEventWrappers,
    player: ServerPlayer,
    cards1: integer[],
    cards2: integer[],
    skillName: string,
    pile_name: string,
    visible?: boolean,
    proposer?: ServerPlayer
)#

将一名角色的卡牌与牌堆中的卡牌交换

Parameters:
  • player (ServerPlayer) -- 移动的目标

  • cards1 (integer[]) -- 将要放到牌堆的牌

  • cards2 (integer[]) -- 将要收为手牌的牌

  • skillName (string) -- 技能名

  • pile_name (string) -- 交换的私有牌堆名,特别的,为"Top"则为牌堆顶,"Bottom"则为牌堆底,"discardPile"则为弃牌堆

  • visible? (boolean) -- 是否明牌移动

  • proposer? (ServerPlayer) -- 移动的操作者(默认同player)

cancelMove(
    self: MoveEventWrappers,
    data: MoveCardsData[],
    ids?: integer[],
    func?: fun(move: MoveCardsData, info: MoveInfo): boolean
): integer[]#

取消一些牌的移动。请仅用于BeforeCardsMove时机

Parameters:
  • ids? (integer[]) -- 取消移动的牌的id列表,填nil则取消所有

  • func? (fun(move: MoveCardsData, info: MoveInfo): boolean) -- 筛选取消移动的函数,与ids取并集,填nil则取消所有

Returns:

_1 (integer[]) -- 成功取消移动的牌id列表

class UseCardEventWrappers: Object#
playCardEmotionAndSound(
    self: UseCardEventWrappers,
    player: ServerPlayer,
    card: Card
)#

播放使用/打出卡牌的声音和特效

Parameters:
useCard(
    self: UseCardEventWrappers,
    useCardData: UseCardDataSpec
): boolean#

根据卡牌使用数据,去实际使用这个卡牌。

Parameters:

useCardData (UseCardDataSpec) -- 使用数据

doCardUseEffect(self: UseCardEventWrappers, useCardData: UseCardData)#

对卡牌使用数据进行生效

doCardEffect(
    self: UseCardEventWrappers,
    cardEffectData: CardEffectData
): boolean#

对卡牌效果数据进行生效

responseCard(
    self: UseCardEventWrappers,
    responseCardData: RespondCardDataSpec
): boolean#

对“打出牌”进行处理

useVirtualCard(
    self: UseCardEventWrappers,
    card_name: string,
    subcards?: integer[],
    from: ServerPlayer,
    tos: ServerPlayer | ServerPlayer[],
    skillName?: string,
    extra?: boolean,
    extra_data?: table
): UseCardDataSpec?#

令角色对某些目标使用虚拟卡牌,会检测使用和目标合法性。不合法则返回nil

Parameters:
  • card_name (string) -- 想要视为使用的牌名

  • subcards? (integer[]) -- 子卡,可以留空或者直接nil

  • from (ServerPlayer) -- 使用来源

  • tos (ServerPlayer | ServerPlayer[]) -- 目标角色(列表)

  • skillName? (string) -- 技能名

  • extra? (boolean) -- 是否不计入次数

  • extra_data? (table) -- 使用事件的extra_data

class SkillEventWrappers: Object#
useSkill(
    self: SkillEventWrappers,
    player: ServerPlayer,
    skill: Skill,
    effect_cb: fun(),
    skill_data?: SkillUseDataSpec
): SkillEffectData#

使用技能。先增加技能发动次数,再执行相应的函数。

Parameters:
  • player (ServerPlayer) -- 发动技能的玩家

  • skill (Skill) -- 发动的技能

  • effect_cb (fun()) -- 实际要调用的函数

  • skill_data? (SkillUseDataSpec) -- 技能的信息

handleAddLoseSkills(
    self: SkillEventWrappers,
    player: ServerPlayer,
    skill_names: string | string[],
    source_skill?: string | Skill,
    sendlog?: boolean,
    no_trigger?: boolean
)#

令一名玩家获得/失去技能。

skill_names 是字符串数组或者用管道符号(|)分割的字符串。

每个skill_name都是要获得的技能的名。如果在skill_name前面加上"-",那就是失去技能。

Parameters:
  • player (ServerPlayer) -- 玩家

  • skill_names (string | string[]) -- 要获得/失去的技能

  • source_skill? (string | Skill) -- 源技能

  • sendlog? (boolean) -- 是否发送战报,默认发送

  • no_trigger? (boolean) -- 是否不触发相关时机

class JudgeEventWrappers: Object#
judge(self: JudgeEventWrappers, data: JudgeDataSpec): boolean#

根据判定数据进行判定。判定的结果直接保存在这个数据中。

changeJudge(self: JudgeEventWrappers, params: RetrialParams)#

改变判定牌

retrial(
    self: JudgeEventWrappers,
    card: Card,
    player: ServerPlayer,
    judge: JudgeData,
    skillName?: string,
    exchange?: boolean
)#

改判。

Parameters:
  • card (Card) -- 改判的牌

  • player (ServerPlayer) -- 改判者

  • judge (JudgeData) -- 被改判的判定数据

  • skillName? (string) -- 技能名

  • exchange? (boolean) -- 是否替换原有判定牌(类似```鬼道```)

class PindianEventWrappers: Object#
pindian(
    self: PindianEventWrappers,
    pindianData: PindianDataSpec
): boolean#

根据拼点信息开始拼点。

changePindianNumber(
    self: PindianEventWrappers,
    pindianData: PindianData,
    player: ServerPlayer,
    number: integer,
    skill_name: string
)#

加减拼点牌点数(最小为1,最大为13)。

Parameters:
  • player (ServerPlayer) -- 拼点角色

  • number (integer) -- 加减的点数

  • skill_name (string) -- 技能名