feat:完善加点代码导入
This commit is contained in:
@@ -244,6 +244,32 @@ if len(data) % 2:
|
||||
|
||||
其中最后的 `00` 是当前解析实现补入的对齐字节,不是解压后原始数据的一部分。该行为为兼容现有返回格式而保留。
|
||||
|
||||
### 5.1 普通职业技能连招
|
||||
|
||||
版本 5 的非黑暗武士编码新增 `skill_combo`,由 `_parse_skill_combo()` 读取:
|
||||
|
||||
```python
|
||||
'skill_combo': {
|
||||
'skills': [309, 305, 312, 311],
|
||||
'interval_ms': 5000,
|
||||
}
|
||||
```
|
||||
|
||||
- `remaining[92:100]`:固定四个技能索引,每项两字节;沿用快捷栏的高位标志规则。
|
||||
- 技能为 OpenAPI 数字 ID,空槽返回 `None`,保留四个槽位及顺序。
|
||||
- `remaining[100:102]`:小端 uint16 初始化间隔,单位毫秒。
|
||||
- `remaining[102]`:尾部 `F3`。长度不足或标记不匹配时 `skill_combo` 返回 `None`。
|
||||
- `remaining[91]` 尚未确认,不解释为开关或数量。
|
||||
|
||||
女蓝拳样本的四个技能为拳震八方、巨力炮拳、致命冲拳、怒气贯地击,
|
||||
顺序已由用户确认。仅把间隔从 0 秒改为 5 秒后,唯一变化是
|
||||
`remaining[100:102]` 从 `00 00` 变为 `88 13`(小端整数 5000)。
|
||||
剑豪样本也能对应三个技能和一个空槽。
|
||||
|
||||
该字段当前仅在 `decode_skill_hash()` 输出;计算器接口及黑暗武士的
|
||||
`arrangements` / `combos` 不变。黑暗武士和其他编码版本不套用此偏移。
|
||||
原始 `section2_remaining` 始终完整保留。
|
||||
|
||||
## 6. 黑暗武士连续技排列
|
||||
|
||||
只有满足以下条件时,顶层结果才增加 `arrangements`:
|
||||
@@ -330,6 +356,7 @@ index = index_byte + (0x100 if flag else 0)
|
||||
{
|
||||
'header': dict,
|
||||
'skills': list,
|
||||
'auto_skills': list,
|
||||
'evolutions': list,
|
||||
'enhancements': list,
|
||||
'keybinds': list,
|
||||
@@ -350,21 +377,32 @@ index = index_byte + (0x100 if flag else 0)
|
||||
|
||||
## 8. 技能索引到名称的解析
|
||||
|
||||
`decode_skill_hash()` 只负责二进制结构和技能索引,不直接写入名称。
|
||||
`decode_skill_hash()` 保留代码中的原始 `skills`,并根据 Header 职业读取本地
|
||||
`backend/openapi/static/data/cn/{job_name}/{job_grow_name}/skill_tree.json`,新增:
|
||||
|
||||
`get_skill_tree_info()` 根据职业加载:
|
||||
|
||||
```text
|
||||
backend/openapi/static/data/cn/{job_name}/{job_grow_name}/skill_tree.json
|
||||
```python
|
||||
'auto_skills': [
|
||||
{'skill_index': 174, 'level': 115},
|
||||
]
|
||||
```
|
||||
|
||||
并通过 `load_skill_tree_name_map()` 建立:
|
||||
仅补充具有 `autoLevel` 且未出现在原始 `skills` 中的技能,等级直接使用
|
||||
`autoLevel`,不覆盖代码中的显式等级。没有补充项时返回空列表。
|
||||
这些条目来自技能树,没有二进制 `skill_flag` / `level_flag`。
|
||||
解码不创建角色;通过 `_get_skill_tree_context()` 优先读取 Redis,缓存键为
|
||||
`openapi:skillTreeMap:v1:{job_name}:{job_grow_name}:map`,与旧名称映射隔离。
|
||||
未命中或 Redis 读写失败时,按现有 `get_redis_info()` 规则回退本地加载;
|
||||
DEBUG 模式跳过 Redis。文件加载另有进程内缓存,更新数据需清理对应 Redis
|
||||
缓存并重启进程(或升级缓存版本)。
|
||||
|
||||
```text
|
||||
OpenAPI 技能索引 -> 技能名称
|
||||
```
|
||||
解析和计算器适配分为三步:
|
||||
|
||||
随后再按技能名称连接到 `character.skills` 中的计算对象。
|
||||
1. `decode_skill_hash(encoded)`:二进制解析及 `auto_skills` 补充。
|
||||
2. `resolve_skill_tree(decoded, skill_tree)`:合并两类技能,映射名称、进化、强化、快捷栏和排列。
|
||||
`get_openapi_skill_tree_info(encoded)` 封装前两步,以 OpenAPI ID 返回结果,不调用 `createCharacter`。
|
||||
3. `get_skill_tree_info(encoded)`:调用上述入口,再按名称匹配计算器技能,保持现有接口字段和计算器 ID。
|
||||
|
||||
尚未新增 HTTP 路由;后续对外接口可直接调用 `get_openapi_skill_tree_info()`。
|
||||
|
||||
需要区分:
|
||||
|
||||
@@ -391,7 +429,7 @@ OpenAPI 技能索引 -> 技能名称
|
||||
- Header 中未命名的常量或状态字节;
|
||||
- Section2 首字节 marker 的业务含义;
|
||||
- 黑暗武士排列前缀之后的 remaining 数据;
|
||||
- 普通职业 remaining 中非零字段的业务含义;
|
||||
- 普通职业 remaining 中除上述技能连招以外的字段含义;
|
||||
- 尾部 `0xF3` 之前其他状态值的业务含义。
|
||||
|
||||
在获得“只修改一个游戏设置后重新导出的对照代码”之前,不应为这些字节添加业务字段。
|
||||
|
||||
Reference in New Issue
Block a user