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