defineEvent 事件运行链路

defineEvent 事件运行链路 由 Archify 生成的时序图。 defineEvent({ name, identifier, isNative }) samp.registerEvent(name, identifier) + samp.on(name, trigger) OnPlayerConnect(playerid) trigger(playerid) beforeEach 解析上下文 → 调用监听器 return next() 前进到下一个监听器 链尾后 executeAfterEach() 执行一次 transformReturnValue → 0 | 1,经 samp-node 回传 模块加载时注册 原生回调 → 监听链 返回值 业务脚本 · onConnect 监听器 · 时序参与者 业务脚本 onConnect 监听器 @infernus/core bus.ts · eventBus / trigger · 时序参与者 @infernus/core bus.ts eventBus / trigger samp-node 插件 · samp.on · 时序参与者 samp-node 插件 samp.on open.mp Server · 原生回调 · 时序参与者 open.mp Server 原生回调 图例 请求 返回 默认消息

注册:import 副作用

  • • defineEvent 在模块被 import 时即注册,无需手动初始化
  • • isNative 为 false 时不调 samp.registerEvent/samp.on,成为进程内自定义事件
  • • name 重复即抛 CoreException:event [name:xxx] error: already defined

传播:next() 决定链的走向

  • • beforeEach 把原生参数解析成上下文,监听器收到 { next, defaultValue, ...上下文 }
  • • next(value) 前进且 value 会 Object.assign 进共享上下文,影响下游所见
  • • 不调 next() 即中断链路,该监听器返回值成为事件结果

返回值与错误

  • • 结果统一转成 0/1:布尔转数字,其他值回退到 defaultValue(默认 1)
  • • 监听器返回 Promise 不阻塞链路;afterEach 等 Promise.allSettled 完成后再执行
  • • 抛错交给 setEventErrorHandler;未设置时回退到 samp.logprint