Class Player

目录

Class Player#

class Player: Base.Player#

玩家分为客户端要处理的玩家,以及服务端处理的玩家两种。

客户端能知道的玩家的信息十分有限,而服务端知道一名玩家的所有细节。

Player类就是这两种玩家的基类,包含它们共用的部分。

hp: integer#

体力值

maxHp: integer#

体力上限

shield: integer#

护甲数

kingdom: string#

势力

role_shown: boolean#

身份是否明置

general: string#

武将

deputyGeneral: string#

副将

gender: integer#

性别

phase: integer#

当前阶段

faceup: boolean#

是否正面朝上

chained: boolean#

是否处于连环状态

dying: boolean#

是否处于濒死

dead: boolean#

是否死亡

player_skills: Skill[]#

当前拥有的所有技能

derivative_skills: table<Skill, Skill[]>#

角色派生技能,键为使获得此派生技能的源技能,值为派生技能表

flag: string[]#

当前拥有的flag,不过好像没用过

tag: table<string, any>#

当前拥有的所有tag,好像也没用过

player_cards: table<integer, integer[]>#

当前拥有的所有牌,键是区域,值是id列表

virtual_equips: Card[]#

当前的虚拟装备牌,其实也包含着虚拟延时锦囊这种

special_cards: table<string, integer[]>#

类似“屯田”的“田”的私人牌堆

cardUsedHistory: table<string, integer[]>#

用牌次数历史记录

skillUsedHistory: table<string, integer[]>#

发动技能次数的历史记录

skillBranchUsedHistory: table<string, table<string, integer[]>>#

发动技能某分支次数的历史记录

buddy_list: integer[]#

队友列表,或者说自己可以观看别人手牌的那些玩家的列表

equipSlots: string[]#

装备栏列表

sealedSlots: string[]#

被废除的装备栏列表

setGeneral(
    self: Player,
    general: General,
    setHp?: boolean,
    addSkills?: boolean
)#

设置角色、体力、技能。

Parameters:
  • general (General) -- 角色类型

  • setHp? (boolean) -- 是否设置体力

  • addSkills? (boolean) -- 是否增加技能

getGeneralMaxHp(self: Player): integer#

根据角色的主副将计算角色的体力上限

hasFlag(self: Player, flag: string): boolean#

查询角色是否存在flag。

Parameters:

flag (string) -- 一种标记

setFlag(self: Player, flag: string)#

为角色赋予flag。

Parameters:

flag (string) -- 一种标记

clearFlags(self: Player)#

清除角色flag。

addCards(
    self: Player,
    playerArea: integer,
    cardIds: integer[],
    specialName?: string
)#

将指定数量的牌加入玩家的对应区域。

Parameters:
  • playerArea (integer) -- 玩家牌所在的区域

  • cardIds (integer[]) -- 牌的ID,返回唯一牌

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

removeCards(
    self: Player,
    playerArea: integer,
    cardIds: integer[],
    specialName?: string
)#

将指定数量的牌移除出玩家的对应区域。

Parameters:
  • playerArea (integer) -- 玩家牌所在的区域

  • cardIds (integer[]) -- 牌的ID,返回唯一牌

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

addVirtualEquip(self: Player, card: Card)#

为玩家提供虚拟装备。

Parameters:

card (Card) -- 卡牌

removeVirtualEquip(self: Player, cid: integer): Card#

为玩家移除虚拟装备。

Parameters:

cid (integer) -- 卡牌ID,用来定位装备

getVirtualEquip(self: Player, cid: integer): Card?#

确认玩家是否存在虚拟装备。

Parameters:

cid (integer) -- 卡牌ID,用来定位装备

hasDelayedTrick(self: Player, card_name: any): boolean#

确认玩家判定区是否存在延迟锦囊牌。

getCardIds(
    self: Player,
    playerAreas?: string | integer | integer[],
    specialName?: string
): integer[]#

获取玩家特定区域所有牌的ID。

Parameters:
  • playerAreas? (string | integer | integer[]) -- 玩家牌所在的区域

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

Returns:

_1 (integer[]) -- 返回对应区域的所有牌对应的ID

getPile(self: Player, name: string): integer[]#

通过名字检索获取玩家对应的私人牌堆。没有为{}。

Parameters:

name (string) -- 私人牌堆名

