
Protobuf加载器
运行时加载protobuf(.data)文件以避免冲突
查看大图运行时加载 protobuf(.data)文件。
所有模组开源在 Github。
特别感谢 @chenstack 提供的 CSharpLoader。
以下内容主要面向开发者。
如果您是用户,其实不需要了解这个模组的细节。
只需要在其他作者说明需要本模组时,按照他的安装说明操作即可。
并记住 Ctrl+F7 是重载快捷键。
如何加载 .data 文件:
剧透:显示
安装 CSharpLoader 和本模组
使用 DataEditor 编辑任意有效 .data 文件
重命名为[表名]_[注释].data格式
例如:EquipAttrDesc_青田葫芦改为上限10口.dataFUStSuitDesc_lalalalal_abcd_imgood.dataFUStBuffDesc_MyMod.data(横线后的部分非必需。如修改“FUStBuffDesc-Item.data”可命名为“FUStBuffDesc_MyName.data”)错误示例:
ABC_青田葫芦改为上限10口.data// 错误。必须以原表名开头(如 EquipAttrDesc)EquipAttrDesc_青田葫芦改为上限10口aabc// 错误。必须以 .data 结尾FUStSuitDesc_lalalalal_abcd_imgood.bak.data// 错误。“.bak.data”会被自动忽略
2.5. (可选)若将文件命名为 [表名]_[注释].insert.data,所有记录将插入首个空行并可能获得新 ID。
将数据文件放入文件夹后,复制到
BlackMythWukong\b1\Binaries\Win64\CSharpLoader\Mods\ProtobufLoader\[任意文件夹]
例如:-- b1\Binaries\Win64\CSharpLoader\Mods\ProtobufLoader -- ProtobufLoader.dll -- 300_青田葫芦改为10口上限 -- EquipAttrDesc_青田葫芦改为上限10口.data -- 200_锦鳞套加2条套装效果_日金乌套改为加大量攻防 -- EquipAttrDesc_锦鳞套加2条效果_日金乌套改为加1800攻击2_修改属性.data -- FUStSuitDesc_锦鳞套加2条套装效果日金乌套装改为加1800攻击1_修改套装.data运行游戏
本模组会自动加载正确目录下的 .data 文件。
为何需要这个?
本模组支持逐条加载记录而非覆盖整张表。
若模组制作者发布 .data 格式而非 .pak 格式的模组,将极大降低冲突概率。
(本模组不会魔法消除已有冲突!即使安装后,原有 .pak 模组仍会如常冲突)。
对开发者而言,可实时修改 .data 文件并重载,节省打包、调试或为用户合并 pak 的时间。
注意: 不是说你装了这个 mod,原本冲突的 mod 就突然间不冲突了!!
意思是以后修改数据类的 mod 可以直接以 data 文件的形式发布并以该 mod 加载,就不会像以前 pak 文件那样极易冲突了。
还省了把 data 文件打包成 pak 的工夫。
注意事项:
0. 重载与重置
按 Ctrl+F7 重载数据文件
- 内存数据将被重置(自 v1.1 起)
- 但不可克隆的数据类型不会被重置
- 重载时将同时修改 protobuf 并刷新 GameDB 缓存
按 Ctrl+F8 重置
- 加载数据文件时,本模组会存储修改前的值
- 重置时将写回存储的记录
- 若其他模组在加载与重置间修改了相同记录,这些变更将丢失
- 按 Ctrl+F7 重载时会自动先执行重置
按 Ctrl+F9 超级重置
- 从虚拟文件完全重载所有内容
- “重置”仅恢复被修改数据,“超级重置”会丢弃所有内容并从 .pak 文件重新加载(如同游戏启动时)
- 若无 bug/加载失败/其他模组修改 protobuf,两种重置效果应完全相同
1. 加载顺序:
按字典序加载子文件夹
- 例如“100_abc”会先于“200_lalla”加载
- 不递归搜索子目录。如“CSharpLoader/Mods/ProtobufLoader/BestSuit/MoreSuitSubDir/”下的文件不会被加载
- 强烈建议使用
[数字]_[名称]格式命名文件夹以便控制加载顺序
同文件夹内文件:
- 先按字典序加载所有“.data”(不含“.insert.data”和“.bak.data”)
- 再按字典序加载所有“.insert.data”
2. 加载规则
加载“.data”记录时:
- 若内存表中不存在则添加
- 若已存在则完全替换旧记录
- 意味着可对同一表使用多个数据文件,只要不修改相同记录就不会冲突
- 若修改相同记录,后加载者生效
加载“.insert.data”记录时:
- 若内存表中不存在则添加
- 若已存在则递增 ID 直到获得新 ID,修改后插入新记录
本模组会在本地化初始化后加载文件
- 当 CSharpLoader 加载本模组时,若 GameInstance 和 GSLocalization 均已初始化则立即加载
- 否则在 GSLocalization 初始化完成后加载
3. 本模组修改什么?
游戏数据通常存在于:
A) .pak 虚拟文件
B) 内存中的 GSProtobufRuntimeAPI/BG_ProtobufDataAPI 缓存
C) 内存中的 GameDBRuntime/BGW_GameDB 缓存
D) 内存中的其他实例
游戏启动时从 A 读取到 B,再构建部分数据到 C。
游戏过程中,部分实例直接从 B/C 读取,其他实例初始化时从 B/C 构建缓存到 D 后续使用。
传统 .pak 模组实际覆盖 A。
本模组加载时会修改 B 并强制重建 C。
4.2. 配置文件:
ProtobufLoader/Config.json:
ShutUp:为 true 时减少日志输出。默认 false。如需加载大量数据文件,开启可提升性能。ShuutUp:为 true 时进一步减少日志。默认 false。ShuuutUp:为 true 时仅错误日志。默认 false。EnableChineseConsoleLog:将 CSharpLoader 控制台编码设为 UTF-8 以正确显示中文日志。默认 true(如需显示其他字符可关闭)。
4.3. 重要提示:如需修改表中多条记录
数据文件应仅包含被修改的记录以避免冲突(这正是使用本加载器的意义)。
(若需 DataEditor 添加“删除除此记录外所有内容”功能,可等待 DataEditor 作者更新,或使用我修改的 Data Editor 分支)。
5. 以下表暂不支持
剧透:显示
UISettingControlDesc
ScrollDesc
ActivityTaskDesc
ActivityDesc
CombatSkillDesc
FUStCollectionSpawnInfoDesc
6. 注意同名不同 ID 的物品
例如:
- 药品可能在物品表中有配方项和药品项同名但 ID 不同
- 装备可能每个等级在装备表中有多条记录
- 气势被动效果也可能分多级记录
- 等等
7. 注意仅在初始化时读取的描述表数据
例如:TransQiTianDaShengConfigDesc 表用于初始化 BUS_QiTianDaShengComp。
若在游戏启动后重载该表,可能因初始化函数未再次调用而不生效。
显示 1-11 条,共 11 条
以上为资源接口提供的文件记录。安装时请在客户端确认文件、游戏版本及依赖。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。