Skip to content

新触发:启用与使用约定 GOW-Next 专用接口 ​

新触发用于处理玩家正在发生的操作。前置、后置事件使用固定的 RunQuest.pas 过程;前置可在操作提交前作判断,后置报告已经成立的结果。挖矿产出使用单独的接管回调,过程名可以配置。

启用一个事件 ​

  1. 在 M2 主窗口 → 配置 → 服务参数 → 新触发 中,勾选所需事件的“前”或“后”开关并保存。各阶段独立启用,默认关闭。
  2. 在版本的 RunQuest.pas 中添加对应的过程,并声明该事件的上下文参数。已有 RunQuest.pas 时,把过程加入现有脚本,不要再建立第二个 program RunQuest。
  3. 重载 RunQuest.pas,用一名玩家执行对应操作,先确认回调能输出提示,再加入玩法规则。

例如启用“装备变更前”后,可以加入:

pascal
procedure OnBeforeEquipChange(Context: TBeforeEquipChangeContext);
begin
  if Context = nil then Exit;
  Context.Player.PlayerNotice('准备变更装备', 2);
end;

如果开关已启用但过程不存在,操作不会自动得到期望的脚本处理;应同时检查 M2 的脚本诊断。登录与退出继续分别使用 LogonQuest.pas 和 LogoutQuest.pas,不在此重复增加新触发。

第一版事件 ​

场景前置过程后置过程说明
装备变更OnBeforeEquipChangeOnAfterEquipChange穿戴、卸下、替换;原生强制移除只有后置
物品使用OnBeforeItemUseOnAfterItemUse玩家使用背包物品
拾取OnBeforePickupOnAfterPickup地面物品或金币
回城按钮OnBeforeBackHome—可取消默认回城,仅针对客户端按钮
切换地图OnBeforeMapChangeOnAfterMapChange前置仅用于可取消的主动流转
攻击与技能使用OnBeforePlayerActionOnAfterPlayerAction玩家普攻、实际挥出的物理技能与主动施法
伤害结算OnBeforeDamageOnAfterDamage玩家造成或受到的一笔伤害
玩家死亡OnBeforePlayerDeathOnAfterPlayerDeath前置可用 ReviveTo 保命
玩家复活—OnAfterPlayerRevive实际死亡后恢复存活

各事件的开关、上下文字段及例外见左侧对应页面。

挖矿产出接管 ​

挖矿产出使用 TMiningContext,默认过程名为 OnMining。在 游戏功能 → 特色玩法 → 挖矿 中启用,不使用上述前置、后置开关。脚本可以选择继续默认挖矿、此次无产出,或指定一件产物。

回调共同规则 ​

  • 各事件过程接收一个强类型 Context 参数;字段和操作通过该参数读取。玩家也可从 Context.Player 读取。OnAfterPlayerRevive 暂无专用上下文,直接使用 This_Player。
  • 上下文只在本次回调期间有效。需要延迟处理时,保存必要的值,执行时重新查找对象;不要把上下文对象存入全局变量。
  • 可取消的前置使用无参 Cancel。取消只阻止本次操作,不会自动给玩家发消息;需要提示时由脚本自行调用消息 API。Cancel 不会结束当前 Pascal 过程,后续代码不应执行时请接着写 Exit。前置返回后,引擎会重新检查关键对象和条件;若已失效,本次操作不提交,也不触发对应后置。
  • 后置不能取消已经成立的操作。前置取消也不会撤销脚本自己执行的其他业务操作。
  • RunQuest.pas 由多个玩家共用。脚本全局变量不自动按玩家隔离,单次事件优先使用局部变量和上下文。

共用物品信息 TItemInfo ​

装备、物品使用和拾取事件中的物品使用同一只读信息类型:

字段类型含义
ClientItemIDInteger运行时物品实例编号;不是背包格位或持久 UID
ItemIndexInteger物品数据库编号
ItemNameString物品名称

事件中的物品信息是当次操作的快照。后置仍可查看已移除物品的名称和编号;不能凭快照判断它仍在背包或装备位。某些场景中物品可以为 nil,使用字段前先判断。

ClientItemID 是运行时编号,重登或服务端重启后可能变化。不要把回调快照中的编号保存为永久引用;再次操作物品时,应重新取得当前玩家持有的物品。TItemInfo 用于事件快照,不能直接传给要求 TBaseItem 的物品操作接口。

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