Skip to content

事件系统

使用 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,并应尽可能短,因为它会延迟原始交互。