From 04943416a5c1936f6144d61abb1d15207179de3a Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 15 Sep 2026 20:29:27 +0800 Subject: [PATCH] fix(07-04): #06-05-1 refresh final attributes without modifiers - recalculateAttribute writes the base value into finalAttribute when no modifier is attached - un-skip the base-only-change case; catchCalculateProgress is intentionally left untouched --- packages-user/data-base/src/hero/attribute.test.ts | 4 ++-- packages-user/data-base/src/hero/attribute.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages-user/data-base/src/hero/attribute.test.ts b/packages-user/data-base/src/hero/attribute.test.ts index aadaaab..2d07d22 100644 --- a/packages-user/data-base/src/hero/attribute.test.ts +++ b/packages-user/data-base/src/hero/attribute.test.ts @@ -111,8 +111,8 @@ describe('HeroAttribute base and final values', () => { expect(attribute.getFinalAttribute('atk')).toBe(15); }); - // 疑似 bug:无修饰器时 recalculateAttribute 提前返回,基础属性变化不反映到最终属性,详见 06-TEST-FINDINGS.md #06-05-1 - it.skip('reflects base-only changes without any modifier', () => { + // 验证无修饰器时基础属性变化同步反映到最终属性(#06-05-1) + it('reflects base-only changes without any modifier', () => { const attribute = createAttribute(); attribute.set('hp', 40); attribute.add('hp', 5); diff --git a/packages-user/data-base/src/hero/attribute.ts b/packages-user/data-base/src/hero/attribute.ts index 00639b1..9ccf130 100644 --- a/packages-user/data-base/src/hero/attribute.ts +++ b/packages-user/data-base/src/hero/attribute.ts @@ -79,7 +79,11 @@ export class HeroAttribute implements IHeroAttribute { */ private recalculateAttribute(name: K): void { const modifierList = this.modifier.get(name); - if (!modifierList) return; + if (!modifierList) { + // 无修饰器时 final 与 base 保持同值 + this.finalAttribute[name] = this.attribute[name]; + return; + } const baseValue = this.attribute[name]; let value = baseValue;