Compare commits

...

2 Commits

Author SHA1 Message Date
AncTe
d60000d16f
Merge 02bf39a62d into 1a569804d8 2026-06-18 17:21:18 +00:00
02bf39a62d chore: 调整勇士属性接口 2026-06-19 01:21:03 +08:00
4 changed files with 37 additions and 10 deletions

View File

@ -113,12 +113,12 @@ export class HeroAttribute<THero> implements IHeroAttribute<THero> {
return this.finalAttribute[name]; return this.finalAttribute[name];
} }
setBaseAttribute<K extends keyof THero>(name: K, value: THero[K]): void { set<K extends keyof THero>(name: K, value: THero[K]): void {
this.attribute[name] = value; this.attribute[name] = value;
this.markDirty(name); this.markDirty(name);
} }
addBaseAttribute<K extends keyof SelectType<THero, number>>( add<K extends keyof SelectType<THero, number>>(
name: K, name: K,
value: number value: number
): void { ): void {
@ -126,6 +126,22 @@ export class HeroAttribute<THero> implements IHeroAttribute<THero> {
this.markDirty(name); this.markDirty(name);
} }
mul<K extends keyof SelectType<THero, number>>(
name: K,
value: number
): void {
(this.attribute[name] as number) *= value;
this.markDirty(name);
}
div<K extends keyof SelectType<THero, number>>(
name: K,
value: number
): void {
(this.attribute[name] as number) /= value;
this.markDirty(name);
}
addModifier<K extends keyof THero>( addModifier<K extends keyof THero>(
name: K, name: K,
modifier: IHeroModifier<THero[K], unknown> modifier: IHeroModifier<THero[K], unknown>

View File

@ -110,17 +110,28 @@ export interface IHeroAttribute<THero> extends IReadonlyHeroAttribute<THero> {
* @param name * @param name
* @param value * @param value
*/ */
setBaseAttribute<K extends keyof THero>(name: K, value: THero[K]): void; set<K extends keyof THero>(name: K, value: THero[K]): void;
/** /**
* *
* @param name * @param name
* @param value * @param value
*/ */
addBaseAttribute<K extends SelectKey<THero, number>>( add<K extends SelectKey<THero, number>>(name: K, value: number): void;
name: K,
value: number /**
): void; *
* @param name
* @param value
*/
mul<K extends SelectKey<THero, number>>(name: K, value: number): void;
/**
*
* @param name
* @param value
*/
div<K extends SelectKey<THero, number>>(name: K, value: number): void;
/** /**
* *

View File

@ -11,7 +11,7 @@ export function patchHero(state: ICoreState) {
logger.warn(56, 'core.status.hero', 'state.hero'); logger.warn(56, 'core.status.hero', 'state.hero');
target[p] = newValue; target[p] = newValue;
// @ts-expect-error 旧样板无法处理此类型 // @ts-expect-error 旧样板无法处理此类型
attr.setBaseAttribute(p, newValue); attr.set(p, newValue);
return true; return true;
}, },
get(_, p) { get(_, p) {

View File

@ -215,7 +215,7 @@ export class DamageContext<TEnemy, THero> implements IDamageContext<
let left = currentValue; let left = currentValue;
let right = upperLimit; 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); let targetInfo = this.calculator!.calculate(handler);
if (targetInfo.damage >= referenceDamage) return null; if (targetInfo.damage >= referenceDamage) return null;
@ -223,7 +223,7 @@ export class DamageContext<TEnemy, THero> implements IDamageContext<
let iter = 0; let iter = 0;
while (iter++ < maxIterations) { while (iter++ < maxIterations) {
const middle = Math.floor((left + right) / 2); 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); const middleInfo = this.calculator!.calculate(handler);
if (middleInfo.damage < referenceDamage) { if (middleInfo.damage < referenceDamage) {