diff --git a/docs/api.md b/docs/api.md index 92bc289b..fb1b8546 100644 --- a/docs/api.md +++ b/docs/api.md @@ -208,6 +208,10 @@ core.removeBlock(x, y, floorId) 否则将该点设置为禁用,以供以后可能的启用事件。 +core.setBlock(number, x, y, floorId) +改变图块。number为要改变到的图块数字,x和y为坐标,floorId为楼层ID,可忽略表示当前楼层。 + + core.useItem(itemId, callback) 尝试使用某个道具。itemId为道具ID,callback为成功或失败后的回调。 diff --git a/libs/core.js b/libs/core.js index 769249b6..55093bf7 100644 --- a/libs/core.js +++ b/libs/core.js @@ -687,6 +687,11 @@ core.prototype.removeBlockByIds = function (floorId, ids) { core.maps.removeBlockByIds(floorId, ids); } +////// 改变图块 ////// +core.prototype.setBlock = function (number, x, y, floorId) { + core.maps.setBlock(number, x, y, floorId); +} + ////// 添加一个全局动画 ////// core.prototype.addGlobalAnimate = function (block) { core.maps.addGlobalAnimate(block); diff --git a/libs/events.js b/libs/events.js index bd01339e..9a61fc10 100644 --- a/libs/events.js +++ b/libs/events.js @@ -396,24 +396,7 @@ events.prototype.doAction = function() { x=core.calValue(data.loc[0]); y=core.calValue(data.loc[1]); } - var floorId = data.floorId||core.status.floorId; - var originBlock=core.getBlock(x,y,floorId,false); - var block = core.maps.initBlock(x,y,data.number); - core.maps.addInfo(block); - core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); - core.maps.addChangeFloor(block,x,y,core.floors[floorId].changeFloor[x+","+y]); - if (core.isset(block.event)) { - if (originBlock==null) { - core.status.maps[floorId].blocks.push(block); - } - else { - originBlock.block.id = data.number; - originBlock.block.event = block.event; - } - if (floorId==core.status.floorId) { - core.drawMap(floorId); - } - } + core.setBlock(data.number, x, y, data.floorId); this.doAction(); break; } @@ -872,10 +855,16 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) { core.stopAutomaticRoute(); var speed=30; var doorId = id; - if (!(doorId.substring(doorId.length-4)=="Door")) { + if (doorId.length<4 || doorId.substring(doorId.length-4)!="Door") { doorId=doorId+"Door"; speed=70; } + // 不存在门 + if (!core.isset(core.material.icons.animates[doorId])) { + if (core.isset(callback)) callback(); + return; + } + var key = id.replace("Door", "Key"); if (needKey && (key=="specialKey" || core.isset(core.material.items[key]))) { var key = id.replace("Door", "Key"); diff --git a/libs/maps.js b/libs/maps.js index 2ab284db..0d03cef5 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -774,6 +774,30 @@ maps.prototype.removeBlockByIds = function (floorId, ids) { }); } +////// 改变图块 ////// +maps.prototype.setBlock = function (number, x, y, floorId) { + floorId = floorId || core.status.floorId; + if (!core.isset(number) || !core.isset(x) || !core.isset(y)) return; + + var originBlock=core.getBlock(x,y,floorId,false); + var block = core.maps.initBlock(x,y,number); + core.maps.addInfo(block); + core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); + core.maps.addChangeFloor(block,x,y,core.floors[floorId].changeFloor[x+","+y]); + if (core.isset(block.event)) { + if (originBlock==null) { + core.status.maps[floorId].blocks.push(block); + } + else { + originBlock.block.id = data.number; + originBlock.block.event = block.event; + } + if (floorId==core.status.floorId) { + core.drawMap(floorId); + } + } +} + ////// 添加一个全局动画 ////// maps.prototype.addGlobalAnimate = function (b) { if (main.mode=='editor' && main.editor.disableGlobalAnimate) return;