Appearance
影之刃零存档数据
本文解释 getLatestStructuredData('4115450') 成功返回的 data。它包含当前账号全部已保存槽位,以及用于默认展示的槽位名。
字段说明基于已保存业务数据的定义,以下结构示意不是真实账号响应。调用权限、返回状态及错误处理见游戏存档指南。
多槽位结构
ts
import hbSDK from '@heybox/hb-sdk'
const result = await hbSDK.gameSaves.getLatestStructuredData('4115450')
if (result.status === 'ready') {
const slots = Array.isArray(result.data.slots) ? result.data.slots : []
const defaultSlot = slots.find(slot =>
slot && typeof slot === 'object' && slot.slot === result.data.defaultSlot,
)
console.log('默认槽位', defaultSlot)
console.log('全部槽位', slots)
}这里只演示 ready 分支;完整接入还需处理其他状态及调用异常。返回的 data 结构为:
text
data
├─ defaultSlot 默认槽位名,例如 AutoSave0
└─ slots[] 全部已持久化槽位
├─ slot 槽位名
├─ head 保存时间、关卡、周目、难度
├─ firstClear 通关时间及各周目结算
├─ progress 时长、章节、剧情进度
├─ combat 配装、死亡、Boss 击杀
├─ achievements 成就汇总
├─ bosses Boss 分组及挑战记录
├─ collectibles 收集进度
├─ detail 分类明细
├─ quest_details 任务动态状态,旧记录可能为 null
└─ inventory_details 背包物品,旧记录可能为 nullslots 按 head.saveTime 字符串倒序排列,缺失或 null 排在最后;同一时间按槽位名升序。defaultSlot 是排序后的第一个槽位名,不固定优先选择自动或手动存档。没有槽位时返回 empty,不是包含空数组的 ready。
基础信息、结算与进度
以下路径均相对于 slots[] 中的单个槽位。
| 路径 | 含义 |
|---|---|
head.saveTime | 存档保存时间字符串,沿用游戏格式 |
head.currentLevel | 当前关卡字符串 |
head.cycle | 当前周目字符串 |
head.difficulty.raw、head.difficulty.name | 原始难度值与已保存的名称 |
firstClear.clearDate | 通关时间的可用性对象,包含 value、reason |
firstClear.cycles[] | 各周目结算记录,保留原字段及大小写 |
progress.playTimeSeconds | 游玩时长,单位秒 |
progress.playTime | 已保存的时长展示字符串 |
progress.lastLaunch | 最近启动时间的可用性对象,包含 value、reason |
progress.narrativePercentage | 剧情进度数值 |
progress.chapter | 章节字符串 |
progress.remainingDays | 剩余天数 |
clearDate、lastLaunch 不保证有非空值。应展示 reason 或缺失提示,不要把 value: null 当作时间戳 0。
firstClear.cycles[] 的已知原字段包括 Cycle(周目键)、Ending(结局值)、Difficulty(难度值)、GameTime(游戏时间值)、Completion(完成度)、DiedTimes(死亡次数)。不要按数组下标推断周目,也不要给未确认格式的 GameTime 强行套用其他时间字段的单位。
配装、成就与 Boss
| 路径 | 含义 |
|---|---|
combat.loadout | 已保存配装状态,可能缺失 |
combat.totalDeaths、combat.cycleDeaths | 累计死亡次数、当前周目死亡次数 |
combat.bossKillTotal | Boss 击杀总数 |
combat.currentMainWeapon、combat.currentShaqi | 当前主武器、杀器信息,可能为 null |
combat.mainWeapon、combat.shaqi | 主武器、杀器的收集计数 |
achievements.unlocked、achievements.total | 已解锁成就数、成就总数 |
achievements.reason | 成就统计的补充说明 |
bosses.groups[] | Boss 分组,包含 map、mapName、count 和 bosses |
每个 bosses.groups[].bosses[] 的已知字段:
| 字段 | 含义 |
|---|---|
id、classPath | Boss ID、游戏类路径 |
map、mapName | 已保存的地图标识与名称 |
encountered、killed | 是否遭遇、是否击杀 |
kill、attempt | 击杀次数、尝试次数 |
bestTimeMs | 最佳时间,单位毫秒 |
records[] | 分周目/难度挑战记录:cycle、diff、diffName、kill、attempt、bestTimeMs |
收集汇总与分类明细
| 路径 | 含义 |
|---|---|
collectibles.overall | 按类别汇总的收集情况 |
collectibles.craneBellCount | 鹤铃数量 |
collectibles.byBigMap[] | 大地图收集进度,包括 mapID、name、pct、done、total、subMaps |
collectibles.currentChapter | 当前章节收集进度,包括 mapID、pct、done、total、reason |
计数对象中的 done、total 分别表示已完成和总量;可选的 unknown 表示未知数量。未知不等于未完成。
detail 按类别保存明细数组,各类别的元素结构不完全相同:
| 字段 | 分类 |
|---|---|
bell | 铃类收集 |
weapon、shaqi | 武器、杀器 |
accessory、medicine | 饰品、药品 |
challenge | 挑战 |
hupo、heishi | 对应 hupo、heishi 类收集项,保留游戏分类标识 |
flower | 记忆之花收集项 |
achievements | 成就明细 |
部分物品明细有 id、done、equip,以及可选的 level(等级)、soul_forged(铸魂状态)、reincarnation_count(重复获取强化次数)。不要把强化次数与等级合并,也不要把可选字段缺失当作 false 或 0。各项名称、图片或位置不保证已保存。
任务与背包
quest_details 字段 | 含义 |
|---|---|
CurrentMainQuestPath、CurrentTutorialQuestPath | 当前主线、教程任务路径 |
TrackedQuestPath、TrackedBranchID、TrackedTaskPointID | 当前追踪任务、分支和任务点 |
ManualTrackingOptOut | 手动退出追踪的标记 |
NarrativeSavedQuests[] | 已记录任务,包含 QuestClass、QuestCompletion、QuestBranches、CompletedBranches、ReachedStateNames |
QuestBranches[] 包含 BranchID、TasksProgress、BranchType。这些是任务动态状态,不附带完整攻略文案;不要只根据数组顺序判断任务步骤是否完成。
inventory_details 为 { id, amount }[],分别表示背包物品 ID 与数量。旧记录可能没有任务或背包模块,此时对应字段为 null。
使用边界
- 只返回已入库业务模块,不是完整解密 JSON;不补查静态图鉴来填充名称、说明和图片。
- 字段混用驼峰、下划线与大写开头的原始命名,大小写必须严格保留。
- 超出 JavaScript 安全整数范围的整数返回字符串;旧记录可能缺少字段,请兼容
null和未知字段。 - 本方法不触发同步或解析;支持影之刃零需要配套后端与 Host Runtime,沿用现有 SDK 方法。