From ea7a404cc614dcaf8bda8f2aeca5a8f9d813359f Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sat, 10 Oct 2026 18:49:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=8E=E7=A9=BA=E8=A3=85=E5=A4=87?= =?UTF-8?q?=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/data-base/src/hero/equipment.ts | 17 +++++++---------- packages-user/data-base/src/hero/types.ts | 4 ++-- packages/common/src/logger.json | 1 + 3 files changed, 10 insertions(+), 12 deletions(-) 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." } }