BadWolf-LootFilter.txt (S14V1.68) 深度复审与改进建议报告(附完整 PDF 报告) #2
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📎 完整排版 PDF 审计报告附件
S14V1.51提交了综合修复与静态检查器 PR #1;看到主分支已快速迭代至S14V1.68(修复了STAT217/2048定点数缩放、原生带孔暗金腐化评分拆分与多处文本宏笔误),特针对最新S14V1.68(commit23df8e97a8)重新完成了全量BH.dll机器码级复审。如需将 PR #1 变基(rebase)合并至最新S14V1.68,随时可以协助更新。一、版本演进复核:
S14V1.51➔S14V1.68增量评估1.1 已验证生效的正向修复(
S14V1.68改进成果)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)。Formula[C_HELN]、Formula[C_SHIELN]、Formula[C_DMWN]、Formula[C_AC]4 条原生带孔装备专用腐化公式,并重新标定了骷髅王冠 (urn)、巨龙之鳞 (drc)、猎头人的荣耀 (ush)、骨焰 (ne6/neb)、盗墓者 (7pa)、死神丧钟/无尽冰雹 (8s8/6s7)、天堂之光 (7sc)、阿斯特隆之铁的保护区 (7ws) 等暗金装备的基础分与强化分权重。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实际代码片段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分)。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 倍技能分。uul)IF(STAT350==50,ALLSK-1,(ALLSK-1)*2)...-IF(STAT360==50,2,0)L2421完全一致:行尾已加-IF(STAT360==50,2,0),行首仍残留STAT350==50笔误,导致+1 全技能腐化补偿失效。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现存问题全景)build/模块分片严重滞后失步build/00..39-*.txt拼接结果仍停留在V1.45(535,986字节 vs 主文件541,827字节,首差在L107),一旦执行构建脚本将覆盖回退V1.46~V1.68全部更新。BuildConditionAST建树失败致整条规则永久死亡L647(RIN_CAST_5_1)PREFIX=412)SUFFIX=174吞掉)导致L3241外层(未闭合,0x101718f0判定ast_stack.size() == 2 != 1并将root_idx置为0xffffffff,整条L32415★ 黄戒规则对所有物品恒返回false。L3293亮金圣骑盾PREFIX=~421-422被静默丢弃(无技能门槛误报);L443德鲁伊木棒SK224=3OR吞掉OR变隐式AND。BH.dllAND/OR等优先级逻辑失真与漏写ORL2501任意黄装误标暗金分、L2051背包/仓库内洗点精华在FILTLVL>=3被空名隐藏、L734..7406 条 4★/5★ 黄鞋绕过抗性门槛、L668、L717、L4305两处底材漏写OR。TOWN误写L4016..4143全部按0★ ➔ 4★升序排列且无%CONTINUE%,4★ 极品毕业底材被 0★~2★ 规则提前截胡降级;L4019误将GROUND写为TOWN;L41423★ 标枪误标//2星。L2611八爪新回归双重扣分、L2421/L2424STAT350、L2525AND(...,0.5,0)恒为 0、C_WAA/C_SIN/RBE_A重复腐化 ID、3 对完全克隆别名、3 组 BH 面板开关重名。%CONTINUE%悬浮窗{...}漏写%NAME%lbox/lpp)、红门钥匙/器官、拉斯玛材料、全章节任务道具与可堆叠珠宝悬停时原版属性面板被覆盖隐藏。L4332基础屏蔽上移或明确排除未知新道具。三、P0 级阻断与引擎解析缺陷深度剖析(
BH.dll机器码实证)3.1 构建源失步:
build/00..39-*.txt停留在V1.45build/00-header.txt至build/39-footer.txt按序拼接后长度为535,986字节(版本头为V1.45 更新于 26/10/18),而根目录主文件 BadWolf-LootFilter.txt 为541,827字节(V1.68 更新于 26/10/28)。BadWolf-LootFilter.txt上热修,未反向回写build/分片。任何协作者执行build/build_filter.bat都会瞬间抹除V1.46~V1.68的全部成果。3.2
BuildConditionAST(0x101718f0) 栈校验失败导致整条 5★ 黄戒规则永久死亡Alias[RIN_CAST_5_1]) ➔ 瘫痪 L3241:BH.dll机器码级完整调用链证明:Condition::Parse(0x101730c0) 按空白切分得到词元"PREFIX=412)SUFFIX=174",其首尾字符均非括号,按首个=拆出右值"412)SUFFIX=174"交由0x101806f0读取整数412,后缀")SUFFIX=174"连同关键的右括号)与 10% FCR 词缀SUFFIX=174一并被静默吞噬;L3241后,包裹(RIN_CAST_5_1 OR ... OR RIN_DMG_5_3)的外层左括号(因少了一个)而处于未闭合状态;ConvertToRPN(0x10172e90) 在规则末尾排空op_stack时,指令0x10172fb5一旦看见栈顶为未闭合的'('便立即break退出循环,导致压在'('下方、用于连接前置条件SHOW_GOODRARE !ID FILTLVL<7 rin RARE与括号块的顶层隐式AND算子未能弹出到 RPN 队列;Rule::Init调用BuildConditionAST(0x101718f0) 将 RPN 组装为语法树:由于缺少顶层AND合并左右两棵子树,循环结束时0x10171b05检查ast_stack.size() == 1失败(实际栈深为2)并返回false;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音效!=~:Condition::Parse仅支持单字符=、<、>、~。PREFIX=~421-422按=拆出右值"~421-422",转换整数失败后直接跳往0x10178e91 -> 0x10178f0a不压入任何条件节点,导致+2 圣骑士技能核心条件彻底蒸发,任意无技能的普通亮金圣骑盾只要带高格挡与抗性就会误报 4★。应改为PREFIX~421-422。Alias[CLUBBASE3_1]➔L40633★ 德鲁伊木棒)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。3.3
BH.dllAND/OR等优先级(从左到右求值)与漏写OR缺陷(8 处)ID UNI UNI_NOTE (gix OR 9gi 7gi) OR STAT91>19 STR>199gi 7gi漏OR恒假;右侧OR STAT91>19逃逸出UNI,全游戏任意带-20% 需求且STR>19的黄/蓝/绿/符文之语装备均被误打上暗金评分!ID UNI UNI_NOTE (gix OR 9gi OR 7gi) STAT91>19 STR>19(tes OR ceh OR bet OR fed GROUND) FILTLVL>2GROUND仅约束了fed!在FILTLVL>=3下,玩家背包/仓库/赫拉迪克方块内的前三种精华 (tes/ceh/bet) 命中空动作规则,物品名称变空白!(tes OR ceh OR bet OR fed) GROUND FILTLVL>2Alias[RIN_UBER_4_3](L3242)(PREFIX=334 OR PREFIX=953 (PREFIX=353...))((PREFIX=334 OR PREFIX=953) (PREFIX=353...))Alias[GLOVE_SKILL_4_1](L3252)(... OR PREFIX=392 PREFIX=412 OR ...)PREFIX=392与PREFIX=412之间漏写OR,导致前 3 种抗性前缀必须同时带毒抗412才生效!PREFIX=392 OR PREFIX=412BOOT_5_1..5_3&BOOT_4_1..4_3(L3254..3255)(SUFFIX~396-397 OR SUFFIX=1040 (SUFFIX=989...) ...)(SUFFIX~396-397 OR SUFFIX=1040),导致后缀1040分支无需满足中间的敏捷/MF/FHR 条件即可跨级误报 4★/5★!(SUFFIX~396-397 OR SUFFIX=1040)独立括起(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 章符文之语底材星级全面倒置与
L4019TOWN误写在 L4015..4143(第 8 章
8.1 头盔至8.4.11 投掷武器共 13 个子章节)中,所有底材规则均未携带%CONTINUE%(首次命中即终止后续匹配),但全部按0星 ➔ 1星 ➔ 2星 ➔ 3星 ➔ 4星升序排列(共触发 34 处星级顺序倒置):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★!8.2,L4026..4032)、盾牌 (8.3,L4036..4042)、法杖 (8.4.9,L4109..4117)、长柄 (8.4.10,L4121..4127)、刺客爪 (L4131..4137):低星宽泛规则全部位于高星超强 (ED=15/+3 核心技能) 规则之前。GROUND写为TOWN:第 8 章其余所有规则均为GROUND,唯独L4019(8.1 头盔 //1星) 写成了NMAG !RW !INF TOWN,导致 1★ 德鲁伊/野蛮人头盔底材在野外刷图掉落时完全不触发高亮,反而仅在城镇地面生效。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 处)
V1.68新回归:删除旧残留的-IF(STAT360==17,0.625,0),仅保留-IF(STAT360==17,1.2,0)。IF(STAT350==50,...)修正为IF(STAT360==50,...)。7gs):AND(MULTI151,102==27,0.5,0)末位参数为常量0,逻辑与恒返回0(27 级地狱火光环少算0.5分),应改为IF(MULTI151,102==27,0.5,0)。STAT360ID(3 条公式):Formula[C_WAA]:STAT360==28同时出现在/2组与*9/8组(累加至1.625分);STAT360==12同时出现在/2组与*2.25组(累加至2.75分)。Formula[C_SIN]:STAT360==6同时出现在/2组与*9/8组;同一OR(...)内还重复写了两次STAT360==5与STAT360==77。Formula[RBE_A](亮金腰带):STAT360==68在-0.27与-0.44两组重复扣分(共-0.71);STAT360==51在-0.89与-1.33两组重复扣分(共-2.22)。5.2 完全克隆别名(3 对)与 BH 面板开关重名(3 组)
SCEPTERBASE3_2与 L498SCEPTERBASE4_4;SHIELD_SKILL_5_2与 L770SHIELD_SKILL_4_2;JEW_CAST_3_1与 L800JEW_CAST_2_1。SHOW_MAGAMA_3(有形)与 L204SHOW_MAGAMA_5(无形)均叫@显示蓝色亚马逊长矛@;SHOW_MAGAMA_4(有形)与 L205SHOW_MAGAMA_6(无形)均叫@显示蓝色亚马逊标枪@;SHOW_RAREWEAPON_1(亮金)与 L216SHOW_MAGWEAPON_1(蓝色)均叫@显示无形巨神系列@。5.3 36 条非
%CONTINUE%规则悬浮窗漏写%NAME%与架构优化路线图lbox/lpp打孔器)、L1992..1998(红门钥匙与器官)、L2007(英雄旗帜)、L2021..2022(拉斯玛门票材料)、L3007..3034(全部章节任务道具)、L3076(jewf可堆叠珠宝)、L3092(地狱火炬)在{...}内未写%NAME%且无%CONTINUE%,导致原版堆叠数量与使用提示被覆盖,建议统一补齐%CL%%NAME%。S14V1.68反向切分同步build/00..39-*.txt,修复L647(激活L32415★ 黄戒)、L2501、L2051、L3293、L443、L717、L734..740、L4305与L2611新回归。8.1 ~ 8.4.11星级顺序为4★ ➔ 0★,修正L4019 GROUND、L4142 //3星、L2421/L2424/L2525及C_WAA/C_SIN/RBE_A重复腐化 ID。lint_filter.py作为每次提交前的强制校验脚本,杜绝主文件与build/再次失步或括号粘连导致整条规则静默死亡。已按内容逐条实测完毕(不引用历史记录,直接用当前文件验)。工单基准是 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 墨菲斯托的灵魂石)写死中文名。属风格不统一,无功能影响。