dgrp 抗性/属性聚合应为「全等才合并」,当前为部分合并 #130
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?
问题描述 (Issue C2)
src/game/item-tooltip.ts的aggregateAndSortProperties对dgrp=1(四维属性str,dex,vit,enr)与dgrp=2(四项元素抗性res-fire,res-cold,res-ltng,res-pois)采用了Math.min(...)抽取公共部分 + 保留溢出单抗的「部分合并」策略。res-fire: 30, res-cold: 30, res-ltng: 30, res-pois: 20在当前算法中会生成All Resistances +20加三条+10%单抗。D2Client.dll的dgrp/dgrpfunc格式化逻辑 +ItemStatCost.txt)中,只有当同一个dgrp组内的全部 4 项属性同时存在且最终汇总数值完全相等(v1 === v2 && v2 === v3 && v3 === v4 && v1 > 0)时,才会折叠输出dgrpstrpos(All Resistances +X或+X to All Attributes);一旦任意一项缺失或与其他三项数值不等(例如同时带了全抗词缀和单抗词缀导致某一项更高,或四项抗性数值不同),原版会将 4 项抗性/属性退回为 4 条独立行(如Cold Resist +30%,Lightning Resist +30%,Fire Resist +30%,Poison Resist +20%)。解决方案
src/game/item-tooltip.ts的aggregateAndSortProperties:res-all累加到fireRes, coldRes, ltngRes, poisRes四项总抗性中;将显式传入的all-stats累加到strVal, dexVal, vitVal, enrVal四项总属性中。fireRes > 0 && fireRes === coldRes && coldRes === ltngRes && ltngRes === poisRes时,输出单条res-all(All Resistances +X);否则按各单项实际累加后的总值(coldRes,ltngRes,fireRes,poisRes)独立输出单抗行。strVal > 0 && strVal === dexVal && dexVal === vitVal && vitVal === enrVal时输出单条all-stats(+X to All Attributes);否则按各单项实际总值独立输出。tests/item-tooltip-123-125.test.ts与tests/parity-1.13c.test.ts中的断言,验证四项相等时合并、四项不等时退回独立行且数值为res-all + 单抗累加值。Fixed in commit
041cd65(merged into main). Verified with tests/item-tooltip-123-125.test.ts (4 passed) and tests/parity-1.13c.test.ts (17 passed).