跳到主要内容

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, 雅铭网络工作室)