BadWolf-LootFilter.txt (S14V1.68) 深度复审与改进建议报告(附完整 PDF 报告) #2

Closed
opened 2026-10-28 08:25:50 +00:00 by troytt · 1 comment

📎 完整排版 PDF 审计报告附件


📌 核心结论与审计基准

  • 审计基准:BadWolf-LootFilter.txt (S14V1.68, commit 23df8e97a8),共 4,410 行、541,827 字节(解析出 437 条 Alias、70 条 Formula、2,561 条 ItemDisplay 规则)。
  • 对比基线:上一轮审计基线 S14V1.51(commit 6de368dbb2,4,405 行)。本轮复审完整核验了 S14V1.51 ➔ S14V1.68 共 762 行差异,并结合 ZYLPD2 S14 客户端 BH.dll 机器码反汇编(0x1016f8c0..0x10180700)与 pd2data.mpq 数据表完成全量静态与语义复验。
  • 核心结论:S14V1.68 成功修复了 STAT217/2048 定点数缩放、原生带孔暗金腐化评分与多处文本宏笔误;但 V1.68 新引入了 1 处双重扣分回归缺陷(L2611 八爪),在已触碰行上残留 3 处半成品修改(L2421、L2424、L2501),且 build/ 分片停留在 V1.45、L3241 5★ 黄戒整条规则 AST 建树失败永久瘫痪、第 8 章底材星级全面倒置(34 处) 等 66 项阻断/高危问题 仍待合入修复。

一、版本演进复核:S14V1.51 ➔ S14V1.68 增量评估

1.1 已验证生效的正向修复(S14V1.68 改进成果)

  1. 随等级增加防御(STAT217)定点数除数修正:头环与头盔稀有度评分公式 Formula[RCI_A]、Formula[RCI_B]、Formula[RHE_A]、Formula[RHE_B] 中原先放大 256 倍的 STAT217/8 已全部修正为精确的 STAT217/2048(对应 ItemStatCost.txt 中 op_param = 3 即 2³ × 256 = 2048)。
  2. 原生带孔暗金腐化评分体系拆分与重标定:新增 Formula[C_HELN]、Formula[C_SHIELN]、Formula[C_DMWN]、Formula[C_AC] 4 条原生带孔装备专用腐化公式,并重新标定了骷髅王冠 (urn)、巨龙之鳞 (drc)、猎头人的荣耀 (ush)、骨焰 (ne6/neb)、盗墓者 (7pa)、死神丧钟/无尽冰雹 (8s8/6s7)、天堂之光 (7sc)、阿斯特隆之铁的保护区 (7ws) 等暗金装备的基础分与强化分权重。
  3. 腐化词缀 ID、套装公式与动作宏文本清理:
    • 修复了 Formula[C_AB] 重复计入 STAT360==15、天堂的信徒套装毒抗 (PRES-10)/80、阿凯尼的荣耀 STAT360==56、长串之耳/维尔登戈 STAT360==52、暴风之结 STAT128、咬尾蛇 STAT360==8 及多件套装 (PLUSDEF-min)/span 漏减下限问题;
    • 修复了 %%CL%%、未闭合 %Steel、神蛇之羽CL%、L3118 %%LIGHT_GRAY% 文本错误,并在地图底座规则 L1945..1948 ���补入了 KNOWNMAPS。

1.2 S14V1.68 新引入回归缺陷与半成品修改(4 项重点预警)

缺陷性质 行号与目标装备 S14V1.68 实际代码片段 根因与游戏内真实影响
新引入回归 L2611 巴特克的猛击(八爪 9tw/7tw) ...-IF(STAT360==17,0.625,0)...-IF(STAT360==17,1.2,0) V1.68 在 $f(...) 末尾追加 -IF(STAT360==17,1.2,0) 时漏删原有的 -IF(STAT360==17,0.625,0),导致命中腐化 STAT360==17 时被双重扣除 -1.825 分(预期仅扣 -1.2 分)。
半成品修改 L2421 守护天使(天使甲) IF(STAT350==50,ALLSK-1,(ALLSK-1)*2)...-IF(STAT360==50,2,0) V1.68 在行尾补了 -IF(STAT360==50,2,0),却未修行首的 STAT350==50 笔误(STAT350 为魔法穿透,STAT360 才是腐化 ID),导致 +1 全技能 腐化时多加 1 倍技能分。
半成品修改 L2424 钢铁甲壳 (uul) IF(STAT350==50,ALLSK-1,(ALLSK-1)*2)...-IF(STAT360==50,2,0) 与 L2421 完全一致:行尾已加 -IF(STAT360==50,2,0),行首仍残留 STAT350==50 笔误,导致 +1 全技能 腐化补偿失效。
半成品修改 L2501 巨大无比(The Minotaur) ItemDisplay[ID UNI UNI_NOTE (gix OR 9gi 7gi) OR STAT91>19 STR>19 !EQUIPPED !MERC]: V1.68 重调了本行 $f(...) 分数权重,但未修前置条件:(1) 9gi 7gi 漏写 OR 变成永假 AND,升级版 9gi/7gi 在左支永远不匹配;(2) 多写了 OR STAT91>19,导致全游戏任意稀有度装备只要带 -20% 需求 且 力量>=20 都会被强行注入“巨大无比”暗金评分!

二、量化缺陷总览(S14V1.68 现存问题全景)

