品质可用性判定未使用 ItemTypes.txt 标志(戒指/护身符可掉出 Cracked/Superior) #127
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 A2)
src/game/drop-pipeline.ts中canHaveQuality使用硬编码白名单 (weapon,armor,rin,amu,jew,cm1..3),且调用rollItemQuality时未传入ItemTypes.txt的normal、magic、rare标志。D2Game!6FC2FC40+ItemTypes.txt):normal === true的类型(如药水、卷轴、符文、宝石、箭矢等)只能为normal品质。magic === true的类型(如ring,amul,char/scha/mcha/lcha,jewl等)最低品质就是 Magic,绝不会 roll 出superior、normal或low(即不可能存在Cracked Ring或Superior Amulet)。rare === false的类型(如护身符char)在rollItemQuality中allowRare应为false(或在降级时跳过rare)。ItemTypes.txt的class列非空,或isA继承自职业专属类型)在rollItemQuality时应传入classSpecific: 1以匹配ItemRatio.txt的Class Specific行。解决方案
src/game/drop-pipeline.ts新增辅助函数resolveItemTypeFlags(base, itemTypes, isA),通过ItemTypes.txt(含equiv1/equiv2父类型继承)解析{ isNormalOnly, isAlwaysMagic, canBeRare, isClassSpecific }。executeDropPipeline中用resolveItemTypeFlags驱动rollItemQuality参数(allowRare,allowSuperior,classSpecific),并对isAlwaysMagic类型在rollItemQuality返回'normal' | 'low' | 'superior'时兜底提升为'magic'。tests/parity-1.13c.test.ts新增回归测试,验证戒指、项链、护身符、珠宝在大样本及低 ilvl/0 MF 下永远不会产出normal/superior/low品质,且职业专属装备正确命中classSpecific: 1。Fixed in commit
a618ed7(merged into main). Verified with tests/parity-1.13c.test.ts (8 passed) and tests/drop-pipeline.test.ts (19 passed).