当前位置:首页 > 日记

黑卡蒂的逃课工具箱-修改器脚本生成手册

概述脚本生成器是一个图形化工具,用于创建符合框架规范的 JSON 脚本。你无需手动编写代码,只需填写表单、添加控件和动作,即可生成功能完整的游戏修改器脚本。一、启动生成器

黑卡蒂admin

概述

黑卡蒂的逃课工具箱的脚本生成器是一个图形化工具,用于创建符合框架规范的 JSON 脚本。你无需手动编写代码,只需填写表单、添加控件和动作,即可生成功能完整的游戏修改器脚本。


一、启动生成器

  1. 运行主框架 main.py

  2. 点击菜单栏 工具 → 脚本生成器

  3. 生成器以独立窗口打开,你可以在编辑的同时测试脚本效果。


二、导航

生成器顶部有六个标签页按钮,按照脚本创建的典型顺序排列:

页面 功能
基础信息 游戏名称、进程名、脚本版本
基址配置 添加内存扫描规则(特征码、固定偏移)
变量管理 定义变量,将基址组合成地址表达式
数组管理 创建循环数组,供模板表格迭代
界面设计 设计修改器界面:添加标签页、控件、表格
动作编辑 创建可绑定热键或按钮的操作

你可以自由切换页面,数据会实时保存到内存中。


三、基础信息

字段说明

  • 游戏名称:显示在框架标题栏和脚本列表中的名称,可随意填写。

  • 进程名:游戏的可执行文件名(如 sora_1st.exe),框架将根据此名称附加游戏进程。

  • 版本:脚本版本号,用于更新识别,可自定义。

操作

  1. 填写三个字段。

  2. 保存脚本时,这些信息将写入 JSON 文件。


四、基址配置

功能:定义如何找到游戏中的全局变量地址。常用类型为特征码扫描和固定偏移。

1. 添加解析器

  • 点击 添加 按钮。

  • 在弹出的对话框中填写:

    • ID:解析器的唯一名称,如 main。变量管理中会引用此 ID。

    • 类型:选择 pattern_scan(特征码)或 fixed_offset(固定偏移)。

    • 模块:游戏模块名,通常与进程名相同。

    • 特征码(仅 pattern_scan):十六进制字节序列,用 ?? 表示通配。例:0F 85 ?? ?? ?? ?? 48 8B 05

    • 偏移参数(仅 pattern_scan):根据特征码所在指令的解析规则填写,通常可从 CE 脚本中获取。包含:

      • offset_to_add:从匹配地址到目标指令的偏移

      • disp32_offset:位移量在指令中的位置

      • instruction_length:指令长度

    • 固定偏移(仅 fixed_offset):直接输入十六进制偏移量。

2. 编辑或删除

  • 在列表中选中一行,点击 编辑 或 删除

3. 示例

pattern_scan 示例(空之轨迹):

  • ID: main

  • 类型: pattern_scan

  • 模块: sora_1st.exe

  • 特征码: 0F 85 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? ?? 8B ?? ?? ?? ?? ?? 0F 57 C0

  • offset_to_add: 6

  • disp32_offset: 3

  • instruction_length: 7


五、变量管理

功能:定义变量,通过表达式组合解析器和已有变量,生成最终的内存地址。

1. 添加变量

  • 点击 添加

  • 在对话框中填写:

    • 变量名:如 varwp

    • 表达式:支持加减法和十六进制数,引用解析器 ID 或其他变量。例如:

      • main(直接引用解析器 ID)

      • var + 0x116728

      • main_ptr + 8(解引用类型需手动编辑 JSON,后续可图形化)

2. 表达式规则

  • 变量名区分大小写。

  • 支持 + - 运算符,无括号。

  • 十六进制数以 0x 开头。

  • 解析器 ID 会被自动替换为扫描得到的地址(或解引用后的值,视工厂逻辑)。

3. 示例

变量名 表达式 说明
var main 引用解析器 main 的结果
wp var + 0x116728 物品区基址
zvar var + 8 杂项数据基址

六、数组管理

功能:定义可迭代的数据集合,常用于角色偏移表,供“循环数组表格”功能使用。

