事件系统
使用 samp.events.on(name, callback, options) 订阅。返回的对象提供 unsubscribe()。
每个事件的完整字段、类型、权限和可变性请查阅 事件回调参数参考。
lua
local subscription = samp.events.on("player.spawned", function(event)
samp.log.info(event.name)
end, {
priority = 100,
once = true
})优先级更高的回调先执行,once = true 表示成功调用一次后自动退订。
通用字段
| 字段 | 含义 |
|---|---|
name | 事件名。 |
sequence | 单调递增的派发序号。 |
timestamp | 单调毫秒时间。 |
sessionId | 当前运行会话。 |
playerGeneration | 当前本地玩家世代。 |
事件分为生命周期、本地玩家、聊天、检查点、实体、对话框、TextDraw、菜单、游戏帧和 HUD 绘制等组。
可修改事件
部分事件允许修改字段。取消是单向粘性的:某个插件设置 cancelled = true 后,后续插件不能恢复操作。
lua
samp.events.on("chat.message_received", function(event)
samp.log.info(
event.playerName .. ": " .. event.message
)
end, {
priority = 0
})
samp.events.on("chat.message_sending", function(event)
if event.message == "!cancel" then
event.cancelled = true
end
end)可修改回调不能 yield,并应尽可能短,因为它会延迟原始交互。