Skip to content

存储、定时器与任务

私有存储

声明 plugin.storage 后,可以保存有界的布尔、数字和字符串:

lua
local enabled = samp.storage.get("enabled", true)
samp.storage.set("enabled", not enabled)
samp.storage.remove("obsolete_key")

写入是原子的,但仍然涉及 I/O,不应每帧写入。

定时器与任务

samp.timer.after(milliseconds, callback) 创建一次性受保护回调。samp.task.spawn() 创建受控 Lua 任务,只有 samp.task.sleep() 可以使它 yield;零延迟也至少让出到下一帧。

lua
local launches = samp.storage.get("launches", 0) + 1
samp.storage.set("launches", launches)

samp.timer.after(1000, function()
    samp.log.info("one second elapsed")
end)

local task = samp.task.spawn(function()
    samp.task.sleep(500)
    samp.log.info("task resumed")
end)

-- Safe even when the task has already completed.
-- task:cancel()

插件卸载或会话结束会取消任务。每次恢复仍受普通回调相同的指令与时间预算保护。