1. 创建数组

  • 点击 添加数组,输入数组名称(如 char_offsets)。

  • 在右侧表格中定义元素:

    • 每一行代表数组的一个元素(如一个角色)。

    • 列可动态增减:默认可能有两列,可根据需要添加列。

    • 列名即键名(如 char_offsetname),值可填十六进制偏移或字符串。

  • 使用 添加元素 弹出对话框,按已存在的键输入值。

  • 支持重命名数组、删除数组。

2. 示例

char_offsets 数组,包含角色偏移和名称:

char_offset name
0x1025A0 艾丝蒂尔
0x102838 约修亚
... ...

这样定义后,在“循环数组表格”中可使用 {char_offset} 和 {name} 引用这些值。


七、界面设计

功能:可视化构建修改器界面,支持多种控件类型。

1. 标签页管理

  • 使用 添加标签页 按钮创建新的标签页(如“全局”、“角色”)。

  • 选中标签页后,下方会显示该页的控件列表(树状图)。

  • 树状图支持右键菜单:

    • 编辑控件:修改已有控件。

    • 删除控件:移除控件。

    • 上移/下移:调整控件顺序。

    • 剪切/复制/粘贴:便于复用控件。

2. 添加控件

选中一个标签页,然后点击对应的控件按钮:

数值控件(value)

  • 标签:显示名称(如“米拉”)。

  • 地址表达式:内存地址,使用变量组合(如 var + 0x1F3900)。

  • 数值类型intshort 或 float

  • 启用锁定:勾选后生成一个锁定复选框,可定时写入当前值。

复选框(checkbox)

  • 模式:可选“锁定地址”或“关联动作”。

  • 锁定地址模式

    • 地址:内存地址表达式。

    • 锁定的值:勾选时写入的值(如 1)。

    • 取消后写入的值:取消勾选时写入的值,留空则仅解除锁定。

  • 关联动作模式:选择一个已定义的动作,勾选/取消将触发该动作的锁定/解锁。

按钮(button)

  • 模式:“写入地址”或“执行动作”。

  • 写入地址模式:点击按钮向指定地址写入固定值(地址和值使用表达式)。

  • 执行动作模式:点击按钮执行一个已定义的动作(如全队满血)。

表格(table)

  • 表格标签:便于在树状图中识别(无实际内存影响)。

  • 基址表达式:表格中 value 列的基地址(如 wp 或 var)。

  • 列定义

    • 使用 添加列/删除列 管理列。

    • 每列可设置:

      • 表头:显示在表格顶部的文字。

      • 绑定类型label(纯文本)、value(数值,可编辑)、lock(锁定复选框)。

      • 数据类型(仅 value 列):intshortfloat

      • 可编辑(仅 value 列):是否允许用户修改。

  • 行数据

    • 使用 添加行/删除行 管理数据。

    • 每行的列数自动跟随列定义。

    • 对于 value 列,需填入十六进制偏移量(如 0x00x4),绝对地址由基址 + 偏移得到。

    • 支持高级填充:

      • 填充规律步进值:选中一个 value 列,输入起始值、步进和结束值,自动生成递增序列。

      • 循环数组表格:选择一个数组,定义表头和内容模板,自动根据数组元素生成多行数据。模板中可使用 {变量} 引用数组元素的值。示例见后文。

分割线(separator)

  • 弹出输入框输入标题,生成“—————— 标题 ——————”样式的文本分割线,用于视觉分组。

3. 实时预览

  • 每当修改标签页或控件,右侧预览区会使用工厂生成临时界面,反映最终效果(数值均为占位值,因未连接真实内存)。

4. 控件编辑示例

创建物品表格

  1. 添加标签页“物品”。

  2. 点击 添加表格

  3. 填写表格标签“物品列表”,基址表达式 wp

  4. 列定义:添加两列:

    • 表头“名称”,绑定类型 label

    • 表头“数量”,绑定类型 value,数据类型 short,可编辑

  5. 行数据:添加几行,分别填入 恢复药 0x0中恢复药 0x4 等。

  6. 若物品偏移连续,可选中“数量”列,点击 填充规律步进值,起始 0x0、步进 0x4、结束 0xC,自动生成多行。

  7. 点击 保存,然后 测试运行,框架中应显示表格。

