Skip to content

玩家死亡与复活触发 ​

这组事件只以玩家本人为主体,不用于监听怪物死亡或玩家击杀怪物。玩家死亡和复活各有自己的开关。

死亡前保命 ​

原生保命机制处理后,如果玩家仍将进入死亡状态,M2 才调用 OnBeforePlayerDeath。通过 TBeforePlayerDeathContext 参数可读取:

字段类型含义
PlayerTPlayer将要死亡的玩家
MapNameString当前地图
X、YInteger当前坐标

要保住玩家,调用 ReviveTo(HP: Integer),指定恢复后的正数生命值。HP 必须在 1 到当前最大生命值之间;回调结束后引擎还会复查。这个事件没有通用 Cancel。保命成功意味着死亡没有成立,因此不会调用死亡后置,也不会调用“玩家复活后”。

pascal
procedure OnBeforePlayerDeath(Context: TBeforePlayerDeathContext);
begin
  if Context = nil then Exit;
  if Context.Player.Level < 10 then
    Context.ReviveTo(1);
end;

死亡后通知 ​

玩家首次实际进入死亡状态后,OnAfterPlayerDeath 可通过 TAfterPlayerDeathContext 参数读取 Player: TPlayer、MapName: String、X: Integer、Y: Integer。该回调只报告已经成立的死亡,不能取消死亡;也不表示掉落、尸体清理等后续流程已经全部结束。

pascal
procedure OnAfterPlayerDeath(Context: TAfterPlayerDeathContext);
begin
  if Context = nil then Exit;
  Context.Player.PlayerNotice('你已死亡', 2);
end;

复活后通知 ​

玩家实际死亡后,原地复活、回城复活或管理员复活成功,会调用 OnAfterPlayerRevive。此过程直接通过 This_Player 读取复活后的玩家状态,没有专用的 This_AfterPlayerRevive 上下文。复活戒指和 ReviveTo 在死亡成立前完成保命,不属于该事件。

pascal
procedure OnAfterPlayerRevive;
begin
  if This_Player = nil then Exit;
  This_Player.PlayerNotice('你已复活', 2);
end;

GOW-Next 引擎开发手册 · 原版 API 兼容列表持续核验中