From 4e1eafc2baa69dd258bc738004551bff0f4bb424 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Thu, 10 May 2018 22:49:22 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=20-=20?= =?UTF-8?q?=E5=9C=A8=E7=B4=A0=E6=9D=90=E5=8C=BA=E9=80=89=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/css/editor.css | 23 +++ _server/editor.js | 47 +++++- _server/vm.js | 3 + editor.html | 10 ++ project/floors/sample0.js | 306 ++++++++++++++++++++++++-------------- 5 files changed, 278 insertions(+), 111 deletions(-) diff --git a/_server/css/editor.css b/_server/css/editor.css index 90dde66c..6cf8473f 100644 --- a/_server/css/editor.css +++ b/_server/css/editor.css @@ -340,6 +340,29 @@ table.row td { background-color: rgba(76, 34, 27, .5); } +#menuDiv * { margin: 0; padding: 0; } +#midMenu{ + z-index: 101; + width: 10em; + background: rgba(255, 255, 255, 0.65); + position: absolute; + /* display: none; */ +} +#midMenu ul{ + width: 100%; + list-style: none; + border: 1px solid #000; + border-bottom: 0px; +} +#midMenu ul li{ + /* height: 30px; */ + /* font-size: 16px; */ + color: #000; + /* line-height: 30px; */ + /* text-align: center; */ + border-bottom: 1px solid #000; +} + /* for vue dom */ [v-cloak] { display: none !important; diff --git a/_server/editor.js b/_server/editor.js index 75f6bbbd..1c343943 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -427,7 +427,15 @@ editor.prototype.listen = function () { uc.clearRect(0, 0, 416, 416); }//用于鼠标移出canvas时的自动清除状态 + eui.oncontextmenu=function(e){e.preventDefault()} + eui.onmousedown = function (e) { + if (e.button==2){ + editor.showMidMenu(e.clientX,e.clientY); + var loc = eToLoc(e); + var pos = locToPos(loc); + return; + } if (!selectBox.isSelected) { var loc = eToLoc(e); var pos = locToPos(loc); @@ -489,7 +497,7 @@ editor.prototype.listen = function () { holdingPath = 0; e.stopPropagation(); var loc = eToLoc(e); - if (stepPostfix.length) { + if (stepPostfix && stepPostfix.length) { preMapData = JSON.parse(JSON.stringify(editor.map)); currDrawData.pos = JSON.parse(JSON.stringify(stepPostfix)); currDrawData.info = JSON.parse(JSON.stringify(editor.info)); @@ -535,6 +543,7 @@ editor.prototype.listen = function () { } } + var dataSelection = document.getElementById('dataSelection'); edata.onmousedown = function (e) { e.stopPropagation(); var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; @@ -602,6 +611,42 @@ editor.prototype.listen = function () { } } + var midMenu=document.getElementById('midMenu'); + midMenu.oncontextmenu=function(e){e.preventDefault()} + editor.showMidMenu=function(x,y){ + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + midMenu.style='top:'+(y+scrollTop)+'px;left:'+(x+scrollLeft)+'px;'; + } + editor.hideMidMenu=function(){midMenu.style='display:none';} + + var chooseInRight = document.getElementById('chooseInRight'); + chooseInRight.onmousedown = function(e){ + editor.hideMidMenu(); + e.stopPropagation(); + var thisevent = editor.map[editor.pos.y][editor.pos.x]; + var pos={x: 0, y: 0, images: "terrains"}; + var ysize = 32; + console.log(thisevent) + if(thisevent==0){ + //选中清除块 + editor.info = 0; + editor.pos=pos; + } else { + editor.info=editor.ids[editor.indexs[thisevent.idnum]]; + pos.x=editor.widthsX[thisevent.images][1]; + pos.y=editor.info.y; + ysize = thisevent.images.indexOf('48') === -1 ? 32 : 48; + } + setTimeout(function(){selectBox.isSelected = true;}); + dataSelection.style.left = pos.x * 32 + 'px'; + dataSelection.style.top = pos.y * ysize + 'px'; + dataSelection.style.height = ysize - 6 + 'px'; + tip.infos = JSON.parse(JSON.stringify(editor.info)); + editor_mode.onmode('nextChange'); + editor_mode.onmode('emenyitem'); + } + }//绑定事件 /* diff --git a/_server/vm.js b/_server/vm.js index 64471533..e23fd65d 100644 --- a/_server/vm.js +++ b/_server/vm.js @@ -29,6 +29,9 @@ document.body.onmousedown = function (e) { } //editor.mode.onmode(''); editor.info = {}; + if (e.button!=2){ + editor.hideMidMenu(); + } } iconLib.onmousedown = function (e) { e.stopPropagation(); diff --git a/editor.html b/editor.html index b296cbbb..05719170 100644 --- a/editor.html +++ b/editor.html @@ -266,6 +266,16 @@ + From 932bbfd60b7841acac091eaa92902a46b9d02b98 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 11 May 2018 16:26:27 +0800 Subject: [PATCH 3/4] menu --- _server/editor.js | 118 ++++++++++++++++++++++++++++++++++++++++++---- editor.html | 8 ++-- 2 files changed, 114 insertions(+), 12 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index 83d349cc..7f9d1fca 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -348,6 +348,7 @@ editor.prototype.updateMap = function () { } else drawTile(eventCtx, x, y, tileInfo); } // 绘制地图 end + } editor.prototype.changeFloor = function (floorId, callback) { @@ -431,9 +432,9 @@ editor.prototype.listen = function () { eui.onmousedown = function (e) { if (e.button==2){ - editor.showMidMenu(e.clientX,e.clientY); var loc = eToLoc(e); var pos = locToPos(loc); + editor.showMidMenu(e.clientX,e.clientY); return; } if (!selectBox.isSelected) { @@ -442,7 +443,7 @@ editor.prototype.listen = function () { editor_mode.onmode('nextChange'); editor_mode.onmode('loc'); //editor_mode.loc(); - tip.whichShow = 1; + //tip.whichShow = 1; return; } @@ -460,7 +461,7 @@ editor.prototype.listen = function () { eui.onmousemove = function (e) { if (!selectBox.isSelected) { - // tip.whichShow = 1; + //tip.whichShow = 1; return; } @@ -491,7 +492,7 @@ editor.prototype.listen = function () { eui.onmouseup = function (e) { if (!selectBox.isSelected) { - tip.whichShow = 1; + //tip.whichShow = 1; return; } holdingPath = 0; @@ -613,13 +614,33 @@ editor.prototype.listen = function () { var midMenu=document.getElementById('midMenu'); midMenu.oncontextmenu=function(e){e.preventDefault()} + editor.lastRightButtonPos=[{x:0,y:0},{x:0,y:0}]; editor.showMidMenu=function(x,y){ + editor.lastRightButtonPos=JSON.parse(JSON.stringify( + [editor.pos,editor.lastRightButtonPos[0]] + )); + var locStr='('+editor.lastRightButtonPos[1].x+','+editor.lastRightButtonPos[1].y+')'; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + copyLoc.children[0].innerHTML='复制此事件到'+locStr; + moveLoc.children[0].innerHTML='移动此事件到'+locStr; midMenu.style='top:'+(y+scrollTop)+'px;left:'+(x+scrollLeft)+'px;'; } editor.hideMidMenu=function(){midMenu.style='display:none';} + var chooseThis = document.getElementById('chooseThis'); + chooseThis.onmousedown = function(e){ + editor.hideMidMenu(); + e.stopPropagation(); + selectBox.isSelected = false; + var loc = eToLoc(e); + var pos = locToPos(loc); + editor_mode.onmode('nextChange'); + editor_mode.onmode('loc'); + //editor_mode.loc(); + //tip.whichShow = 1; + } + var chooseInRight = document.getElementById('chooseInRight'); chooseInRight.onmousedown = function(e){ editor.hideMidMenu(); @@ -627,7 +648,6 @@ editor.prototype.listen = function () { var thisevent = editor.map[editor.pos.y][editor.pos.x]; var pos={x: 0, y: 0, images: "terrains"}; var ysize = 32; - console.log(thisevent) if(thisevent==0){ //选中清除块 editor.info = 0; @@ -650,28 +670,108 @@ editor.prototype.listen = function () { editor_mode.onmode('emenyitem'); } + var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); + var copyLoc = document.getElementById('copyLoc'); copyLoc.onmousedown = function(e){ editor.hideMidMenu(); e.stopPropagation(); + preMapData = null; + reDo = null; var thisevent = editor.map[editor.pos.y][editor.pos.x]; if(thisevent==0){ - + editor.info = 0; } else { - + var ids=editor.indexs[thisevent.idnum]; + ids=ids[0]?ids[0]:ids; + editor.info=editor.ids[ids]; } + editor_mode.onmode(''); + var now = editor.pos; + var last = editor.lastRightButtonPos[1]; + editor.map[last.y][last.x]=editor.info; + editor.updateMap(); + fields.forEach(function(v){ + editor.currentFloorData[v][last.x+','+last.y]=editor.currentFloorData[v][now.x+','+now.y] + }) + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('复制事件成功'); + editor.drawEventBlock(); + }); } var moveLoc = document.getElementById('moveLoc'); moveLoc.onmousedown = function(e){ editor.hideMidMenu(); e.stopPropagation(); + preMapData = null; + reDo = null; var thisevent = editor.map[editor.pos.y][editor.pos.x]; if(thisevent==0){ - + editor.info = 0; } else { - + var ids=editor.indexs[thisevent.idnum]; + ids=ids[0]?ids[0]:ids; + editor.info=editor.ids[ids]; } + editor_mode.onmode(''); + var now = editor.pos; + var last = editor.lastRightButtonPos[1]; + + var lastevent = editor.map[last.y][last.x]; + var lastinfo = 0; + if(lastevent==0){ + lastinfo = 0; + } else { + var ids=editor.indexs[lastevent.idnum]; + ids=ids[0]?ids[0]:ids; + lastinfo=editor.ids[ids]; + } + editor.map[last.y][last.x]=editor.info; + editor.map[now.y][now.x]=lastinfo; + editor.updateMap(); + + fields.forEach(function(v){ + var temp_atsfcytaf=editor.currentFloorData[v][now.x+','+now.y]; + editor.currentFloorData[v][now.x+','+now.y]=editor.currentFloorData[v][last.x+','+last.y]; + editor.currentFloorData[v][last.x+','+last.y]=temp_atsfcytaf + }) + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('两位置的事件已互换'); + editor.drawEventBlock(); + }); + } + + var clearLoc = document.getElementById('clearLoc'); + clearLoc.onmousedown = function(e){ + editor.hideMidMenu(); + e.stopPropagation(); + preMapData = null; + reDo = null; + editor.info = 0; + editor_mode.onmode(''); + var now = editor.pos; + editor.map[now.y][now.x]=editor.info; + editor.updateMap(); + fields.forEach(function(v){ + editor.currentFloorData[v][now.x+','+now.y]=null; + }) + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('清空此点及事件成功'); + editor.drawEventBlock(); + }); } }//绑定事件 diff --git a/editor.html b/editor.html index dbb87087..f83105d0 100644 --- a/editor.html +++ b/editor.html @@ -268,9 +268,11 @@ From b8989b882d8b87f5535d4a1410e9a945b62fe6e5 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 11 May 2018 16:35:09 +0800 Subject: [PATCH 4/4] revert sample0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 不小心修改了此文件就提交了 --- project/floors/sample0.js | 312 ++++++++++++++------------------------ 1 file changed, 113 insertions(+), 199 deletions(-) diff --git a/project/floors/sample0.js b/project/floors/sample0.js index 129c9f1b..78e04a85 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -1,206 +1,120 @@ -main.floors.sample0= +main.floors.sample0 = { -"floorId": "sample0", -"title": "样板 0 层", -"name": "0", -"canFlyTo": true, -"canUseQuickShop": true, -"defaultGround": "ground", -"images": [], -"bgm": "bgm.mp3", -"item_ratio": 2, -"map": [ - [ 0, 0,220, 0, 0, 20, 87, 3, 65, 64, 44, 43, 42], - [ 0,246, 0,246, 0, 20, 0, 3, 58, 59, 60, 61, 41], - [219, 0, 0, 0,219, 20, 0, 3, 57, 26, 62, 63, 40], - [ 20, 20,125, 20, 20, 20, 0, 3, 53, 54, 55, 56, 39], - [216,247,263,235,248, 6, 0, 3, 49, 50, 51, 52, 38], - [ 6, 6,125, 6, 6, 6, 0, 1, 45, 46, 47, 48, 37], - [224,254,212,262,204, 5, 0, 1, 31, 32, 34, 33, 36], - [201,261,217,264,207, 5, 0, 1, 27, 28, 29, 30, 35], - [ 5, 5,125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 25], - [ 0, 0,237, 0, 0, 0, 45, 1, 1, 1,121, 1, 1], - [ 4, 4,133, 4, 4, 4, 0, 0, 0, 0, 0, 85,124], - [ 87, 11, 12, 13, 14, 4, 4, 2, 2, 2,122, 2, 2], - [ 88, 89, 90, 91, 92, 93, 94, 2, 81, 82, 83, 84, 86] -], -"firstArrive": [ - "\t[样板提示]首次到达某层可以触发 firstArrive 事件,该事件可类似于RMXP中的“自动执行脚本”。\n\n本事件支持一切的事件类型,常常用来触发对话,例如:", - "\t[hero]\b[up,hero]我是谁?我从哪来?我又要到哪去?", - "\t[仙子,fairy]你问我...?我也不知道啊...", - "本层主要对道具、门、怪物等进行介绍,有关事件的各种信息在下一层会有更为详细的说明。" -], -"events": { - "10,9": [ - "\t[老人,man]这些是本样板支持的所有的道具。\n\n道具分为三类:items, constants, tools。\nitems 为即捡即用类道具,例如宝石、血瓶、剑盾等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\n\n后两类道具在工具栏中可以看到并使用。", - "\t[老人,man]\b[up]有关道具效果,定义在items.js中。\n目前大多数道具已有默认行为,如有自定义的需求则需在items.js中修改代码。", - "\t[老人,man]constants 和 tools 各最多只允许12种,多了会导致图标溢出。", - "\t[老人,man]\b[up]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", - { - "type": "hide", - "time": 500 - } + "floorId": "sample0", // 这里需要改楼层名,请和文件名及下面的floorId保持完全一致 + // 楼层唯一标识符仅能由字母、数字、下划线组成,且不能由数字开头 + // 推荐用法:第20层就用MT20,第38层就用MT38,地下6层就用MT_6(用下划线代替负号),隐藏3层用MT3h(h表示隐藏),等等 + // 楼层唯一标识符,需要和名字完全一致 + "title": "样板 0 层", // 楼层中文名 + "name": "0", // 显示在状态栏中的层数 + "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) + "canUseQuickShop": true, // 该层是否允许使用快捷商店 + "defaultGround": "ground", // 默认地面的图块ID(terrains中) + "images": [], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 + // "color": [0,0,0,0.3] // 该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组。 + // "weather": ["snow",5], // 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain"或"snow"代表雨雪,第二项为1-10之间的数代表强度。 + "bgm": "bgm.mp3", // 到达该层后默认播放的BGM。本项可忽略。 + "item_ratio": 2, // 该层的宝石/血瓶倍率 + "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 + [0, 0, 220, 0, 0, 20, 87, 3, 65, 64, 44, 43, 42], + [0, 246, 0, 246, 0, 20, 0, 3, 58, 59, 60, 61, 41], + [219, 0, 0, 0, 219, 20, 0, 3, 57, 26, 62, 63, 40], + [20, 20, 125, 20, 20, 20, 0, 3, 53, 54, 55, 56, 39], + [216, 247, 263, 235, 248, 6, 0, 3, 49, 50, 51, 52, 38], + [6, 6, 125, 6, 6, 6, 0, 1, 45, 46, 47, 48, 37], + [224, 254, 212, 262, 204, 5, 0, 1, 31, 32, 34, 33, 36], + [201, 261, 217, 264, 207, 5, 0, 1, 27, 28, 29, 30, 35], + [5, 5, 125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 25], + [0, 0, 237, 0, 0, 0, 45, 1, 1, 1, 121, 1, 1], + [4, 4, 133, 4, 4, 4, 0, 0, 0, 0, 0, 85, 124], + [87, 11, 12, 13, 14, 4, 4, 2, 2, 2, 122, 2, 2], + [88, 89, 90, 91, 92, 93, 94, 2, 81, 82, 83, 84, 86], ], - "10,11": [ - "\t[老人,woman]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", - "\t[老人,woman]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", - { - "type": "hide", - "time": 500 - } + "firstArrive": [ // 第一次到该楼层触发的事件 + "\t[样板提示]首次到达某层可以触发 firstArrive 事件,该事件可类似于RMXP中的“自动执行脚本”。\n\n本事件支持一切的事件类型,常常用来触发对话,例如:", + "\t[hero]\b[up,hero]我是谁?我从哪来?我又要到哪去?", + "\t[仙子,fairy]你问我...?我也不知道啊...", + "本层主要对道具、门、怪物等进行介绍,有关事件的各种信息在下一层会有更为详细的说明。", ], - "2,10": [ - "\t[少女,npc0]这些是路障、楼梯、传送门。", - "\t[少女,npc0]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。", - "\t[少女,npc0]楼梯和传送门需要在changeFloor中定义目标楼层和位置,可参见样板里已有的的写法。", - { - "type": "hide", - "time": 500 - } - ], - "2,8": [ - "\t[老人,magician]这些都是各种各样的怪物,所有怪物的数据都在enemys.js中设置。", - "\t[老人,magician]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", - "\t[老人,magician]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", - { - "type": "hide", - "time": 500 - } - ], - "2,5": [ - "\t[老人,magician]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", - { - "type": "hide", - "time": 500 - } - ], - "2,3": [ - "\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", - "\t[老人,magician]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", - { - "type": "hide", - "time": 500 - } - ], - "12,10": { - "enable": false, - "data": [ - "\t[仙子,fairy]只有楼上启用事件后,才能看到我并可以和我对话来触发事件。", - { - "type": "hide", - "time": 500 - } - ] - } -}, -"changeFloor": { - "6,0": { - "floorId": "sample1", - "stair": "downFloor" - }, - "0,11": { - "floorId": "sample0", - "loc": [ - 0, - 12 - ] - }, - "0,12": { - "floorId": "sample0", - "stair": "upFloor" - }, - "1,12": { - "floorId": "sample0", - "loc": [ - 1, - 12 - ] - }, - "2,12": { - "floorId": "sample0", - "loc": [ - 2, - 12 - ] - }, - "3,12": { - "floorId": "sample0", - "loc": [ - 6, - 1 + "events": { // 该楼的所有可能事件列表 + "10,9": [ // 守着道具的老人 + "\t[老人,man]这些是本样板支持的所有的道具。\n\n道具分为三类:items, constants, tools。\nitems 为即捡即用类道具,例如宝石、血瓶、剑盾等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\n\n后两类道具在工具栏中可以看到并使用。", + "\t[老人,man]\b[up]有关道具效果,定义在items.js中。\n目前大多数道具已有默认行为,如有自定义的需求则需在items.js中修改代码。", + "\t[老人,man]constants 和 tools 各最多只允许12种,多了会导致图标溢出。", + "\t[老人,man]\b[up]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + {"type": "hide", "time": 500} // 消失 ], - "direction": "up" - }, - "4,12": { - "floorId": "sample0", - "loc": [ - 0, - 9 + "10,11": [ // 守着门的老人 + "\t[老人,woman]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", + "\t[老人,woman]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + {"type": "hide", "time": 500} ], - "direction": "left", - "time": 1000 - }, - "5,12": { - "floorId": "sample0", - "loc": [ - 6, - 10 + "2,10": [ // 守着楼梯、传送门、路障的老人 + "\t[少女,npc0]这些是路障、楼梯、传送门。", + "\t[少女,npc0]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。", + "\t[少女,npc0]楼梯和传送门需要在changeFloor中定义目标楼层和位置,可参见样板里已有的的写法。", + {"type": "hide", "time": 500} ], - "time": 0, - "portalWithoutTrigger": false - }, - "6,12": { - "floorId": "sample0", - "loc": [ - 10, - 10 + "2,8": [ // 守着第一批怪物的老人 + "\t[老人,magician]这些都是各种各样的怪物,所有怪物的数据都在enemys.js中设置。", + "\t[老人,magician]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", + "\t[老人,magician]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + {"type": "hide", "time": 500} ], - "direction": "left", - "time": 1000 - } -}, -"afterBattle": { - "2,6": [ - "\t[ghostSkeleton]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)" - ] -}, -"afterGetItem": { - "11,8": [ - "由于状态栏放不下,绿钥匙和铁门钥匙均视为tools,放入工具栏中。\n碰到绿门和铁门仍然会自动使用开门。" - ], - "8,6": [ - "由于吸血和夹击等的存在,血瓶默认自动被绕路。\n你可以修改data.js中的系统Flag来设置这一项。" - ], - "8,7": [ - "如需修改消耗品的效果,请前往 data.js ,找到并修改values内对应的具体数值即可。\n如果有更高级的需求(如每个区域宝石数值变化),详见doc文档内的做法说明。" - ], - "10,7": [ - "在 data.js 的系统Flag中设置是否启用魔防。\n如果不启用魔防则不会在状态栏显示。" - ], - "9,5": [ - "每层楼的 canFlyTo 决定了该楼层能否被飞到。\n\n不能被飞到的楼层也无法使用楼层传送器。", - "飞行的楼层顺序由 main.js 中 floorIds 加载顺序所决定。\n\n是否必须在楼梯边使用楼传器由 data.js 中的系统Flag所决定。" - ], - "10,5": [ - "破墙镐是破面前的墙壁还是四个方向的墙壁,由data.js中的系统Flag所决定。" - ], - "8,4": [ - "炸弹是只能炸面前的怪物还是四个方向的怪物,由data.js中的系统Flag所决定。\n如只能炸前方怪物则和上面的圣锤等价。\n不能被炸的怪物在enemys中可以定义,可参见样板里黑衣魔王和黑暗大法师的写法。" - ], - "10,4": [ - "“上楼”和“下楼”的目标层由 main.js 的 floorIds顺序所决定。" - ], - "9,2": [ - "该道具默认是大黄门钥匙,如需改为钥匙盒直接修改 data.js 中的系统Flag即可。" - ], - "10,2": [ - "屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见doc文档。" - ] -}, -"afterOpenDoor": { - "11,12": [ - "你开了一个绿门,触发了一个afterOpenDoor事件" - ] -}, -"cannotMove": {}, -} \ No newline at end of file + "2,5": [ // 守着第二批怪物的老人 + "\t[老人,magician]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", + {"type": "hide", "time": 500} + ], + "2,3": [ // 守着第三批怪物的老人 + "\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", + "\t[老人,magician]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", + {"type": "hide", "time": 500} + ], + "12,10": { // 隐藏的仙子 + "enable": false, // enable: false代表初始时禁用事件 + "data": [ + "\t[仙子,fairy]只有楼上启用事件后,才能看到我并可以和我对话来触发事件。", + {"type": "hide", "time": 500} + ] + }, + }, + "changeFloor": { // 楼层转换事件;该事件不能和上面的events有冲突(同位置点),否则会被覆盖 + "6,0": {"floorId": "sample1", "stair": "downFloor"}, // 目标点:sample1层的下楼梯位置 + "0,11": {"floorId": "sample0", "loc": [0,12]}, // 目标点:sample0层的x=0,y=12位置 + "0,12": {"floorId": "sample0", "stair": "upFloor"}, // 注意,目标层有多个楼梯的话,写stair可能会导致到达位置不确定。这时候推荐写loc指明目标点位置。 + "1,12": {"floorId": "sample0", "loc": [1,12]}, + "2,12": {"floorId": "sample0", "loc": [2,12]}, + "3,12": {"floorId": "sample0", "loc": [6,1], "direction": "up"}, // 切换楼层后勇士面对上方 + "4,12": {"floorId": "sample0", "loc": [0,9], "direction": "left", "time": 1000}, // 切换楼层后勇士面对左边,切换动画1000ms + "5,12": {"floorId": "sample0", "loc": [6,10], "time": 0, "portalWithoutTrigger": false}, // time=0表示无切换时间 + "6,12": {"floorId": "sample0", "loc": [10,10], "direction": "left", "time": 1000}, + }, + "afterBattle": { // 战斗后可能触发的事件列表 + "2,6": ["\t[ghostSkeleton]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)"], + }, + "afterGetItem": { // 获得道具后可能触发的事件列表 + "11,8": ["由于状态栏放不下,绿钥匙和铁门钥匙均视为tools,放入工具栏中。\n碰到绿门和铁门仍然会自动使用开门。"], + "8,6": ["由于吸血和夹击等的存在,血瓶默认自动被绕路。\n你可以修改data.js中的系统Flag来设置这一项。"], + "8,7": ["如需修改消耗品的效果,请前往 data.js ,找到并修改values内对应的具体数值即可。\n如果有更高级的需求(如每个区域宝石数值变化),详见doc文档内的做法说明。"], + "10,7": ["在 data.js 的系统Flag中设置是否启用魔防。\n如果不启用魔防则不会在状态栏显示。"], + "9,5": [ + "每层楼的 canFlyTo 决定了该楼层能否被飞到。\n\n不能被飞到的楼层也无法使用楼层传送器。", + "飞行的楼层顺序由 main.js 中 floorIds 加载顺序所决定。\n\n是否必须在楼梯边使用楼传器由 data.js 中的系统Flag所决定。" + ], + "10,5": ["破墙镐是破面前的墙壁还是四个方向的墙壁,由data.js中的系统Flag所决定。"], + "8,4": [ + "炸弹是只能炸面前的怪物还是四个方向的怪物,由data.js中的系统Flag所决定。\n如只能炸前方怪物则和上面的圣锤等价。\n不能被炸的怪物在enemys中可以定义,可参见样板里黑衣魔王和黑暗大法师的写法。", + ], + "10,4": ["“上楼”和“下楼”的目标层由 main.js 的 floorIds顺序所决定。"], + "9,2": ["该道具默认是大黄门钥匙,如需改为钥匙盒直接修改 data.js 中的系统Flag即可。"], + "10,2": ["屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见doc文档。"], + }, + "afterOpenDoor": { // 开完门后可能触发的事件列表 + "11,12": ["你开了一个绿门,触发了一个afterOpenDoor事件"] + }, + "cannotMove": { // 每个图块不可通行的方向 + // 可以在这里定义每个点不能前往哪个方向,例如悬崖边不能跳下去 + // "x,y": ["up", "left"], // (x,y)点不能往上和左走 + + }, + +}