diff --git a/docs/api.md b/docs/api.md index 50319569..f28da96b 100644 --- a/docs/api.md +++ b/docs/api.md @@ -184,22 +184,29 @@ core.enemyExists(x, y, id, floorId) x和y为坐标;id为怪物ID,可为null表示任意怪物;floorId为楼层ID,可忽略表示当前楼层。 -core.getBlock(x, y, floorId, needEnable) +core.getBlock(x, y, floorId, showDisable) 获得某个点的当前图块信息。 x和y为坐标;floorId为楼层ID,可忽略或null表示当前楼层。 -needEnable表示该点是否启用时才返回,其值不设置则默认为true。 +showDisable如果为true,则对于禁用的点和事件也会进行返回。 如果该点不存在图块,则返回null。 否则,返回值如下: {"index": xxx, "block": xxx} 其中index为该点在该楼层blocks数组中的索引,block为该图块实际内容。 -core.getBlockId(x, y, floorId, needEnable) +core.getBlockId(x, y, floorId, showDisable) 获得某个点的图块ID。 x和y为坐标;floorId为楼层ID,可忽略或null表示当前楼层。 -needEnable表示是否需要该点处于启用状态才返回,其值不设置则默认为true。 +showDisable如果为true,则对于禁用的点和事件也会进行返回。 如果该点不存在图块,则返回null,否则返回该点的图块ID。 +core.getBlockCls(x, y, floorId, showDisable) +获得某个点的图块cls。 +x和y为坐标;floorId为楼层ID,可忽略或null表示当前楼层。 +showDisable如果为true,则对于禁用的点和事件也会进行返回。 +如果该点不存在图块,则返回null,否则返回该点的图块cls。 + + core.showBlock(x, y, floorId) 将某个点从禁用变成启用状态。 diff --git a/libs/control.js b/libs/control.js index 4ac0de4f..1cc0347e 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1164,14 +1164,14 @@ control.prototype.updateCheckBlock = function() { core.status.checkBlock.map = []; // 记录怪物地图 for (var n=0;n=0 && nx=0 && ny=0 && nx=0 && ny0) @@ -1568,7 +1568,7 @@ control.prototype.updateFg = function () { for (var b = 0; b < mapBlocks.length; b++) { var x = mapBlocks[b].x, y = mapBlocks[b].y; if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls.indexOf('enemy')==0 - && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable)) { + && !mapBlocks[b].disable) { // 非系统默认的战斗事件(被覆盖) if (mapBlocks[b].event.trigger != 'battle') { diff --git a/libs/core.js b/libs/core.js index c18777a7..8bca255a 100644 --- a/libs/core.js +++ b/libs/core.js @@ -666,13 +666,18 @@ core.prototype.enemyExists = function (x, y, id,floorId) { } ////// 获得某个点的block ////// -core.prototype.getBlock = function (x, y, floorId, needEnable) { - return core.maps.getBlock(x,y,floorId,needEnable); +core.prototype.getBlock = function (x, y, floorId, showDisable) { + return core.maps.getBlock(x,y,floorId,showDisable); } ////// 获得某个点的blockId ////// -core.prototype.getBlockId = function (x, y, floorId, needEnable) { - return core.maps.getBlockId(x, y, floorId, needEnable); +core.prototype.getBlockId = function (x, y, floorId, showDisable) { + return core.maps.getBlockId(x, y, floorId, showDisable); +} + +////// 获得某个点的blockCls ////// +core.prototype.getBlockCls = function (x, y, floorId, showDisable) { + return core.maps.getBlockCls(x, y, floorId, showDisable); } ////// 显示移动某块的动画,达到{“type”:”move”}的效果 ////// diff --git a/libs/enemys.js b/libs/enemys.js index 058389a4..d7e0d5d0 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -228,7 +228,7 @@ enemys.prototype.getCurrentEnemys = function (floorId) { var used = {}; var mapBlocks = core.status.maps[floorId].blocks; for (var b = 0; b < mapBlocks.length; b++) { - if (core.isset(mapBlocks[b].event) && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable) + if (core.isset(mapBlocks[b].event) && !mapBlocks[b].disable && mapBlocks[b].event.cls.indexOf('enemy')==0) { var enemyId = mapBlocks[b].event.id; if (core.isset(used[enemyId])) continue; diff --git a/libs/events.js b/libs/events.js index 718f3ec3..699c854e 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1026,7 +1026,7 @@ events.prototype.trigger = function (x, y) { var mapBlocks = core.status.thisMap.blocks; var noPass; for (var b = 0; b < mapBlocks.length; b++) { - if (mapBlocks[b].x == x && mapBlocks[b].y == y && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable)) { // 启用事件 + if (mapBlocks[b].x == x && mapBlocks[b].y == y && !mapBlocks[b].disable) { // 启用事件 noPass = mapBlocks[b].event && mapBlocks[b].event.noPass; if (noPass) { core.clearAutomaticRouteNode(x, y); @@ -1102,7 +1102,7 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback else { var blocks = core.status.maps[floorId].blocks; for (var i in blocks) { - if (core.isset(blocks[i].event) && !(core.isset(blocks[i].enable) && !blocks[i].enable) && blocks[i].event.id === stair) { + if (core.isset(blocks[i].event) && !blocks[i].disable && blocks[i].event.id === stair) { heroLoc.x = blocks[i].x; heroLoc.y = blocks[i].y; break; @@ -1179,9 +1179,9 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback // 检查重生 if (!core.isset(fromLoad)) { core.status.maps[floorId].blocks.forEach(function(block) { - if (core.isset(block.enable) && !block.enable && core.isset(block.event) && block.event.cls.indexOf('enemy')==0 + if (block.disable && core.isset(block.event) && block.event.cls.indexOf('enemy')==0 && core.enemys.hasSpecial(core.material.enemys[block.event.id].special, 23)) { - block.enable = true; + block.disable = false; } }) } @@ -1617,7 +1617,7 @@ events.prototype.pushBox = function (data) { if (nx<0||nx>=core.bigmap.width||ny<0||ny>=core.bigmap.height) return; - var block = core.getBlock(nx, ny, null, false); + var block = core.getBlock(nx, ny, null, true); if (block!=null && !(core.isset(block.block.event) && block.block.event.id=='flower')) return; diff --git a/libs/maps.js b/libs/maps.js index 3368d423..be066c67 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -43,21 +43,21 @@ maps.prototype.loadFloor = function (floorId, map) { ////// 数字和ID的对应关系 ////// maps.prototype.initBlock = function (x, y, id) { - var enable=null; + var disable=null; id = ""+id; if (id.length>2) { if (id.indexOf(":f")==id.length-2) { id = id.substring(0, id.length - 2); - enable = false; + disable = false; } else if (id.indexOf(":t")==id.length-2) { id = id.substring(0, id.length - 2); - enable = true; + disable = true; } } id=parseInt(id); var tmp = {'x': x, 'y': y, 'id': id}; - if (enable!=null) tmp.enable = enable; + if (disable!=null) tmp.disable = disable; if (id in this.blocksInfo) tmp.event = JSON.parse(JSON.stringify(this.blocksInfo[id])); @@ -113,8 +113,8 @@ maps.prototype.addEvent = function (block, x, y, event) { block.event.noPass = event.noPass; // 覆盖enable - if (!core.isset(block.enable) && core.isset(event.enable)) { - block.enable=event.enable; + if (!core.isset(block.disable) && core.isset(event.enable)) { + block.disable=!event.enable; } // 覆盖trigger if (!core.isset(block.event.trigger)) { @@ -126,7 +126,7 @@ maps.prototype.addEvent = function (block, x, y, event) { } // 覆盖其他属性 for (var key in event) { - if (key!="enable" && key!="trigger" && key!="noPass" && core.isset(event[key])) { + if (key!="disable" && key!="trigger" && key!="noPass" && core.isset(event[key])) { block.event[key]=core.clone(event[key]); } } @@ -171,8 +171,8 @@ maps.prototype.save = function(maps, floorId) { } } thisFloor.blocks.forEach(function (block) { - if (core.isset(block.enable)) { - if (block.enable) blocks[block.y][block.x] = block.id+":t"; + if (core.isset(block.disable)) { + if (!block.disable) blocks[block.y][block.x] = block.id+":t"; else blocks[block.y][block.x] = block.id+":f"; } else blocks[block.y][block.x] = block.id; @@ -218,7 +218,7 @@ maps.prototype.getMapArray = function (blockArray,width,height){ } } blockArray.forEach(function (block) { - if (!(core.isset(block.enable) && !block.enable)) + if (!block.disable) blocks[block.y][block.x] = block.id; }); return blocks; @@ -404,7 +404,7 @@ maps.prototype.drawMap = function (mapName, callback) { for (var b = 0; b < mapBlocks.length; b++) { // 事件启用 var block = mapBlocks[b]; - if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable)) { + if (core.isset(block.event) && !block.disable) { if (block.event.cls == 'autotile') { core.drawAutotile(core.canvas.event, mapArray, block, 32, 0, 0); } @@ -567,13 +567,12 @@ maps.prototype.enemyExists = function (x, y, id,floorId) { } ////// 获得某个点的block ////// -maps.prototype.getBlock = function (x, y, floorId, needEnable) { +maps.prototype.getBlock = function (x, y, floorId, showDisable) { if (!core.isset(floorId)) floorId=core.status.floorId; - if (!core.isset(needEnable)) needEnable=true; var blocks = core.status.maps[floorId].blocks; for (var n=0;n=core.bigmap.width || y<0 || y>=core.bigmap.height) return; - var originBlock=core.getBlock(x,y,floorId,false); + var originBlock=core.getBlock(x,y,floorId,true); var block = core.maps.initBlock(x,y,number); core.maps.addInfo(block); core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); diff --git a/libs/ui.js b/libs/ui.js index 958d4c0b..73af00ee 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1803,7 +1803,7 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, cente var mapArray = core.maps.getMapArray(blocks,mw,mh); for (var b in blocks) { var block = blocks[b]; - if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable)) { + if (core.isset(block.event) && !block.disable) { if (block.event.cls == 'autotile') { core.drawAutotile(tempCanvas, mapArray, block, 32, 0, 0); } @@ -1925,7 +1925,7 @@ ui.prototype.drawStatistics = function () { if (floor.cannotViewMap && floorId!=core.status.floorId) return; blocks.forEach(function (block) { - if (!core.isset(block.event) || (core.isset(block.enable) && !block.enable)) + if (!core.isset(block.event) || block.disable) return; var event = block.event; if (event.cls.indexOf("enemy")==0) { diff --git a/project/data.js b/project/data.js index eba61dc1..82bad9b6 100644 --- a/project/data.js +++ b/project/data.js @@ -2,7 +2,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = { "main" : { "floorIds" : [ - "MT0" + "MT0", "sample0", "sample1", "sample2" ], "images" : [ "bg.jpg" diff --git a/project/items.js b/project/items.js index a0236f61..8b9cbd9f 100644 --- a/project/items.js +++ b/project/items.js @@ -315,16 +315,16 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "canUseItemEffect": { "book": "true", "fly": "core.status.hero.flyRange.indexOf(core.status.floorId)>=0", - "pickaxe": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) \n\t\t&& Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1\n\t\t&& (block.event.id == 'yellowWall' || block.event.id=='whiteWall' || block.event.id=='blueWall')) // 能破哪些墙\n\t{\n\t\t// 四个方向\n\t\tif (core.flags.pickaxeFourDirections || (block.x == core.nextX() && block.y == core.nextY()))\n\t\t\tids.push(i);\n\t\telse id2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", - "icePickaxe": "var able=false;\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.x==core.nextX() && block.y==core.nextY() && block.event.id=='ice') {\n\t\tcore.status.event.data = [i];\n\t\table=true;\n\t}\n}\nable", - "bomb": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls.indexOf('enemy')==0 && \n\t\tMath.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\tif (core.isset(enemy) && enemy.notBomb) continue;\n\t\tif (core.flags.bombFourDirections || (block.x==core.nextX() && block.y==core.nextY()))\n\t\t\tids.push(i);\n\t\telse\n\t\t\tid2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", - "hammer": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.cls.indexOf('enemy')==0 && \n\t\tMath.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\tif (core.isset(enemy) && enemy.notBomb) continue;\n\t\tif (block.x==core.nextX() && block.y==core.nextY())\n\t\t\tids.push(i);\n\t\telse\n\t\t\tid2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", - "earthquake": "var able=false;\nvar ids = [];\nfor (var i in core.status.thisMap.blocks) {\n var block = core.status.thisMap.blocks[i];\n if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && (block.event.id == 'yellowWall' || block.event.id == 'blueWall' || block.event.id == 'whiteWall')) // 能炸的墙壁\n ids.push(i);\n}\nif (ids.length>0) {\n core.status.event.data = ids;\n able=true;\n}\nable", + "pickaxe": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !block.disable \n\t\t&& Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1\n\t\t&& (block.event.id == 'yellowWall' || block.event.id=='whiteWall' || block.event.id=='blueWall')) // 能破哪些墙\n\t{\n\t\t// 四个方向\n\t\tif (core.flags.pickaxeFourDirections || (block.x == core.nextX() && block.y == core.nextY()))\n\t\t\tids.push(i);\n\t\telse id2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", + "icePickaxe": "var able=false;\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !block.disable && block.x==core.nextX() && block.y==core.nextY() && block.event.id=='ice') {\n\t\tcore.status.event.data = [i];\n\t\table=true;\n\t}\n}\nable", + "bomb": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !block.disable && block.event.cls.indexOf('enemy')==0 && \n\t\tMath.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\tif (core.isset(enemy) && enemy.notBomb) continue;\n\t\tif (core.flags.bombFourDirections || (block.x==core.nextX() && block.y==core.nextY()))\n\t\t\tids.push(i);\n\t\telse\n\t\t\tid2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", + "hammer": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !block.disable && block.event.cls.indexOf('enemy')==0 && \n\t\tMath.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\tif (core.isset(enemy) && enemy.notBomb) continue;\n\t\tif (block.x==core.nextX() && block.y==core.nextY())\n\t\t\tids.push(i);\n\t\telse\n\t\t\tid2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", + "earthquake": "var able=false;\nvar ids = [];\nfor (var i in core.status.thisMap.blocks) {\n var block = core.status.thisMap.blocks[i];\n if (core.isset(block.event) && !block.disable && (block.event.id == 'yellowWall' || block.event.id == 'blueWall' || block.event.id == 'whiteWall')) // 能炸的墙壁\n ids.push(i);\n}\nif (ids.length>0) {\n core.status.event.data = ids;\n able=true;\n}\nable", "centerFly": "var toX = (core.bigmap.width||13)-1-core.getHeroLoc('x'), toY = (core.bigmap.height||13)-1-core.getHeroLoc('y');\ncore.getBlockId(toX, toY) == null", "upFly": "var able=false;\nvar floorId = core.status.floorId, index = core.floorIds.indexOf(floorId);\nif (index0) {\n\tvar toId = core.floorIds[index-1], toX = core.getHeroLoc('x'), toY = core.getHeroLoc('y');\n\tif (core.getBlock(toX, toY, toId)==null) {\n\t\tcore.status.event.data = {'id': toId, 'x': toX, 'y': toY};\n\t\table=true;\n\t}\n}\nable", - "snow": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) \n\t\t&& block.event.id == 'lava' && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tif (core.flags.snowFourDirections || (block.x == core.nextX() && block.y == core.nextY()))\n\t\t\tids.push(i);\n\t\telse id2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", - "bigKey": "var able=false;\nvar ids = [];\nfor (var i in core.status.thisMap.blocks) {\n var block = core.status.thisMap.blocks[i];\n if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable) && block.event.id == 'yellowDoor') {\n ids.push(i);\n }\n}\nif (ids.length>0) {\n core.status.event.data = ids;\n able=true;\n}\nable", + "snow": "var able=false;\nvar ids = [], id2s = [];\nfor (var i in core.status.thisMap.blocks) {\n\tvar block = core.status.thisMap.blocks[i];\n\tif (core.isset(block.event) && !block.disable \n\t\t&& block.event.id == 'lava' && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {\n\t\tif (core.flags.snowFourDirections || (block.x == core.nextX() && block.y == core.nextY()))\n\t\t\tids.push(i);\n\t\telse id2s.push(i);\n\t}\n}\nif (ids.length>0) {\n\tcore.status.event.data = ids;\n\table=true;\n}\nelse if (id2s.length==1) {\n\tcore.status.event.data = id2s;\n\table=true;\n}\nable", + "bigKey": "var able=false;\nvar ids = [];\nfor (var i in core.status.thisMap.blocks) {\n var block = core.status.thisMap.blocks[i];\n if (core.isset(block.event) && !block.disable && block.event.id == 'yellowDoor') {\n ids.push(i);\n }\n}\nif (ids.length>0) {\n core.status.event.data = ids;\n able=true;\n}\nable", "poisonWine": "core.hasFlag('poison')", "weakWine": "core.hasFlag('weak')", "curseWine": "core.hasFlag('curse')",