Class Room

目录

Class Room#

class Room: (
    AbstractRoom,
    ServerRoomBase,
    GameEventWrappers,
    CompatAskFor
)#

Room是fk游戏逻辑运行的主要场所,同时也提供了许多API函数供编写技能使用。

一个房间中只有一个Room实例,保存在RoomInstance全局变量中。

extra_turn_list: table#

待执行的额外回合表

general_pile: string[]#

武将牌堆,这是可用武将名的数组

current_cost_skill: TriggerSkill?#

AI用

makeGeneralPile(self: Room): boolean#

构造武将牌堆。同名武将只留下一张

getAllPlayers(self: Room, sortBySeat?: boolean): ServerPlayer[]#

获得当前房间中的所有角色。

如果按照座位排序,返回的数组的第一个元素是当前回合角色,并且按行动顺序进行排序。

Parameters:

sortBySeat? (boolean) -- 是否按座位排序,默认是

Returns:

_1 (ServerPlayer[]) -- 房间中角色的数组

getAlivePlayers(self: Room, sortBySeat?: boolean): ServerPlayer[]#

获得所有存活角色,参看getAllPlayers

Parameters:

sortBySeat? (boolean) -- 是否按座位排序,默认是

getOtherPlayers(
    self: Room,
    player: ServerPlayer,
    sortBySeat?: boolean,
    include_dead?: boolean
): ServerPlayer[]#

获得除一名角色外的其他角色。

Parameters:
  • player (ServerPlayer) -- 要排除的角色

  • sortBySeat? (boolean) -- 是否按座位排序,默认是

  • include_dead? (boolean) -- 是否要把死人也算进去?

Returns:

_1 (ServerPlayer[]) -- 其他角色列表

getLord(self: Room): ServerPlayer?#

获得当前房间中的主公。

由于某些游戏模式没有主公,该函数可能返回nil。

Returns:

_1? (ServerPlayer) -- 主公

getNCards(self: Room, num: integer, from?: string): integer[]#

从摸牌堆中获取若干张牌。

如果牌堆中没有足够的牌可以获得,那么会触发洗牌;还是不够的话,游戏就平局。

Parameters:
  • num (integer) -- 要获得的牌的数量

  • from? (string) -- 获得牌的位置,可以是 "top" 或者 "bottom",表示牌堆顶还是牌堆底

Returns:

_1 (integer[]) -- 得到的id

clearHandMark(self: Room, player: ServerPlayer, name: string)#

清除一名角色手牌中的某种标记

Parameters:
  • player (ServerPlayer) -- 要清理标记的角色

  • name (string) -- 要清理的标记名

setCardMark(self: Room, card: Card, mark: string, value: any)#

将一张卡牌的```mark```标记设置为```value```,并通知所有客户端更新。

通用的mark名称及后缀参见```mark_enum.lua```。

Parameters:
  • card (Card) -- 更新标记的牌

  • mark (string) -- 标记的名称

  • value (any) -- 设置的值,可以是数字、字符串、表、键值表等

addCardMark(self: Room, card: Card, mark: string, count?: integer)#

将一张卡牌的```mark```标记增加```count```个,并通知所有客户端更新。

Parameters:
  • card (Card) -- 增加标记的牌

  • mark (string) -- 标记名称

  • count? (integer) -- 增加的数量,默认为1

removeCardMark(self: Room, card: Card, mark: string, count?: integer)#

将一名玩家的```mark```标记减少```count```个,并通知所有客户端更新。

Parameters:
  • card (Card) -- 减少标记的牌

  • mark (string) -- 标记名称

  • count? (integer) -- 减少的数量,默认为1

prepareGeneral(
    self: Room,
    player: ServerPlayer,
    general: string,
    deputy?: string,
    broadcast?: boolean
)#

为角色设置武将,并从武将池中抽出,若有隐匿技变为隐匿将。注意此时不会进行选择势力,请随后自行处理

Parameters:
  • general (string) -- 主将名

  • deputy? (string) -- 副将名

  • broadcast? (boolean) -- 是否公示,默认否

