diff --git a/packages-user/data-base/src/hero/attribute.ts b/packages-user/data-base/src/hero/attribute.ts index ef55598..34b146e 100644 --- a/packages-user/data-base/src/hero/attribute.ts +++ b/packages-user/data-base/src/hero/attribute.ts @@ -113,12 +113,12 @@ export class HeroAttribute implements IHeroAttribute { return this.finalAttribute[name]; } - setBaseAttribute(name: K, value: THero[K]): void { + set(name: K, value: THero[K]): void { this.attribute[name] = value; this.markDirty(name); } - addBaseAttribute>( + add>( name: K, value: number ): void { @@ -126,6 +126,22 @@ export class HeroAttribute implements IHeroAttribute { this.markDirty(name); } + mul>( + name: K, + value: number + ): void { + (this.attribute[name] as number) *= value; + this.markDirty(name); + } + + div>( + name: K, + value: number + ): void { + (this.attribute[name] as number) /= value; + this.markDirty(name); + } + addModifier( name: K, modifier: IHeroModifier diff --git a/packages-user/data-base/src/hero/types.ts b/packages-user/data-base/src/hero/types.ts index e0d9895..42febfe 100644 --- a/packages-user/data-base/src/hero/types.ts +++ b/packages-user/data-base/src/hero/types.ts @@ -110,17 +110,28 @@ export interface IHeroAttribute extends IReadonlyHeroAttribute { * @param name 属性名称 * @param value 要设置为的值 */ - setBaseAttribute(name: K, value: THero[K]): void; + set(name: K, value: THero[K]): void; /** * 增减勇士属性 * @param name 属性名称 * @param value 属性增减值 */ - addBaseAttribute>( - name: K, - value: number - ): void; + add>(name: K, value: number): void; + + /** + * 将勇士属性乘以某一个值 + * @param name 属性名称 + * @param value 属性乘数 + */ + mul>(name: K, value: number): void; + + /** + * 将勇士属性除以某一个值 + * @param name 属性名称 + * @param value 属性除数 + */ + div>(name: K, value: number): void; /** * 向一个属性添加属性修饰器 diff --git a/packages-user/data-fallback/src/hero.ts b/packages-user/data-fallback/src/hero.ts index e7e609c..2c146ae 100644 --- a/packages-user/data-fallback/src/hero.ts +++ b/packages-user/data-fallback/src/hero.ts @@ -11,7 +11,7 @@ export function patchHero(state: ICoreState) { logger.warn(56, 'core.status.hero', 'state.hero'); target[p] = newValue; // @ts-expect-error 旧样板无法处理此类型 - attr.setBaseAttribute(p, newValue); + attr.set(p, newValue); return true; }, get(_, p) { diff --git a/packages-user/data-system/src/combat/damage.ts b/packages-user/data-system/src/combat/damage.ts index da168c1..d1f5b18 100644 --- a/packages-user/data-system/src/combat/damage.ts +++ b/packages-user/data-system/src/combat/damage.ts @@ -215,7 +215,7 @@ export class DamageContext implements IDamageContext< let left = currentValue; let right = upperLimit; - hero.setBaseAttribute(attribute, right as THero[typeof attribute]); + hero.set(attribute, right as THero[typeof attribute]); let targetInfo = this.calculator!.calculate(handler); if (targetInfo.damage >= referenceDamage) return null; @@ -223,7 +223,7 @@ export class DamageContext implements IDamageContext< let iter = 0; while (iter++ < maxIterations) { const middle = Math.floor((left + right) / 2); - hero.setBaseAttribute(attribute, middle as THero[typeof attribute]); + hero.set(attribute, middle as THero[typeof attribute]); const middleInfo = this.calculator!.calculate(handler); if (middleInfo.damage < referenceDamage) {