getPileNameOfId(self: Player, id: integer): string?#

通过ID检索获取玩家对应的私人牌堆。

Parameters:

id (integer) -- 私人牌堆ID

getHandlyIds(self: Player, include_hand?: boolean): integer[]#

返回所有名字以“&”结尾(如手牌般使用或打出)的pile的牌。 提示:VSSkill中需要```handly_pile = true```才能使用这些牌。

Parameters:

include_hand? (boolean) -- 是否包含真正的手牌,默认包含

getHandcardNum(self: Player): integer#

for fkp only 获取手牌数

getEquipment(self: Player, cardSubtype: integer): integer?#

检索玩家装备区是否存在对应类型的装备。

注意:带转化信息应使用```getEquipCards```

Parameters:

cardSubtype (integer) -- 卡牌子类

Returns:

_1? (integer) -- 返回卡牌ID或nil

getEquipments(self: Player, cardSubtype?: integer): integer[]#

检索玩家装备区是否存在对应类型或所有类型的装备列表。

注意:带转化信息应使用```getEquipCards```

Parameters:

cardSubtype? (integer) -- 卡牌子类,不填则返回所有装备

Returns:

_1 (integer[]) -- 返回id数组或空表

getEquipCards(self: Player, cardSubtype?: integer): Card[]#

检索玩家装备区是否存在对应类型的装备列表。(带转化信息)

Parameters:

cardSubtype? (integer) -- 卡牌子类,不填则返回所有装备

Returns:

_1 (Card[]) -- 返回卡牌数组或空表

getDelayedTrickCards(self: Player, name?: string): Card[]#

检索玩家判定区是否存在对应的延时锦囊列表。(带转化信息)

Parameters:

name? (string) -- 延时锦囊卡名,不填则返回所有延时锦囊

Returns:

_1 (Card[]) -- 返回卡牌数组或空表

getMaxCards(self: Player): integer#

获取玩家手牌上限。

getAttackRange(
    self: Player,
    excludeIds?: integer[],
    excludeSkills?: string[]
): integer#

获取玩家攻击范围。

Parameters:
  • excludeIds? (integer[]) -- 忽略的自己装备的id列表

  • excludeSkills? (string[]) -- 忽略的技能名列表

isRemoved(self: Player): boolean#

获取角色是否被移除。

distanceTo(
    self: Player,
    other: Player,
    mode?: string,
    ignore_dead?: boolean,
    excludeIds?: integer[],
    excludeSkills?: string[]
): integer#

获取玩家与其他角色的实际距离。

通过 二者位次+距离技能之和 与 两者间固定距离 进行对比,更大的为实际距离。

注意比较距离时使用```Player:compareDistance()```。

Parameters:
  • other (Player) -- 其他玩家

  • mode? (string) -- 计算模式(left/right/both)

  • ignore_dead? (boolean) -- 是否忽略尸体

  • excludeIds? (integer[]) -- 忽略的自己装备的id列表,用于飞刀判定

  • excludeSkills? (string[]) -- 忽略的技能名列表

compareDistance(
    self: Player,
    other: Player,
    num: integer,
    operator: "<" | "<=" | "==" | ">" | ">="...(+1)
): boolean#

比较距离(排除移出游戏(-1),故一般仅当<与<=时使用此函数有价值)

Parameters:
  • other (Player) -- 终点角色

  • num (integer) -- 比较基准

  • operator ("<" | "<=" | "==" | ">" | ">="...(+1)) -- 运算符

Returns:

_1 (boolean) -- 返回比较结果,不计入距离结果永远为false

inMyAttackRange(
    self: Player,
    other: Player,
    fixLimit?: integer,
    excludeIds?: integer[],
    excludeSkills?: string[]
): boolean#

获取其他玩家是否在玩家的攻击范围内。

Parameters:
  • other (Player) -- 其他玩家

  • fixLimit? (integer) -- 卡牌距离限制增加专用

  • excludeIds? (integer[]) -- 忽略的自己装备的id列表,用于飞刀判定

  • excludeSkills? (string[]) -- 忽略的技能名列表

getNextAlive(
    self: Player,
    ignoreRemoved?: boolean,
    num?: integer,
    ignoreRest?: boolean
): Player#

获取下家。

