3.8.2 Client Changelog
2026-08-23
- chore: 更新版本号至 3.8.2 (
34f2c6e, 雅铭网络工作室) - fix: 简化二套装备套装统计逻辑 (
cbe7d1e, 雅铭网络工作室)移除二套灵魂激活状态判断,直接统计穿戴中的二套装备件数,套装激活状态改由 RoleItem.cpp TipsRender 实时判断显示。
- fix: 简化二套装备套装统计逻辑 (
f163289, 雅铭网络工作室)移除二套灵魂激活状态判断,直接统计穿戴中的二套装备件数,套装激活状态改由 RoleItem.cpp TipsRender 实时判断显示。
- feat: 同步第二灵魂字段修改与配置表扩展 (
d3bccc7, 雅铭网络工作室)Merge PR #104: feat(client): 同步第二灵魂字段修改与配置表扩展
- fix: 复用GetFiveBorn并统一第二灵魂激活显示判定 (
7f0fd37, 雅铭网络工作室)- RoleItem.h: 新增共享的五行辅助函数 GetFiveBack/GetFiveBorn/GetFiveBornFrom
- GuiUserInfo.cpp: nNextFive 计算复用 GetFiveBorn,去除重复逻辑并补充边界校验
- RoleItem.cpp: 移除本地重复定义;第二灵魂 bActiveFive 判定改为与首循环一致(EQUIP/STORE/PACKAGE)
2026-08-22
- feat: 更新第二套装备属性类型及显示逻辑 (
f43f220, 雅铭网络工作室)- 将 addpdef/addmdef/addpdam/addmdam/addhp 字段从 BYTE 改为 DWORD固定值随服务端升级
- 支持第二套装备激活状态判断与提示显示
- 根据激活状态展示不同颜色及套装名称
- 合并来自 devlop 的合并请求 #103 (
d760610, 雅铭网络工作室)chore: 将 PakTest_linux 加入导出忽略与 Git 忽略规则 PR-URL: #103
- chore: 添加 PakRepack 和 MapToMps 可执行文件忽略规则 (
c6a8540, 雅铭网络工作室) - chore: 将 PakTest_linux 加入导出忽略与 Git 忽略规则 (
839af83, 雅铭网络工作室) - feat: 新增单文件的 PakTest_linux 解压工具 (#101) (
bcdb113, 雅铭网络工作室)合并 PR #101:新增单文件 Linux 版 PakTest 解压工具,功能对齐 Windows 版,含 DES/MD5/CRC + raw deflate 实现,已通过 alpha.pak 与 gui.pak 实测验证。Ref #100
- feat: 新增单文件的 PakTest_linux 解压工具 (
acb7e34, 雅铭网络工作室)Linux 纯命令行版 XPAK 资源包解压工具 (单文件 0 依赖)。
- 单文件 main.cpp (UTF-8), 内嵌 DES/MD5/CRC + raw deflate 解压实现
- 自动匹配密码池, 与 Windows 版 PackAggregate 密码池一致
- 功能对齐 Windows 版 PakTest, 纯命令行模式
- 提供 --selftest 自检、-l 列出、-o 指定输出目录
- 新增 PakTest_usage.md 使用文档
- 合并来自 devlop 的合并请求 #98 (
4987803, 雅铭网络工作室)fix(client): 修复室内地图名称判断错误 PR-URL: #98
- fix: 修复室内地图名称判断错误 (
ba9b40f, 雅铭网络工作室)
2026-08-21
- fix: 升级客户端协议初始化对齐服务端 (
5694dad, 雅铭网络工作室) - fix: align item.pos default to 0 with server for shared command structs (
83e5492, 雅铭网络工作室)Add stObjectLocation::clear() to zero the position fields, and call item.pos.clear() in stContentMail/stAddListAuction/stAuctionItem so pos defaults to 0, matching server PR #95 semantics (original memset).
- fix: 升级客户端 stObjectLocation 与命令结构体初始化对齐服务端 (
d76ba36, 雅铭网络工作室)- Client/Object.h: stObjectLocation 增加 Zt_Object::INVALID_* 默认构造,使 t_Object() 值初始化后 pos 为 -1(INVALID),与服务端一致
- Client/command.h: stContentMail / stAddListAuction 的 memset(&item,0) 改为 item = t_Object()
- Client/Auction.h: stAuctionItem 的 memset(&item,0) 改为 item = t_Object() 协议布局逐字节不变,仅将 t_Object.pos 的默认编码从 0 统一为 -1(INVALID),与服务端迭代语义对齐。
- fix: 加固地图数据消息解析,增加边界校验防止越界读崩溃 (
f16462f, 雅铭网络工作室) - fix: 加固地图数据消息解析,增加边界校验防止越界读崩溃 (
cd9936d, 雅铭网络工作室) - fix: 修复BOSS消失——REMOVEMAPNPC改为延迟删除以消除时序竞争 (
63fc0da, 雅铭网络工作室)合并 PR #87:采用方案A(客户端延迟删除)修复地图BOSS消失的历史Bug。Ref #34
- fix: 采纳评审建议优化延迟删除 (
66d29e4, 雅铭网络工作室)- 重复 REMOVEMAPNPC 不再无限续期删除时钟(仅首次启动宽限窗口)
- 为带副作用的 CanRemove() 谓词补充说明注释
- fix: 修复BOSS消失——REMOVEMAPNPC改为延迟删除以消除时序竞争 (
e87a57c, 雅铭网络工作室)
2026-08-20
- ci: 更新上传资源命令参数 (
f58e6ee, 雅铭网络工作室)将上传脚本调用方式改为直接执行 upload-commit-asset 并指定 GBK 编码,替换原 PowerShell 命令。
- feat: 补齐应用图标和版本信息 (
2d6c681, 雅铭网络工作室)补齐 PakTest 项目缺失的应用图标和版本信息,公司名更新为上海巨人网络战狼工作室。Ref #80
- chore: 更新公司名称为上海巨人网络战狼工作室 (
ff5340f, 雅铭网络工作室) - feat: 补齐应用图标和版本信息 (
f1aef1b, 雅铭网络工作室)- 将 ViewGL/res/ViewGL.ico 拷贝为 PakTest/res/PakTest.ico 作为应用图标
- 新增 PakTest.rc 资源文件,包含图标和完整版本信息
- 新增 resource.h 定义资源 ID
- 更新 PakTest.vcxproj 和 filters 添加资源编译配置
- 公司信息统一为 R8 Client Tools,版权为 (C) R8 Team
2026-08-19
- fix: 修复 getFileInfo 对误判 per-file-flags 的 pak 崩溃问题 (
343838f, 雅铭网络工作室) - fix: 修复 getFileInfo 对误判 per-file-flags 的 pak 崩溃问题 (
fbf840a, 雅铭网络工作室)datas.pak 条目区 +0x10 字段全为 0,被误判为 per-file-flags 模式, 导致 OpenZipFileForRead 传入 dwDecryptFlags=0,getFileInfo 跳过解密, 读到加密后的垃圾 stFileSizeInfo,产生非法 flags 令 PackSubRStream 构造/解压阶段崩溃闪退。 getFileInfo 改为总是尝试解密 stFileSizeInfo 头并做版本校验:
- 解密后版本号合法(9/8) -> 采用解密结果;
- 否则回退原始明文;
- 两者都非法(如美工占位文件)-> flags=0 按原始数据透传,避免崩溃。
- fix: 修复解压未加密子文件时错误尝试解密的问题 (
f6eff5a, 雅铭网络工作室)在 getFileInfo 中,当检测到文件 stFileSizeInfo 未加密(版本验证失败)时, 除了回退到原始明文数据外,还需要清除 flagEncrypt/flagEncryptHeaderOnly 标志, 否则 OpenZipFileForRead 中的 PackSubRStream 仍会尝试对未加密数据执行解密, 导致解压数据错误或程序闪退。 同时,当文件数据大小等于原始大小(未压缩)时,也清除 flagCompress 标志, 避免 PackSubRStream 尝试解压未压缩数据而失败。
2026-08-18
- 合并来自 dx9-vs2015 的合并请求 #77 (
434f69d, 雅铭网络工作室)fix(ui): 调整属性栏文本显示格式 修复bug #71 #75 #76 PR-URL: #77
- fix: 调整属性栏文本显示格式 (
f16068a, 雅铭网络工作室) - fix: 修复NPC/主角/队友血量条在QWORD满数值时显示不满血 (
163aeea, 雅铭网络工作室)RenderBar 中先用宽度当前值再除以最大值,当 iCur 为 QWORD 满数值 (0xFFFFFFFFFFFFFFFF) 时 WidthiCur 溢出 uint64_t,导致进度条计算错误, 满血也显示为空/不满。改为先计算 (double)iCur/(double)iMax 比例再乘宽度, 避免乘法溢出。同步修复 NPC 血条(CharacterProperty)、主角血条(GuiMain)、 队友血条(GuiTeam)三处相同问题。
- fix: 重构整数解析,避免科学计数法经double丢失精度与静默截断 (
44edec4, 雅铭网络工作室)- 新增 ParseIntegerString:十进制/科学计数法整数直接按十进制累加,不经过 double,避免 >2^53 大整数精度丢失
- QWORD 上限值 1.8446744073709552E+19 经 double 反而溢出并环绕为 0,现改为饱和到 _UI64_MAX
- 全串校验:strtod/_strtoi64 在中途字符截断、把尾部杂字符悄悄丢弃的问题,改为整串合法性校验(非法值写 0 并告警)
- 溢出饱和:超过目标类型范围时饱和而非环绕;无符号字段收到负值钳到 0 并告警
- 新增 AppendFieldWarning:在首行记录结构定义处输出解析/溢出告警
- 保持 GBK 编码
- fix: 修复QWORD上限值(1.84467E+19)被按有符号SQWORD解析溢出 (
de21bba, 雅铭网络工作室)QWORD为8字节无符号,输入值可能超过SQWORD上限(2^63-1)。 ParseIntValue用有符号__int64解析科学计数法大值时溢出,导致写入错误。 新增ParseUInt64Value(无符号)用于QWORD字段,正确解析如1.84467E+19等上限值。
- fix: 修复大数值科学计数法解析错误,写入端误写为 1 (
524e2cb, 雅铭网络工作室)策划从 Excel 导出为 txt 时,大数值会被科学计数法表示(如 1E+11)。 原 _strtoi64 不识别科学计数法,会在第一个 E 处截断,导致 1E+11 被错误写成 1。 新增 ParseIntValue 辅助函数:
- 字符串含 E/e(科学计数法)或 .(小数)时,先经 strtod 转 double 再截断为整数
- 保持 base=16 十六进制时 E/e 作为合法数字字符不受影响
- 空值返回 0 保持 GBK 编码不变。
- fix: 修复RLE纹理空指针问题 (
40773e6, 雅铭网络工作室)将RLE数据指针的空值检查移至alpha通道处理分支,避免在无需alpha数据时错误返回。
- build: 从构建脚本中移除 MapEditor 解决方案 (
9f4bb0b, 雅铭网络工作室) - fix: 修正 tiletype.xml 加载路径 (
595f369, 雅铭网络工作室) - fix: 统一扩展地图地形帧索引计算 (
e3b3ab8, 雅铭网络工作室)移除扩展地图与默认地图的分支逻辑,统一使用 frame = tile % 100 作为帧索引进行渲染和预加载。
2026-08-17
- fix: 修复 alpha 位图默认分支未处理非 alpha 格式的问题 (
a958f73, 雅铭网络工作室) - docs: 更新使用说明文本 (
c132058, 雅铭网络工作室) - feat: 支持 XML 数据源并替换 JPEG 库 (
379b98d, 雅铭网络工作室)- ExcelMakePack 新增 XML 数据源转换,修复 TSV 空字段解析
- 字符串池预留空串偏移,修正 tbl2 偏移语义
- Magic/MakeGL/RenderD3D 由 ijl 迁移至原生 libjpeg-turbo
- 清理 XML 表数据尾随空格并修正字段内容
2026-08-16
- ci: 增加 PR 构建验证流程 (
c00b2c3, 雅铭网络工作室)在 pull_request 事件中新增 Windows 构建验证阶段
- 合并来自 dx9-vs2015 的合并请求 #65 (
ddabdb0, 雅铭网络工作室)feat(script): 支持通配符批量上传提交附件 PR-URL: #65
- feat: 支持通配符批量上传提交附件 (
6236f4e, 雅铭网络工作室) - feat: 添加新版tbl2格式数据 (
2af2686, 雅铭网络工作室) - chore: 删除冗余的旧版数据表文件 (
633955d, 雅铭网络工作室)
2026-08-15
- 合并来自 dx9-vs2015 的合并请求 #62 (
c3bf594, 雅铭网络工作室)fix(vs2015): 将新增的 ClientSecret.h 注册到 client.vcxproj 项目文件 PR-URL: #62
- fix: 将新增的 ClientSecret.h 注册到 client.vcxproj 项目文件 (
7ea6d12, 雅铭网络工作室)- ClientSecret.h 是基础通信密钥唯一来源,需加入项目以便在 VS 解决方案中可见和管理
- 不影响编译(include 路径已包含 .\),但符合 VS 项目管理规范
- 文件为纯 ASCII 编码,与项目 GBK 编码兼容无冲突
- refactor: 集中基础RC5密钥到ClientSecret.h并更换密钥 (
945ba1e, 雅铭网络工作室)- 新增 Client/ClientSecret.h 集中存放 LOGIN_RC5_KEY,作为客户端基础通信密钥唯一来源
- CClient 构造函数用集中密钥初始化 m_loginkey,替代原 D3DFont.cpp 字体加载时的散落填充
- 移除 RenderD3D/source/D3DFont.cpp 中 song12.fnt 加载时填充密钥的不合理逻辑
- 密钥与服务端(base/EncDec/EncDec.h)保持一致
- feat: 合并 dx9-vs2015 分支 TBL2 表格池化迭代成果 (
ebf55a9, 雅铭网络工作室) - chore: 为 tbl2 格式默认启用 stringPool (
b49ed86, 雅铭网络工作室)批量更新表配置支持 stringPool 属性,并补充字段命名修正
- chore: 为多个配置表启用 stringPool (
f3b5bfc, 雅铭网络工作室)为 CharacterStateBase、ObjectUp、SkillBase、SkillLevelBase、SetObjectBase、HairStyle、HairColor、Knight、Civilian、HeadList、HeadListBase、CountryMaterial 表添加 stringPool="1" 属性。
- refactor: 重命名旧版tbl转换脚本并增加客户端过滤逻辑 (
d89b735, 雅铭网络工作室) - fix: 更新ExcelMakePack字段定义 (
4c753b6, 雅铭网络工作室) - docs: 修正默认路径与命令文档编码 (
08261a9, 雅铭网络工作室) - fix: 统一 HairColor 表名拼写 (
399595c, 雅铭网络工作室) - fix: 支持跨分包查找文件 (
885e3d8, 雅铭网络工作室)当原始分包中找不到文件时,尝试在其他分包中按"分包名\相对路径"查找,兼容 datas 拆分为 datas1/datas2/datas3 的场景。
- fix: 修复发色表文件名大小写 (
8312322, 雅铭网络工作室)将 HairColour 改为 HairColor,与新增的 haircolor 表文件保持一致。
- chore: 更新 Headlist 表数据 (
21e0b4b, 雅铭网络工作室) - chore: 更新 headlist.tbl 表数据 (
1a67056, 雅铭网络工作室) - fix: 更新头像列表数据 (
979ef67, 雅铭网络工作室) - feat: 添加 HeadListBase 表配置及数据 (
63d9014, 雅铭网络工作室)新增 HeadListBase 表结构定义、7167 行客户端数据文件,以及旧版 tbl 转 xml 工具说明文档。
- fix: 修复 characterstatebase.xml 编码乱码 (
71e4a55, 雅铭网络工作室) - chore: 清空NPC基础数据表 (
3f116ca, 雅铭网络工作室) - fix: 修复 ItemSetTable 表未卸载的问题 (
fb859b5, 雅铭网络工作室)- 更新 ReadTableData 与 LoadTableAutoDetect 的注释,移除 ItemSetTable 的旧说明并补充支持的字符串表类型
- 在 UnloadTables 中补充释放 g_tableItemSetBase,避免表数据残留
- refactor: 表格加载支持 TBL2 字符串池格式 (
3a73f31, 雅铭网络工作室)- 为多个表格类型添加 TBL2 池化加载与旧格式兼容
- 将固定字符数组字段改为 const char* 指针
- 引入 TableSortTrait 统一排序规则
- 清理旧版 SkillLevel 读取函数
2026-08-14
- feat: 扩展动画类型枚举 (
764a39a, 雅铭网络工作室)新增开箱、自行车、温泉、游泳、儿童骑乘攻击等动画类型,并调整原有飞行和舞蹈动画的枚举值。
- style: 统一代码风格 (
1dab423, 雅铭网络工作室)