animDelay(self: Room, sec: integer)#

延迟一段时间。界面上会显示所有人读条了。注意这个只能延迟多少秒。

Parameters:

sec (integer) -- 要延迟的秒数

sendFootnote(
    self: Room,
    ids: integer[],
    log: LogMessage,
    virtual?: boolean
)#

为一些牌设置脚注

Parameters:
  • ids (integer[]) -- 要设置虚拟牌名的牌的id列表

  • log (LogMessage) -- Log的实际内容

  • virtual? (boolean) -- 是否为虚拟牌

sendCardVirtName(
    self: Room,
    ids: integer[],
    name: string,
    virtual?: boolean
)#

为一些牌设置虚拟转化牌名(仅影响桌面上的牌,处理区/弃牌堆/虚空区)

Parameters:
  • ids (integer[]) -- 要设置虚拟牌名的牌的id列表

  • name (string) -- 虚拟牌名

  • virtual? (boolean) -- 是否为虚拟牌

setEmotion(self: Room, player: ServerPlayer, name: string)#

在player脸上展示名为name的emotion动效。

这就是“杀”、“闪”之类的那个动画。

Parameters:
  • player (ServerPlayer) -- 被播放动画的那个角色

  • name (string) -- emotion名字,可以是一个路径

setCardEmotion(self: Room, cid: integer, name: string)#

在一张card上播放一段emotion动效。

这张card必须在处理区里面,或者至少客户端觉得它在处理区。

Parameters:
  • cid (integer) -- 被播放动效的那个牌的id

  • name (string) -- emotion名字,可以是一个路径

doSuperLightBox(self: Room, path: string, extra_data: any)#

播放一个全屏大动画。可以自己指定qml文件路径和额外的信息。

Parameters:
  • path (string) -- qml文件的路径,有默认值

  • extra_data (any) -- 要传递的额外信息

sendLogEvent(self: Room, type: any, data: any, players: any)#

基本上是个不常用函数就是了

broadcastPlaySound(self: Room, path: string)#

播放一段音频。

Parameters:

path (string) -- 音频文件路径

notifySkillInvoked(
    self: Room,
    player: ServerPlayer,
    skill_name: string,
    skill_type?: string | "big" | "control" | "defensive" | "drawcard"...(+6),
    tos?: ServerPlayer[] | integer[]
)#

在player的脸上播放技能发动的特效。

与此同时,在战报里面发一条“xxx发动了xxx”

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

  • skill_name (string) -- 技能名

  • skill_type? (string | "big" | "control" | "defensive" | "drawcard"...(+6)) -- 技能的动画效果,默认是那个技能的anim_type

  • tos? (ServerPlayer[] | integer[]) -- 技能目标,填空则不声明

doIndicate(
    self: Room,
    source: integer | ServerPlayer,
    targets: ServerPlayer[] | integer[]
)#

播放从source指到targets的指示线效果。

Parameters:
  • source (integer | ServerPlayer) -- 指示线开始的那个玩家

  • targets (ServerPlayer[] | integer[]) -- 指示线目标玩家的列表

askToUseActiveSkill(
    self: Room,
    player: ServerPlayer,
    params: AskToUseActiveSkillParams
): (
    boolean,
    {cards: integer[], targets: ServerPlayer[], interaction: any}?
)#

询问player是否要发动一个主动技。

如果发动的话,那么会执行一下技能的onUse函数,然后返回选择的牌和目标等。

Parameters:
  • player (ServerPlayer) -- 询问目标

  • params (AskToUseActiveSkillParams) -- 各种变量

Returns:
  • _1 (boolean) -- 返回第一个值为是否成功发动,第二值为技能选牌、目标等数据

  • _2? ({cards: integer[], targets: ServerPlayer[], interaction: any}) -- 返回第一个值为是否成功发动,第二值为技能选牌、目标等数据

askToDiscard(
    self: Room,
    player: ServerPlayer,
    params: AskToDiscardParams
): integer[]#

