DragonSword: Awakening(龙之剑觉醒,UE 5.3.2)的本地存档修改工具。
- 读取/修改 SQLCipher 加密的存档数据库(角色、货币、装备词条、技能、背包、任务等)
- 11 种界面语言(切换语言后物品/角色/词条/技能名同步跟随)
- 现代暗色 Qt6 界面(总览 / 角色养成 / 装备 / 背包 / 数据工具)
- 修改前自动备份,可随时还原
存档格式与破解细节见 存档文件解析.md。
- Python 3.10+(开发环境 3.14 验证通过)
- Windows(界面基于 Qt,其他平台理论可用但未验证)
pip install -r requirements.txt
python run_editor.py首次启动默认英文界面,可在「设置」中切换语言(重启生效)。点击「打开存档」选择 ...\DS\Saved\SaveGames\<账号ID>\<账号ID>_Slot1.db 即可。
| 页面 | 功能 |
|---|---|
| 📊 总览 | 玩家信息、金币快捷修改、角色列表(点击跳转) |
| 👤 角色养成 | 等级(经验自动匹配)/飞升/超越/HP、技能等级(0~上限,槽位规则)、大师技点亮 |
| ⚔ 装备 | 强化(0~15)、锁定、词条定制(按系列+属性筛选)、装备删除/新增 |
| 🎒 背包 | 堆叠物品+料理,批量操作(勾选多删/统一设数量/±1000) |
| 🛠 数据工具 | 全部 105 张表通用编辑(高级) |
DSSaveEditor/
├── run_editor.py # 启动入口
├── ds_save.py # 加密核心(SQLCipher 解密/加密/HMAC)
├── build.bat # 打包脚本(PyInstaller onefile → dist\DSSaveEditor.exe)
├── requirements.txt # 运行依赖(PySide6 / pycryptodome)
├── app/ # 应用代码
│ ├── main.py # 应用入口逻辑
│ ├── i18n.py # 本地化框架(JSON 语言包 + en 兜底)
│ ├── config.py # 用户配置(config.json:语言/主题/上次路径)
│ ├── datasource.py # 存档数据操作(SaveData / NameResolver / QuestManager)
│ ├── ui_main.py # 主窗口与导航
│ ├── ui_common.py # 通用 UI 辅助(卡片/清空布局)
│ ├── ui_overview.py # 总览页
│ ├── ui_character.py # 角色养成页(含入队/出队/一键满级)
│ ├── ui_karma.py # 宿命烙印页
│ ├── ui_vehicle.py # 使魔页
│ ├── ui_equipment.py # 装备页(强化/词条/符文槽)
│ ├── ui_inventory.py # 背包页(新增道具/批量)
│ ├── ui_quest.py # 任务页(主线/因缘/英雄记录/区域/晋升/其他/未开放)
│ ├── ui_backup.py # 备份管理 + 修改对比对话框
│ ├── ui_tools.py # 数据工具页
│ ├── ui_settings.py # 设置对话框
│ ├── ui_theme.py # 深色/浅色 QSS 主题
│ └── locales/ # 11 种语言文件(zh_CN/zh_TW/en/ja/ko_KR/de/fr/es_ES/pt_BR/ru/th)
├── data/ # 游戏数据映射(由 FModel 导出表生成)
│ ├── id_names.json # 物品/角色/怪物/NPC/使魔 → 11 语言名
│ ├── stat_names.json # 属性/主词条/副词条 → 11 语言名
│ ├── equip_items.json # 装备基底(系列/部位/品质)
│ ├── equipment_exp.json # 强化等级经验规则(按品质)
│ ├── skill_names.json # 角色技能槽 → 名称/等级上限
│ ├── level_exp.json # 等级 → 合法经验值
│ ├── quest_data.json # 任务元数据(325 任务 + 记录卡 + 动态任务)
│ ├── character_data.json # 可入队角色元数据(图鉴范围/隐藏标志)
│ ├── vehicle_data.json # 使魔元数据(名称/类型/介绍/DLC)
│ ├── gem_stat.json # 符文属性定义
│ └── item_types.json # 背包可新增物品类型清单
└── docs/
└── 存档文件解析.md # 存档格式与破解全过程文档
| 层 | 文件 | 职责 | 修改注意 |
|---|---|---|---|
| 加密 | ds_save.py |
SQLCipher 加解密 | 一般不要动;改密钥/参数见《存档文件解析.md》3.4,动错会导致无法读写存档 |
| 数据 | app/datasource.py |
SQLite 操作封装、名称解析 | 表操作统一走 SaveData;新增名称映射列走 NameResolver |
| UI | app/ui_main.py |
全部界面 | 新增页面:建页面类 + 在 MainWindow 注册(pages/nav_items/stack/refresh_all_pages) |
| 本地化 | app/i18n.py + locales/*.json |
文案 | 所有可见文案必须走 i18n.tr("key");新 key 加入 zh_CN/en,其余语言自动 en 兜底 |
| 数据文件 | data/*.json |
名称/规则映射 | 由游戏解包表生成,见下 |
- 在
app/locales/zh_CN.json与en.json对应段加 key(其余 9 语言无需改,自动回退英文) - 代码中
i18n.tr("段.key")调用;支持{占位符}格式化(如tr("x.y", n=3))
- 复制
app/locales/en.json为app/locales/<code>.json(code 如fr、ja) - 翻译其中的文案
- 在
app/i18n.py的SUPPORTED列表注册(code, 显示名)
数据文件来自游戏 pak 解包(FModel,本游戏 pak 无加密):
| 数据文件 | 源表(Content/Design/GameData/) |
|---|---|
data/id_names.json |
GameItemData / PCCharacterData / MonsterCharacterData / NPCCharacterData / VehicleCharacterData / StringData |
data/stat_names.json |
StatListData / EquipmentMainStatData / EquipmentSubStatData / StringData |
data/skill_names.json |
PCSkillGrowthData / StringData |
data/level_exp.json |
PCCharacterLevelData |
data/equip_items.json |
GameItemData(ItemType=EQUIPMENT) |
data/quest_data.json |
QuestMainData / QuestStepData / QuestRecordData / DynamicQuest* / StringQuestData |
data/character_data.json |
PCCharacterData / CharCollectionData |
data/vehicle_data.json |
VehicleCharacterData / GameItemData / StringData |
data/gem_stat.json |
GemStatData |
data/item_types.json |
GameItemData(ItemType 清单) |
生成逻辑:表内 Name 字段 → StringData ID → 取 11 语言字段(SourceString=韩文, En, Ja, Zh_CN, Zh_TW, De, Fr, Es_ES, Pt_BR, Ru, Th)。注意词条属性名需大小写无关匹配(词条里 MaxHP vs 表里 MAXHP)。
- 技能等级上限:槽 5-8→10,槽 1/2/4→7,闪避固定,大师技 0/1 点亮
- 等级经验:
LEVEL=L → EXP = level_exp[L] - 装备词条系列:
ITEM_CID 前3位 - 134 = 词条前缀;部位:Category 1300-1304 = 头/上衣/下衣/手套/鞋 - 强化上限按品质(EquipmentLevelData):NORMAL 3 / SUPERIOR 6 / RARE 9 / EPIC 12 / LEGENDARY 15;改强化等级自动写入匹配 EXP(EXP = 上一档 LevelMaxExp,否则游戏加载会回退)
- 打不开存档:确认文件是
*_Slot1.db;先备份再操作 - 切换语言后名称不变:语言切换需重启生效;名称映射随语言
- 修改不生效:点「保存修改」才会写回(自动先备份);
.db.backup可还原
本工具仅用于学习与研究存档格式。修改存档可能影响游戏体验与账号安全,请自行备份、谨慎使用。