外观
玩家死亡与复活触发
这组事件只以玩家本人为主体,不用于监听怪物死亡或玩家击杀怪物。玩家死亡和复活各有自己的开关。
死亡前保命
原生保命机制处理后,如果玩家仍将进入死亡状态,M2 才调用 OnBeforePlayerDeath。通过 TBeforePlayerDeathContext 参数可读取:
| 字段 | 类型 | 含义 |
|---|---|---|
Player | TPlayer | 将要死亡的玩家 |
MapName | String | 当前地图 |
X、Y | Integer | 当前坐标 |
要保住玩家,调用 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;