询问一名角色弃牌。

在这个函数里面牌已经被弃掉了(除非skipDiscard为true)。

Parameters:
  • player (ServerPlayer) -- 弃牌角色

  • params (AskToDiscardParams) -- 各种变量

Returns:

_1 (integer[]) -- 弃掉的牌的id列表,可能是空的

askToChoosePlayers(
    self: Room,
    player: ServerPlayer,
    params: AskToChoosePlayersParams
): ServerPlayer[]#

询问一名玩家从targets中选择若干名玩家出来。

Parameters:
  • player (ServerPlayer) -- 要做选择的玩家

  • params (AskToChoosePlayersParams) -- 各种变量

Returns:

_1 (ServerPlayer[]) -- 选择的玩家列表,可能为空

askToCards(
    self: Room,
    player: ServerPlayer,
    params: AskToCardsParams
): integer[]#

询问一名玩家选择自己的几张牌。

与askForDiscard类似,但是不对选择的牌进行操作就是了。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToCardsParams) -- 各种变量

Returns:

_1 (integer[]) -- 选择的牌的id列表,可能是空的

viewCards(
    self: Room,
    player: ServerPlayer,
    params: ViewCardsParams
)#

询问玩家观看一些牌(只有确定可用)

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (ViewCardsParams) -- 参数列表

askToViewCardsAndChoice(
    self: Room,
    player: ServerPlayer,
    params: AskToViewCardsAndChoiceParams
): string#

询问玩家观看一些牌并做出选项,但是选项有额外的点亮标准

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToViewCardsAndChoiceParams) -- 参数列表

askToChooseCardsAndChoice(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseCardsAndChoiceParams
): integer[], string#

询问玩家选择牌和选项,但是选项有额外的点亮标准

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToChooseCardsAndChoiceParams) -- 参数列表

askToChooseCardsAndPlayers(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseCardsAndPlayersParams
): ServerPlayer[], integer[], boolean#

询问玩家选择X张牌和Y名角色。

返回两个值,第一个是选择目标列表,第二个是选择的牌id列表,第三个是否按了确定

默认可取消

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToChooseCardsAndPlayersParams) -- 各种变量

Returns:
  • _1 (ServerPlayer[]) -- 第一个是选择目标列表,第二个是选择的牌id列表,第三个是否按了确定

  • _2 (integer[]) -- 第一个是选择目标列表,第二个是选择的牌id列表,第三个是否按了确定

  • _3 (boolean) -- 第一个是选择目标列表,第二个是选择的牌id列表,第三个是否按了确定

askToYiji(
    self: Room,
    player: ServerPlayer,
    params: AskToYijiParams
): table<integer, integer[]>#

询问将卡牌分配给任意角色。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToYijiParams) -- 各种变量

Returns:

_1 (table<integer, integer[]>) -- 返回一个表,键为角色id,值为分配给其的牌id数组

askToChooseGeneral(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseGeneralParams
): string | string[]#

询问玩家选择一名武将。

Parameters:
  • player (ServerPlayer) -- 询问目标

  • params (AskToChooseGeneralParams) -- 各种变量

Returns:

_1 (string | string[]) -- 选择的武将,一个是string,多个是string[]

askToChooseKingdom(self: Room, players?: ServerPlayer[])#

询问玩家若为神将、双势力需选择一个势力。

Parameters:

players? (ServerPlayer[]) -- 询问目标

askToChooseCard(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseCardParams
): integer#

询问player,选择target的一张牌。

Parameters:
  • player (ServerPlayer) -- 要被询问的人

  • params (AskToChooseCardParams) -- 各种变量

Returns:

_1 (integer) -- 选择的卡牌id

askToPoxi(
    self: Room,
    player: ServerPlayer,
    params: AskToPoxiParams
): integer[]#

谋askForCardsChosen,需使用```Fk:addPoxiMethod```定义好方法

