diff --git a/packages-user/data-state/src/enemy/calculator.ts b/packages-user/data-state/src/enemy/calculator.ts index 35149d8..1c26822 100644 --- a/packages-user/data-state/src/enemy/calculator.ts +++ b/packages-user/data-state/src/enemy/calculator.ts @@ -1,7 +1,7 @@ import { CriticalableHeroStatus, IDamageCalculator, - IEnemyDamageInfo, + IEnemyDamageInfoBase, IReadonlyEnemyHandler } from '@user/data-system'; import { IEnemyAttr, IHeroAttr } from '@user/data-common'; @@ -18,7 +18,7 @@ export class MainDamageCalculator implements IDamageCalculator< calculate( handler: IReadonlyEnemyHandler - ): IEnemyDamageInfo { + ): IEnemyDamageInfoBase { const { enemy, locator, hero } = handler; const hp = hero.getBaseAttribute('hp'); const atk = hero.getFinalAttribute('atk'); diff --git a/packages-user/data-system/src/combat/combat.ts b/packages-user/data-system/src/combat/combat.ts index 79f6af1..a7ce68e 100644 --- a/packages-user/data-system/src/combat/combat.ts +++ b/packages-user/data-system/src/combat/combat.ts @@ -176,11 +176,13 @@ export class CombatFlow } for (const script of this.scriptList) { - await script.before(damage, handler); + const skip = await script.before(damage, handler); + if (skip) return damage; } await Promise.all( this.forEachHook(hook => hook.onBeforeCombat?.(damage)) ); + for (const script of this.scriptList) { await script.after(damage, handler); } diff --git a/packages-user/data-system/src/combat/types.ts b/packages-user/data-system/src/combat/types.ts index 6ac65aa..ec45622 100644 --- a/packages-user/data-system/src/combat/types.ts +++ b/packages-user/data-system/src/combat/types.ts @@ -793,6 +793,15 @@ export interface ICombatScript { ): Promise; } +export interface ICombatResult { + /** 是否通过战前脚本跳过了战斗流程 */ + readonly skipped: boolean; + /** 战斗伤害信息对象 */ + readonly damageInfo: IEnemyDamageInfo; + /** 怪物信息对象 */ + readonly enemyHandler: IReadonlyEnemyHandler; +} + export interface ICombatFlow extends IHookable>, IStateBaseExtended { /** 勇士属性对象 */