script_local

访问指定脚本线程的局部变量栈。脚本内存 API 总览 说明了 script_id、如何匹配线程与槽位规则。:get_string / :set_stringscript_global 相同语义(按当前槽位指针作 C 字符串读写);脚本字符串常跨多个槽位,请自行用 :at 对准缓冲区首地址。

读写脚本局部变量会触及游戏脚本状态,须在脚本线程中执行。从 gui_tickon_present 触发请用 fiber.run(function() ... end),或写在 on_tickscript.create 回调里。

槽位index 为脚本局部变量编号(与常用工具中的 local 索引一致)。目标线程不存在或局部栈不可用时,script_local.new 返回 nil

script_local.new(script_id, index)script_local | nil

查找脚本线程并返回从该 index 槽开始的访问器。

参数类型说明
script_idstring | int脚本名(joaat)或已算好的脚本哈希
indexint起始局部槽索引
script_local.is_thread_running(script_id)bool

是否存在满足条件的运行中脚本线程(与 new 使用的查找逻辑相同)。

参数类型说明
script_idstring | int脚本名或 joaat 哈希
:at(offset, size?)script_local

链式偏移。无 sizebase_index + offset。有 sizebase_index + 1 + offset * size(与 script_global:at 一致)。

参数类型说明
offsetint偏移或数组下标
sizeint?可选 stride
local l = script_local.new("freemode", 19633)
local val = l:at(1):get_int()  -- 等价于槽 19634
:valid()bool

内部栈指针是否非空;对 new 返回的对象一般为 true,链式 :at 后仍指向同一线程栈。

读取方法

:get_int()int

以 int 读取当前槽位指向的内存。

:get_uint()uint

以无符号 32 位整数读取。

:get_float()float

读取 float。

:get_bool()bool

读取 bool(底层按 bool 解释)。

:get_string()string

按 C 字符串读取(指针处为 char*)。与 script_global:get_string 一致。

写入方法

:set_int(value)void

写入 int。

参数类型说明
valueint新值
:set_uint(value)void

写入无符号 32 位整数。

参数类型说明
valueuint新值
:set_float(value)void

写入 float。

参数类型说明
valuefloat新值
:set_bool(value)void

写入 bool。

参数类型说明
valuebool新值
:set_string(value)void

将字符串写入当前局部槽所指向的内存,最多写入 #value + 1 字节(含结尾 \0)。语义与 script_global:set_string 相同;不会扩大缓冲区,见 总览 · 字符串写入

参数类型说明
valuestring要写入的文本

位操作

对当前槽位按 int 解释做位运算(与 script_global 位 API 语义相同)。

:set_bit(bit)void

置位第 bit 位(|= 1 << bit)。

参数类型说明
bitint位序号 0~31
:clear_bit(bit)void

清除第 bit 位。

参数类型说明
bitint位序号
:is_bit_set(bit)bool

判断第 bit 位是否为 1。

参数类型说明
bitint位序号
:set_bits(mask)void

按位 OR mask

参数类型说明
maskint位掩码
:clear_bits(mask)void

清除 mask 中为 1 的位(&= ~mask)。

参数类型说明
maskint要清除的位为 1

地址

:get_address()uint64

返回当前槽位在进程内的绝对地址(用于调试或与 memory.* 配合时务必确认线程仍存活)。

-- 示例: 读取 freemode 局部变量
local l = script_local.new("freemode", 19633)
if l then
    local val = l:at(1):get_int()
    notify.info("Local[19634] = " .. val)
end