script_patch
在运行时按特征查找并改写游戏内置脚本的字节码。script_id 的含义与 script_local 相同,见 总览 · script_id。补丁对象被 Lua 回收时会自动关闭补丁,见 总览 · 生命周期。
查找与改写字节码会触及游戏脚本状态,须在脚本线程中执行。从 gui_tick、on_present 触发请用 fiber.run(function() ... end),或写在 on_tick、script.create 回调里。
script_patch.add(script_id, pattern, offset, bytes)script_patch | nil
| 参数 | 类型 | 说明 |
|---|---|---|
| script_id | string | int | 目标脚本名(经 joaat)或已算好的脚本哈希(uint64) |
| pattern | string | 字节码搜索模式 (如 "2D 01 04 00 00") |
| offset | int | 匹配位置的偏移量 |
| bytes | table | 替换字节序列;请用 1..N 连续下标 的数组表,保证顺序(见 总览 · bytes) |
成功返回补丁对象;无法创建(例如未找到匹配或未找到目标脚本)时返回 nil。
:enable()void
启用补丁 (应用修改后的字节码)。
:disable()void
禁用补丁 (恢复原始字节码)。Lua 对象被垃圾回收时自动调用。
-- 示例: 创建补丁并启用
local patch = script_patch.add(
"freemode",
"2D 01 04 00 00",
0,
{0x2D, 0x01, 0x00, 0x00, 0x00})
if patch then
patch:enable()
end