优先级 缺陷类别 数量 核心影响面摘要
P0 阻断 build/ 模块分片严重滞后失步 1 处(波及全文件) build/00..39-*.txt 拼接结果仍停留在 V1.45(535,986 字节 vs 主文件 541,827 字节,首差在 L107),一旦执行构建脚本将覆盖回退 V1.46~V1.68 全部更新。
P0 阻断 BuildConditionAST 建树失败致整条规则永久死亡 1 条核心规则(含 7 组子规则) L647 (RIN_CAST_5_1) PREFIX=412)SUFFIX=174 吞掉 ) 导致 L3241 外层 ( 未闭合,0x101718f0 判定 ast_stack.size() == 2 != 1 并将 root_idx 置为 0xffffffff,整条 L3241 5★ 黄戒规则对所有物品恒返回 false。
P0 阻断 非法条件比较符与词法粘连吞噬 2 处 L3293 亮金圣骑盾 PREFIX=~421-422 被静默丢弃(无技能门槛误报);L443 德鲁伊木棒 SK224=3OR 吞掉 OR 变隐式 AND。
P0 高危 BH.dll AND/OR 等优先级逻辑失真与漏写 OR 8 条规则 / 别名 L2501 任意黄装误标暗金分、L2051 背包/仓库内洗点精华在 FILTLVL>=3 被空名隐藏、L734..740 6 条 4★/5★ 黄鞋绕过抗性门槛、L668、L717、L4305 两处底材漏写 OR。
P1 严重 第 8 章符文之语底材星级全面倒置 + TOWN 误写 13 个小节(34 处倒置)+ 2 处笔误 L4016..4143 全部按 0★ ➔ 4★ 升序排列且无 %CONTINUE%,4★ 极品毕业底材被 0★~2★ 规则提前截胡降级;L4019 误将 GROUND 写为 TOWN;L4142 3★ 标枪误标 //2星。
P2 中危 评分公式回归/笔误、克隆别名���面板开关重名 13 处 L2611 八爪新回归双重扣分、L2421/L2424 STAT350、L2525 AND(...,0.5,0) 恒为 0、C_WAA/C_SIN/RBE_A 重复腐化 ID、3 对完全克隆别名、3 组 BH 面板开关重名。
P3 低危 非 %CONTINUE% 悬浮窗 {...} 漏写 %NAME% 36 条规则 打孔器 (lbox/lpp)、红门钥匙/器官、拉斯玛材料、全章节任务道具与可堆叠珠宝悬停时原版属性面板被覆盖隐藏。
P4 优化 帧率热路径合并与未知新道具兜底加固 架构改进 合并线性前缀拆分与重复匹配条件,将 L4332 基础屏蔽上移或明确排除未知新道具。

三、P0 级阻断与引擎解析缺陷深度剖析(BH.dll 机器码实证)

3.1 构建源失步:build/00..39-*.txt 停留在 V1.45

  • 实测证据:将仓库内 build/00-header.txt 至 build/39-footer.txt 按序拼接后长度为 535,986 字节(版本头为 V1.45 更新于 26/10/18),而根目录主文件 BadWolf-LootFilter.txt 为 541,827 字节(V1.68 更新于 26/10/28)。
  • 风险:作者近 20 个小版本直接在编译产物 BadWolf-LootFilter.txt 上热修,未反向回写 build/ 分片。任何协作者执行 build/build_filter.bat 都会瞬间抹除 V1.46~V1.68 的全部成果。

3.2 BuildConditionAST (0x101718f0) 栈校验失败导致整条 5★ 黄戒规则永久死亡

  1. L647 (Alias[RIN_CAST_5_1]) ➔ 瘫痪 L3241:
    // 当前错误代码 (L647):PREFIX=412 与 )SUFFIX=174 粘连
    Alias[RIN_CAST_5_1]:(PREFIX~312-313 (PREFIX~925-926 OR PREFIX~928-929) (PREFIX=334 OR PREFIX=953 OR PREFIX=353 OR PREFIX=372 OR PREFIX=392 OR PREFIX=412)SUFFIX=174 (SUFFIX=182 OR SUFFIX=368 OR SUFFIX~381-382 OR SUFFIX~248-249 OR SUFFIX~330-331))
    
    • BH.dll 机器码级完整调用链证明:
      1. Condition::Parse (0x101730c0) 按空白切分得到词元 "PREFIX=412)SUFFIX=174",其首尾字符均非括号,按首个 = 拆出右值 "412)SUFFIX=174" 交由 0x101806f0 读取整数 412,后缀 ")SUFFIX=174" 连同关键的右括号 ) 与 10% FCR 词缀 SUFFIX=174 一并被静默吞噬;
      2. 展开进 L3241 后,包裹 (RIN_CAST_5_1 OR ... OR RIN_DMG_5_3) 的外层左括号 ( 因少了一个 ) 而处于未闭合状态;
      3. ConvertToRPN (0x10172e90) 在规则末尾排空 op_stack 时,指令 0x10172fb5 一旦看见栈顶为未闭合的 '(' 便立即 break 退出循环,导致压在 '(' 下方、用于连接前置条件 SHOW_GOODRARE !ID FILTLVL<7 rin RARE 与括号块的顶层隐式 AND 算子未能弹出到 RPN 队列;
      4. 紧接着 Rule::Init 调用 BuildConditionAST (0x101718f0) 将 RPN 组装为语法树:由于缺少顶层 AND 合并左右两棵子树,循环结束时 0x10171b05 检查 ast_stack.size() == 1 失败(实际栈深为 2)并返回 false;
      5. Rule::Init (0x10171665) 遂将 this->root_idx 写死为 0xffffffff。此后每帧掉落判定进入 Rule::Evaluate (0x10171c00) 时,首条检查 cmp dword ptr [ecx+0x54], 0xffffffff (0x10171c0c) 直接返回 0 (false)!
    • 真实后果:不仅 RIN_CAST_5_1 坏掉,与其同处 L3241 的 RIN_CAST_5_2..5_4 及 RIN_DMG_5_1..5_3 全部 7 组 5★ 毕业亮金戒指规则在游戏内 100% 永久失效,掉落时没有任何 5★ 红框、地图图标与 4715 音效!
  2. L3293(4★ 亮金圣骑士专用盾)非法运算符 =~:
    • Condition::Parse 仅支持单字符 =、<、>、~。PREFIX=~421-422 按 = 拆出右值 "~421-422",转换整数失败后直接跳往 0x10178e91 -> 0x10178f0a 不压入任何条件节点,导致 +2 圣骑士技能 核心条件彻底蒸发,任意无技能的普通亮金圣骑盾只要带高格挡与抗性就会误报 4★。应改为 PREFIX~421-422。
  3. L443 (Alias[CLUBBASE3_1] ➔ L4063 3★ 德鲁伊木棒) 3OR 粘连:
    • (SK221=3 OR SK226=3 OR SK236=3 OR SK224=3OR SK227=3 OR SK237=3) 中 SK224=3OR 吞掉 OR,导致与右侧 SK227=3 之间被插入隐式 AND,扭曲了前 4 个召唤技能的布尔树。应改为 SK224=3 OR。

图 1:BH.dll 词法粘连 ➔ ConvertToRPN 中断 ➔ BuildConditionAST 失败致 L3241 永久死亡链路

3.3 BH.dll AND / OR 等优先级(从左到右求值)与漏写 OR 缺陷(8 处)

⚠️ 引擎求值高危预警

在 ConvertToRPN (0x10172ea0) 中,隐式空格 AND 与 OR 具有完全相同的运算符优先级,在同一括号层级内严格从左向右依次折叠:A OR B C 实际求值为 (A OR B) AND C,绝非 A OR (B AND C)!