创建角色属性表(模板表格)

  1. 在数组管理中建立 char_offsets 数组(如上例)。

  2. 在界面设计添加表格控件。

  3. 点击 循环数组表格

  4. 选择数组 char_offsets

  5. 表头定义:角色:label;当前HP:value;最大HP:value;属性:label;值:value

  6. 内容模板(每行一个模板,换行分隔):

    text
    {name};{char_offset}-0x4;{char_offset};当前HP;{char_offset}-0x4
    {name};{char_offset}+0x4;{char_offset}+0x8;当前EP;{char_offset}+0x4

    这里混合了 label 和 value 列,; 分隔对应表头。

  7. 确定后,表格自动填充所有角色数据,包含多列和多行。


八、动作编辑

功能:定义可被热键、按钮或复选框触发的操作。

1. 动作列表

  • 左侧显示已定义的动作 ID。

  • 点击 添加动作 设置基本信息:

    • ID:唯一标识符(如 heal_all)。

    • 显示名称:在界面上显示的动作名称(如“全队满血”)。

    • 控件类型:定义该动作默认关联的控件类型,button(点击执行一次)或 checkbox(切换锁定状态)。

    • 默认热键:如 alt+1,用户可后续自定义。

    • 迭代数组名:留空则不迭代;填写数组名(如 char_offsets)时,动作会针对数组中的每个元素执行步骤。

2. 步骤编辑

  • 选中一个动作后,右侧可添加/编辑步骤。

  • 添加步骤:弹出对话框,选择操作类型:

    • 写入(write):向指定地址写入值。

      • 地址表达式:如 var + {char_offset} - 4(可使用 {变量} 配合迭代数组)。

      • 值表达式:支持常量、变量,或 @(地址) 表示读取另一个地址的值。

    • 批量写入(bulk_write):对一段连续地址写入相同值。

      • 基址表达式:起始地址。

      • 起始偏移结束偏移步长:定义地址范围。

      • 值表达式:写入的值。

    • 锁定(lock):与 write 相同,但持续写入(需配合 checkbox 类型动作)。

3. 示例

全队满血(迭代角色)

  • 动作 ID:heal_all

  • 控件类型:button

  • 迭代数组:char_offsets

  • 步骤:

    • write:地址 var + {char_offset} - 4,值 @(var + {char_offset} + 0) (当前HP=最大HP)

    • write:地址 var + {char_offset} + 4,值 @(var + {char_offset} + 8) (当前EP=最大EP)

    • write:地址 var + {char_offset} + 0xC,值 200 (CP设为200)

锁定全队生命(checkbox)

  • 动作 ID:lock_hp

  • 控件类型:checkbox

  • 迭代数组:char_offsets

  • 步骤:

    • lock:地址 var + {char_offset} - 4,值 @(var + {char_offset} + 0) (持续锁定当前HP为最大HP)


九、保存与测试

  • 点击 保存脚本:首次保存时会要求选择路径(建议保存到 scripts/json/ 目录),之后直接覆盖。

  • 点击 测试运行:自动保存后,主框架立即加载当前脚本,你可直接测试修改效果。

  • 导入现有脚本:可打开已有的 JSON 脚本继续编辑。

  • 新建脚本:清空当前编辑器,重新开始。


十、版本控制

  • 保存时脚本会自动记录框架版本生成器版本

  • 加载脚本时,如果脚本要求的框架版本高于当前运行框架,会弹出警告,你可选择强制加载。

  • 生成器导入脚本时,若脚本生成器版本高于当前工具,同样会提示,防止数据丢失。


十一、注意事项

  1. 表达式中的变量:在动作和控件中,表达式支持的变量取决于当前上下文。变量管理器中定义的变量全局可用;数组迭代时,数组元素的键也作为变量(如 {char_offset})。

  2. 地址优先级:表格的 value 列写入的是纯十六进制偏移,不要带变量或表达式;若需表达式,请使用模板表格(待后续增强)。

  3. 锁定机制:复选框关联动作时,勾选会执行动作并激活锁定定时器,取消勾选解除锁定;若动作无 lock 步骤,则只执行一次。

  4. 数组要求:循环数组表格要求数组元素为对象,键与模板中的变量对应;若数组元素是简单值,模板只能使用 {item} 代表整个值。

  5. 保存后及时测试:利用测试运行按钮快速验证,避免累积错误。


返回顶部