diff --git a/packages-user/data-base/src/hero/equipment.ts b/packages-user/data-base/src/hero/equipment.ts index 454ba79..65d8267 100644 --- a/packages-user/data-base/src/hero/equipment.ts +++ b/packages-user/data-base/src/hero/equipment.ts @@ -261,12 +261,8 @@ export class HeroEquipment implements IHeroEquipment { ): Readonly> { const stateA = this.store.get(equipA); const stateB = this.store.get(equipB); - if (!stateA) { - logger.warn(146, equipA.toString()); - return {} as Partial; - } - if (!stateB) { - logger.warn(146, equipB.toString()); + if (!stateA && !stateB) { + logger.warn(195, equipA.toString(), equipB.toString()); return {} as Partial; } @@ -296,7 +292,7 @@ export class HeroEquipment implements IHeroEquipment { const attrB: Partial = {}; const keys = new Set>(); - const modifiersA = [...stateA.getModifiers()]; + const modifiersA = stateA ? [...stateA.getModifiers()] : []; const addedA: typeof modifiersA = []; for (const [name, modifier] of modifiersA) { const copy = modifier.clone(); @@ -304,7 +300,7 @@ export class HeroEquipment implements IHeroEquipment { clone.addModifier(name, copy); addedA.push([name, copy]); } - for (const [name] of stateA.getModifiers()) { + for (const [name] of modifiersA) { attrA[name] = clone.getFinalAttribute(name); keys.add(name); } @@ -313,12 +309,13 @@ export class HeroEquipment implements IHeroEquipment { clone.deleteModifier(name, copy); } - for (const [name, modifier] of stateB.getModifiers()) { + const modifiersB = stateB ? [...stateB.getModifiers()] : []; + for (const [name, modifier] of modifiersB) { const copy = modifier.clone(); // @ts-expect-error 泛型无法推导 clone.addModifier(name, copy); } - for (const [name] of stateB.getModifiers()) { + for (const [name] of modifiersB) { attrB[name] = clone.getFinalAttribute(name); keys.add(name); } diff --git a/packages-user/data-base/src/hero/types.ts b/packages-user/data-base/src/hero/types.ts index 883e53c..6220d18 100644 --- a/packages-user/data-base/src/hero/types.ts +++ b/packages-user/data-base/src/hero/types.ts @@ -865,8 +865,8 @@ export interface IHeroEquipment /** * 比较两个装备在指定槽位的表现,输出装备 A 时的属性减装备 B 时的属性 - * @param equipA 要比较的装备 A 的 uid - * @param equipB 要比较的装备 B 的 uid + * @param equipA 要比较的装备 A 的 uid,填写 -1 表示无装备 + * @param equipB 要比较的装备 B 的 uid,填写 -1 表示无装备 * @param slot 要比较的装备槽索引 */ compareEquip( diff --git a/packages/common/src/logger.json b/packages/common/src/logger.json index 2a16b8e..37865ba 100644 --- a/packages/common/src/logger.json +++ b/packages/common/src/logger.json @@ -278,6 +278,7 @@ "192": "A FaceGroup.Dir8 face handler registration is expected.", "193": "Cannot load item state since no item id registration for item num $1.", "194": "Expected passive replay command executed during the last active replay command executing, but a passive command $1 was got after active replay command $2 executing. Replay will continue and ignore this issue.", + "195": "Cannot compare equipments since both equipments not exists. Equip A: $1, Equip B: $2.", "1001": "Event(setBlock): Unknown tile '$1' when setting block." } }