Files
90CNServer/pvf/docs/二进制ANI格式.md
T
hanfuit 645b64fe21 DNF90 服务端与启动器完整源码(含 GM 工具功能增强)
服务端(Go):
- GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面
- GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新
- 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新)
- 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍
- 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0)
- 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算

启动器(Python/JS):
- 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭
- GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐)
- 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
2026-11-04 14:31:55 +08:00

38 lines
3.3 KiB
Markdown

# 通用二进制 ANI 解码
实现位于 `internal/ani/binary.go`,独立于 PVF 容器与客户端版本。编辑器通过公共文件读取流程展示二进制 `.ani` 的只读源码,并接入现有 ANI 动画预览。普通文本 ANI 和令牌脚本 ANI 沿用原有流程。
当前支持解码,不包含文本到二进制的重编译。查看与预览不会改变文件类型、原始载荷或归档的修改状态,导出及归档保存继续使用原始二进制。无法解码的文件显示错误;不能识别的属性不会被跳过。
## 布局
所有数值按小端读取。
1. `uint16` 帧数、`uint16` 图片路径数。
2. 每条图片路径:`int32` 字节长度,随后为 ASCII 字节。
3. `uint16` 全局属性数量,随后为属性编号与对应数据。
4. 每一帧:碰撞盒数量及盒数据、`int16` 图片路径索引、可选的 `uint16` 图片编号、两个 `int32` 图片坐标、帧属性数量及属性数据。
负图片路径索引表示空图片,不占图片编号字段。碰撞盒含六个 `int32`。解码器检查长度、索引、属性编号和尾部数据,最多接受三个零对齐字节;限制单个资源字符串和解码输出大小,防止异常计数或路径复用导致过大内存占用。
支持的全局属性为 LOOP、SHADOW、COORD、OPERATION 和 SPECTRUM(间隔、寿命、颜色、效果)。帧属性包括 LOOP、SHADOW、COORD、IMAGE RATE、IMAGE ROTATE、RGBA、INTERPOLATION、GRAPHIC EFFECT、DELAY、DAMAGE TYPE、PLAY SOUND、PRELOAD、SET FLAG、FLIP TYPE、LOOP START、LOOP END、CLIP,以及 DAMAGE BOX / ATTACK BOX。MONOCHROME 和 SPACEDISTORT 的附加参数也会读取。
源码使用 `[FRAME000]`、`[IMAGE]`、`[IMAGE POS]` 等标准 ANI Section。帧内属性缩进,避免帧级 LOOP / SHADOW 被预览解析器误认为全局设置。现有预览显示图片、位置和延时等已支持信息;完整属性保留在解码文本中,并不表示预览器已模拟所有特效。
## 参考与验证
格式依据 `pvfUtility` 提交 `53dc8e48bba0f7871ca96bcf10bfe6d2028d0582` 的读取逻辑及本地样本验证,Go 实现独立编写,未复制其恢复源码。上游 README 明确说明没有统一的顶层许可证。
- [BinaryAniCompiler.cs](https://github.com/Lancarus/pvfUtility/blob/53dc8e48bba0f7871ca96bcf10bfe6d2028d0582/SourceLibraries/PvfCode.Services/PvfCode/Services/BinaryAniCompiler.cs#L166)
- [格式枚举](https://github.com/Lancarus/pvfUtility/tree/53dc8e48bba0f7871ca96bcf10bfe6d2028d0582/SourceLibraries/PvfCode.NPK.Utils/PvfCode/NPK/Utils/AniModel/Enums)
- [上游来源与许可说明](https://github.com/Lancarus/pvfUtility/blob/53dc8e48bba0f7871ca96bcf10bfe6d2028d0582/README.md#来源与许可说明)
回归覆盖所有已知属性、负坐标、浮点数、空图片、字符串转义、未知枚举值、每个截断位置、异常计数/索引/属性、对齐和异常尾部、标准容器中的读取及保存不变、编辑器只读状态与动画预览。
```sh
go test ./internal/ani ./internal/preview ./internal/pvf ./services
PVF_TESTFILE=/path/to/Script.pvf go test ./internal/pvf -run '^TestRealBinaryANIDecode$' -v -count=1
```
本地样本验证:A5 全部 74,688 个、A12 全部 84,804 个原生二进制 ANI 解码成功。A4 样本不含原生二进制 ANI。