选卡规则和返回值啥的全部自己想办法解决,`data```填入所有卡的列表(类似```ui.card_data`

注意一定要返回一个表,毕竟本质上是选卡函数

Parameters:
  • player (ServerPlayer) -- 要被询问的人

  • params (AskToPoxiParams) -- 各种变量

Returns:

_1 (integer[]) -- 选择的牌ID数组

askToChooseCards(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseCardsParams
): integer[]#

完全类似askForCardChosen,但是可以选择多张牌。 相应的,返回的是id的数组而不是单个id。

Parameters:
  • player (ServerPlayer) -- 要被询问的人

  • params (AskToChooseCardsParams) -- 各种变量

Returns:

_1 (integer[]) -- 选择的id

askToChoice(
    self: Room,
    player: ServerPlayer,
    params: AskToChoiceParams
): string#

询问一名玩家从众多选项中选择一个。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToChoiceParams) -- 各种变量

Returns:

_1 (string) -- 选择的选项

askToChoices(
    self: Room,
    player: ServerPlayer,
    params: AskToChoicesParams
): string[]#

询问一名玩家从众多选项中勾选任意项。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToChoicesParams) -- 各种变量

Returns:

_1 (string[]) -- 选择的选项

askToJointChoice(
    self: Room,
    player: ServerPlayer,
    params: askToJointChoiceParams
): table<Player, string>#

同时询问多名玩家从众多选项中选择一个(要求所有玩家选项相同,不同的请自行构造request)

Parameters:
  • player (ServerPlayer) -- 发起者

  • params (askToJointChoiceParams) -- 各种变量

Returns:

_1 (table<Player, string>) -- 返回键值表,键为Player、值为选项

askToJointCards(
    self: Room,
    player: ServerPlayer,
    params: askToJointCardsParams
): table<ServerPlayer, integer[]>#

同时询问多名玩家选择一些牌(要求所有玩家选牌规则相同,不同的请自行构造request)

Parameters:
  • player (ServerPlayer) -- 发起者

  • params (askToJointCardsParams) -- 各种变量

Returns:

_1 (table<ServerPlayer, integer[]>) -- 返回键值表,键为Player、值为选择的牌id列表

askToSkillInvoke(
    self: Room,
    player: ServerPlayer,
    params: AskToSkillInvokeParams
): boolean#

询问玩家是否发动技能。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToSkillInvokeParams) -- 各种变量

Returns:

_1 (boolean) -- 是否发动

askToArrangeCards(
    self: Room,
    player: ServerPlayer,
    params: AskToArrangeCardsParams
): table[]#

询问玩家在自定义大小的框中排列卡牌(观星、交换、拖拽选牌)

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToArrangeCardsParams) -- 各种变量

Returns:

_1 (table[]) -- 排列后的牌堆结果

askToGuanxing(
    self: Room,
    player: ServerPlayer,
    params: AskToGuanxingParams
): table<"bottom" | "top", integer[]>#

询问玩家对若干牌进行观星。

观星完成后,相关的牌会被置于牌堆顶或者牌堆底。所以这些cards最好不要来自牌堆,一般先用getNCards从牌堆拿出一些牌。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToGuanxingParams) -- 各种变量

Returns:

_1 (table<"bottom" | "top", integer[]>) -- 观星后的牌堆结果

askToExchange(
    self: Room,
    player: ServerPlayer,
    params: AskToExchangeParams
): integer[][]#

询问玩家任意交换几堆牌堆。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToExchangeParams) -- 各种变量

Returns:

_1 (integer[][]) -- 交换后的结果

getNGenerals(self: Room, n: number, position?: string): string[]#

抽个武将

同getNCards,抽出来就没有了,所以记得放回去。

Parameters:
  • n (number) -- 数量

  • position? (string) -- 位置,top/bottom,默认top

Returns:

_1 (string[]) -- 武将名数组

returnToGeneralPile(self: Room, g: string[], position?: string): boolean#

把武将牌塞回去(……)

Parameters:
  • g (string[]) -- 武将名数组

  • position? (string) -- 位置,top/bottom/random,默认random

Returns:

_1 (boolean) -- 是否成功

