chore: 调整勇士属性接口

This commit is contained in:
unanmed 2026-06-19 01:21:03 +08:00
parent 566ffc586a
commit 02bf39a62d
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];
}
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.markDirty(name);
}
addBaseAttribute<K extends keyof SelectType<THero, number>>(
add<K extends keyof SelectType<THero, number>>(
name: K,
value: number
): void {
@ -126,6 +126,22 @@ export class HeroAttribute<THero> implements IHeroAttribute<THero> {
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>(
name: K,
modifier: IHeroModifier<THero[K], unknown>

View File

@ -110,17 +110,28 @@ export interface IHeroAttribute<THero> extends IReadonlyHeroAttribute<THero> {
* @param name
* @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 value
*/
addBaseAttribute<K extends SelectKey<THero, number>>(
name: K,
value: number
): void;
add<K extends SelectKey<THero, number>>(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');
target[p] = newValue;
// @ts-expect-error 旧样板无法处理此类型
attr.setBaseAttribute(p, newValue);
attr.set(p, newValue);
return true;
},
get(_, p) {

View File

@ -215,7 +215,7 @@ export class DamageContext<TEnemy, THero> 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<TEnemy, THero> 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) {