Parameters:
  • ignoreRemoved? (boolean) -- 忽略被移除

  • num? (integer) -- 第几个,默认1

  • ignoreRest? (boolean) -- 是否忽略休整

getLastAlive(
    self: Player,
    ignoreRemoved?: boolean,
    num?: integer,
    ignoreRest?: boolean
): Player#

获取上家。

Parameters:
  • ignoreRemoved? (boolean) -- 忽略被移除

  • num? (integer) -- 第几个,默认1

  • ignoreRest? (boolean) -- 是否忽略休整

addCardUseHistory(self: Player, cardName: string, num?: integer)#

增加玩家使用特定牌的历史次数。

Parameters:
  • cardName (string) -- 牌名

  • num? (integer) -- 次数

setCardUseHistory(
    self: Player,
    cardName: string,
    num?: integer,
    scope?: integer
)#

设定玩家使用特定牌的历史次数。

Parameters:
  • cardName (string) -- 牌名

  • num? (integer) -- 次数 默认0

  • scope? (integer) -- 历史范围 全为nil意为清空

addSkillUseHistory(self: Player, skill_name: string, num?: integer)#

增加玩家使用特定技能的历史次数。

Parameters:
  • skill_name (string) -- 技能名

  • num? (integer) -- 次数 默认1

addSkillBranchUseHistory(
    self: Player,
    skill_name: string,
    branch: string,
    num?: integer
)#

增加玩家使用特定技能分支的历史次数。

Parameters:
  • skill_name (string) -- 技能名

  • branch (string) -- 技能分支名,不写则默认改变某技能**所有分支**的历史次数

  • num? (integer) -- 次数 默认1

setSkillUseHistory(
    self: Player,
    skill_name?: string,
    num?: integer,
    scope?: integer
)#

设定玩家使用特定技能的历史次数。 `num`和`scope`均不写则为清空特定区域的历史次数

Parameters:
  • skill_name? (string) -- 技能名,不写则默认改变所有技能的历史次数

  • num? (integer) -- 次数 默认0

  • scope? (integer) -- 查询历史范围,若你填了num则必须填具体时机

setSkillBranchUseHistory(
    self: Player,
    skill_name?: string,
    branch?: string,
    num?: integer,
    scope?: integer
)#

设定玩家使用特定技能(skill skeleton)分支的历史次数。 `num`和`scope`均不写则为清空特定区域的历史次数

Parameters:
  • skill_name? (string) -- 技能(skill skeleton)名,不写(或写空字符串)则默认改变**所有技能**之所有分支的历史次数

  • branch? (string) -- 技能分支名,不写(或写空字符串)则默认改变某技能**所有分支**的历史次数

  • num? (integer) -- 次数 默认0

  • scope? (integer) -- 查询历史范围,若你填了num则必须填具体时机

clearSkillHistory(self: Player, skill_name: string, scope?: integer)#

清空玩家使用特定技能的历史次数

Parameters:
  • skill_name (string) -- 技能名,若为主技能则同时清空所有技能效果和分支的历史次数

  • scope? (integer) -- 清空的历史范围,不填则全部清空

usedCardTimes(self: Player, cardName: string, scope?: integer): integer#

获取玩家使用特定牌的历史次数(只算计入次数的部分)。

Parameters:
  • cardName (string) -- 牌名

  • scope? (integer) -- 查询历史范围,默认Turn

usedSkillTimes(
    self: Player,
    skill_name: string,
    scope?: integer,
    branch?: string
): integer#

获取玩家使用特定技能的历史次数。

Parameters:
  • skill_name (string) -- 技能(skill skeleton)名

  • scope? (integer) -- 查询历史范围,默认Turn

  • branch? (string) -- 不查询主技能使用次数,改为查询分支所属的次数限制

usedEffectTimes(self: Player, skill_name: string, scope?: integer): integer#

获取玩家使用特定技能效果的历史次数。

Parameters:
  • skill_name (string) -- 效果(skill effect)名

  • scope? (integer) -- 查询历史范围,默认Turn

isKongcheng(self: Player): boolean#

获取玩家是否无手牌。

isNude(self: Player): boolean#

获取玩家是否没有牌(即无手牌及装备区牌)。

isAllNude(self: Player): boolean#

获取玩家所有区域是否无牌。

isWounded(self: Player): boolean#

获取玩家是否受伤。

