mirror of
https://github.com/unanmed/HumanBreak.git
synced 2026-11-05 19:44:32 +08:00
重构怪物手册的一部分
This commit is contained in:
1 parent
dae43498ca
commit
112ce4c4ef
15 files changed
+214
-269
No files matched your search
@@ -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[];
|
||||
}
|
||||
}
|
||||
@@ -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!;
|
||||
|
||||
Reference in new issue
Block a user