黑卡蒂的逃课工具箱-修改器脚本生成手册
概述脚本生成器是一个图形化工具,用于创建符合框架规范的 JSON 脚本。你无需手动编写代码,只需填写表单、添加控件和动作,即可生成功能完整的游戏修改器脚本。一、启动生成器
概述
黑卡蒂的逃课工具箱的脚本生成器是一个图形化工具,用于创建符合框架规范的 JSON 脚本。你无需手动编写代码,只需填写表单、添加控件和动作,即可生成功能完整的游戏修改器脚本。
一、启动生成器
-
运行主框架
main.py。 -
点击菜单栏 工具 → 脚本生成器。
-
生成器以独立窗口打开,你可以在编辑的同时测试脚本效果。
二、导航
生成器顶部有六个标签页按钮,按照脚本创建的典型顺序排列:
| 页面 | 功能 |
|---|---|
| 基础信息 | 游戏名称、进程名、脚本版本 |
| 基址配置 | 添加内存扫描规则(特征码、固定偏移) |
| 变量管理 | 定义变量,将基址组合成地址表达式 |
| 数组管理 | 创建循环数组,供模板表格迭代 |
| 界面设计 | 设计修改器界面:添加标签页、控件、表格 |
| 动作编辑 | 创建可绑定热键或按钮的操作 |
你可以自由切换页面,数据会实时保存到内存中。
三、基础信息
字段说明
-
游戏名称:显示在框架标题栏和脚本列表中的名称,可随意填写。
-
进程名:游戏的可执行文件名(如
sora_1st.exe),框架将根据此名称附加游戏进程。 -
版本:脚本版本号,用于更新识别,可自定义。
操作
-
填写三个字段。
-
保存脚本时,这些信息将写入 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. 添加变量
-
点击 添加。
-
在对话框中填写:
-
变量名:如
var、wp。 -
表达式:支持加减法和十六进制数,引用解析器 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_offset、name),值可填十六进制偏移或字符串。
-
-
使用 添加元素 弹出对话框,按已存在的键输入值。
-
支持重命名数组、删除数组。
2. 示例
char_offsets 数组,包含角色偏移和名称:
| char_offset | name |
|---|---|
| 0x1025A0 | 艾丝蒂尔 |
| 0x102838 | 约修亚 |
| ... | ... |
这样定义后,在“循环数组表格”中可使用 {char_offset} 和 {name} 引用这些值。
七、界面设计
功能:可视化构建修改器界面,支持多种控件类型。
1. 标签页管理
-
使用 添加标签页 按钮创建新的标签页(如“全局”、“角色”)。
-
选中标签页后,下方会显示该页的控件列表(树状图)。
-
树状图支持右键菜单:
-
编辑控件:修改已有控件。
-
删除控件:移除控件。
-
上移/下移:调整控件顺序。
-
剪切/复制/粘贴:便于复用控件。
-
2. 添加控件
选中一个标签页,然后点击对应的控件按钮:
数值控件(value)
-
标签:显示名称(如“米拉”)。
-
地址表达式:内存地址,使用变量组合(如
var + 0x1F3900)。 -
数值类型:
int、short或float。 -
启用锁定:勾选后生成一个锁定复选框,可定时写入当前值。
复选框(checkbox)
-
模式:可选“锁定地址”或“关联动作”。
-
锁定地址模式:
-
地址:内存地址表达式。
-
锁定的值:勾选时写入的值(如
1)。 -
取消后写入的值:取消勾选时写入的值,留空则仅解除锁定。
-
-
关联动作模式:选择一个已定义的动作,勾选/取消将触发该动作的锁定/解锁。
按钮(button)
-
模式:“写入地址”或“执行动作”。
-
写入地址模式:点击按钮向指定地址写入固定值(地址和值使用表达式)。
-
执行动作模式:点击按钮执行一个已定义的动作(如全队满血)。
表格(table)
-
表格标签:便于在树状图中识别(无实际内存影响)。
-
基址表达式:表格中 value 列的基地址(如
wp或var)。 -
列定义:
-
使用 添加列/删除列 管理列。
-
每列可设置:
-
表头:显示在表格顶部的文字。
-
绑定类型:
label(纯文本)、value(数值,可编辑)、lock(锁定复选框)。 -
数据类型(仅 value 列):
int、short、float。 -
可编辑(仅 value 列):是否允许用户修改。
-
-
-
行数据:
-
使用 添加行/删除行 管理数据。
-
每行的列数自动跟随列定义。
-
对于
value列,需填入十六进制偏移量(如0x0、0x4),绝对地址由基址 + 偏移得到。 -
支持高级填充:
-
填充规律步进值:选中一个
value列,输入起始值、步进和结束值,自动生成递增序列。 -
循环数组表格:选择一个数组,定义表头和内容模板,自动根据数组元素生成多行数据。模板中可使用
{变量}引用数组元素的值。示例见后文。
-
-
分割线(separator)
-
弹出输入框输入标题,生成“—————— 标题 ——————”样式的文本分割线,用于视觉分组。
3. 实时预览
-
每当修改标签页或控件,右侧预览区会使用工厂生成临时界面,反映最终效果(数值均为占位值,因未连接真实内存)。
4. 控件编辑示例
创建物品表格:
-
添加标签页“物品”。
-
点击 添加表格。
-
填写表格标签“物品列表”,基址表达式
wp。 -
列定义:添加两列:
-
表头“名称”,绑定类型
label -
表头“数量”,绑定类型
value,数据类型short,可编辑
-
-
行数据:添加几行,分别填入
恢复药0x0、中恢复药0x4等。 -
若物品偏移连续,可选中“数量”列,点击 填充规律步进值,起始
0x0、步进0x4、结束0xC,自动生成多行。 -
点击 保存,然后 测试运行,框架中应显示表格。
创建角色属性表(模板表格):
-
在数组管理中建立
char_offsets数组(如上例)。 -
在界面设计添加表格控件。
-
点击 循环数组表格。
-
选择数组
char_offsets。 -
表头定义:
角色:label;当前HP:value;最大HP:value;属性:label;值:value -
内容模板(每行一个模板,换行分隔):
text{name};{char_offset}-0x4;{char_offset};当前HP;{char_offset}-0x4 {name};{char_offset}+0x4;{char_offset}+0x8;当前EP;{char_offset}+0x4这里混合了 label 和 value 列,
;分隔对应表头。 -
确定后,表格自动填充所有角色数据,包含多列和多行。
八、动作编辑
功能:定义可被热键、按钮或复选框触发的操作。
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 脚本继续编辑。
-
新建脚本:清空当前编辑器,重新开始。
十、版本控制
-
保存时脚本会自动记录框架版本和生成器版本。
-
加载脚本时,如果脚本要求的框架版本高于当前运行框架,会弹出警告,你可选择强制加载。
-
生成器导入脚本时,若脚本生成器版本高于当前工具,同样会提示,防止数据丢失。
十一、注意事项
-
表达式中的变量:在动作和控件中,表达式支持的变量取决于当前上下文。变量管理器中定义的变量全局可用;数组迭代时,数组元素的键也作为变量(如
{char_offset})。 -
地址优先级:表格的 value 列写入的是纯十六进制偏移,不要带变量或表达式;若需表达式,请使用模板表格(待后续增强)。
-
锁定机制:复选框关联动作时,勾选会执行动作并激活锁定定时器,取消勾选解除锁定;若动作无 lock 步骤,则只执行一次。
-
数组要求:循环数组表格要求数组元素为对象,键与模板中的变量对应;若数组元素是简单值,模板只能使用
{item}代表整个值。 -
保存后及时测试:利用测试运行按钮快速验证,避免累积错误。




