Skip to content

菜单与 HUD 绘制 API

插件菜单

samp.ui.menu.register(page)

需要 ui.menu。注册页面,或替换相同 ID 的页面,无返回值。大多数页面或控件 校验失败会被忽略,而不是抛出错误。

lua
samp.ui.menu.register({
    id = "main",
    title = "示例",
    controls = {
        { type = "switch", id = "enabled", title = "启用", value = true }
    }
})
页面字段类型约束
idstring必填、非空,最长 64 字节。
titlestring必填、非空,最长 128 字节。
controlsarray最多 32 个控件,同一页面中的 ID 必须唯一。

每个插件最多注册 8 个页面。每个控件都必须提供 type、最长 64 字节的 id 和最长 128 字节的 title

控件类型附加字段
section无。
texttext: string,可为空,最长 512 字节。
button无;点击后产生控件变化事件。
switch必填 value: boolean
slidermin=0max=1step=0.1value=min;均为有限数且绝对值不超过 1,000,000;max > minstep > 0,value 会被钳制。
choicevalue: stringoptions 含 1–32 个唯一 { value, label };value 必须匹配一个选项;value 最长 512 字节,label 最长 128。
text_inputvalue=""placeholder=""max_length=512;最大长度是 1..512 的整数,value 不得超长。

修改控件会触发 ui.control_changed,字段见事件回调参数

HUD 调用阶段

所有 samp.draw 函数均需要 ui.draw,并且只能在 draw.hud 回调中同步调用。 每个插件每帧最多排队 512 条绘制命令。除 world_to_screen 外均无返回值。

颜色使用 0xAARRGGBB ARGB 整数。normalized=true 时坐标范围是 0..1, 否则使用屏幕坐标。普通坐标必须有限且绝对值不超过 100,000。

samp.draw.text(options)

字段默认值约束
xy0坐标。
text必填字符串,最长 1,024 字节。
size16有限,>0<=512
color0xFFFFFFFFARGB。
normalizedfalse布尔值。

samp.draw.line(options)

字段为 x1=0y1=0x2=0y2=0color=0xFFFFFFFFthickness=1>0..100)和 normalized=false

samp.draw.rect(options)

line 相同,另有 filled=false。即使填充,thickness 也必须有效。

samp.draw.circle(options)

字段为 x=0y=0radius=1color=0xFFFFFFFFfilled=falsethickness=1>0..100)和 normalized=false。radius 必须为正且不超过 100,000;归一化模式下不得超过 1

samp.draw.progress_bar(options)

字段为 x1=0y1=0x2=0y2=0value=0color=0xFFFFFFFFbackground_color=0x66000000normalized=false。要求 x2 > x1y2 > y1,value 范围为 0..1

samp.draw.image(options)

字段默认值约束
x1y1x2y20x2 > x1y2 > y1
resource必填的包内安全相对路径,最长 256 字节。
alpha1有限 0..1
normalizedfalse布尔值。

支持 PNG、WebP、JPEG、JPG。源文件最大 16 MiB,解码尺寸最大 1024×1024。 每个插件最多缓存 16 张图和 16 MiB 解码数据;整个运行环境上限 64 MiB; 每帧最多开始加载一张未缓存图片。

samp.draw.world_to_screen(position)

接收 Vector3。游戏不可用或点无法投影到镜头前方时返回 nil,否则返回:

lua
{ x = number, y = number, depth = number, width = number, height = number }