重构怪物手册的一部分

This commit is contained in:
AncTe committed 2023-07-31 16:49:04 +08:00
1 parent dae43498ca
commit 112ce4c4ef
15 files changed
+214 -269

No files matched your search

+41 -8
View File
@@ -1,11 +1,17 @@
import {
DamageDir,
DamageEnemy,
ensureFloorDamage,
getNeedCalDir,
getSingleEnemy
} from './damage';
import { findDir, has } from '../utils';
export interface CurrentEnemy {
enemy: DamageEnemy;
onMapEnemy: DamageEnemy[];
}
export function getEnemy(
x: number,
y: number,
@@ -228,13 +234,39 @@ core.events._action_battle = function (data, x, y, prefix) {
}
};
core.enemys.getCurrentEnemys = function (floorId = core.status.floorId) {
floorId = floorId || core.status.floorId;
const enemys: CurrentEnemy[] = [];
const used: Record<string, DamageEnemy[]> = {};
ensureFloorDamage(floorId);
const floor = core.status.maps[floorId];
floor.enemy.list.forEach(v => {
if (!(v.id in used)) {
const e = new DamageEnemy(v.enemy);
e.calAttribute();
e.getRealInfo();
e.calDamage();
const curr: CurrentEnemy = {
enemy: e,
onMapEnemy: [v]
};
enemys.push(curr);
used[v.id] = curr.onMapEnemy;
} else {
used[v.id].push(v);
}
});
return enemys.sort((a, b) => {
return (
(a.enemy.damage?.[0]?.damage ?? Infinity) -
(b.enemy.damage?.[0]?.damage ?? Infinity)
);
});
};
declare global {
interface Events {
/**
* 与怪物战斗前
* @param x 怪物横坐标
* @param y 怪物纵坐标
*/
beforeBattle(
enemy: DamageEnemy,
x: number,
@@ -242,9 +274,6 @@ declare global {
dir: DamageDir
): boolean;
/**
* 与怪物战斗后
*/
afterBattle(
enemy: DamageEnemy,
x: number,
@@ -252,4 +281,8 @@ declare global {
dir: DamageDir
): void;
}
interface Enemys {
getCurrentEnemys(floorId?: FloorIds): CurrentEnemy[];
}
}
+3 -2
View File
@@ -417,7 +417,7 @@ export class DamageEnemy<T extends EnemyIds = EnemyIds> {
* 计算怪物在不计光环下的属性,在inject光环之前,预平衡光环之后执行
*/
calAttribute() {
if (this.progress !== 1) return;
if (this.progress !== 1 && has(this.x) && has(this.floorId)) return;
this.progress = 2;
const special = this.info.special;
const info = this.info;
@@ -448,7 +448,7 @@ export class DamageEnemy<T extends EnemyIds = EnemyIds> {
* 获取怪物的真实属性信息,在inject光环后执行
*/
getRealInfo() {
if (this.progress < 3) {
if (this.progress < 3 && has(this.x) && has(this.floorId)) {
throw new Error(
`Unexpected early real info calculating. Progress: ${this.progress}`
);
@@ -804,6 +804,7 @@ export class DamageEnemy<T extends EnemyIds = EnemyIds> {
x?: number,
y?: number
): CriticalDamageDelta[] {
// todo: 可以优化,根据之前的计算可以直接确定下一个临界的范围
if (!isFinite(seckill)) return [];
const res: CriticalDamageDelta[] = [];
const def = hero.def!;