findGeneral(self: Room, name?: string): string?#

抽特定名字的武将(抽了就没了)

Parameters:

name? (string) -- 武将name,如找不到则查找truename,再找不到则返回nil

Returns:

_1? (string) -- 抽出的武将名

findGenerals(self: Room, func: fun(name: string): any, n?: integer): string[]#

自上而下抽符合特定情况的N个武将(抽了就没了)

Parameters:
  • func (fun(name: string): any) -- 武将筛选函数

  • n? (integer) -- 抽取数量,数量不足则直接抽干净

Returns:

_1 (string[]) -- 武将组合,可能为空

handleUseCardReply(
    self: Room,
    player: ServerPlayer,
    data: any,
    params?: handleUseCardParams
): (string | UseCardDataSpec)?#

将从Request获得的数据转化为UseCardData,或执行主动技的onUse部分 一般DIY用不到的内部函数

Returns:

_1? (string | UseCardDataSpec) -- 返回字符串则取消使用,若返回技能名,在当前询问中禁用此技能

askToUseRealCard(
    self: Room,
    player: ServerPlayer,
    params: AskToUseRealCardParams
): UseCardDataSpec?#

询问玩家从一些实体牌中选一个使用。默认无次数限制,与askForUseCard主要区别是不能调用转化技

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToUseRealCardParams) -- 各种变量

Returns:

_1? (UseCardDataSpec) -- 返回卡牌使用框架。取消使用则返回空

askToUseVirtualCard(
    self: Room,
    player: ServerPlayer,
    params: askToUseVirtualCardParams
): UseCardDataSpec?#

询问玩家使用一张虚拟卡,或从几种牌名中选择一种视为使用

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (askToUseVirtualCardParams) -- 各种变量

Returns:

_1? (UseCardDataSpec) -- 返回卡牌使用框架。取消使用则返回空

askToPlayCard(
    self: Room,
    player: ServerPlayer,
    params: askToPlayCardParams
): UseCardDataSpec?#

询问玩家(如在空闲时间点一般)使用一张实体牌,支持转化技。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (askToPlayCardParams) -- 各种变量

Returns:

_1? (UseCardDataSpec) -- 返回关于本次使用牌的数据,以便后续处理

askToNumber(
    self: Room,
    player: ServerPlayer,
    params: askToNumberParams
): integer?#

询问玩家选择一个数字

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (askToNumberParams) -- 各种变量

Returns:

_1? (integer) -- 返回选择的数字。取消则返回空

askToUseCard(
    self: Room,
    player: ServerPlayer,
    params: AskToUseCardParams
): UseCardDataSpec?#

available extra_data: * must_targets: integer[] * exclusive_targets: integer[] * fix_targets: integer[] * bypass_distances: boolean * bypass_times: boolean

询问玩家使用一张牌。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToUseCardParams) -- 各种变量

Returns:

_1? (UseCardDataSpec) -- 返回关于本次使用牌的数据,以便后续处理

askToResponse(
    self: Room,
    player: ServerPlayer,
    params: AskToUseCardParams
): RespondCardDataSpec?#

询问一名玩家打出一张牌。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToUseCardParams) -- 各种变量

Returns:

_1? (RespondCardDataSpec) -- 打出的事件

askToNullification(
    self: Room,
    players: ServerPlayer[],
    params: AskToUseCardParams
): UseCardDataSpec?#

同时询问多名玩家是否使用某一张牌。

函数名字虽然是“询问无懈可击”,不过其实也可以给别的牌用就是了。

Parameters:
  • players (ServerPlayer[]) -- 要询问的玩家列表

  • params (AskToUseCardParams) -- 各种变量

Returns:

_1? (UseCardDataSpec) -- 最终决胜出的卡牌使用信息

askToAG(
    self: Room,
    player: ServerPlayer,
    params: AskToAGParams
): integer#

询问玩家从AG中选择一张牌。

Parameters:
  • player (ServerPlayer) -- 要询问的玩家

  • params (AskToAGParams) -- 各种变量