行号 涉及别名 / 规则 问题表达式片段 真实求值偏差与后果 修复方案
L2501 暗金斧“巨大无比” ID UNI UNI_NOTE (gix OR 9gi 7gi) OR STAT91>19 STR>19 9gi 7gi 漏 OR 恒假;右侧 OR STAT91>19 逃逸出 UNI,全游戏任意带 -20% 需求 且 STR>19 的黄/蓝/绿/符文之语装备均被误打上暗金评分! ID UNI UNI_NOTE (gix OR 9gi OR 7gi) STAT91>19 STR>19
L2051 四色洗点精华屏蔽 (tes OR ceh OR bet OR fed GROUND) FILTLVL>2 GROUND 仅约束了 fed!在 FILTLVL>=3 下,玩家背包/仓库/赫拉迪克方块内的前三种精华 (tes/ceh/bet) 命中空动作规则,物品名称变空白! (tes OR ceh OR bet OR fed) GROUND FILTLVL>2
L668 Alias[RIN_UBER_4_3] (L3242) (PREFIX=334 OR PREFIX=953 (PREFIX=353...)) 少包一层括号,虽首项巧合等价,但依赖左结合脆弱副作用。 ((PREFIX=334 OR PREFIX=953) (PREFIX=353...))
L717 Alias[GLOVE_SKILL_4_1] (L3252) (... OR PREFIX=392 PREFIX=412 OR ...) PREFIX=392 与 PREFIX=412 之间漏写 OR,导致前 3 种抗性前缀必须同时带毒抗 412 才生效! 补全 PREFIX=392 OR PREFIX=412
L734..740 BOOT_5_1..5_3 & BOOT_4_1..4_3 (L3254..3255) (SUFFIX~396-397 OR SUFFIX=1040 (SUFFIX=989...) ...) 全部 6 条高星黄鞋规则漏包 (SUFFIX~396-397 OR SUFFIX=1040),导致后缀 1040 分支无需满足中间的敏捷/MF/FHR 条件即可跨级误报 4★/5★! 将 (SUFFIX~396-397 OR SUFFIX=1040) 独立括起
L4305 开荒眼光/精神长柄底材 (scy OR pax hal OR wsc ... OR 7pa OR 7h7 7wc) 两处漏写 OR:pax hal 与末尾 7h7 7wc 均被解析为不可能成立的同物品双代码 AND,导致长戟 (hal)、巨神之斧 (7h7) 与鲛尾巨斧 (7wc) 丢失底材保护! 改为 pax OR hal 与 7h7 OR 7wc

四、P1 级架构缺陷:第 8 章符文之语底材星级全面倒置与 L4019 TOWN 误写

在 L4015..4143(第 8 章 8.1 头盔 至 8.4.11 投掷武器 共 13 个子章节)中,所有底材规则均未携带 %CONTINUE%(首次命中即终止后续匹配),但全部按 0星 ➔ 1星 ➔ 2星 ➔ 3星 ➔ 4星 升序排列(共触发 34 处星级顺序倒置):

