HumanBreak/packages-user/legacy-plugin-data/src/enemy/checkblock.ts

92 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { DamageEnemy } from '@user/data-state';
import { findDir, ofDir } from '@user/data-utils';
export function createCheckBlock() {
// 地图伤害在这实现。2.C 会修改实现方式
control.prototype.checkBlock = function () {
const heroLoc = core.status.hero.loc;
const { x, y } = heroLoc;
const loc = `${x},${y}`;
const col = core.status.thisMap.enemy;
const info = col.mapDamage[loc];
if (!info) return;
const damage = info.damage;
// 阻击夹域伤害
if (damage) {
core.status.hero.hp -= damage;
const type = [...info.type];
const text = type.join('') || '伤害';
core.drawTip('受到' + text + damage + '点');
core.drawHeroAnimate('zone');
this._checkBlock_disableQuickShop();
core.status.hero.statistics.extraDamage += damage;
if (core.status.hero.hp <= 0) {
core.status.hero.hp = 0;
core.updateStatusBar();
core.events.lose();
return;
} else {
core.updateStatusBar();
}
}
const actions: MotaAction[] = [];
// 阻击效果
if (info.repulse) {
for (const [x, y] of info.repulse) {
const loc2 = { x, y };
const dir = findDir(heroLoc, loc2);
if (dir === 'none') continue;
const [nx, ny] = ofDir(x, y, dir);
if (core.noPass(nx, ny) || !core.canMoveHero(x, y, dir)) {
continue;
}
actions.push({
type: 'move',
time: 250,
keep: true,
loc: [x, y],
steps: [`${dir}:1`],
async: true
});
}
}
/** 存储要和哪些捕捉怪战斗 */
const ambushEnemies: DamageEnemy[] = [];
// 捕捉效果
if (info.ambush) {
for (const [x, y] of info.ambush) {
const loc2 = { x, y };
const dir = findDir(loc2, heroLoc);
if (dir === 'none') continue;
actions.push({
type: 'move',
time: 250,
keep: false,
loc: [x, y],
steps: [`${dir}:1`],
async: true
});
const enemy = col.get(x, y);
if (enemy) {
ambushEnemies.push(enemy);
}
}
}
if (actions.length > 0) {
actions.push({ type: 'waitAsync' });
// 与捕捉怪战斗
core.insertAction(actions, void 0, void 0, () => {
ambushEnemies.forEach(v => {
core.battle(v, v.y, true);
});
});
}
};
}