getLostHp(self: Player): integer#

获取玩家已失去体力。

hasSkill(
    self: Player,
    skill: string | Skill,
    ignoreNullified?: boolean,
    ignoreAlive?: boolean
): boolean#

检索玩家是否有对应技能。

Parameters:
  • skill (string | Skill) -- 技能名

  • ignoreNullified? (boolean) -- 忽略技能是否被无效

  • ignoreAlive? (boolean) -- 忽略角色在场与否

hasShownSkill(
    self: Player,
    skill: string | Skill,
    ignoreNullified: any,
    ignoreAlive: any
): boolean#

技能是否亮出

addSkill(
    self: Player,
    skill: string | Skill,
    source_skill?: string | Skill
): Skill[]#

为玩家增加对应技能。

Parameters:
  • skill (string | Skill) -- 技能名

  • source_skill? (string | Skill) -- 本有技能(和衍生技能相对)

Returns:

_1 (Skill[]) -- got skills that Player didn't have at start

loseSkill(
    self: Player,
    skill: string | Skill,
    source_skill?: string | Skill
): Skill[]#

为玩家删除对应技能。

Parameters:
  • skill (string | Skill) -- 技能名

  • source_skill? (string | Skill) -- 本有技能(和衍生技能相对)

Returns:

_1 (Skill[]) -- lost skills that the Player doesn't have anymore

getAllSkills(self: Player): Skill[]#

获取对应玩家所有技能。 return all skills that xxx:hasSkill() == true

canUse(self: Player, card: Card, extra_data?: UseExtraData): boolean#

确认玩家是否可以使用特定牌。

Parameters:
  • card (Card) -- 特定牌

  • extra_data? (UseExtraData) -- 额外数据

canUseTo(
    self: Player,
    card: Card,
    to: Player,
    extra_data?: UseExtraData
): boolean | nil#

确认玩家是否可以对特定玩家使用特定牌。

Parameters:
  • card (Card) -- 特定牌

  • to (Player) -- 特定玩家

  • extra_data? (UseExtraData) -- 额外数据

canUseOrResponseInCurrent(self: Player, card: Card, extra_data?: UseExtraData): boolean#

确认玩家是否可以使用/打出特定牌,考虑Fk.currentResponsePattern。

Parameters:
  • card (Card) -- 特定牌

  • extra_data? (UseExtraData) -- 额外数据(为nil的情况取当前req的extra_data信息)

getViewAsCardNames(
    self: Player,
    skill_name: string,
    card_names: string[],
    subcards?: integer[],
    ban_cards?: string[],
    extra_data?: table | UseExtraData,
    vs_pattern?: string
): string[]#

当前可用的牌名筛选。用于转化技的interaction里对泛转化牌名的合法性检测

Parameters:
  • skill_name (string) -- 泛转化技的技能名

  • card_names (string[]) -- 待判定的牌名列表

  • subcards? (integer[]) -- 子卡(某些技能可以提前确定子卡,如奇策、妙弦)

  • ban_cards? (string[]) -- 被排除的卡名

  • extra_data? (table | UseExtraData) -- 用于使用的额外信息(为nil的情况取当前req的extra_data信息)

  • vs_pattern? (string) -- 转化后的卡牌pattern

Returns:

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

isProhibited(self: Player, to: Player, card: Card): boolean#

确认玩家是否被禁止对特定玩家使用特定牌。

Parameters:
  • to (Player) -- 特定玩家

  • card (Card) -- 特定牌

isProhibitedTarget(self: Player, card: Card): boolean#

确认角色是否被禁止成为特定牌的目标(目前仅用于移动场上的延时锦囊)

Parameters:

card (Card) -- 特定牌

prohibitUse(self: Player, card: Card): boolean#

确认玩家是否被禁止使用特定牌。

Parameters:

card (Card) -- 特定的牌

prohibitResponse(self: Player, card: Card): boolean#

确认玩家是否被禁止打出特定牌。

Parameters:

card (Card) -- 特定的牌

prohibitDiscard(self: Player, card: integer | Card): boolean#

确认玩家是否被禁止弃置特定牌。

Parameters:

card (integer | Card) -- 特定的牌

prohibitReveal(self: Player, isDeputy: any): boolean#

确认角色是否被禁止亮将。

