Skip to content

地图切换触发 ​

地图切换事件只处理玩家从一张地图进入另一张地图。同地图内移动或传送不触发。前后阶段在 M2 的“新触发”页独立启用。

切换前后 ​

OnBeforeMapChange 用于可取消的主动流转,包括玩家通过地图门或明确目标的普通传送切图。空间传送和复活相关流转不开放前置取消;成功跨地图后仍可收到 OnAfterMapChange。进入前已失败的流转没有成功后置。

前置参数类型为 TBeforeMapChangeContext,后置为 TAfterMapChangeContext:

字段类型含义
PlayerTPlayer切图玩家
FromMap、ToMapString源地图和目标地图
FromX、FromYInteger原位置
ToX、ToYInteger目标位置;后置为实际进入的位置

前置另有 Cancelled: Boolean 和无参 Cancel。前置返回后,M2 会重新检查玩家、地图与落点条件;检查失败不会执行这次切图。后置只能观察结果,不能撤销切换。

pascal
procedure OnBeforeMapChange(Context: TBeforeMapChangeContext);
begin
  if Context = nil then Exit;
  if (Context.ToMap = '任务地图') and
     (Context.Player.Level < 50) then
  begin
    Context.Player.PlayerNotice('达到 50 级后才能进入', 2);
    Context.Cancel;
    Exit;
  end;
end;

procedure OnAfterMapChange(Context: TAfterMapChangeContext);
begin
  if Context = nil then Exit;
  Context.Player.PlayerNotice(
    '已进入 ' + Context.ToMap, 2);
end;

示例中的地图名应替换为实际地图标识;Cancel 只阻止本次切换,不会回滚脚本在回调中自行完成的其他操作。

回城按钮前置 ​

在 M2 → 配置 → 服务参数 → 新触发 中开启“回城按钮前”,并在 RunQuest.pas 添加:

pascal
procedure OnBeforeBackHome(Context: TBeforeBackHomeContext);
begin
  if Context.Player.MapName = '活动地图' then
  begin
    Context.Cancel;
    Context.Player.PlayerNotice('活动期间不能使用回城按钮。', 2);
    Exit;
  end;
end;
成员含义
Player: TPlayer点击回城按钮的玩家,只读
Cancelled: Boolean是否已取消本次默认回城,只读
Cancel无参方法,阻止本次默认回城

只针对存活玩家点击客户端回城按钮;回城卷、NPC 传送和死亡回城不触发。默认关闭。 正常返回且未取消时,继续默认回城,仍检查地图限制和玩家状态。需要自定义传送或打开菜单时,先调用 Cancel,再执行脚本逻辑。

启用此事件后,不再调用盘古 OnBackButton;关闭时恢复原有回城按钮处理。启用后过程缺失或执行异常,本次回城停止并记录脚本诊断,不回退到旧回调。没有按钮后置事件;成功跨地图可使用 OnAfterMapChange,同地图回城不会触发切图事件。

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