跳转至

PlayerReviveServerAPI

服务端入口类,所有方法均为 @staticmethod

from PlayerReviveScripts.server.PlayerReviveServerAPI import PlayerReviveServerAPI

状态查询

getIsNeedRevive(playerId)

查询玩家当前是否处于「倒地」状态。

@staticmethod
def getIsNeedRevive(playerId):
    # type: (str) -> bool

参数

名称 类型 必填 说明
playerId str 玩家 ID

返回

bool —— True 表示玩家正等待救援,False 表示无需救援或处于死亡状态。

异常

  • ValueError —— 当 playerId 未加入服务器或未完成模组初始化时抛出。

getPlayerReviveHealth(playerId)

获取玩家当前的倒地血量。

@staticmethod
def getPlayerReviveHealth(playerId):
    # type: (str) -> float

参数

名称 类型 必填 说明
playerId str 玩家 ID

返回

float —— 当前倒地血量。范围 [0, getPlayerReviveMaxHealth(playerId)]

异常

  • ValueError —— 当 playerId 未加入服务器或未完成模组初始化时抛出。

getPlayerReviveMaxHealth(playerId)

获取玩家的倒地血量上限。

@staticmethod
def getPlayerReviveMaxHealth(playerId):
    # type: (str) -> float

参数

名称 类型 必填 说明
playerId str 玩家 ID

返回

float —— 当前最大倒地血量。

异常

  • ValueError —— 当 playerId 未加入服务器或未完成模组初始化时抛出。

状态控制

setIsStopHealthChangeToReviveCheck(isStop)

控制是否暂停「生命值变化触发倒地检查」。

@staticmethod
def setIsStopHealthChangeToReviveCheck(isStop):

参数

名称 类型 必填 说明
isStop bool True 暂停内置检查,False 恢复(默认)

返回

None

用途

当外部模组要完全接管玩家死亡判定(例如先调用其他血量系统再决定是否进入 PlayerRevive)时,传入 True 暂停 PlayerRevive 自动监听生命值变化。完成自定义判定后再恢复。


enterNeedReviveState(playerId, damagerId=None)

让指定玩家直接进入「倒地」状态——跳过图腾等保护流程,立刻放倒。

@staticmethod
def enterNeedReviveState(playerId, damagerId=None):
    # type: (str, str | None) -> bool

参数

名称 类型 必填 说明
playerId str 被强制倒地的玩家 ID
damagerId str | None ❌(默认 None 造成致命伤害的实体 ID,会随事件传递给监听器

返回

bool —— 状态切换是否成功。玩家已死亡或已经处于倒地状态时返回 False

用途

外部模组在自定义死亡判定(如完成扣血、判定结算)后,调用本方法直接把玩家放倒。不会触发不死图腾——若需要走图腾流程,请改用下方的 enterNeedReviveStateByExternalFatalCondition


enterNeedReviveStateByExternalFatalCondition(playerId, damagerId=None)

让指定玩家因「外部致命条件」进入「倒地」状态——会先经过不死图腾保护流程,未触发图腾保护时才真正倒地。

@staticmethod
def enterNeedReviveStateByExternalFatalCondition(playerId, damagerId=None):
    # type: (str, str | None) -> bool

参数

名称 类型 必填 说明
playerId str 玩家 ID
damagerId str | None ❌(默认 None 触发外部致命条件的实体 ID

返回

bool —— 状态切换是否成功。玩家已倒地、已死亡,或已处于图腾激活保护中时返回 False;触发图腾保护时返回 True(玩家本次不会进入倒地状态)。

enterNeedReviveState 的区别

两个方法都用来把玩家放倒,唯一区别是是否走不死图腾保护流程

方法 不死图腾
enterNeedReviveState ❌ 直接进入倒地,跳过图腾
enterNeedReviveStateByExternalFatalCondition ✅ 玩家若持有不死图腾且配置允许,消耗图腾、暂停倒地;图腾未触发时才进入倒地

适合外部模组判定的"致死"事件(如自定义施加的致死伤害)想要复用原版图腾的语义。若不需要图腾参与,使用 enterNeedReviveState 即可。 我知道上面这几个方法有点SHIT,但是在网易这里我已尽力 :)


事件系统

getApiEvents()

返回可注册事件的枚举类,用于在调用 registerEventHandler 时引用具体事件。

@staticmethod
def getApiEvents():
    # type: () -> type[PlayerReviveServerAPI.ApiEvents]

参数

无。

返回

type[PlayerReviveServerAPI.ApiEvents] —— 包含三个事件枚举项:ReviveNeededUpdateEventReviveMaxHealthUpdateEventReviveHealthUpdateEvent


getPlayerReviveEventPriorityEnum()

返回事件优先级枚举类。

@staticmethod
def getPlayerReviveEventPriorityEnum():
    # type: () -> type[PlayerReviveEventPriorityEnum]

参数

无。

返回

type[PlayerReviveEventPriorityEnum] —— 5 个等级:LOWEST / LOW / NORMAL / HIGH / HIGHEST


registerEventHandler(event, func, priority=None, *presetArgs)

注册事件处理器。

@staticmethod
def registerEventHandler(event, func, priority=None, *presetArgs):
    # type: (PlayerReviveServerAPI.ApiEvents.EnumObject | type, callable, PlayerReviveEventPriorityEnum.EnumObject | None, *any) -> None

参数

名称 类型 必填 说明
event ApiEvents.EnumObject | type 通过 getApiEvents() 取得的枚举项,或事件类本身
func callable 处理器,签名为 (*presetArgs, event) -> None
priority PlayerReviveEventPriorityEnum.EnumObject | None ❌(默认 NORMAL 触发优先级,LOWEST 最先、HIGHEST 最晚
*presetArgs any 预置参数,会先于 event 传入处理器

返回

None

异常

  • TypeError —— event 不是可注册的事件、func 不可调用、或 priority 类型错误时抛出。

用法

api = PlayerReviveServerAPI
events = api.getApiEvents()
priorityEnum = api.getPlayerReviveEventPriorityEnum()

def onReviveHealthChange(event):
    print("血量 {} -> {}".format(event.getOldHealth(), event.getNewHealth()))

api.registerEventHandler(
    events.ReviveHealthUpdateEvent,
    onReviveHealthChange,
    priorityEnum.HIGH,
)

unregisterEventHandler(event, func)

取消事件处理器注册。

@staticmethod
def unregisterEventHandler(event, func):
    # type: (PlayerReviveServerAPI.ApiEvents.EnumObject | type, callable) -> None

参数

名称 类型 必填 说明
event ApiEvents.EnumObject | type registerEventHandler 时传入的相同
func callable registerEventHandler 时传入的相同函数对象

返回

None

异常

  • TypeError —— event 不是可注册事件或 func 不可调用时抛出。

传入相同的函数对象

内部基于 is 比对函数对象。若注册时传入的是 lambda 或在每次调用 registerEventHandler 时新建的局部函数,则无法被取消注册。建议持有顶层 def 函数引用或类方法引用。