canPindian(
    self: Player,
    to: Player,
    ignoreFromKong?: boolean,
    ignoreToKong?: boolean
): boolean#

判断能否拼点

Parameters:
  • to (Player) -- 拼点对象

  • ignoreFromKong? (boolean) -- 忽略发起者没有手牌

  • ignoreToKong? (boolean) -- 忽略对象没有手牌

canMoveCardIntoEquip(self: Player, cardId: integer | Card, convert?: boolean): boolean#

判断一张牌能否移动至某角色的装备区

Parameters:
  • cardId (integer | Card) -- 移动的牌

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

getSkillNameList(self: Player): string[]#

角色当前拥有的技能(skel)名列表。只包含武将技能,不含装备技能、附加技能。包括模式技

getSwitchSkillState(
    self: Player,
    skillName: string,
    afterUse?: boolean,
    inWord?: boolean
): string | number#

获取转换技状态

Parameters:
  • skillName (string) -- 技能名

  • afterUse? (boolean) -- 是否提前计算转换后状态

  • inWord? (boolean) -- 是否返回文字

Returns:

_1 (string | number) -- 转换技状态

canMoveCardInBoardTo(self: Player, to: Player, id: integer): boolean#

是否能移动特定牌至特定角色

Parameters:
  • to (Player) -- 移动至的角色

  • id (integer) -- 移动的牌

canMoveCardsInBoardTo(
    self: Player,
    to: Player,
    flag?: string,
    excludeIds?: integer[]
): boolean#

是否能移动特定区域牌至特定角色

Parameters:
  • to (Player) -- 移动至的角色

  • flag? (string) -- 移动的区域,`e`为装备区,`j`为判定区,`ej``nil`为装备区和判定区

  • excludeIds? (integer[]) -- 排除的牌

getQuestSkillState(self: Player, skillName: string): string?#

获取使命技状态

Returns:

_1? (string) -- 存在返回`failed` or succeed,不存在返回`nil`

getAvailableEquipSlots(self: Player, subtype?: integer): string[]#

获取角色未被废除的装备栏

Parameters:

subtype? (integer) -- 指定的装备栏类型,不填则判断所有类型

hasEmptyEquipSlot(self: Player, subtype?: integer): boolean#

检索玩家是否有对应类型的空装备栏

Parameters:

subtype? (integer) -- 指定的装备栏类型,不填则判断所有类型

isBuddy(self: Player, other: integer | Player): boolean#

是否为通牌队友

cardVisible(self: Player, cardId: integer, move?: MoveCardsData): boolean#

Player是否可看到某card

Parameters:

move? (MoveCardsData) -- 移动数据,注意涉及Player全是id

roleVisible(self: Player, target: Player): boolean#

Player是否可看到某target的身份

compareGenderWith(self: Player, other: Player, diff?: boolean): boolean#

比较两名角色的性别是否相同。

Parameters:
  • other (Player) -- 另一名角色

  • diff? (boolean) -- 比较二者不同

Returns:

_1 (boolean) -- 返回比较结果

isMale(self: Player): boolean#

是否为男性(包括双性)。

isFemale(self: Player): boolean#

是否为女性(包括双性)。

isFriend(self: Player, to: Player): boolean#

是否为友方

Parameters:

to (Player) -- 待判断的角色

isEnemy(self: Player, to: Player): boolean#

是否为敌方

Parameters:

to (Player) -- 待判断的角色

getFriends(
    self: Player,
    include_self?: boolean,
    include_dead?: boolean
): Player[]#

获得队友

Parameters:
  • include_self? (boolean) -- 是否包括自己。默认是

  • include_dead? (boolean) -- 是否包括死亡角色。默认否

getEnemies(self: Player, include_dead?: boolean): Player[]#

获得敌人

Parameters:

include_dead? (boolean) -- 是否包括死亡角色。默认否

canSortHandcards(self: Player): boolean#

判断角色是否可以排序手牌

canAttachSkill(
    self: Player,
    skill: string | Skill,
    relate_to_place?: "d" | "m"
): boolean#

能否获得某技能(用于游戏开始时或变更武将时,主动技、势力技、主副将技等特殊限制技能的判断)

Parameters:
  • skill (string | Skill) -- 待获取的技能

  • relate_to_place? ("d" | "m") -- 此技能属于主将或副将,不填则不做判断