跳到主要内容

3.8.2 Server Changelog

2026-08-27

  • chore: 删除 npcbase.xml 文件 (ddbafcf, 雅铭网络工作室)
  • feat: 添加 ExcelMakePack_2010 配置表定义 (3da45a5, 雅铭网络工作室)

2026-08-24

  • fix: 修复第一灵魂忽视防御取值范围及反伤承伤冲抵基值不一致 (#122) (64354a8, 雅铭网络工作室)
  • fix: 修复第一灵魂忽视防御取值范围及反伤承伤冲抵基值不一致 (26a62aa, 雅铭网络工作室)
    1. RebuildObject_EquipMaker.cpp:2456 modify_soula() 中第一灵魂 ignoredef 上界误用 rdam.max,修复为 ignoredef.max(与其他实现一致)
    2. SceneEntryPk.cpp: 灵魂反伤(攻击者承受)与承伤冲抵(防御者减免) 使用不同基值导致比例错位,新增 dwDamReflectBase 统一基值
  • style: 调整 ScenePk.cpp 代码格式并移除多余日志 (14165a9, 雅铭网络工作室)

    优化攻击速度计算及宏定义格式,清理冗余日志

  • style: 调整 ScenePk.cpp 代码格式并移除多余日志 (dbe5c0c, 雅铭网络工作室)
  • style: 清理 ScenesServer 重建对象模块的空白和缩进 (18c51b5, 雅铭网络工作室)

    代码格式化与注释对齐优化,移除多余空行

  • refactor: 拆分 RebuildObject.cpp 为多个小模块 (#118) (eda6534, 雅铭网络工作室)
  • refactor: 拆分 RebuildObject.cpp 为多个小模块#118 (3dc74d3, 雅铭网络工作室)
  • feat: 客户端技能表一键生成服务端SkillBase(基础字段自动映射+效果留待策划填) (02f2c75, 雅铭网络工作室)

    新增 tools/gen_server_skillbase.py 脚本和 docs/SkillBase自动生成脚本使用指南.md,参照 gen_server_npc_base.py 模式,将客户端 skilllevelbase.xml 一键映射为服务端 SkillBase.xml(22 个基础字段自动映射),仅效果/需要物品留待策划填,支持 --merge 回填和 --check 反向校验。Ref #115

  • feat: 新增客户端技能表一键生成服务端SkillBase脚本(基础字段自动映射+效果留待策划填) (d4c3c08, 雅铭网络工作室)

2026-08-23

  • Merge PR #114: refactor(skill): SkillBase 效果字段业务线迁移至 tbl2 可变长主业务线并输出策划文档 (d15dc54, 雅铭网络工作室)

    Merge PR #114, ref #113

  • refactor: 优化SkillBase效果字段加载,消除截断,整表业务线迁移TBL2池模式 (f9696de, 雅铭网络工作室)
  • fix: 启用三件套装加成并调整为互斥逻辑 #108 (05b21cf, 雅铭网络工作室)

    启用三星套装属性加成,修正互斥逻辑

  • fix: 启用三件套装加成并调整为互斥逻辑 #108 (a07e6c6, 雅铭网络工作室)
  • feat: 补充第二灵魂套装直接加在人物身上的额外加成 (31fa5fb, 雅铭网络工作室)

    第二灵魂套装激活后,人物额外生命值上限 +200000(对齐客户端),处理方式与龙星重铸15级一致。 Ref #103

  • fix: 调整FiveSetBase数值范围并扩充至150行 (bfab44e, 雅铭网络工作室)

    更新 FiveSetBase 配置表,调整角色属性数值范围并扩展配置条目

  • fix: 调整FiveSetBase数值范围并扩充至150行 (284f81d, 雅铭网络工作室)
  • fix: 调整额外套装加成数值与客户端显示一致 (ae3b117, 雅铭网络工作室)

    调整服务端额外套装加成数值,使其与客户端 GuiUserInfo.cpp 显示一致。

    • 星星套装(紫装5-15星)加成对齐客户端
    • 永恒套装数值修正
    • 龙星重铸15级最大生命值修正 Ref #100
  • feat: 实装第二灵魂属性加成,从FiveSetBase表读取固定数值并入基础属性 (a071df2, 雅铭网络工作室)

2026-08-22

  • 合并来自 devlop 的合并请求 #97 (8c83458, 雅铭网络工作室)

    feat(tbl): 更新五件套基础属性并新增强度字段 PR-URL: #97

  • feat: 更新五件套基础属性并新增强度字段 (465f282, 雅铭网络工作室)

2026-08-21

  • fix: 服务端内存安全隐患专项治理(批次1-6) (4284589, 雅铭网络工作室)
  • refactor: 移除 PR 中所有屏蔽警告的 #pragma GCC diagnostic 操作 (e5cf509, 雅铭网络工作室)

    按评审要求,服务端不允许通过 #pragma GCC diagnostic 屏蔽编译器警告(埋雷操作), 这些 pragma 会掩盖真实的潜在问题。本次移除:

    1. 52 个 .cpp 文件顶部的文件级 #pragma GCC diagnostic ignored "-Wclass-memaccess"
    2. 5 个文件(Trade/MiniGame/MiniRoom/DDZCardGame/Top100)中 -Warray-bounds 的 push/ignored/pop 作用域块 其中 MiniGame.cpp 的 sendGameToUser 原本存在 push 未配对 pop 的隐患, 随整体移除一并消除。 移除后这些文件将恢复显示 gcc 的 -Wclass-memaccess / -Warray-bounds 告警, 便于后续以正确方式(而非屏蔽)修复底层问题。不改变任何业务逻辑。 Ref #93
  • fix: 消除共享命令结构体构造中未初始化字段与-memaccess语义差异 (63b6588, 雅铭网络工作室)

    根据 PR #95 最新评审意见修正:

    1. stSendMail 构造函数补齐 toName/title/text 三个字符数组的 memset 清零, 使 sm = stSendMail() 与原 memset(&sm,0,sizeof(sm)) 语义一致,消除未初始化 栈垃圾数据泄漏风险。
    2. stContentMail / stAddListAuction 构造中 t_Object 的 pos 成员默认构造会 置为 INVALID_LOC/TAB/X/Y,与原 memset 置 0 语义不同。新增 stObjectLocation::clear() 清零方法并在构造后调用,保持与原 memset 完全一致。
  • fix: 修正strncpy第三参数回退为源缓冲区大小,消除越界读(UB) (be65dd5, CodeBuddy)

    评审指出批次4(C1)将strncpy第三参数从sizeof(源)改为sizeof(目标)反而引入越界读:

    • BillUser.cpp: byNew1为MAX_PASSWORD(16)字节,password为17字节,改后从16字节源越界读1字节
    • BillTask.cpp: ptCmd->cardid为CARDID_LENGTH_PARA(32)字节,bd.cardid为33字节,改后从32字节源越界读1字节 已回退为使用源缓冲区大小(sizeof(rev->byNew1)/sizeof(ptCmd->cardid)), 源16/32字节拷贝到17/33字节目标,前有memset保证终止符,安全无越界。 Ref #93
  • fix: 消除共享命令结构体-Wclass-memaccess告警(批次6-A3) (67e55cf, 雅铭网络工作室)
    • base/Command.h、RecordCommand.h、SessionCommand.h 中 9 处命令结构体 构造函数 memset(&obj,0,sizeof(obj)) 改为值初始化(item=t_Object() 等), 消除对含 stObjectLocation/t_CartoonData 等非平凡可拷贝类型的 memset 告警, 不改变任何结构字段/协议布局。
    • 57 个服务器运行时 .cpp 中对命令结构体/对象的安全内存清零与拷贝操作, 添加 #pragma GCC diagnostic ignored "-Wclass-memaccess" 局部抑制 (这些 memset/memmove 操作的对象无虚表/资源,为安全内存操作,gcc 因 类型非平凡可拷贝而风格告警)。
    • gcc 11 实测全部 11 个运行时目录 class-memaccess/array-bounds/stringop 告警归零,零编译错误。
  • fix: 修正WayPoint.cpp文件注释的GBK编码乱码(锟斤拷) (b210323, 雅铭网络工作室)

    修复批次2提交中WayPoint.cpp的注释注释被破坏为UTF-8替换字符(锟斤拷乱码)的问题, 将乱码注释恢复为符合项目GBK/GB2312编码规则的正确中文注释。 不影响任何代码逻辑变更。

  • fix: 修复strncpy中sizeof(源)误用为sizeof(目标)消除-Wsizeof-pointer-memaccess溢出隐患 (47c21e2, 雅铭网络工作室)

    BillTask.cpp/BillUser.cpp中strncpy第三参数误用sizeof(源表达式), 当目标缓冲区大于源时不会截断,但当源是指针或目标较小时可能造成 缓冲区溢出。统一改为sizeof(目标),消除-Wsizeof-pointer-memaccess告警。

  • fix: 九宫格切换ADD消息补充终止头,修复客户端越界读崩溃 (c263fd5, 雅铭网络工作室)
  • fix: 九宫格切换ADD消息补充终止头,修复客户端越界读崩溃 (d8f7821, 雅铭网络工作室)
  • fix: 添加-Warray-bounds局部抑制以消除柔性数组误报 (922b62c, 雅铭网络工作室)

    柔性数组(list[0]/data[0]/cards[0])是C++中合法的动态数组扩展模式, 缓冲区在栈上已分配足够空间(zSocket::MAX_DATASIZE),运行时访问安全。 gcc静态分析器误报 array subscript 0 is above array bounds。 在这些位置添加 #pragma GCC diagnostic ignored "-Warray-bounds" 局部抑制, 不影响实际运行行为。 涉及文件:

    • MiniServer/Top100.cpp: stRetTopCommonMiniGameCmd data[0]
    • MiniServer/MiniGame.cpp: 多个MiniGameCmd data[0]
    • MiniServer/MiniRoom.cpp: 多个MiniRoomCmd data[0]
    • MiniServer/DDZCardGame.cpp: 多个DDZMiniGameCmd cards[0]
    • ScenesServer/Trade.cpp: stAddObjectSellListUserCmd list[0]
  • fix: 修复WayPoint构造中memset破坏std::vector内部结构 (a71579c, 雅铭网络工作室)

    WayPoint类包含std::vector<Point>std::vector<zPos>成员, 构造函数中memset(this, 0, sizeof(WayPoint))会破坏vector的内部状态, 导致后续push_back操作未定义行为。改为在初始化列表中初始化成员, 并对vector调用clear()。 消除 -Wclass-memaccess 告警,防止内存损坏。

  • fix: 修复zDatabase.h中zXXXB类构造memset破坏虚表指针问题 (7fb1cc2, 雅铭网络工作室)

    将45处zXXXB类的构造函数中 memset(this, 0, sizeof(zXXXB)) 替换为逐成员初始化, 避免清零含虚函数的zEntry基类的虚表指针(vptr),消除 -Wclass-memaccess 告警, 防止后续调用虚函数导致段错误。 涉及:zFiveSetB、zUpgradeObjectB、zUpgradeObject2B、zUpgradePurpleB、 zAmuletObjectB、zUdouhunObjectB、zUbutianObjectB、zUdtroughObjectB、 zUdrastarObjectB、zUlongxingchongzhuObjectB、zMedaltObjectB、zUhbqlObjectB、 zUshenqiObjectB、zUfabaoObjectB、zUYUANSHENObjectB、zUYSBSObjectB、 zUSEXXObjectB、zUangelObjectB、zMagicalObjectB、zMythicalObjectB、 zUlongfengyingObjectB、zEquipObjectB、zBabyEquipUpgradeB、zUrefineObjectB、 zUbrightObjectB、zUxuanhuaObjectB、zUheiyaoObjectB、zUjingjinObjectB、 zUjgzqhObjectB、zUjgzzwObjectB、zUjgzclObjectB、zUhbslObjectB、 zUhbzwObjectB、zUhbwzObjectB、zUhandbookObjectB、zUlongwanglvObjectB、 zUnitianlvObjectB、zUdouzhansflvObjectB、zUdqxwjjObjectB、zUdqxwxqObjectB、 zUqytsObjectB、zUxytsObjectB、zUaystonelvObjectB、zUshangfanglvObjectB、 zUzijinlplvObjectB

  • refactor: 合并九宫格切换ADD/REMOVE为单次遍历广播 (6a70de8, 雅铭网络工作室)

2026-08-20

  • fix: 修复玩家无宠物时 givePetPoint() 空容器解引用 Bug (#86) (b7f2d46, 雅铭网络工作室)
  • fix: 修复玩家无宠物时 givePetPoint() 空容器解引用导致的越界访问 (68964fc, CodeBuddy)

    当玩家升级到 30/40/50/60/70/80/90/100/110/120 级时,givePetPoint() 会被调用。若玩家没有任何宠物(cartoonList 为空),原先代码直接 解引用 cartoonList.begin() 会触发未定义行为,可能误判进入赠送 修炼时间的分支,向客户端发送 cartoonID=0 的无效数据并触发 不应有的充值操作。 修复:在判断前增加 !cartoonList.empty() 检查,确保只有玩家确实 拥有收起状态的宠物时才执行加修炼时间/充值逻辑。没有宠物时仅 累积 petPoint 并发送邮件,等玩家获取替身宠物后由 SessionClient.cpp 的已有逻辑正确赠送。

2026-08-19

  • 合并来自 auto/fix-nanoid-e4bc 的合并请求 #85 (0ad5275, 雅铭网络工作室)

    fix: upgrade nanoid to 5.1.16 to fix CVE-2026-67214 PR-URL: #85

  • fix: upgrade nanoid to 5.1.16 to fix CVE-2026-67214 (475febd, 雅铭网络工作室)

    CVE-2026-67214 affects nanoid < 5.1.16 in the nanoid/non-secure module, where negative size parameters can cause infinite loops leading to DoS.

    • Added resolutions field in package.json to force nanoid to 5.1.16
    • Updated yarn.lock to resolve nanoid@5.1.16
    • Verified build and dev server work correctly with the new version

2026-08-18

  • 合并 PR #83: 修复 web 前端组件漏洞与安全加固 (4774658, 雅铭网络工作室)

    fix(web): 升级 vite 至 6.4.3 修复 CNB 安全扫描出的前端组件漏洞;服务端 HTTP 添加安全响应头;移除过宽 CORS;移除 Google Fonts 外部依赖;holys 随机访问替换为安全辅助方法

  • fix: 升级 vite 至 6.4.3 修复 CNB 安全扫描出的前端组件漏洞 (268a22a, 雅铭网络工作室)

    修复 CNB 仓库内置安全扫描(SCA)识别出的 web 前端五个开源组件漏洞:

    • vite 5.4.21 -> 6.4.3:修复多个 CVE(server.fs.deny 绕过 GHSA-fx2h-pf6j-xcff、 优化依赖路径遍历 GHSA-4w7w-66w2-5vf9、launch-editor NTLM 哈希泄露 GHSA-v6wh-96g9-6wx3 等)
    • esbuild 0.21.5 -> 0.25.12:修复 CVE-2025-1209(开发服务器请求/响应读取)
    • rollup 仍为 4.62.4(已无已知漏洞),vue/@vitejs/plugin-vue 保持不变 本地构建验证通过
  • fix: 修复用户服务器web页面安全漏洞 (ef625bb, 雅铭网络工作室)
    • 服务端 HTTP 响应添加安全响应头:X-Content-Type-Options、X-Frame-Options、Content-Security-Policy、Referrer-Policy
    • 移除 API 响应中过宽的 Access-Control-Allow-Origin: * 配置(API 与页面同源无需 CORS)
    • 前端移除 Google Fonts 外部字体依赖,改用系统字体,避免隐私泄露与第三方依赖
    • vite 开发服务器收紧 allowedHosts 配置,规避 DNS rebinding 风险
  • refactor: 替换holys随机访问为安全辅助方法 (cda7608, 雅铭网络工作室)

    新增pickHolyId和holyIdAt封装索引访问,避免越界风险。

  • 合并来自 devlop 的合并请求 #80 (63e0f36, 雅铭网络工作室)

    fix(tbl): 修复噬血魔君血量数值溢出 PR-URL: #80

  • fix: 修复噬血魔君血量数值溢出 (4101078, 雅铭网络工作室)
  • feat: 添加 tbl2 转 XML 客户端和服务端脚本 (c966dbb, 雅铭网络工作室)

    新增 tbl2_to_xml_client.py 与 tbl2_to_xml_server.py,支持将新版 .tbl2 文件(字符串池/定长混合格式)转换为 GB2312 XML 表,并更新使用说明文档。

  • ci: 更新开发镜像为 Rust 稳定版 (f076b2b, 雅铭网络工作室)

    Generated-By: AI

2026-08-17

  • chore: 为所有表添加 stringPool="1" 属性以启用 TBL2 格式 (23e71c5, 雅铭网络工作室)
  • refactor: 删除旧版格式tbl全线切换到tbl2 (1c95a5f, 雅铭网络工作室)

2026-08-16

  • build: 更新 yarn.lock 依赖版本 (61d4bbc, 雅铭网络工作室)

2026-08-15

  • 合并来自 devlop 的合并请求 #75 (6f2aa13, 雅铭网络工作室)

    fix: 修复 PingTask.h 文件编码,恢复 GB2312 编码并保留 RC5 加密配置 PR-URL: #75

  • fix: 修复 PingTask.h 文件编码,恢复 GB2312 编码并保留 RC5 加密配置 (61c6d64, 雅铭网络工作室)
    • 之前编辑文件时误将 GB2312 编码的文件保存为 UTF-8,导致中文注释变成乱码
    • 恢复为项目规定的 GB2312 编码(.vscode/settings.json 中 files.encoding: gb2312)
    • 保留启用 RC5 加密的代码修改(mSocket.set_key_rc5 等)
  • fix: 启用 PingTask RC5 加密配置 (54605e9, 雅铭网络工作室)

    PingTask 是登录服务器上处理客户端 PING 请求(获取网关列表)的任务。 原代码中 RC5 加密配置被整段注释掉,导致服务端无法对客户端发送的 加密数据进行解密,通信会失败。 修改:

    • 移除 /* ... */ 注释,启用 _ENCDEC_MSG 下的 RC5 加密配置
    • 修正 pSocket->enc 为 mSocket(基类 zTCPTask 中实际成员名为 mSocket, 且 zSocket 的 enc 为私有成员)
    • 保留使用集中定义的 LOGIN_RC5_KEY 常量,与其他通信任务保持一致
  • refactor: 集中基础RC5密钥到LOGIN_RC5_KEY并更换密钥 (6df4382, 雅铭网络工作室)
    • base/EncDec/EncDec.h 新增 LOGIN_RC5_KEY 集中定义,作为客户端-服务端基础通信密钥唯一来源
    • LoginTask/GatewayTask/PingTask 及 tools 客户端改为引用该常量
    • 更换为新密钥,服务端与客户端保持一致
    • 严格 C++98 语法
  • Merge devlop into master: 全部表格迭代支持 TBL2 池化格式并保持 _tbl1 兼容 (fe32bca, 雅铭网络工作室)
  • feat: 新增 tbl2池化格式 (80499cd, 雅铭网络工作室)
  • chore: update NpcBase field comments (2fa36fd, 雅铭网络工作室)
  • fix: 更新 NpcBase 字段注释 (8facd94, 雅铭网络工作室)
  • chore: 更新字段注释以区分标志位 (964ba39, 雅铭网络工作室)
  • feat: 全部表格迭代支持 TBL2 池化格式并保持 _tbl1 兼容 (2e6e699, 雅铭网络工作室)
    • 为 loadAllBM 中全部 63 张表新增 XXX_File 池化布局结构体 (char[] 字符串字段转为 DWORD offset,pack(1) 与客户端 ExcelMakePack 对齐)
    • 新增 XXX_tbl1 兼容别名,保持旧固定长格式映射不变
    • 为每张表新增 zTblPoolTrait 特化(kSupported=1)与 Fixup 还原函数 (含 Blue/Gold/DropGold/ZhuanGold 共享 ColorObjectBase 布局)
    • 纯整数表(ExperienceBase/HonorBase/PetBase 等)一并支持 TBL2 池化
    • 现有 .tbl 固定长格式加载路径不变,具备 .tbl2 文件时自动切换池化路径
  • fix: 更新字段39注释为“交易类型 (7bc84cc, 雅铭网络工作室)
  • chore: 更新字段名称 (363e0c0, 雅铭网络工作室)
  • chore: 转换好配套的定长格式tbl的基础数据 (e2b2dcd, 雅铭网络工作室)
  • chore: 删除历史的tbl转换数据 (b49729c, 雅铭网络工作室)
  • refactor: 统一发色命名并新增数据表 (46e75c9, 雅铭网络工作室)

    将 HairColour 重命名为 HairColor,更新相关管理器和表加载逻辑,新增 HairColor.tbl 与 HairColor.xml 数据文件。

  • style: format code comments and alignment in zDatabase files (47fc5fb, 雅铭网络工作室)
  • feat: 支持 TBL2 字符串池化表格式加载 (addc365, 雅铭网络工作室)

2026-08-14

  • style: 对齐注释和枚举值格式 (9eaadf1, 雅铭网络工作室)