Returns:

_1 (integer) -- 选择的卡牌

fillAG(
    self: Room,
    players: ServerPlayer | ServerPlayer[],
    id_list: Card[] | integer[],
    disable_ids?: Card[] | integer[]
)#

给player发一条消息,在他的窗口中用一系列卡牌填充一个AG。

Parameters:
  • players (ServerPlayer | ServerPlayer[]) -- 要通知的玩家

  • id_list (Card[] | integer[]) -- 要填充的卡牌

  • disable_ids? (Card[] | integer[]) -- 未使用 不能选择的牌

takeAG(
    self: Room,
    taker: ServerPlayer,
    id: integer,
    notify_list?: ServerPlayer[]
)#

告诉一些玩家,AG中的牌被taker取走了。

Parameters:
  • taker (ServerPlayer) -- 拿走牌的玩家

  • id (integer) -- 被拿走的牌

  • notify_list? (ServerPlayer[]) -- 要告知的玩家,默认为全员

closeAG(self: Room, player?: ServerPlayer)#

关闭player那侧显示的AG。

若不传参(即player为nil),那么关闭所有玩家的AG。

Parameters:

player? (ServerPlayer) -- 要关闭AG的玩家

askToMiniGame(
    self: Room,
    players: ServerPlayer[],
    params: AskToMiniGameParams
): Request#

TODO: 重构request机制,不然这个还得手动拿client_reply

Parameters:
  • players (ServerPlayer[]) -- 需要参与这个框的角色

  • params (AskToMiniGameParams) -- 各种变量

askToCustomDialog(
    self: Room,
    player: ServerPlayer,
    params: AskToCustomDialogParams
): any#

调用一个自定义对话框,须自备loadData方法

Parameters:
  • player (ServerPlayer) -- 询问的角色

  • params (AskToCustomDialogParams) -- 各种变量

Returns:

_1 (any) -- 返回qml的ClientInstance.replyToServer。注意0.5.12+版本不再需要json.decode

askToMoveCardInBoard(
    self: Room,
    player: ServerPlayer,
    params: AskToMoveCardInBoardParams
): (
    {card: Card, from: ServerPlayer, to: ServerPlayer}?
)#

询问移动场上的一张牌。不可取消

Parameters:
  • player (ServerPlayer) -- 移动的操作者

  • params (AskToMoveCardInBoardParams) -- 各种变量

Returns:

_1? ({card: Card, from: ServerPlayer, to: ServerPlayer}) -- 选择的卡牌、起点玩家id和终点玩家id列表

askToChooseToMoveCardInBoard(
    self: Room,
    player: ServerPlayer,
    params: AskToChooseToMoveCardInBoardParams
): ServerPlayer[]#

询问一名玩家选择两名角色,在这两名角色之间移动场上一张牌

Parameters:
  • player (ServerPlayer) -- 要做选择的玩家

  • params (AskToChooseToMoveCardInBoardParams) -- 各种变量

Returns:

_1 (ServerPlayer[]) -- 选择的两个玩家的列表,若未选择,返回空表

changeShield(self: Room, player: ServerPlayer, num: integer)#

改变玩家的护甲数

Parameters:

num (integer) -- 变化量

swapSeat(
    self: Room,
    a: ServerPlayer,
    b: ServerPlayer,
    arrange_turn?: boolean
)#

令两名玩家交换座位

Parameters:
  • a (ServerPlayer) -- 玩家1

  • b (ServerPlayer) -- 玩家2

  • arrange_turn? (boolean) -- 是否更新本轮额定回合,默认是

moveSeatTo(
    self: Room,
    player: ServerPlayer,
    seat: integer,
    arrange_turn?: boolean
)#

将一名玩家移动至指定座位

Parameters:
  • player (ServerPlayer) -- 被移动的玩家

  • seat (integer) -- 目标座位

  • arrange_turn? (boolean) -- 是否更新本轮额定回合,默认是

moveSeatToNext(
    self: Room,
    player: ServerPlayer,
    target: ServerPlayer,
    is_last?: boolean,
    arrange_turn?: boolean
)#

