mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-19 20:59:37 +08:00
183 lines
6.2 KiB
JavaScript
183 lines
6.2 KiB
JavaScript
///<reference path="../../../src/types/core.d.ts" />
|
|
'use strict';
|
|
|
|
(function () {
|
|
// 所有的主动技能效果
|
|
var ignoreInJump = {
|
|
event: ['X20007', 'X20001', 'X20006', 'X20014', 'X20010', 'X20007'],
|
|
bg: [
|
|
'X20037',
|
|
'X20038',
|
|
'X20039',
|
|
'X20045',
|
|
'X20047',
|
|
'X20053',
|
|
'X20054',
|
|
'X20055',
|
|
'X20067',
|
|
'X20068',
|
|
'X20075',
|
|
'X20076'
|
|
]
|
|
};
|
|
|
|
/** @type {FloorIds[]} */
|
|
const jumpIgnoreFloor = ['MT31', 'snowTown'];
|
|
// 跳跃
|
|
function jumpSkill() {
|
|
if (core.status.floorId.startsWith('tower'))
|
|
return core.drawTip('当无法使用该技能');
|
|
if (jumpIgnoreFloor.includes(core.status.floorId) || flags.onChase) {
|
|
return core.drawTip('当前楼层无法使用该技能');
|
|
}
|
|
if (!flags.skill2) return;
|
|
if (!flags['jump_' + core.status.floorId])
|
|
flags['jump_' + core.status.floorId] = 0;
|
|
if (
|
|
core.status.floorId == 'MT14' &&
|
|
flags['jump_' + core.status.floorId] == 2 &&
|
|
!flags.MT14Jump
|
|
) {
|
|
if (
|
|
!(
|
|
core.status.hero.loc.x === 77 &&
|
|
core.status.hero.loc.y === 5 &&
|
|
core.status.hero.loc.direction === 'right'
|
|
)
|
|
) {
|
|
return core.drawTip('该地图还有一个必跳的地方,你还没有跳');
|
|
} else flags.MT14Jump = true;
|
|
}
|
|
if (flags['jump_' + core.status.floorId] >= 3)
|
|
return core.drawTip('当前地图使用次数已用完');
|
|
var direction = core.status.hero.loc.direction;
|
|
var loc = core.status.hero.loc;
|
|
var checkLoc = {};
|
|
switch (direction) {
|
|
case 'up':
|
|
checkLoc.x = loc.x;
|
|
checkLoc.y = loc.y - 1;
|
|
break;
|
|
case 'right':
|
|
checkLoc.x = loc.x + 1;
|
|
checkLoc.y = loc.y;
|
|
break;
|
|
case 'down':
|
|
checkLoc.x = loc.x;
|
|
checkLoc.y = loc.y + 1;
|
|
break;
|
|
case 'left':
|
|
checkLoc.x = loc.x - 1;
|
|
checkLoc.y = loc.y;
|
|
break;
|
|
}
|
|
// 前方是否可通行 或 是怪物
|
|
var cls = core.getBlockCls(checkLoc.x, checkLoc.y);
|
|
var noPass = core.noPass(checkLoc.x, checkLoc.y);
|
|
var id = core.getBlockId(checkLoc.x, checkLoc.y) || '';
|
|
var bgId =
|
|
core.getBlockByNumber(core.getBgNumber(checkLoc.x, checkLoc.y))
|
|
.event.id || '';
|
|
// 可以通行
|
|
if (
|
|
!noPass ||
|
|
cls == 'items' ||
|
|
(id.startsWith('X') && !ignoreInJump.event.includes(id)) ||
|
|
(bgId.startsWith('X') && !ignoreInJump.bg.includes(bgId))
|
|
)
|
|
return core.drawTip('当前无法使用技能');
|
|
// 不是怪物且不可以通行
|
|
if (noPass && !(cls == 'enemys' || cls == 'enemy48')) {
|
|
var toLoc = checkNoPass(direction, checkLoc.x, checkLoc.y, true);
|
|
if (!toLoc) return;
|
|
core.autosave();
|
|
if (flags.chapter <= 1) core.status.hero.hp -= 200 * flags.hard;
|
|
core.updateStatusBar();
|
|
flags['jump_' + core.status.floorId]++;
|
|
if (core.status.hero.hp <= 0) {
|
|
core.status.hero.hp = 0;
|
|
core.updateStatusBar();
|
|
core.events.lose('你跳死了');
|
|
}
|
|
core.playSound('015-Jump01.ogg');
|
|
core.insertAction([
|
|
{ type: 'jumpHero', loc: [toLoc.x, toLoc.y], time: 500 }
|
|
]);
|
|
}
|
|
// 是怪物
|
|
if (cls == 'enemys' || cls == 'enemy48') {
|
|
var firstNoPass = checkNoPass(
|
|
direction,
|
|
checkLoc.x,
|
|
checkLoc.y,
|
|
false
|
|
);
|
|
if (!firstNoPass) return;
|
|
core.autosave();
|
|
if (flags.chapter <= 1) core.status.hero.hp -= 200 * flags.hard;
|
|
core.updateStatusBar();
|
|
flags['jump_' + core.status.floorId]++;
|
|
if (core.status.hero.hp <= 0) {
|
|
core.status.hero.hp = 0;
|
|
core.updateStatusBar();
|
|
core.events.lose('你跳死了');
|
|
}
|
|
core.playSound('015-Jump01.ogg');
|
|
core.insertAction([
|
|
{
|
|
type: 'jump',
|
|
from: [checkLoc.x, checkLoc.y],
|
|
to: [firstNoPass.x, firstNoPass.y],
|
|
time: 500,
|
|
keep: true
|
|
}
|
|
]);
|
|
}
|
|
// 检查一条线上的不可通过
|
|
function checkNoPass(direction, x, y, startNo) {
|
|
if (!startNo) startNo = false;
|
|
switch (direction) {
|
|
case 'up':
|
|
y--;
|
|
break;
|
|
case 'right':
|
|
x++;
|
|
break;
|
|
case 'down':
|
|
y++;
|
|
break;
|
|
case 'left':
|
|
x--;
|
|
break;
|
|
}
|
|
if (
|
|
x > core.status.thisMap.width - 1 ||
|
|
y > core.status.thisMap.height - 1 ||
|
|
x < 0 ||
|
|
y < 0
|
|
)
|
|
return core.drawTip('当前无法使用技能');
|
|
var id = core.getBlockId(x, y) || '';
|
|
if (core.getBgNumber(x, y))
|
|
var bgId =
|
|
core.getBlockByNumber(core.getBgNumber(x, y)).event.id ||
|
|
'';
|
|
else var bgId = '';
|
|
if (
|
|
core.noPass(x, y) ||
|
|
core.getBlockCls(x, y) == 'items' ||
|
|
(id.startsWith('X') && !ignoreInJump.event.includes(id)) ||
|
|
(bgId.startsWith('X') && !ignoreInJump.bg.includes(bgId)) ||
|
|
core.getBlockCls(x, y) == 'animates'
|
|
)
|
|
return checkNoPass(direction, x, y, true);
|
|
if (!startNo) return checkNoPass(direction, x, y, false);
|
|
return { x: x, y: y };
|
|
}
|
|
}
|
|
|
|
core.plugin.skillEffects = {
|
|
jumpSkill
|
|
};
|
|
})();
|