mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-10-15 17:32:58 +08:00
92 lines
2.9 KiB
TypeScript
92 lines
2.9 KiB
TypeScript
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);
|
||
});
|
||
});
|
||
}
|
||
};
|
||
}
|