将一名玩家移动至某人的下家/上家

Parameters:
  • player (ServerPlayer) -- 被移动的玩家

  • target (ServerPlayer) -- 目标玩家,移动成为这个玩家的下家(例如target为8号位,则移动后target为7号位,player为8号位)

  • is_last? (boolean) -- 是否移动成为这个玩家的上家,默认否

  • arrange_turn? (boolean) -- 是否更新本轮额定回合,默认是

arrangeTurn(self: Room, players?: ServerPlayer[])#

按输入的角色表重新改变本轮额定回合。若无输入则更新本轮剩余额定回合

syncDrawPile(self: Room)#

强制同步牌堆(用于在不因任何移动事件且不因洗牌导致的牌堆变动)

getGameSummary(self: Room): table<integer, integer[]>#

获取一局游戏的总结,包括每个玩家的回合数、回血、伤害、受伤、击杀

Returns:

_1 (table<integer, integer[]>) -- 玩家id到总结的映射

canMoveCardInBoard(
    self: Room,
    flag?: "e" | "ej" | "j",
    players?: ServerPlayer[],
    excludeIds?: integer[],
    targets?: ServerPlayer[]
): ServerPlayer[]#

获取可以移动场上牌的第一对目标。用于判断场上是否可以移动的牌

Parameters:
  • flag? ("e" | "ej" | "j") -- 判断移动的区域

  • players? (ServerPlayer[]) -- 可被移动的玩家列表

  • excludeIds? (integer[]) -- 不能移动的卡牌id

  • targets? (ServerPlayer[]) -- 可移动至的玩家列表,默认为```players```

Returns:

_1 (ServerPlayer[]) -- 第一对玩家列表,第一个是来源,第二个是目标 可能为空表

updateQuestSkillState(
    self: Room,
    player: ServerPlayer,
    skillName: string,
    failed?: boolean
)#

刷新使命技状态

updateAllLimitSkillUI(self: Room, player: ServerPlayer)#

刷新所有武将脸旁边的技能图标状态

abortPlayerArea(
    self: Room,
    player: ServerPlayer,
    playerSlots: string | string[]
)#

废除区域

Parameters:
  • player (ServerPlayer) -- 被废除区域的玩家

  • playerSlots (string | string[]) -- 被废除区域的名称

resumePlayerArea(
    self: Room,
    player: ServerPlayer,
    playerSlots: string | string[]
)#

恢复区域

setPlayerRest(self: Room, player: ServerPlayer, roundNum: integer)#

设置休整

endTurn(self: Room)#

结束当前回合(不会终止结算)即结束当前阶段,且不执行本回合之后的阶段

cleanProcessingArea(self: Room, cards?: integer[], skillName?: string)#

清理遗留在处理区的卡牌

Parameters:
  • cards? (integer[]) -- 待清理的卡牌。不填则清理处理区所有牌

  • skillName? (string) -- 技能名

addTableMark(
    self: Room,
    sth: Card | ServerPlayer,
    mark: string,
    value: any
)#

为角色或牌的表型标记添加值

Parameters:
  • sth (Card | ServerPlayer) -- 更新标记的玩家或卡牌

  • mark (string) -- 标记的名称

  • value (any) -- 要增加的值

addTableMarkIfNeed(
    self: Room,
    sth: Card | ServerPlayer,
    mark: string,
    value: any
): boolean#

为角色或牌的表型标记添加值,若已存在则不添加

Parameters:
  • sth (Card | ServerPlayer) -- 更新标记的玩家或卡牌

  • mark (string) -- 标记的名称

  • value (any) -- 要增加的值

Returns:

_1 (boolean) -- 是否添加成功

removeTableMark(
    self: Room,
    sth: Card | ServerPlayer,
    mark: string,
    value: any
): boolean#

为角色或牌的表型标记移除值,移为空表后重置标记值为0

Parameters:
  • sth (Card | ServerPlayer) -- 更新标记的玩家或卡牌

  • mark (string) -- 标记的名称

  • value (any) -- 要移除的值

