script_patch

在运行时按特征查找并改写游戏内置脚本的字节码。script_id 的含义与 script_local 相同,见 总览 · script_id。补丁对象被 Lua 回收时会自动关闭补丁,见 总览 · 生命周期

查找与改写字节码会触及游戏脚本状态,须在脚本线程中执行。从 gui_tickon_present 触发请用 fiber.run(function() ... end),或写在 on_tickscript.create 回调里。

script_patch.add(script_id, pattern, offset, bytes)script_patch | nil
参数类型说明
script_idstring | int目标脚本名(经 joaat)或已算好的脚本哈希(uint64)
patternstring字节码搜索模式 (如 "2D 01 04 00 00")
offsetint匹配位置的偏移量
bytestable替换字节序列;请用 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