mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-19 20:59:37 +08:00
118 lines
4.5 KiB
JavaScript
118 lines
4.5 KiB
JavaScript
'use strict';
|
|
|
|
(function () {
|
|
function removeMaps(fromId, toId, force) {
|
|
toId = toId || fromId;
|
|
var fromIndex = core.floorIds.indexOf(fromId),
|
|
toIndex = core.floorIds.indexOf(toId);
|
|
if (toIndex < 0) toIndex = core.floorIds.length - 1;
|
|
flags.__visited__ = flags.__visited__ || {};
|
|
flags.__removed__ = flags.__removed__ || [];
|
|
flags.__disabled__ = flags.__disabled__ || {};
|
|
flags.__leaveLoc__ = flags.__leaveLoc__ || {};
|
|
flags.__forceDelete__ ??= {};
|
|
let deleted = false;
|
|
for (var i = fromIndex; i <= toIndex; ++i) {
|
|
var floorId = core.floorIds[i];
|
|
if (core.status.maps[floorId].deleted) continue;
|
|
delete flags.__visited__[floorId];
|
|
flags.__removed__.push(floorId);
|
|
delete flags.__disabled__[floorId];
|
|
delete flags.__leaveLoc__[floorId];
|
|
(core.status.autoEvents || []).forEach(event => {
|
|
if (event.floorId == floorId && event.currentFloor) {
|
|
core.autoEventExecuting(event.symbol, false);
|
|
core.autoEventExecuted(event.symbol, false);
|
|
}
|
|
});
|
|
core.status.maps[floorId].deleted = true;
|
|
core.status.maps[floorId].canFlyTo = false;
|
|
core.status.maps[floorId].canFlyFrom = false;
|
|
core.status.maps[floorId].cannotViewMap = true;
|
|
if (force) {
|
|
core.status.maps[floorId].forceDelete = true;
|
|
flags.__forceDelete__[floorId] = true;
|
|
}
|
|
deleteFlags(floorId);
|
|
deleted = true;
|
|
}
|
|
if (deleted && !main.replayChecking) {
|
|
core.splitArea();
|
|
}
|
|
}
|
|
|
|
function deleteFlags(floorId) {
|
|
delete flags[`jump_${floorId}`];
|
|
delete flags[`inte_${floorId}`];
|
|
delete flags[`loop_${floorId}`];
|
|
delete flags[`melt_${floorId}`];
|
|
delete flags[`night_${floorId}`];
|
|
}
|
|
|
|
// 恢复楼层
|
|
// core.plugin.removeMap.resumeMaps("MT1", "MT300") 恢复MT1~MT300之间的全部层
|
|
// core.plugin.removeMap.resumeMaps("MT10") 只恢复MT10层
|
|
function resumeMaps(fromId, toId) {
|
|
toId = toId || fromId;
|
|
var fromIndex = core.floorIds.indexOf(fromId),
|
|
toIndex = core.floorIds.indexOf(toId);
|
|
if (toIndex < 0) toIndex = core.floorIds.length - 1;
|
|
flags.__removed__ = flags.__removed__ || [];
|
|
for (var i = fromIndex; i <= toIndex; ++i) {
|
|
var floorId = core.floorIds[i];
|
|
if (!core.status.maps[floorId].deleted) continue;
|
|
if (
|
|
core.status.maps[floorId].forceDelete ||
|
|
flags.__forceDelete__[floorId]
|
|
)
|
|
continue;
|
|
flags.__removed__ = flags.__removed__.filter(f => {
|
|
return f != floorId;
|
|
});
|
|
core.status.maps[floorId] = core.loadFloor(floorId);
|
|
}
|
|
}
|
|
|
|
// 分区砍层相关
|
|
var inAnyPartition = floorId => {
|
|
var inPartition = false;
|
|
(core.floorPartitions || []).forEach(floor => {
|
|
var fromIndex = core.floorIds.indexOf(floor[0]);
|
|
var toIndex = core.floorIds.indexOf(floor[1]);
|
|
var index = core.floorIds.indexOf(floorId);
|
|
if (fromIndex < 0 || index < 0) return;
|
|
if (toIndex < 0) toIndex = core.floorIds.length - 1;
|
|
if (index >= fromIndex && index <= toIndex) inPartition = true;
|
|
});
|
|
return inPartition;
|
|
};
|
|
|
|
// 分区砍层
|
|
function autoRemoveMaps(floorId) {
|
|
if (main.mode != 'play' || !inAnyPartition(floorId)) return;
|
|
// 根据分区信息自动砍层与恢复
|
|
(core.floorPartitions || []).forEach(floor => {
|
|
var fromIndex = core.floorIds.indexOf(floor[0]);
|
|
var toIndex = core.floorIds.indexOf(floor[1]);
|
|
var index = core.floorIds.indexOf(floorId);
|
|
if (fromIndex < 0 || index < 0) return;
|
|
if (toIndex < 0) toIndex = core.floorIds.length - 1;
|
|
if (index >= fromIndex && index <= toIndex) {
|
|
core.plugin.removeMap.resumeMaps(
|
|
core.floorIds[fromIndex],
|
|
core.floorIds[toIndex]
|
|
);
|
|
} else {
|
|
removeMaps(core.floorIds[fromIndex], core.floorIds[toIndex]);
|
|
}
|
|
});
|
|
}
|
|
|
|
core.plugin.removeMap = {
|
|
removeMaps,
|
|
deleteFlags,
|
|
resumeMaps,
|
|
autoRemoveMaps
|
|
};
|
|
})();
|