Returns:

_1 (boolean) -- 是否移除成功(若标记中未含此值则移除失败)

invalidateSkill(
    self: Room,
    player: ServerPlayer,
    skill_name: string,
    temp?: "" | "-noclear" | "-phase" | "-round" | "-turn",
    source_skill?: string
)#

无效化技能

Parameters:
  • player (ServerPlayer) -- 技能被无效的角色

  • skill_name (string) -- 被无效的技能

  • temp? ("" | "-noclear" | "-phase" | "-round" | "-turn") -- 作用范围或其他后缀

  • source_skill? (string) -- 控制失效与否的技能。(保证不会与其他控制技能互相干扰)

validateSkill(
    self: Room,
    player: ServerPlayer,
    skill_name: string,
    temp?: "" | "-noclear" | "-phase" | "-round" | "-turn",
    source_skill?: string
)#

移除技能的无效化状态

Parameters:
  • player (ServerPlayer) -- 技能被有效的角色

  • skill_name (string) -- 被有效的技能

  • temp? ("" | "-noclear" | "-phase" | "-round" | "-turn") -- 作用范围或其他后缀

  • source_skill? (string) -- 控制生效与否的技能。(保证不会与其他控制技能互相干扰)

actExtraTurn(self: Room)#

进行待执行的额外回合

getPlayerClientCards(self: Room, player: ServerPlayer): integer[]#

获得一名角色的客户端手牌顺序 本bug由玄蝶提供

Parameters:

player (ServerPlayer) -- 角色

Returns:

_1 (integer[]) -- 卡牌ID,有元素检测就是了……

syncPlayerClientCards(self: Room, player: ServerPlayer): integer[]#

同步一名角色的客户端手牌顺序

Parameters:

player (ServerPlayer) -- 角色

Returns:

_1 (integer[]) -- 卡牌ID,有元素检测就是了……

banSortingHandcards(self: Room, player: ServerPlayer, suffix?: string)#

禁止排序手牌,在此时点,客户端手牌顺序将应用于服务端手牌顺序

Parameters:
  • player (ServerPlayer) -- 角色

  • suffix? (string) -- 后缀,如“-turn”

unbanSortingHandcards(self: Room, player: ServerPlayer, suffix?: string)#

解禁排序手牌,配合banSortingHandcards使用。

Parameters:
  • player (ServerPlayer) -- 角色

  • suffix? (string) -- 后缀,如“-turn”,一般是你用banSortingHandcards时填入的后缀

clearHistory(self: Room, scope: integer)#

阶段性清理各种标记

setPlayerPile(
    self: Room,
    player: ServerPlayer,
    pile: string,
    ids: integer[]
)#

将角色私人牌堆设置为指定牌(请确保这些牌已经在该角色的私人牌堆上)

Parameters:
  • player (ServerPlayer) -- 角色

  • pile (string) -- 牌堆名

  • ids (integer[]) -- 要设置的牌id表

showCards(
    self: Room,
    cards: integer | Card | Card[] | integer[],
    from?: ServerPlayer
)#

展示一堆牌(注意,这样子是不会过锁视技的)

Parameters:

cards (integer | Card | Card[] | integer[]) -- 要展示的牌

showVirtualCard(
    self: Room,
    card: Card | Card[],
    player?: ServerPlayer,
    footnote?: LogMessage,
    event_id?: integer
)#

将虚拟牌展示到桌面(仅动画)

Parameters:
  • card (Card | Card[]) -- 需要展示的牌

  • player? (ServerPlayer) -- 牌来自谁的手牌区

  • footnote? (LogMessage) -- 脚注

  • event_id? (integer) -- 当前事件的ID(用于清理UI处理区的卡)

destroyTableCard(self: Room, ids: integer | integer[])#

将桌面上的虚拟牌在移出(仅动画)

destroyTableCardByEvent(self: Room, id: integer)#

将桌面上的在该事件之后进入的卡牌移出(仅动画)