Skip to content

核心运行环境 API

签名中的方括号表示可选参数。参数类型、范围、权限、调用阶段或资源预算不符合 要求时,函数通常会抛出 Lua 错误。

运行时信息

类型说明
samp.api.versionstring当前 Plugin API 版本,当前为 "1.0"
samp.plugin.idstringManifest 中的稳定插件 ID。
samp.plugin.versionstring当前安装的插件版本。

samp.api.has(name [, minimumVersion])

返回 booleanname 是最长 128 字节的能力名;minimumVersion 可选, 格式如 "1.0"。只有能力存在且版本要求满足时才返回 true。它适合检测 可选能力,但不能代替 Manifest 权限声明。

日志

lua
samp.log.debug(message)
samp.log.info(message)
samp.log.warn(message)
samp.log.error(message)

message 必须是最长 2,048 字节的字符串。宿主会自动添加插件 ID 和日志级别, 函数无返回值。

事件订阅

samp.events.on(name, callback [, options])

注册 callback(event) 并返回订阅 Handle:

lua
local subscription = samp.events.on("player.spawned", callback, {
    priority = 100,
    once = true
})
subscription:unsubscribe()
参数类型规则
namestring非空,最长 96 字节。
callbackfunction接收一个事件 table。
options.priorityinteger可选,-1000..1000,默认 0;数值越高越先执行。
options.onceboolean可选,默认 false;首次派发后自动取消订阅。

每个插件最多同时拥有 256 个订阅。订阅时会检查该事件所需权限。 unsubscribe() 可重复调用且无返回值。完整字段见事件回调参数

Lua 模块

require(name)

modules/<name>.lua 加载模块并返回模块结果。点号会映射为目录,例如 require("ui.colors") 加载 modules/ui/colors.lua

模块名最长 128 字节,只能包含字母、数字、_.,不能以点开头或结尾, 也不能出现连续点号。模块按名称缓存;模块返回 nil 时调用者得到 true。 插件不能加载原生模块,也不能读取自身 modules/ 之外的文件。

定时器与托管任务

samp.timer.after(delayMs, callback)

创建一次性定时器,返回 { cancel = function }delayMs0..86,400,000 的整数;每个插件最多 256 个定时器。cancel() 可重复调用。

samp.task.spawn(callback)

启动托管协程并返回 { cancel = function }。每个插件最多 256 个任务。 回调没有参数;取消当前正在运行的任务会安全终止它。

samp.task.sleep(delayMs)

将当前托管任务暂停 0..86,400,000 毫秒,无返回值。只能在 samp.task.spawn 创建的任务中调用。普通事件回调和可变拦截事件不能 yield。

插件私有存储

以下函数均需要 plugin.storage

lua
local value = samp.storage.get(key [, default])
samp.storage.set(key, value)
samp.storage.remove(key)
项目约束
key1–64 个 ASCII 字符;首字符为字母或数字;后续还可以使用 _-.
valuestringboolean 或有限 number
键不存在get 返回传入的默认值;未传默认值时返回 nil
单个字符串最多 16 KiB。
插件配额最多 128 个条目、1 MiB 编码数据。

setremove 无返回值;删除不存在的键也视为成功。

数字格式化

samp.format.number(value [, precision])

返回与系统区域无关的十进制定长字符串。value 必须有限且绝对值不超过 9,000,000,000,000precision0..6 的整数,默认 0,结果会四舍五入。

游戏状态

samp.game.state()

需要 game.state.read,返回快照:

字段类型说明
sessionIdinteger当前运行会话标识。
playerGenerationinteger当前本地玩家世代。
readyboolean游戏服务是否可用。
pausedboolean游戏是否暂停。
multiplayerboolean多人游戏运行环境是否存在。
localPlayerAvailableboolean当前是否能取得本地玩家 Handle。
interiorinteger当前室内 ID;不可用时为 0

当前服务器

samp.server.current()

需要 server.state.read。没有多人游戏运行环境时返回 nil,否则返回:

字段类型说明
sessionIdinteger快照所属会话。
addressstring主机名或 IP。
portinteger服务器端口。
namestringUTF-8 服务器名称;尚未取得时可能为空。
statestringwaitingconnectingconnectedjoiningrestartingunknown
connectedboolean是否已完全连接。
connectingboolean是否正在连接或加入。
lanbooleanLAN 模式标志。