PlayerReviveServerAPI¶
服务端入口类,所有方法均为 @staticmethod。
状态查询¶
getIsNeedRevive(playerId)¶
查询玩家当前是否处于「倒地」状态。
参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
playerId |
str |
✅ | 玩家 ID |
返回
bool —— True 表示玩家正等待救援,False 表示无需救援或处于死亡状态。
异常
ValueError—— 当playerId未加入服务器或未完成模组初始化时抛出。
getPlayerReviveHealth(playerId)¶
获取玩家当前的倒地血量。
参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
playerId |
str |
✅ | 玩家 ID |
返回
float —— 当前倒地血量。范围 [0, getPlayerReviveMaxHealth(playerId)]。
异常
ValueError—— 当playerId未加入服务器或未完成模组初始化时抛出。
getPlayerReviveMaxHealth(playerId)¶
获取玩家的倒地血量上限。
参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
playerId |
str |
✅ | 玩家 ID |
返回
float —— 当前最大倒地血量。
异常
ValueError—— 当playerId未加入服务器或未完成模组初始化时抛出。
状态控制¶
setIsStopHealthChangeToReviveCheck(isStop)¶
控制是否暂停「生命值变化触发倒地检查」。
参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
isStop |
bool |
✅ | True 暂停内置检查,False 恢复(默认) |
返回
None
用途
当外部模组要完全接管玩家死亡判定(例如先调用其他血量系统再决定是否进入 PlayerRevive)时,传入 True 暂停 PlayerRevive 自动监听生命值变化。完成自定义判定后再恢复。
enterNeedReviveState(playerId, damagerId=None)¶
让指定玩家直接进入「倒地」状态——跳过图腾等保护流程,立刻放倒。
参数
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
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时引用具体事件。
参数
无。
返回
type[PlayerReviveServerAPI.ApiEvents] —— 包含三个事件枚举项:ReviveNeededUpdateEvent、ReviveMaxHealthUpdateEvent、ReviveHealthUpdateEvent。
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 函数引用或类方法引用。