diff --git a/_docs/api.md b/_docs/api.md
index ffd1710e..c961f2b3 100644
--- a/_docs/api.md
+++ b/_docs/api.md
@@ -1593,7 +1593,7 @@ callback: 落地或淡出后的回调函数,可选
loadFloor: fn(floorId?: string, map?: ?)
从文件或存档中加载某个楼层
-loadMap: fn(data?: ?, floorId?: string)
+loadMap: fn(data?: ?, floorId?: string, flags?: ?)
将存档中的地图信息重新读取出来
moveBlock: fn(x: number, y: number, steps: [string], time?: number, keep?: bool, callback?: fn())
diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js
index a22f9c33..a5996228 100644
--- a/_server/CodeMirror/defs.js
+++ b/_server/CodeMirror/defs.js
@@ -3275,7 +3275,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
},
"loadMap": {
"!doc": "将存档中的地图信息重新读取出来",
- "!type": "fn(data?: ?, floorId?: string)"
+ "!type": "fn(data?: ?, floorId?: string, flags?: ?)"
},
"setBlock": {
"!doc": "转变图块
例如:core.setBlock(1, 0, 0); // 把地图左上角变成黄墙
number: 新图块的数字(也支持纯数字字符串如'1')或id
x: 横坐标
y: 纵坐标
floorId: 地图id,不填视为当前地图",
diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js
index 801bf47e..b8f05399 100644
--- a/_server/editor_mappanel.js
+++ b/_server/editor_mappanel.js
@@ -611,7 +611,8 @@ editor_mappanel_wrapper = function (editor) {
"delayExecute": false,
"multiExecute": false,
"data": [
- {"type": "openDoor"}
+ {"type": "openDoor"},
+ {"type": "setValue", "name": doorFlag, "operator": "=", "value": "null"},
]
}
};
diff --git a/libs/events.js b/libs/events.js
index dfc641dc..e9bfa14b 100644
--- a/libs/events.js
+++ b/libs/events.js
@@ -1102,15 +1102,23 @@ events.prototype.checkAutoEvents = function () {
}
events.prototype.autoEventExecuting = function (symbol, value) {
- var name = '_executing_autoEvent_' + symbol;
- if (value == null) return core.hasFlag(name);
- else core.setFlag(name, value || null);
+ var aei = core.getFlag('__aei__', []);
+ if (value == null) return aei.indexOf(symbol) >= 0;
+ else {
+ aei = aei.filter(function (one) { return one != symbol; });
+ if (value) aei.push(symbol);
+ core.setFlag('__aei__', aei);
+ }
}
events.prototype.autoEventExecuted = function (symbol, value) {
- var name = '_executed_autoEvent_' + symbol;
- if (value == null) return core.hasFlag(name);
- else core.setFlag(name, value || null);
+ var aed = core.getFlag('__aed__', []);
+ if (value == null) return aed.indexOf(symbol) >= 0;
+ else {
+ aed = aed.filter(function (one) { return one != symbol; });
+ if (value) aed.push(symbol);
+ core.setFlag('__aed__', aed);
+ }
}
events.prototype.pushEventLoc = function (x, y, floorId) {
diff --git a/libs/maps.js b/libs/maps.js
index dcd4bf48..4f54f248 100644
--- a/libs/maps.js
+++ b/libs/maps.js
@@ -360,7 +360,7 @@ maps.prototype.saveMap = function (floorId) {
}
// 砍层状态:直接返回
if ((flags.__removed__ || []).indexOf(floorId) >= 0) {
- return { deleted: true, canFlyTo: false, canFlyFrom: false, cannotViewMap: true };
+ return {};
}
var map = maps[floorId];
@@ -385,10 +385,13 @@ maps.prototype._compressFloorData = function (map, floor) {
}
////// 将存档中的地图信息重新读取出来 //////
-maps.prototype.loadMap = function (data, floorId) {
+maps.prototype.loadMap = function (data, floorId, flags) {
if (!floorId) {
var map = {};
core.floorIds.forEach(function (id) {
+ if (core.inArray((flags||{}).__removed__, id)) {
+ data[id] = { deleted: true, canFlyTo: false, canFlyFrom: false, cannotViewMap: true };
+ }
map[id] = core.maps.loadFloor(id, data[id]);
})
return map;
diff --git a/project/plugins.js b/project/plugins.js
index 3152f84c..65c27029 100644
--- a/project/plugins.js
+++ b/project/plugins.js
@@ -255,12 +255,20 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
flags.__visited__ = flags.__visited__ || {};
flags.__removed__ = flags.__removed__ || [];
flags.__disabled__ = flags.__disabled__ || {};
+ flags.__leaveLoc__ = flags.__leaveLoc__ || {};
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(function (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;
diff --git a/runtime.d.ts b/runtime.d.ts
index 6da939d3..88fdf497 100644
--- a/runtime.d.ts
+++ b/runtime.d.ts
@@ -1738,7 +1738,7 @@ declare class maps {
saveMap(floorId?: string): any
/** 将存档中的地图信息重新读取出来 */
- loadMap(data?: any, floorId?: string): any
+ loadMap(data?: any, floorId?: string, flags?: any): any
/** 更改地图画布的尺寸 */
resizeMap(floorId?: string): void