From 8409bb13ed01d4bb308bfc1fcb7d6affea92faa9 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sat, 30 May 2020 10:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E6=9D=BF=E5=B1=82=E6=96=87=E6=A1=88;?= =?UTF-8?q?=E5=85=B3=E9=97=A8=E9=9F=B3=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 2 +- _server/editor_blockly.js | 6 +- libs/events.js | 2 +- project/floors/sample0.js | 78 ++++++++++-------- project/floors/sample1.js | 163 +++++++++++++++++--------------------- 5 files changed, 123 insertions(+), 128 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 27be32d7..a6261e49 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1495,7 +1495,7 @@ tooltip : closeDoor: 关门事件,需要该点本身无事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=opendoor%EF%BC%9A%E5%BC%80%E9%97%A8 default : ["","","yellowDoor",false] selectPoint : ["PosString_0", "PosString_1"] -allIds : ['IdString_0'] +allDoors : ['IdString_0'] colour : this.mapColor var floorstr = ''; if (PosString_0 && PosString_1) { diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 6548af93..e25ee700 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -519,6 +519,10 @@ editor_blockly = function () { namesObj.allColors = ["aqua(青色)", "black(黑色)", "blue(蓝色)", "fuchsia(品红色)", "gray(灰色)", "green(深绿色)", "lime(绿色)", "maroon(深红色)", "navy(深蓝色)", "gold(金色)", "olive(黄褐色)", "orange(橙色)", "purple(品红色)", "red(红色)", "silver(淡灰色)", "teal(深青色)", "white(白色)", "yellow(黄色)"]; + namesObj.allDoors = ["this"].concat(Object.keys(maps_90f36752_8815_4be8_b32b_d7fad1d0542e) + .map(function (key) { return maps_90f36752_8815_4be8_b32b_d7fad1d0542e[key]; }) + .filter(function (one) { return one.doorInfo != null; }) + .map(function (one) { return one.id; })); var filter = function (list, content) { return list.filter(function (one) { return one != content && one.startsWith(content); @@ -534,7 +538,7 @@ editor_blockly = function () { // 对音效进行补全 // 对全局商店进行补全 // 对楼层名进行补全 - for(var ii=0,names;names=['allIds','allEnemys','allItems','allImages','allAnimates','allBgms','allSounds','allShops','allFloorIds'][ii];ii++){ + for(var ii=0,names;names=['allIds','allEnemys','allItems','allImages','allAnimates','allBgms','allSounds','allShops','allFloorIds','allDoors'][ii];ii++){ if (MotaActionBlocks[type][names] && eval(MotaActionBlocks[type][names]).indexOf(name)!==-1) { return filter(namesObj[names], content); } diff --git a/libs/events.js b/libs/events.js index 0b5f0896..a55c540a 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2643,7 +2643,7 @@ events.prototype.closeDoor = function (x, y, id, callback) { } // 关门动画 - core.playSound(doorInfo.closeDoor); + core.playSound(doorInfo.closeSound); var blockInfo = core.getBlockInfo(id); var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; diff --git a/project/floors/sample0.js b/project/floors/sample0.js index cc88bc8d..db837884 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -30,6 +30,11 @@ main.floors.sample0= "background": "winskin.png", "time": 0 }, + { + "type": "setValue", + "name": "status:animate", + "value": "true" + }, "\t[样板提示]首次到达某层可以触发 firstArrive 事件,该事件可类似于RMXP中的“自动执行脚本”。\n\n本事件支持一切的事件类型,常常用来触发对话,例如:", "\t[hero]\b[up,hero]我是谁?我从哪来?我又要到哪去?", "\t[仙子,fairy]你问我...?我也不知道啊...", @@ -37,8 +42,8 @@ main.floors.sample0= ], "events": { "10,9": [ - "\t[老人,man]这些是本样板支持的所有的道具。\n\n道具分为四类:items, constants, tools,equips。\nitems 为即捡即用类道具,例如宝石、血瓶、剑盾等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\nequips 为装备,例如剑盾等。", - "\t[老人,man]\b[up]有关道具效果,定义在items.js中。\n目前大多数道具已有默认行为,如有自定义的需求则需在items.js中修改代码。", + "\t[老人,man]\b[down,null]这些是本样板支持的所有的道具。\n\n道具分为四类:items, constants, tools,equips。\nitems 为即捡即用类道具,例如宝石、血瓶等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\nequips 为装备,例如剑盾等。", + "\t[老人,man]\b[up]有关道具效果,定义在project文件夹的items.js中。\n目前大多数道具已有默认行为,如有自定义的需求请修改道具的图块属性。", "\t[老人,man]\b[up]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", { "type": "hide", @@ -46,56 +51,59 @@ main.floors.sample0= } ], "10,11": [ - "\t[老人,trader]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", - "\t[老人,trader]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + "\t[老人,trader]\b[this]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", + "\t[老人,trader]\b[this]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", { "type": "hide", "time": 500 } ], "2,10": [ - "\t[少女,npc0]这些是路障、楼梯、传送门。", - "\t[少女,npc0]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。", - "\t[少女,npc0]楼梯和传送门需要在changeFloor中定义目标楼层和位置,可参见样板里已有的的写法。", - { - "type": "hide", - "time": 500 - } - ], - "2,8": [ - "\t[老人,wizard]这些都是各种各样的怪物,所有怪物的数据都在enemys.js中设置。", - "\t[老人,wizard]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", - "\t[老人,wizard]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + "\t[少女,npc0]\b[this]这些是路障、楼梯、传送门。", + "\t[少女,npc1]\b[this]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在全塔属性(快捷键B)的全局数值(values)内定义。\n\n路障同样会尽量被自动寻路绕过。", + "\t[少女,npc2]\b[this]楼梯和传送门需要在地图选点(快捷键X)的“楼层转换”中定义目标楼层和位置,可参见样板里已有的的写法。", { "type": "hide", "time": 500 } ], "2,5": [ - "\t[老人,wizard]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", + "\t[老人,wizard]\b[this]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", { "type": "hide", "time": 500 } ], "2,3": [ - "\t[老人,wizard]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", - "\t[老人,wizard]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", + "\t[老人,wizard]\b[this]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", + "\t[老人,wizard]\b[this]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", { "type": "hide", "time": 500 } ], "12,10": { + "trigger": null, "enable": false, + "noPass": null, + "displayDamage": true, "data": [ - "\t[仙子,fairy]只有楼上启用事件后,才能看到我并可以和我对话来触发事件。", + "\t[仙子,fairy]\b[this]只有楼上启用事件后,才能看到我并可以和我对话来触发事件。", { "type": "hide", "time": 500 } ] - } + }, + "2,8": [ + "\t[老人,wizard]\b[this]这些都是各种各样的怪物,所有怪物的数据都在project文件夹的enemys.js中设置。", + "\t[老人,wizard]\b[this]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", + "\t[老人,wizard]\b[this]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + { + "type": "hide", + "time": 500 + } + ] }, "changeFloor": { "6,0": { @@ -165,46 +173,46 @@ main.floors.sample0= }, "afterBattle": { "2,6": [ - "\t[ghostSkeleton]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)" + "\t[ghostSoldier]\b[this]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)" ] }, "afterGetItem": { "11,8": [ - "由于状态栏放不下,绿钥匙和铁门钥匙均视为tools,放入工具栏中。\n碰到绿门和铁门仍然会自动使用开门。" + "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门仍然会自动使用钥匙(根据全塔属性的系统开关勾选与否,铁门可能不需要钥匙)开门。" ], "8,6": [ - "由于吸血和夹击等的存在,血瓶默认自动被绕路。\n你可以修改data.js中的系统Flag来设置这一项。" + "由于吸血、夹击和净化等的存在,玩家可能希望自动寻路能尽量绕开血瓶和绿宝石,\n他们可以自行在游戏设置中开关这一功能。" ], "8,7": [ - "如需修改消耗品的效果,请前往 data.js ,找到并修改values内对应的具体数值即可。\n如果有更高级的需求(如每个区域宝石数值变化),详见doc文档内的做法说明。" + "如需修改消耗品的效果,请前往全塔属性(快捷键B),找到并修改values(全局数值)内对应的具体数值即可。\n如果有高级的需求(如每个区域宝石数值变化),请修改楼层属性(快捷键V)最下方的“宝石血瓶效果”。\n如果有更高级的需求,请阅读帮助文档。" ], "9,5": [ - "每层楼的 canFlyTo 决定了该楼层能否被飞到。\n\n不能被飞到的楼层也无法使用楼层传送器。", - "飞行的楼层顺序由 main.js 中 floorIds 加载顺序所决定。\n\n是否必须在楼梯边使用楼传器由 data.js 中的系统Flag所决定。" + "每层楼的“可楼传”勾选框决定了该楼层能否被飞到。\n\n勇士在不能被飞到的楼层也无法使用楼层传送器。", + "飞行的楼层顺序由全塔属性(快捷键B)中的“楼层列表”所决定。\n\n是否必须在楼梯边使用楼传器由全塔属性中的系统开关所决定。" ], "10,5": [ - "破墙镐是破面前的墙壁还是四个方向的墙壁,由data.js中的系统Flag所决定。" + "破墙镐是破面前的墙壁还是四个方向的墙壁,由其图块属性(快捷键C)的“使用效果”决定。\n哪些图块(怪物和道具除外)可以被破震,由该图块的图块属性中的“可破震”决定。" ], "8,4": [ - "炸弹是只能炸面前的怪物还是四个方向的怪物,由data.js中的系统Flag所决定。\n如只能炸前方怪物则和上面的圣锤等价。\n不能被炸的怪物在enemys中可以定义,可参见样板里黑衣魔王和黑暗大法师的写法。" + "炸弹是只能炸面前的怪物还是四个方向的怪物,由其图块属性(快捷键C)中的“使用效果”决定。\n不能被炸的怪物请直接在该怪物的图块属性中勾选“不可炸”,可参见样板里黑衣魔王和黑暗大法师的写法。" ], "10,4": [ - "“上楼”和“下楼”的目标层由 main.js 的 floorIds顺序所决定。" + "“上楼”和“下楼”的目标层由全塔属性(快捷键B)的“楼层列表”顺序所决定。" ], "9,2": [ - "该道具默认是大黄门钥匙,如需改为钥匙盒直接修改 data.js 中的系统Flag即可。" + "该道具默认是大黄门钥匙,如需改为钥匙盒直接修改其图块属性(快捷键C)的“道具类别”为items即可。" ], "10,2": [ - "屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见doc文档。" + "屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见帮助文档。" ], "12,7": [ - "在 data.js 的系统Flag中设置是否启用装备栏。\n如果不启用则装备会直接增加属性。" + "剑盾的道具类别设为equips才可以装备,\n如果设为items则会直接增加属性。" ], "12,6": [ - "在 data.js 的系统Flag中设置是否启用装备栏按钮。\n如果启用则装备栏按钮会替代楼传按钮。" + "在全塔属性(快捷键B)的系统开关中设置是否启用装备栏按钮。\n如果启用则装备栏按钮会替代楼传按钮。\n无论是否启用,玩家都可以双击道具栏按钮呼出装备栏。" ], "12,5": [ - "装备的种类由全塔属性中的equipName决定,type的值就是该类型在equipName中的位次,例如默认情况下equiptype为0代表武器,同时只有type为0的装备的animate属性生效" + "装备的种类由全塔属性(快捷键B)中的“装备孔”决定,每件装备的“类型”就是在“装备孔”中的索引,\n例如默认情况下0代表武器。同时,只有第一个装备孔中的装备,其“普攻动画”属性才会生效。" ] }, "afterOpenDoor": { diff --git a/project/floors/sample1.js b/project/floors/sample1.js index ea62368b..ae4695cb 100644 --- a/project/floors/sample1.js +++ b/project/floors/sample1.js @@ -27,54 +27,37 @@ main.floors.sample1= [152,152,152,152,121,152,152,152, 0, 0,229, 0, 0], [ 43, 33, 44,151, 0, 0, 0,152,165,161, 0,163,165], [ 21, 22, 21,151, 0, 0, 0,152,166,165, 0,165,166], - [151,245,151,151, 0, 87, 0,152,152,152, 85,153,153], - [ 0,246, 0,151, 0, 0, 0,152,152,221, 0,221,153], - [246, 0,246,151, 0, 0, 0,121, 85, 0, 0, 0,153], - [151,246,151,151, 0,153,153,153,153,153,153,153,153], + [151, 0,151,151, 0, 87, 0,152,152,152, 85,153,153], + [ 0, 0, 0,151, 0, 0, 0,152,152,221, 0,221,153], + [ 0, 0, 0,151, 0, 0, 0,121, 0, 0, 0, 0,153], + [151, 0,151,151, 0,153,153,153,153,153,153,153,153], [ 0, 0, 0, 0, 0, 0, 0,164, 0, 0,163, 0, 0], [ 1, 1, 1, 1, 0, 20, 0, 0, 0,162, 0,161, 0], [ 1, 0,123, 1, 0, 20,124, 0,121, 0,122, 0,126], - [ 1, 0, 0, 1, 88, 20, 86, 0, 0, 0, 0, 0, 0] + [ 1, 0, 0, 1, 88, 20, 0, 0, 0, 0, 0, 0, 0] ], "firstArrive": [], "events": { "4,10": [ "\t[样板提示]本层楼将会对各类事件进行介绍。", - "左边是一个仿50层的陷阱做法,上方是商店、快捷商店的使用方法,右上是一个典型的杀怪开门的例子,右下是各类可能的NPC事件。", + "左边是一个仿51层的陷阱做法,上方是商店、快捷商店的使用方法,右上是一个典型的杀怪开门的例子,右下是各类可能的NPC事件。", "本样板目前支持的事件列表大致有:\ntext: 显示一段文字(比如你现在正在看到的)\ntip: 左上角显示提示\nshow: 使一个事件有效(可见、可被交互)\nhide: 使一个事件失效(不可见、不可被交互)\ntrigger: 触发另一个地点的事件\nanimate: 显示动画\nbattle: 强制和某怪物战斗\nopenDoor: 无需钥匙开门(例如机关门、暗墙)", - "openShop: 打开一个全局商店\ndisableShop: 禁用一个全局商店\nchangeFloor: 传送勇士到某层某位置\nchangePos: 传送勇士到当层某位置;转向\nshowImage: 显示图片\nsetFg: 更改画面色调\nsetWeather: 更改天气\nmove: 移动事件效果\nmoveHero: 移动勇士效果\nplayBgm: 播放某个背景音乐\npauseBgm: 暂停背景音乐\nresumeBgm: 恢复背景音乐的播放\nplaySound: 播放某个音频", + "openShop: 打开一个全局商店\ndisableShop: 禁用一个全局商店\nchangeFloor: 传送勇士到某层某位置\nchangePos: 传送勇士到当层某位置;转向\nshowImage: 显示图片\nsetCurtain: 更改画面色调\nsetWeather: 更改天气\nmove: 移动事件效果\nmoveHero: 移动勇士效果\nplayBgm: 播放某个背景音乐\npauseBgm: 暂停背景音乐\nresumeBgm: 恢复背景音乐的播放\nplaySound: 播放某个音频", "if: 条件判断\nchoices: 提供选项\nsetValue: 设置勇士属性道具,或某个变量/flag\nupdate: 更新状态栏和地图显伤\nwin: 获得胜利(游戏通关)\nlose: 游戏失败\nsleep: 等待多少毫秒\nexit: 立刻结束当前事件\nfunction: 自定义JS脚本\n\n更多支持的事件还在编写中,欢迎您宝贵的意见。", "有关各事件的样例,可参见本层一些NPC的写法。\n所有事件样例本层都有介绍。\n\n一个自定义事件处理完后,需要调用{\"type\": \"hide\"}该事件才不会再次出现。", { "type": "hide" } ], - "1,5": { - "enable": false, - "data": [] - }, - "1,6": { - "enable": false, - "data": [] - }, - "0,7": { - "enable": false, - "data": [] - }, - "2,7": { - "enable": false, - "data": [] - }, - "1,8": { - "enable": false, - "data": [] - }, "1,7": [ { - "type": "show", + "type": "setBlock", + "number": "redMS", "loc": [ - 1, - 5 + [ + 1, + 5 + ] ], "time": 1500 }, @@ -82,9 +65,10 @@ main.floors.sample1= "type": "sleep", "time": 500 }, - "\t[redKing]欢迎来到魔塔,你是第一百位挑战者。\n若你能打败我所有的手下,我就与你一对一的决斗。\n现在你必须接受我的安排。", + "\t[redMS]\b[this,1,5]欢迎来到魔塔,你是第一百位挑战者。\n若你能打败我所有的手下,我就与你一对一的决斗。\n现在你必须接受我的安排。", { - "type": "show", + "type": "setBlock", + "number": "blueMS", "loc": [ [ 1, @@ -105,10 +89,11 @@ main.floors.sample1= ], "time": 500 }, - "\t[hero]什么?", + "\t[hero]\b[hero]什么?", { - "type": "playSound", - "name": "attack.mp3" + "type": "animate", + "name": "hand", + "loc": "hero" }, { "type": "setValue", @@ -141,13 +126,16 @@ main.floors.sample1= 1, 8 ] - ] + ], + "time": 500 }, { "type": "hide", "loc": [ - 1, - 5 + [ + 1, + 5 + ] ], "time": 500 }, @@ -186,13 +174,13 @@ main.floors.sample1= } ], "2,11": [ - "\t[杰克,thief]喂!醒醒!快醒醒!", + "\t[杰克,thief]\b[this]喂!醒醒!快醒醒!", { "type": "setCurtain", "time": 1500 }, - "\t[hero]额,我这是在什么地方?", - "\t[杰克,thief]你被魔王抓了起来扔进了监狱,和我关在了一起,但是幸运的是我在昨天刚刚挖好一条越狱的暗道!", + "\t[hero]\b[hero]额,我这是在什么地方?", + "\t[杰克,thief]\b[this]你被魔王抓了起来扔进了监狱,和我关在了一起,但是幸运的是我在昨天刚刚挖好一条越狱的暗道!", { "type": "openDoor", "loc": [ @@ -204,7 +192,7 @@ main.floors.sample1= "type": "sleep", "time": 300 }, - "\t[杰克,thief]我先走了,祝你好运!", + "\t[杰克,thief]\b[this]我先走了,祝你好运!", { "type": "move", "time": 750, @@ -215,14 +203,14 @@ main.floors.sample1= ] }, "上面是个move事件,可以对NPC等进行移动。\n详见样板中小偷事件的写法。", - "\t[hero]怎么跑的这么快..." + "\t[hero]\b[hero]怎么跑的这么快..." ], "4,2": [ - "\t[老人,man]本塔的商店有两类,全局商店和非全局商店。\n\n所谓非全局商店,就类似于右下角那个卖钥匙的老人一样,一定要碰到才能触发事件。\n\n而全局商店,则能在快捷商店中直接使用。", - "\t[老人,man]要注册一个全局商店,你需要在 data.js 中,找到 shops,并在内添加你的商店信息。", - "\t[老人,man]商店信息添加后,可以在需要的事件处调用{\"type\": \"openShop\"}来打开你添加的全局商店。", - "\t[老人,man]在上面的例子里,左边是一个仿50层的金币商店,右边是一个仿24层的经验商店。\n\n商店被访问后即可在快捷商店中进行使用。", - "\t[老人,man]如果你需要在某层暂时禁用快捷商店,可以在data.js中设置cannotUseQuickShop。\n如果需要永久禁用商店,请使用{\"type\":\"disableShop\"}", + "\t[老人,man]\b[this]本塔的商店有两类,全局商店和非全局商店。\n\n所谓非全局商店,就类似于右下角那个卖钥匙的老人一样,一定要碰到才能触发事件。\n\n而全局商店,则能在快捷商店中直接使用。", + "\t[老人,man]\b[this]要注册一个全局商店,你需要在全塔属性中,找到“全局商店”,并在内添加你的商店信息。", + "\t[老人,man]\b[this]商店信息添加后,可以在需要的事件处调用{\"type\": \"openShop\"}来打开你添加的全局商店。", + "\t[老人,man]\b[this]在上面的例子里,左边是一个仿51层的金币商店,右边是一个仿24层的经验商店。\n\n商店被访问后即可在快捷商店中进行使用。", + "\t[老人,man]\b[this]如果你需要在某层禁用快捷商店,可以在其楼层属性中设置“快捷商店”。\n如果需要永久禁用商店(直到重新通过触碰NPC打开),请使用{\"type\":\"disableShop\"}", { "type": "hide", "time": 500 @@ -243,18 +231,17 @@ main.floors.sample1= } ], "7,7": [ - "\t[老人,man]这是一个典型的杀怪开门、强制战斗事件。", + "\t[老人,man]\b[this]这是一个典型的杀怪开门、强制战斗事件。", + "\t[老人,man]\b[this]下面的那四个箭头表示单向通行,画在任何一个图层都有效。", { - "type": "hide" + "type": "hide", + "time": 500 } ], - "8,7": { - "enable": false, - "data": [] - }, "9,7": [ { - "type": "show", + "type": "closeDoor", + "id": "specialDoor", "loc": [ 8, 7 @@ -265,16 +252,12 @@ main.floors.sample1= } ], "10,4": [ - "\t[blackMS]你终于还是来了。", - "\t[hero]放开我们的公主!", - "\t[blackMS]如果我不愿意呢?", - "\t[hero]无需多说,拔剑吧!", + "\t[blackMS]\b[this]你终于还是来了。", + "\t[hero]\b[hero]放开我们的公主!", + "\t[blackMS]\b[this]如果我不愿意呢?", + "\t[hero]\b[hero]无需多说,拔剑吧!", { "type": "battle", - "id": "blackMS" - }, - { - "type": "hide", "loc": [ 10, 2 @@ -293,28 +276,25 @@ main.floors.sample1= } ], "10,0": [ - "\t[hero]公主,我来救你了~", - "\t[公主,princess]快救我出去!我受够这里了!", - "\t[hero]公主别怕,我们走吧~", + "\t[hero]\b[hero]公主,我来救你了~", + "\t[公主,princess]\b[this]快救我出去!我受够这里了!", + "\t[hero]\b[hero]公主别怕,我们走吧~", { "type": "win", "reason": "救出公主" } ], - "6,12": { - "enable": false, - "data": [] - }, "6,11": [ - "\t[仙子,fairy]通过调用 {\"type\": \"show\"} 可以使隐藏的事件显示出来。\n比如我下面这个机关门。", + "\t[仙子,fairy]\b[this]通过调用 {\"type\": \"closeDoor\"} 可以在空地关上一扇门或墙。\n比如我下面这个机关门。", { - "type": "show", + "type": "closeDoor", + "id": "steelDoor", "loc": [ 6, 12 ] }, - "\t[仙子,fairy]通过调用 {\"type\": \"openDoor\"} 可以无需钥匙打开一扇门或暗墙。", + "\t[仙子,fairy]\b[this]通过调用 {\"type\": \"openDoor\"} 可以无需钥匙打开一扇门或暗墙。", { "type": "openDoor", "loc": [ @@ -322,7 +302,7 @@ main.floors.sample1= 12 ] }, - "\t[仙子,fairy]同时,也可以对其它层进行操作,比如楼下的机关门,现在已经为你打开了。", + "\t[仙子,fairy]\b[this]同时,也可以对其它层进行操作,比如楼下的机关门,现在已经为你打开了。", { "type": "openDoor", "loc": [ @@ -331,13 +311,15 @@ main.floors.sample1= ], "floorId": "sample0" }, - "\t[仙子,fairy]如果 show 或 hide 指定了 time 参数,则以动画效果显示,指定的参数作为消失时间(毫秒)来计算。", - "\t[仙子,fairy]现在到楼下来找我吧~", + "\t[仙子,fairy]\b[this]如果当前楼层的 show 或 hide 指定了 time 参数,则以动画效果显示,指定的参数作为淡入淡出时间(毫秒)来计算。", + "\t[仙子,fairy]\b[this]现在到楼下来找我吧~", { "type": "show", "loc": [ - 12, - 10 + [ + 12, + 10 + ] ], "floorId": "sample0" }, @@ -353,10 +335,10 @@ main.floors.sample1= "operator": "+=", "value": "1" }, - "\t[老人,man]在文字中使用$+{}可以计算并显示一个表达式的结果。\n", - "\t[老人,man]例如:\n你的当前攻击力是${status:atk},防御力是${status:def}。\n攻防和的十倍是${10*(status:atk+status:def)},攻防之积是${status:atk*status:def}。\n你有${item:yellowKey}把黄钥匙,${item:blueKey}把蓝钥匙,${item:redKey}把红钥匙。\n你有${item:pickaxe}个破,${item:bomb}个炸,${item:centerFly}个飞。\n这是你第${flag:man_times}次和我对话。", - "\t[老人,man]同时,你也可以通过{\"type\": \"setValue\"}来设置一个勇士的属性、道具,或某个Flag。", - "\t[老人,man]例如:\n现在我将让你的攻防提升50%,再将攻防和的十倍加到生命值上。", + "\t[老人,man]\b[this]在文字中使用$+{}可以计算并显示一个表达式的结果。\n", + "\t[老人,man]\b[this]例如:\n你的当前攻击力是${status:atk},防御力是${status:def}。\n攻防和的十倍是${10*(status:atk+status:def)},攻防之积是${status:atk*status:def}。\n你有${item:yellowKey}把黄钥匙,${item:blueKey}把蓝钥匙,${item:redKey}把红钥匙。\n你有${item:pickaxe}个破,${item:bomb}个炸,${item:centerFly}个飞。\n这是你第${flag:man_times}次和我对话。", + "\t[老人,man]\b[this]同时,你也可以通过{\"type\": \"setValue\"}来设置一个勇士的属性、道具,或某个Flag。", + "\t[老人,man]\b[this]例如:\n现在我将让你的攻防提升50%,再将攻防和的十倍加到生命值上。", { "type": "setValue", "name": "status:atk", @@ -375,7 +357,7 @@ main.floors.sample1= "operator": "+=", "value": "10*(status:atk+status:def)" }, - "\t[老人,man]再送你500金币,1000经验,1破2炸3飞!", + "\t[老人,man]\b[this]再送你500金币,1000经验,1破2炸3飞!", { "type": "setValue", "name": "status:money", @@ -406,8 +388,8 @@ main.floors.sample1= "operator": "+=", "value": "3" }, - "\t[老人,man]status:xxx 代表勇士的某个属性。\n其中xxx可取hp, atk, def, mdef, money,exp这几项。\n\nitem:xxx 代表勇士的某个道具的个数。\nxxx为道具ID,具体可参见items.js中的定义。\n\nflag:xxx 代表某个自定义Flag或变量。\nxxx为Flag/变量名,可以自行定义,由字母、数字和下划线组成。\n未定义过而直接取用的Flag默认值为false。", - "\t[老人,man]你现在可以重新和我进行对话,进一步看到属性值的改变。" + "\t[老人,man]\b[this]status:xxx 代表勇士的某个属性。\n其中xxx可取生命、攻击、防御、护盾、金币、经验等很多项。\n\nitem:xxx 代表勇士的某个道具的个数。\nxxx为道具ID,具体可参见items.js中的定义。\n\nflag:xxx 代表某个自定义Flag或变量。\nxxx为Flag/变量名,可以自行定义,由字母、数字和下划线甚至中文组成。\n未定义过而直接取用的Flag默认值为0.", + "\t[老人,man]\b[this]你现在可以重新和我进行对话,进一步看到属性值的改变。" ], "10,11": [ { @@ -562,15 +544,15 @@ main.floors.sample1= } ], "12,11": [ - "\t[老人,recluse]使用 {\"type\":\"function\"} 可以写自定义的JS脚本。\n本塔支持的所有主要API会在doc文档内给出。", - "\t[老人,recluse]例如这个例子:即将弹出一个输入窗口,然后会将你的输入结果直接加到你的攻击力上。", + "\t[老人,recluse]\b[this]使用 {\"type\":\"input\"} 可以弹窗请求玩家输入数字", + "\t[老人,recluse]\b[this]例如这个例子:即将弹出一个输入窗口,然后会将你的输入结果直接加到你的攻击力上。", { "type": "input", "text": "请输入你要加攻击力的数值:" }, { "type": "if", - "condition": "flag:input>0", + "condition": "(flag:input>0)", "true": [ { "type": "setValue", @@ -586,7 +568,7 @@ main.floors.sample1= ], "false": [] }, - "\t[老人,recluse]具体可参见样板中本事件的写法。" + "\t[老人,recluse]\b[this]具体可参见样板中本事件的写法。" ] }, "changeFloor": { @@ -644,7 +626,8 @@ main.floors.sample1= "type": "openDoor" } ] - } + }, + "1": null } }, "width": 13,