图 2:第 8 章底材星级全面倒置导致毕业底材被提前截胡降级

  • 典型截胡案例:
    1. 弓弩 (8.4.1, L4047..4055):BOWBASE2_2 (L4051, 2★) 仅检查 (amc OR amb) TABSK0=3 SOCK~4-5,未限制 ED<15;而排在其后的 BOWBASE4_1 (L4055, 4★) 要求 ED=20 amc TABSK0=3 SOCK=4。在 FILTLVL 1~3 下,满变 20%ED 4 孔大院长弓直接被 L4051 截胡降级为普通 2★!
    2. 盔甲 (8.2, L4026..4032)、盾牌 (8.3, L4036..4042)、法杖 (8.4.9, L4109..4117)、长柄 (8.4.10, L4121..4127)、刺客爪 (L4131..4137):低星宽泛规则全部位于高星超强 (ED=15 / +3 核心技能) 规则之前。
  • 两处伴生笔误:
    • L4019 误将 GROUND 写为 TOWN:第 8 章其余所有规则均为 GROUND,唯独 L4019 (8.1 头盔 //1星) 写成了 NMAG !RW !INF TOWN,导致 1★ 德鲁伊/野蛮人头盔底材在野外刷图掉落时完全不触发高亮,反而仅在城镇地面生效。
    • L4142 星级注释与样式复制错误:L4143 匹配的是 3★ THROWINGBASE3_1 (FILTLVL~1-4),但上方注释与动作样式均复制了 L4140..4141 的 //2星 与 %TIER-2%◇(应升级为 //3星 与 %BORDER-62%%SOUNDID-4721%%TIER-3%◆)。
  • 根治准则:将 8.1 ~ 8.4.11 每个装备子类内部的星级块严格翻转为 4星 ➔ 3星 ➔ 2星 ➔ 1星 ➔ 0星 递减顺序。

五、P2 ~ P4 级公式精度、克隆别名、GUI 重名、悬浮窗与性能建议

5.1 评分公式残余缺陷(7 处)

  1. L2611 八爪 V1.68 新回归:删除旧残留的 -IF(STAT360==17,0.625,0),仅保留 -IF(STAT360==17,1.2,0)。
  2. L2421 守护天使 & L2424 钢铁甲壳:将 IF(STAT350==50,...) 修正为 IF(STAT360==50,...)。
  3. L2525 火焰号叫 (7gs):AND(MULTI151,102==27,0.5,0) 末位参数为常量 0,逻辑与恒返回 0(27 级地狱火光环少算 0.5 分),应改为 IF(MULTI151,102==27,0.5,0)。
  4. 命名腐化/黄装公式重复计入 STAT360 ID(3 条公式):
    • L877 Formula[C_WAA]:STAT360==28 同时出现在 /2 组与 *9/8 组(累加至 1.625 分);STAT360==12 同时出现在 /2 组与 *2.25 组(累加至 2.75 分)。
    • L887 Formula[C_SIN]:STAT360==6 同时出现在 /2 组与 *9/8 组;同一 OR(...) 内还重复写了两次 STAT360==5 与 STAT360==77。
    • L943 Formula[RBE_A](亮金腰带):STAT360==68 在 -0.27 与 -0.44 两组重复扣分(共 -0.71);STAT360==51 在 -0.89 与 -1.33 两组重复扣分(共 -2.22)。

5.2 完全克隆别名(3 对)与 BH 面板开关重名(3 组)

  • 3 对完全克隆别名(高星与低星条件一字不差,导致低星别名永远死代码):
    1. L490 SCEPTERBASE3_2 与 L498 SCEPTERBASE4_4;
    2. L767 SHIELD_SKILL_5_2 与 L770 SHIELD_SKILL_4_2;
    3. L799 JEW_CAST_3_1 与 L800 JEW_CAST_2_1。
  • 3 组 BH 设置面板开关重名(玩家在游戏内无法区分两个同名复选框):
    1. L202 SHOW_MAGAMA_3(有形)与 L204 SHOW_MAGAMA_5(无形)均叫 @显示蓝色亚马逊长矛@;
    2. L203 SHOW_MAGAMA_4(有形)与 L205 SHOW_MAGAMA_6(无形)均叫 @显示蓝色亚马逊标枪@;
    3. L193 SHOW_RAREWEAPON_1(亮金)与 L216 SHOW_MAGWEAPON_1(蓝色)均叫 @显示无形巨神系列@。

5.3 36 条非 %CONTINUE% 规则悬浮窗漏写 %NAME% 与架构优化路线图

  • 悬浮窗原版描述覆盖(36 条):L1785..1786(lbox/lpp 打孔器)、L1992..1998(红门钥匙与器官)、L2007(英雄旗帜)、L2021..2022(拉斯玛门票材料)、L3007..3034(全部章节任务道具)、L3076(jewf 可堆叠珠宝)、L3092(地狱火炬)在 {...} 内未写 %NAME% 且无 %CONTINUE%,导致原版堆叠数量与使用提示被覆盖,建议统一补齐 %CL%%NAME%。
  • 分阶段落地建议:
    1. 阶段一(工程同步与 P0 热修):基于最新 S14V1.68 反向切分同步 build/00..39-*.txt,修复 L647(激活 L3241 5★ 黄戒)、L2501、L2051、L3293、L443、L717、L734..740、L4305 与 L2611 新回归。
    2. 阶段二(底材星级重排与公式校准):翻转第 8 章 8.1 ~ 8.4.11 星级顺序为 4★ ➔ 0★,修正 L4019 GROUND、L4142 //3星、L2421/L2424/L2525 及 C_WAA/C_SIN/RBE_A 重复腐化 ID。
    3. 阶段三(自动化静态门禁):引入 lint_filter.py 作为每次提交前的强制校验脚本,杜绝主文件与 build/ 再次失步或括号粘连导致整条规则静默死亡。
### 📎 完整排版 PDF 审计报告附件 - **[📄 点击下载《BadWolf-LootFilter_S14V1.68_深度审计与改进报告.pdf》(6 页 A4 矢量图表排版完整版)](https://git.projectdiablo2.cn/attachments/92b6cc74-8dfe-478d-943a-5689be48c1fe)** - **与 PR #1 的衔接说明**:此前基于 `S14V1.51` 提交了综合修复与静态检查器 [PR #1](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/pulls/1);看到主分支已快速迭代至 `S14V1.68`(修复了 `STAT217/2048` 定点数缩放、原生带孔暗金腐化评分拆分与多处文本宏笔误),特针对最新 `S14V1.68`(commit `23df8e97a8`)重新完成了全量 `BH.dll` 机器码级复审。如需将 PR #1 变基(rebase)合并至最新 `S14V1.68`,随时可以协助更新。 --- > **📌 核心结论与审计基准** > > - **审计基准**:[BadWolf-LootFilter.txt (`S14V1.68`, commit `23df8e97a8`)](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt),共 `4,410` 行、`541,827` 字节(解析出 `437` 条 `Alias`、`70` 条 `Formula`、`2,561` 条 `ItemDisplay` 规则)。 > - **对比基线**:上一轮审计基线 `S14V1.51`(commit `6de368dbb2`,`4,405` 行)。本轮复审完整核验了 `S14V1.51 ➔ S14V1.68` 共 `762` 行差异,并结合 ZYLPD2 S14 客户端 `BH.dll` 机器码反汇编(`0x1016f8c0..0x10180700`)与 `pd2data.mpq` 数据表完成全量静态与语义复验。 > - **核心结论**:`S14V1.68` 成功修复了 `STAT217/2048` 定点数缩放、原生带孔暗金腐化评分与多处文本宏笔误;但 **`V1.68` 新引入了 1 处双重扣分回归缺陷(`L2611` 八爪)**,在已触碰行上残留 **3 处半成品修改(`L2421`、`L2424`、`L2501`)**,且 **`build/` 分片停留在 `V1.45`、`L3241` 5★ 黄戒整条规则 AST 建树失败永久瘫痪、第 8 章底材星级全面倒置(34 处)** 等 **66 项阻断/高危问题** 仍待合入修复。 --- ## 一、版本演进复核:`S14V1.51` ➔ `S14V1.68` 增量评估 ### 1.1 已验证生效的正向修复(`S14V1.68` 改进成果) 1. **随等级增加防御(`STAT217`)定点数除数修正**:头环与头盔稀有度评分公式 `Formula[RCI_A]`、`Formula[RCI_B]`、`Formula[RHE_A]`、`Formula[RHE_B]` 中原先放大 256 倍的 `STAT217/8` 已全部修正为精确的 **`STAT217/2048`**(对应 `ItemStatCost.txt` 中 `op_param = 3` 即 `2³ × 256 = 2048`)。 2. **原生带孔暗金腐化评分体系拆分与重标定**:新增 `Formula[C_HELN]`、`Formula[C_SHIELN]`、`Formula[C_DMWN]`、`Formula[C_AC]` 4 条原生带孔装备专用腐化公式,并重新标定了骷髅王冠 (`urn`)、巨龙之鳞 (`drc`)、猎头人的荣耀 (`ush`)、骨焰 (`ne6`/`neb`)、盗墓者 (`7pa`)、死神丧钟/无尽冰雹 (`8s8`/`6s7`)、天堂之光 (`7sc`)、阿斯特隆之铁的保护区 (`7ws`) 等暗金装备的基础分与强化分权重。 3. **腐化词缀 ID、套装公式与动作宏文本清理**: - 修复了 `Formula[C_AB]` 重复计入 `STAT360==15`、天堂的信徒套装毒抗 `(PRES-10)/80`、阿凯尼的荣耀 `STAT360==56`、长串之耳/维尔登戈 `STAT360==52`、暴风之结 `STAT128`、咬尾蛇 `STAT360==8` 及多件套装 `(PLUSDEF-min)/span` 漏减下限问题; - 修复了 `%%CL%%`、未闭合 `%Steel`、`神蛇之羽CL%`、`L3118 %%LIGHT_GRAY%` 文本错误,并在地图底座规则 `L1945..1948` ���补入了 `KNOWNMAPS`。 ### 1.2 `S14V1.68` 新引入回归缺陷与半成品修改(4 项重点预警) | 缺陷性质 | 行号与目标装备 | `S14V1.68` 实际代码片段 | 根因与游戏内真实影响 | | :--- | :--- | :--- | :--- | | **新引入回归** | [L2611](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2611) 巴特克的猛击(八爪 `9tw`/`7tw`) | `...-IF(STAT360==17,0.625,0)...-IF(STAT360==17,1.2,0)` | `V1.68` 在 `$f(...)` 末尾追加 `-IF(STAT360==17,1.2,0)` 时**漏删原有的 `-IF(STAT360==17,0.625,0)`**,导致命中腐化 `STAT360==17` 时被双重扣除 **`-1.825` 分**(预期仅扣 `-1.2` 分)。 | | **半成品修改** | [L2421](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2421) 守护天使(天使甲) | `IF(STAT350==50,ALLSK-1,(ALLSK-1)*2)...-IF(STAT360==50,2,0)` | `V1.68` 在行尾补了 `-IF(STAT360==50,2,0)`,却未修行首的 **`STAT350==50`** 笔误(`STAT350` 为魔法穿透,`STAT360` 才是腐化 ID),导致 `+1 全技能` 腐化时多加 1 倍技能分。 | | **半成品修改** | [L2424](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2424) 钢铁甲壳 (`uul`) | `IF(STAT350==50,ALLSK-1,(ALLSK-1)*2)...-IF(STAT360==50,2,0)` | 与 `L2421` 完全一致:行尾已加 `-IF(STAT360==50,2,0)`,行首仍残留 **`STAT350==50`** 笔误,导致 `+1 全技能` 腐化补偿失效。 | | **半成品修改** | [L2501](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2501) 巨大无比(The Minotaur) | `ItemDisplay[ID UNI UNI_NOTE (gix OR 9gi 7gi) OR STAT91>19 STR>19 !EQUIPPED !MERC]:` | `V1.68` 重调了本行 `$f(...)` 分数权重,但未修前置条件:(1) `9gi 7gi` 漏写 `OR` 变成永假 `AND`,升级版 `9gi`/`7gi` 在左支永远不匹配;(2) 多写了 `OR STAT91>19`,导致**全游戏任意稀有度装备**只要带 `-20% 需求` 且 `力量>=20` 都会被强行注入“巨大无比”暗金评分! | --- ## 二、量化缺陷总览(`S14V1.68` 现存问题全景) | 优先级 | 缺陷类别 | 数量 | 核心影响面摘要 | | :--- | :--- | :--- | :--- | | **P0 阻断** | `build/` 模块分片严重滞后失步 | 1 处(波及全文件) | `build/00..39-*.txt` 拼接结果仍停留在 `V1.45`(`535,986` 字节 vs 主文件 `541,827` 字节,首差在 `L107`),一旦执行构建脚本将覆盖回退 `V1.46~V1.68` 全部更新。 | | **P0 阻断** | `BuildConditionAST` 建树失败致整条规则永久死亡 | 1 条核心规则(含 7 组子规则) | `L647` (`RIN_CAST_5_1`) `PREFIX=412)SUFFIX=174` 吞掉 `)` 导致 `L3241` 外层 `(` 未闭合,`0x101718f0` 判定 `ast_stack.size() == 2 != 1` 并将 `root_idx` 置为 `0xffffffff`,**整条 `L3241` 5★ 黄戒规则对所有物品恒返回 `false`**。 | | **P0 阻断** | 非法条件比较符与词法粘连吞噬 | 2 处 | `L3293` 亮金圣骑盾 `PREFIX=~421-422` 被静默丢弃(无技能门槛误报);`L443` 德鲁伊木棒 `SK224=3OR` 吞掉 `OR` 变隐式 `AND`。 | | **P0 高危** | `BH.dll` `AND`/`OR` 等优先级逻辑失真与漏写 `OR` | 8 条规则 / 别名 | `L2501` 任意黄装误标暗金分、`L2051` 背包/仓库内洗点精华在 `FILTLVL>=3` 被空名隐藏、`L734..740` 6 条 4★/5★ 黄鞋绕过抗性门槛、`L668`、`L717`、`L4305` 两处底材漏写 `OR`。 | | **P1 严重** | 第 8 章符文之语底材星级全面倒置 + `TOWN` 误写 | 13 个小节(34 处倒置)+ 2 处笔误 | `L4016..4143` 全部按 `0★ ➔ 4★` 升序排列且无 `%CONTINUE%`,4★ 极品毕业底材被 0★~2★ 规则提前截胡降级;`L4019` 误将 `GROUND` 写为 `TOWN`;`L4142` 3★ 标枪误标 `//2星`。 | | **P2 中危** | 评分公式回归/笔误、克隆别名���面板开关重名 | 13 处 | `L2611` 八爪新回归双重扣分、`L2421`/`L2424` `STAT350`、`L2525` `AND(...,0.5,0)` 恒为 0、`C_WAA`/`C_SIN`/`RBE_A` 重复腐化 ID、3 对完全克隆别名、3 组 BH 面板开关重名。 | | **P3 低危** | 非 `%CONTINUE%` 悬浮窗 `{...}` 漏写 `%NAME%` | 36 条规则 | 打孔器 (`lbox`/`lpp`)、红门钥匙/器官、拉斯玛材料、全章节任务道具与可堆叠珠宝悬停时原版属性面板被覆盖隐藏。 | | **P4 优化** | 帧率热路径合并与未知新道具兜底加固 | 架构改进 | 合并线性前缀拆分与重复匹配条件,将 `L4332` 基础屏蔽上移或明确排除未知新道具。 | --- ## 三、P0 级阻断与引擎解析缺陷深度剖析(`BH.dll` 机器码实证) ### 3.1 构建源失步:`build/00..39-*.txt` 停留在 `V1.45` - **实测证据**:将仓库内 `build/00-header.txt` 至 `build/39-footer.txt` 按序拼接后长度为 `535,986` 字节(版本头为 `V1.45 更新于 26/10/18`),而根目录主文件 [BadWolf-LootFilter.txt](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L107) 为 `541,827` 字节(`V1.68 更新于 26/10/28`)。 - **风险**:作者近 20 个小版本直接在编译产物 `BadWolf-LootFilter.txt` 上热修,未反向回写 `build/` 分片。任何协作者执行 `build/build_filter.bat` 都会瞬间抹除 `V1.46~V1.68` 的全部成果。 ### 3.2 `BuildConditionAST` (`0x101718f0`) 栈校验失败导致整条 5★ 黄戒规则永久死亡 1. **[L647](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L647) (`Alias[RIN_CAST_5_1]`) ➔ 瘫痪 [L3241](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L3241)**: ```text // 当前错误代码 (L647):PREFIX=412 与 )SUFFIX=174 粘连 Alias[RIN_CAST_5_1]:(PREFIX~312-313 (PREFIX~925-926 OR PREFIX~928-929) (PREFIX=334 OR PREFIX=953 OR PREFIX=353 OR PREFIX=372 OR PREFIX=392 OR PREFIX=412)SUFFIX=174 (SUFFIX=182 OR SUFFIX=368 OR SUFFIX~381-382 OR SUFFIX~248-249 OR SUFFIX~330-331)) ``` - **`BH.dll` 机器码级完整调用链证明**: 1. `Condition::Parse` (`0x101730c0`) 按空白切分得到词元 `"PREFIX=412)SUFFIX=174"`,其首尾字符均非括号,按首个 `=` 拆出右值 `"412)SUFFIX=174"` 交由 `0x101806f0` 读取整数 `412`,**后缀 `")SUFFIX=174"` 连同关键的右括号 `)` 与 10% FCR 词缀 `SUFFIX=174` 一并被静默吞噬**; 2. 展开进 `L3241` 后,包裹 `(RIN_CAST_5_1 OR ... OR RIN_DMG_5_3)` 的外层左括号 `(` 因少了一个 `)` 而处于未闭合状态; 3. `ConvertToRPN` (`0x10172e90`) 在规则末尾排空 `op_stack` 时,指令 `0x10172fb5` 一旦看见栈顶为未闭合的 `'('` 便**立即 `break` 退出循环**,导致压在 `'('` 下方、用于连接前置条件 `SHOW_GOODRARE !ID FILTLVL<7 rin RARE` 与括号块的顶层隐式 `AND` 算子未能弹出到 RPN 队列; 4. 紧接着 `Rule::Init` 调用 **`BuildConditionAST` (`0x101718f0`)** 将 RPN 组装为语法树:由于缺少顶层 `AND` 合并左右两棵子树,循环结束时 `0x10171b05` 检查 `ast_stack.size() == 1` 失败(实际栈深为 `2`)并返回 `false`; 5. `Rule::Init` (`0x10171665`) 遂将 `this->root_idx` 写死为 **`0xffffffff`**。此后每帧掉落判定进入 `Rule::Evaluate` (`0x10171c00`) 时,首条检查 `cmp dword ptr [ecx+0x54], 0xffffffff` (`0x10171c0c`) 直接返回 **`0` (`false`)**! - **真实后果**:不仅 `RIN_CAST_5_1` 坏掉,与其同处 `L3241` 的 **`RIN_CAST_5_2..5_4` 及 `RIN_DMG_5_1..5_3` 全部 7 组 5★ 毕业亮金戒指规则在游戏内 100% 永久失效**,掉落时没有任何 5★ 红框、地图图标与 `4715` 音效! 2. **[L3293](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L3293)(4★ 亮金圣骑士专用盾)非法运算符 `=~`**: - `Condition::Parse` 仅支持单字符 `=`、`<`、`>`、`~`。`PREFIX=~421-422` 按 `=` 拆出右值 `"~421-422"`,转换整数失败后直接跳往 `0x10178e91 -> 0x10178f0a` **不压入任何条件节点**,导致 `+2 圣骑士技能` 核心条件彻底蒸发,任意无技能的普通亮金圣骑盾只要带高格挡与抗性就会误报 4★。应改为 `PREFIX~421-422`。 3. **[L443](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L443) (`Alias[CLUBBASE3_1]` ➔ `L4063` 3★ 德鲁伊木棒) `3OR` 粘连**: - `(SK221=3 OR SK226=3 OR SK236=3 OR SK224=3OR SK227=3 OR SK237=3)` 中 `SK224=3OR` 吞掉 `OR`,导致与右侧 `SK227=3` 之间被插入隐式 `AND`,扭曲了前 4 个召唤技能的布尔树。应改为 `SK224=3 OR`。 ![图 1:BH.dll 词法粘连 ➔ ConvertToRPN 中断 ➔ BuildConditionAST 失败致 L3241 永久死亡链路](https://git.projectdiablo2.cn/attachments/8c82add0-da9d-4780-8afd-ff2cc6fcf2f0) ### 3.3 `BH.dll` `AND` / `OR` 等优先级(从左到右求值)与漏写 `OR` 缺陷(8 处) > **⚠️ 引擎求值高危预警** > > 在 `ConvertToRPN` (`0x10172ea0`) 中,隐式空格 `AND` 与 `OR` 具有**完全相同的运算符优先级**,在同一括号层级内严格从左向右依次折叠:`A OR B C` 实际求值为 `(A OR B) AND C`,绝非 `A OR (B AND C)`! | 行号 | 涉及别名 / 规则 | 问题表达式片段 | 真实求值偏差与后果 | 修复方案 | | :--- | :--- | :--- | :--- | :--- | | [L2501](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2501) | 暗金斧“巨大无比” | `ID UNI UNI_NOTE (gix OR 9gi 7gi) OR STAT91>19 STR>19` | `9gi 7gi` 漏 `OR` 恒假;右侧 `OR STAT91>19` 逃逸出 `UNI`,全游戏任意带 `-20% 需求` 且 `STR>19` 的黄/蓝/绿/符文之语装备均被误打上暗金评分! | `ID UNI UNI_NOTE (gix OR 9gi OR 7gi) STAT91>19 STR>19` | | [L2051](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2051) | 四色洗点精华屏蔽 | `(tes OR ceh OR bet OR fed GROUND) FILTLVL>2` | `GROUND` 仅约束了 `fed`!在 `FILTLVL>=3` 下,玩家**背包/仓库/赫拉迪克方块内**的前三种精华 (`tes`/`ceh`/`bet`) 命中空动作规则,物品名称变空白! | `(tes OR ceh OR bet OR fed) GROUND FILTLVL>2` | | [L668](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L668) | `Alias[RIN_UBER_4_3]` (`L3242`) | `(PREFIX=334 OR PREFIX=953 (PREFIX=353...))` | 少包一层括号,虽首项巧合等价,但依赖左结合脆弱副作用。 | `((PREFIX=334 OR PREFIX=953) (PREFIX=353...))` | | [L717](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L717) | `Alias[GLOVE_SKILL_4_1]` (`L3252`) | `(... OR PREFIX=392 PREFIX=412 OR ...)` | `PREFIX=392` 与 `PREFIX=412` 之间漏写 `OR`,导致前 3 种抗性前缀必须同时带毒抗 `412` 才生效! | 补全 `PREFIX=392 OR PREFIX=412` | | [L734..740](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L734) | `BOOT_5_1..5_3` & `BOOT_4_1..4_3` (`L3254..3255`) | `(SUFFIX~396-397 OR SUFFIX=1040 (SUFFIX=989...) ...)` | 全部 6 条高星黄鞋规则漏包 `(SUFFIX~396-397 OR SUFFIX=1040)`,导致后缀 `1040` 分支无需满足中间的敏捷/MF/FHR 条件即可跨级误报 4★/5★! | 将 `(SUFFIX~396-397 OR SUFFIX=1040)` 独立括起 | | [L4305](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L4305) | 开荒眼光/精神长柄底材 | `(scy OR pax hal OR wsc ... OR 7pa OR 7h7 7wc)` | **两处漏写 `OR`**:`pax hal` 与末尾 `7h7 7wc` 均被解析为不可能成立的同物品双代码 `AND`,导致长戟 (`hal`)、巨神之斧 (`7h7`) 与鲛尾巨斧 (`7wc`) 丢失底材保护! | 改为 `pax OR hal` 与 `7h7 OR 7wc` | --- ## 四、P1 级架构缺陷:第 8 章符文之语底材星级全面倒置与 `L4019` `TOWN` 误写 在 [L4015..4143](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L4015)(第 8 章 `8.1 头盔` 至 `8.4.11 投掷武器` 共 **13 个子章节**)中,所有底材规则均**未携带 `%CONTINUE%`**(首次命中即终止后续匹配),但全部按 **`0星 ➔ 1星 ➔ 2星 ➔ 3星 ➔ 4星` 升序排列**(共触发 **34 处星级顺序倒置**): ![图 2:第 8 章底材星级全面倒置导致毕业底材被提前截胡降级](https://git.projectdiablo2.cn/attachments/4c4915a5-fdbf-4dda-9a4c-96b9aa0ab84d) - **典型截胡案例**: 1. **弓弩 (`8.4.1`, `L4047..4055`)**:`BOWBASE2_2` (`L4051`, 2★) 仅检查 `(amc OR amb) TABSK0=3 SOCK~4-5`,未限制 `ED<15`;而排在其后的 `BOWBASE4_1` (`L4055`, 4★) 要求 `ED=20 amc TABSK0=3 SOCK=4`。在 `FILTLVL 1~3` 下,满变 20%ED 4 孔大院长弓直接被 `L4051` 截胡降级为普通 2★! 2. **盔甲 (`8.2`, `L4026..4032`)、盾牌 (`8.3`, `L4036..4042`)、法杖 (`8.4.9`, `L4109..4117`)、长柄 (`8.4.10`, `L4121..4127`)、刺客爪 (`L4131..4137`)**:低星宽泛规则全部位于高星超强 (`ED=15` / `+3 核心技能`) 规则之前。 - **两处伴生笔误**: - **[L4019](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L4019) 误将 `GROUND` 写为 `TOWN`**:第 8 章其余所有规则均为 `GROUND`,唯独 `L4019` (`8.1 头盔 //1星`) 写成了 `NMAG !RW !INF TOWN`,导致 1★ 德鲁伊/野蛮人头盔底材在野外刷图掉落时完全不触发高亮,反而仅在城镇地面生效。 - **[L4142](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L4142) 星级注释与样式复制错误**:`L4143` 匹配的是 3★ `THROWINGBASE3_1` (`FILTLVL~1-4`),但上方注释与动作样式均复制了 `L4140..4141` 的 `//2星` 与 `%TIER-2%◇`(应升级为 `//3星` 与 `%BORDER-62%%SOUNDID-4721%%TIER-3%◆`)。 - **根治准则**:将 `8.1 ~ 8.4.11` 每个装备子类内部的星级块严格翻转为 **`4星 ➔ 3星 ➔ 2星 ➔ 1星 ➔ 0星` 递减顺序**。 --- ## 五、P2 ~ P4 级公式精度、克隆别名、GUI 重名、悬浮窗与性能建议 ### 5.1 评分公式残余缺陷(7 处) 1. **[L2611](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2611) 八爪 `V1.68` 新回归**:删除旧残留的 `-IF(STAT360==17,0.625,0)`,仅保留 `-IF(STAT360==17,1.2,0)`。 2. **[L2421](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2421) 守护天使 & [L2424](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2424) 钢铁甲壳**:将 `IF(STAT350==50,...)` 修正为 `IF(STAT360==50,...)`。 3. **[L2525](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L2525) 火焰号叫 (`7gs`)**:`AND(MULTI151,102==27,0.5,0)` 末位参数为常量 `0`,逻辑与恒返回 `0`(27 级地狱火光环少算 `0.5` 分),应改为 `IF(MULTI151,102==27,0.5,0)`。 4. **命名腐化/黄装公式重复计入 `STAT360` ID(3 条公式)**: - [L877](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L877) `Formula[C_WAA]`:`STAT360==28` 同时出现在 `/2` 组与 `*9/8` 组(累加至 `1.625` 分);`STAT360==12` 同时出现在 `/2` 组与 `*2.25` 组(累加至 `2.75` 分)。 - [L887](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L887) `Formula[C_SIN]`:`STAT360==6` 同时出现在 `/2` 组与 `*9/8` 组;同一 `OR(...)` 内还重复写了两次 `STAT360==5` 与 `STAT360==77`。 - [L943](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L943) `Formula[RBE_A]`(亮金腰带):`STAT360==68` 在 `-0.27` 与 `-0.44` 两组重复扣分(共 `-0.71`);`STAT360==51` 在 `-0.89` 与 `-1.33` 两组重复扣分(共 `-2.22`)。 ### 5.2 完全克隆别名(3 对)与 BH 面板开关重名(3 组) - **3 对完全克隆别名**(高星与低星条件一字不差,导致低星别名永远死代码): 1. [L490](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L490) `SCEPTERBASE3_2` 与 [L498](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L498) `SCEPTERBASE4_4`; 2. [L767](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L767) `SHIELD_SKILL_5_2` 与 [L770](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L770) `SHIELD_SKILL_4_2`; 3. [L799](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L799) `JEW_CAST_3_1` 与 [L800](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L800) `JEW_CAST_2_1`。 - **3 组 BH 设置面板开关重名**(玩家在游戏内无法区分两个同名复选框): 1. [L202](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L202) `SHOW_MAGAMA_3`(有形)与 [L204](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L204) `SHOW_MAGAMA_5`(无形)均叫 `@显示蓝色亚马逊长矛@`; 2. [L203](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L203) `SHOW_MAGAMA_4`(有形)与 [L205](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L205) `SHOW_MAGAMA_6`(无形)均叫 `@显示蓝色亚马逊标枪@`; 3. [L193](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L193) `SHOW_RAREWEAPON_1`(亮金)与 [L216](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L216) `SHOW_MAGWEAPON_1`(蓝色)均叫 `@显示无形巨神系列@`。 ### 5.3 36 条非 `%CONTINUE%` 规则悬浮窗漏写 `%NAME%` 与架构优化路线图 - **悬浮窗原版描述覆盖(36 条)**:[L1785..1786](https://git.projectdiablo2.cn/lonelywolf/ZYLPD2-Filter-Lonelywolf/src/commit/23df8e97a80711a83cca396031f368ccbbcb1a46/BadWolf-LootFilter.txt#L1785)(`lbox`/`lpp` 打孔器)、`L1992..1998`(红门钥匙与器官)、`L2007`(英雄旗帜)、`L2021..2022`(拉斯玛门票材料)、`L3007..3034`(全部章节任务道具)、`L3076`(`jewf` 可堆叠珠宝)、`L3092`(地狱火炬)在 `{...}` 内未写 `%NAME%` 且无 `%CONTINUE%`,导致原版堆叠数量与使用提示被覆盖,建议统一补齐 `%CL%%NAME%`。 - **分阶段落地建议**: 1. **阶段一(工程同步与 P0 热修)**:基于最新 `S14V1.68` 反向切分同步 `build/00..39-*.txt`,修复 `L647`(激活 `L3241` 5★ 黄戒)、`L2501`、`L2051`、`L3293`、`L443`、`L717`、`L734..740`、`L4305` 与 `L2611` 新回归。 2. **阶段二(底材星级重排与公式校准)**:翻转第 8 章 `8.1 ~ 8.4.11` 星级顺序为 `4★ ➔ 0★`,修正 `L4019 GROUND`、`L4142 //3星`、`L2421`/`L2424`/`L2525` 及 `C_WAA`/`C_SIN`/`RBE_A` 重复腐化 ID。 3. **阶段三(自动化静态门禁)**:引入 `lint_filter.py` 作为每次提交前的强制校验脚本,杜绝主文件与 `build/` 再次失步或括号粘连导致整条规则静默死亡。
Owner

已按内容逐条实测完毕(不引用历史记录,直接用当前文件验)。工单基准是 commit 23df8e97a8 = V1.68 / 4,410 行 / 541,827 B,本地已是 V1.69 / 4,406 行 / 542,796 B / MD5 0fb7ecad…,所以对方行号普遍比本地大 2~4 行,我全部按内容检索。

结论:66 项里 64 项已不存在,1 项判不成立,只有 1 项是真问题
工单分级 条数 实测结果
P0 build/ 分片失步 1 不适用。本地没有 build/ 目录,构建链是 自定义过滤器模组(S14)\00..39 → build.ps1,本次拼接逐字节一致。且本地不是 git 仓库,该条只针对远端仓库
P0 AST 建树失败 / 非法算符 / 词法粘连 3 全已修:RIN_CAST_5_1 现为 …PREFIX=412) SUFFIX=174…(空格补上了,L3238 五★黄戒整条复活);PREFIX=~ 全库 0 处;=\dOR 全库 0 处
P0 高危 漏写 OR / 优先级 8 全已修:巨大无比 (gix OR 9gi OR 7gi) STAT91>19;洗点精华 (tes OR ceh OR bet OR fed) GROUND;RIN_UBER_4_3 已补外层括号;GLOVE_SKILL_4_1 有 PREFIX=392 OR PREFIX=412;6 条黄鞋 (SUFFIX~396-397 OR SUFFIX=1040) 已独立括起;长柄 scy OR pax OR hal … 7h7 OR 7wc(全库唯一一处,已在 L4301)
P1 第 8 章倒置 + TOWN + 投掷标注 36 全已修。机器校验 13 个子段 8.1~8.4.12 星级序列全部非递增(如 8.4.9 法杖 4,3,2,1,0);TOWN 只剩 !TOWN 与 Alias[TOWN] 定义;THROWINGBASE3_1 是 //3星 + %TIER-3%◆
P2 公式 / 克隆别名 / 面板重名 13 12 已修,1 仍在(见下)。STAT350==50 0 处;AND(MULTI151 0 处;C_WAA/C_SIN 的 28/12/6/5/77 重复已消;SCEPTERBASE4_4、SHIELD_SKILL_4_2、JEW_CAST_2_1 已不存在;三个面板名现为「显示蓝色亚马逊长矛 / 显示蓝色无形亚马逊长矛」等,全部可区分
P3 悬浮窗缺 %NAME% 36 判不成立(见下)
P4 热路径 2 FORMULASMA 三条已带类型守卫(190 次 MULTI107);lint_filter.py 门禁未建,属可选
唯一真问题:L2608 八爪(9tw/7tw)双重扣分
plaintext

…+2.5+IF(ETH,1,0)-IF(STAT360==17,0.625,0)-IF(STAT360==25,1.4,0)…-IF(STAT360==17,1.2,0)
同一 $f() 里 STAT360==17 被扣两次,合计 −1.825。兄弟行 L2609(追猎者的宰杀)同 ID 只扣 −1.2;全库 STAT360==17,0.625 仅此 1 处,而 STAT360==17,1.2 有 6 处 —— 明显是 V1.68 追加 1.2 时漏删旧值。修法一行:删掉 -IF(STAT360==17,0.625,0)。

我还反向扫了全库「负向项里同一 ID 出现两次」,只有这一处。RBE_A 的 72 重复 4 次、C_HELM/C_STAFF 的 32 重复、RSH_A/B 的 53~56、L2418/L2421/L2687 的 50/61 都是「属性折算 + 腐化惩罚」两类不同用途,正常。

判不成立的一条 P3
工单说「36 条在 {...} 内没写 %NAME% 且无 %CONTINUE%,导致原版堆叠数量与使用提示被覆盖」。机制上不成立:{...} 是追加在原版悬浮窗之后,不是替换——否则全库 1,732 条 :%NAME%{%NAME%} 规则会让所有词缀消失,与游戏里实际表现矛盾。实测 35 条(不是 36)​逐条都能显示名称:33 条在 { 前已写 %NAME%,另 2 条(tr1 赫拉迪克卷轴、mss 墨菲斯托的灵魂石)写死中文名。属风格不统一,无功能影响。

已按内容逐条实测完毕(不引用历史记录,直接用当前文件验)。工单基准是 commit 23df8e97a8 = V1.68 / 4,410 行 / 541,827 B,本地已是 V1.69 / 4,406 行 / 542,796 B / MD5 0fb7ecad…,所以对方行号普遍比本地大 2~4 行,我全部按内容检索。 结论:66 项里 64 项已不存在,1 项判不成立,只有 1 项是真问题 工单分级 条数 实测结果 P0 build/ 分片失步 1 不适用。本地没有 build/ 目录,构建链是 自定义过滤器模组(S14)\00..39 → build.ps1,本次拼接逐字节一致。且本地不是 git 仓库,该条只针对远端仓库 P0 AST 建树失败 / 非法算符 / 词法粘连 3 全已修:RIN_CAST_5_1 现为 …PREFIX=412) SUFFIX=174…(空格补上了,L3238 五★黄戒整条复活);PREFIX=~ 全库 0 处;=\dOR 全库 0 处 P0 高危 漏写 OR / 优先级 8 全已修:巨大无比 (gix OR 9gi OR 7gi) STAT91>19;洗点精华 (tes OR ceh OR bet OR fed) GROUND;RIN_UBER_4_3 已补外层括号;GLOVE_SKILL_4_1 有 PREFIX=392 OR PREFIX=412;6 条黄鞋 (SUFFIX~396-397 OR SUFFIX=1040) 已独立括起;长柄 scy OR pax OR hal … 7h7 OR 7wc(全库唯一一处,已在 L4301) P1 第 8 章倒置 + TOWN + 投掷标注 36 全已修。机器校验 13 个子段 8.1~8.4.12 星级序列全部非递增(如 8.4.9 法杖 4,3,2,1,0);TOWN 只剩 !TOWN 与 Alias[TOWN] 定义;THROWINGBASE3_1 是 //3星 + %TIER-3%◆ P2 公式 / 克隆别名 / 面板重名 13 12 已修,1 仍在(见下)。STAT350==50 0 处;AND(MULTI151 0 处;C_WAA/C_SIN 的 28/12/6/5/77 重复已消;SCEPTERBASE4_4、SHIELD_SKILL_4_2、JEW_CAST_2_1 已不存在;三个面板名现为「显示蓝色亚马逊长矛 / 显示蓝色无形亚马逊长矛」等,全部可区分 P3 悬浮窗缺 %NAME% 36 判不成立(见下) P4 热路径 2 FORMULASMA 三条已带类型守卫(190 次 MULTI107);lint_filter.py 门禁未建,属可选 唯一真问题:L2608 八爪(9tw/7tw)双重扣分 plaintext …+2.5+IF(ETH,1,0)-IF(STAT360==17,0.625,0)-IF(STAT360==25,1.4,0)…-IF(STAT360==17,1.2,0) 同一 $f() 里 STAT360==17 被扣两次,合计 −1.825。兄弟行 L2609(追猎者的宰杀)同 ID 只扣 −1.2;全库 STAT360==17,0.625 仅此 1 处,而 STAT360==17,1.2 有 6 处 —— 明显是 V1.68 追加 1.2 时漏删旧值。修法一行:删掉 -IF(STAT360==17,0.625,0)。 我还反向扫了全库「负向项里同一 ID 出现两次」,只有这一处。RBE_A 的 72 重复 4 次、C_HELM/C_STAFF 的 32 重复、RSH_A/B 的 53~56、L2418/L2421/L2687 的 50/61 都是「属性折算 + 腐化惩罚」两类不同用途,正常。 判不成立的一条 P3 工单说「36 条在 {...} 内没写 %NAME% 且无 %CONTINUE%,导致原版堆叠数量与使用提示被覆盖」。机制上不成立:{...} 是追加在原版悬浮窗之后,不是替换——否则全库 1,732 条 :%NAME%{%NAME%} 规则会让所有词缀消失,与游戏里实际表现矛盾。实测 35 条(不是 36)​逐条都能显示名称:33 条在 { 前已写 %NAME%,另 2 条(tr1 赫拉迪克卷轴、mss 墨菲斯托的灵魂石)写死中文名。属风格不统一,无功能影响。
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: lonelywolf/ZYLPD2-Filter-Lonelywolf#2
No description provided.