From 81349bfd8386fa02f207c0e581d7ba4fc6d59ed3 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sun, 15 Aug 2021 12:00:00 +0800 Subject: [PATCH] Fix 281 --- project/floors/sample0.js | 14 +++++--------- project/functions.js | 5 +++++ project/items.js | 18 +++++++++--------- project/maps.js | 2 +- project/sounds/error.mp3 | Bin 3387 -> 3178 bytes project/sounds/open_ui.mp3 | Bin 2760 -> 9448 bytes 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/project/floors/sample0.js b/project/floors/sample0.js index ec642e75..7ffc7566 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -12,7 +12,7 @@ main.floors.sample0= "ratio": 1, "map": [ [ 0, 0,220, 0, 0, 20, 87, 3, 58, 59, 60, 61, 64], - [ 0,246, 0,246, 0, 20, 0, 3, 57, 62, 63, 43, 44], + [ 0,246, 0,246, 0, 20, 0, 3, 57, 72, 63, 43, 44], [219, 0, 0, 0,219, 20, 0, 3, 53, 54, 55, 56, 69], [ 20, 20,125, 20, 20, 20, 0, 3, 49, 50, 51, 52, 68], [251,247,256,234,248, 6, 0, 3, 35, 36, 46, 47, 48], @@ -177,13 +177,13 @@ main.floors.sample0= }, "afterGetItem": { "9,1": [ - "样板给出的道具素材中有很多道具都是未定义甚至未注册的,需要自行实现功能。\n(比如屠龙匕首就是一个没有功能的道具)\n如果你想为未定的道具添加自定义功能,请参照样板中其他道具的写法;如果有更多疑问,请查阅帮助文档。" + "技能的支持需要依赖状态栏的“魔力”以及脚本编辑的“按键处理”,详见帮助文档“个性化”一节。" ], "12,2": [ - "跳跃本身没有音效,使用跳跃鞋时播放的音效是通过跳跃鞋的道具效果实现的。\n如果想为跳跃设置音效,请在 events.js 的 jumpHero 函数执行前插入一行代码,用 core.playSound 的方式来播放音效即可。\n如果想了解更多关于这方面的内容,请参与帮助文档中的“脚本——复写函数”章节。\n\n类似的是,敌人的“支援”技能也是通过在支援技能中播放音效实现的。" + "跳跃靴和支援怪的跳跃音效是用脚本额外添加的,\n如果想为任意跳跃指令添加音效,请查阅帮助文档中的“脚本——复写函数”章节。" ], "8,3": [ - "炸弹是只能炸面前的怪物还是四个方向的怪物,由其图块属性(快捷键C)中的“使用效果”决定。\n不能被炸的怪物请直接在该怪物的图块属性中勾选“不可炸”,可参见样板里黑衣魔王和黑暗大法师的写法。" + "炸弹是只能炸面前的怪物还是四个甚至八个方向的怪物,\n由其图块属性(快捷键C)中的“使用效果”决定。\n不能被炸的怪物请直接在该怪物的图块属性中勾选“不可炸”,\n可参见样板里黑衣魔王和黑暗大法师的写法。\nV2.8.1起,炸弹炸怪可以添加获得金经/触发战后事件,详见其使用效果中的注释。" ], "10,3": [ "“上楼”和“下楼”的目标层由全塔属性(快捷键B)的“楼层列表”顺序所决定。" @@ -209,11 +209,7 @@ main.floors.sample0= "在 2.8.1 版更新后,能够被破冰镐摧毁的冰块被移动到了 animates 下。\n如果想制作一个可以以特定触发器的方式移除特定图块的道具,可以参照破冰镐物品图块属性中\n useItemEffect 和 canUseItemEffect 的写法。" ], "11,8": [ - "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门时仍然会自动使用钥匙开门。", - { - "type": "comment", - "text": "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门仍然会自动使用钥匙(根据全塔属性的系统开关勾选与否,铁门可能不需要钥匙)开门。" - } + "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门时仍然会自动使用钥匙开门。" ], "12,8": [ "该道具默认是大黄门钥匙,如需改为钥匙盒直接修改其图块属性(快捷键C)的“道具类别”为items即可。" diff --git a/project/functions.js b/project/functions.js index 020ae2ce..e43c4cd0 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1141,11 +1141,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.setFlag('curse', true); } } else if (action == 'remove') { + var success = false; if (core.inArray(type, "poison") && core.hasFlag("poison")) { + success = true; // 移除毒效果 core.setFlag("poison", false); } if (core.inArray(type, "weak") && core.hasFlag("weak")) { + success = true; // 移除衰效果 core.setFlag("weak", false); if (core.values.weakValue >= 1) { @@ -1159,9 +1162,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } } if (core.inArray(type, "curse") && core.hasFlag("curse")) { + success = true; // 移除咒效果 core.setFlag("curse", false); } + if (success) core.playSound('回血'); } }, "updateStatusBar": function () { diff --git a/project/items.js b/project/items.js index 289c494a..639bb668 100644 --- a/project/items.js +++ b/project/items.js @@ -297,7 +297,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "name": "圣水", "itemEffect": "core.status.hero.hp *= 2", "itemEffectTip": ",生命值翻倍", - "useItemEffect": "core.status.hero.hp *= 2;\ncore.playSound('回血');", + "useItemEffect": "core.status.hero.hp *= 2;core.playSound('回血');", "canUseItemEffect": "true", "text": "生命值翻倍" }, @@ -327,7 +327,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "constants", "name": "冰冻徽章", "text": "可以将面前的熔岩变成平地", - "useItemEffect": "(function () {\n\tvar success = false;\n\n\tvar snowFourDirections = false; // 是否四方向雪花;如果是将其改成true\n\tif (snowFourDirections) {\n\t\t// 四方向雪花\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (core.getBlockId(nx, ny) == 'lava') {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (core.getBlockId(core.nextX(), core.nextY()) == 'lava') {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.playSound('打开界面');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", + "useItemEffect": "(function () {\n\tvar success = false;\n\n\tvar snowFourDirections = false; // 是否多方向雪花;如果是将其改成true\n\tif (snowFourDirections) {\n\t\t// 多方向雪花\n\t\tfor (var direction in core.utils.scan) { // 多方向雪花默认四方向,如需改为八方向请将这两个scan改为scan2\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (core.getBlockId(nx, ny) == 'lava') {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (core.getBlockId(core.nextX(), core.nextY()) == 'lava') {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.playSound('打开界面');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\t} else {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name, itemId);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", "canUseItemEffect": "true" }, "cross": { @@ -368,21 +368,21 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "tools", "name": "破墙镐", "text": "可以破坏勇士面前的墙", - "useItemEffect": "(function () {\n\tvar canBreak = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable) return false;\n\t\treturn block.event.canBreak;\n\t};\n\n\tvar success = false;\n\tvar pickaxeFourDirections = false; // 是否四方向破;如果是将其改成true\n\tif (pickaxeFourDirections) {\n\t\t// 四方向破\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (canBreak(nx, ny)) {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 仅破当前\n\t\tif (canBreak(core.nextX(), core.nextY())) {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.playSound('破墙镐');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\t// 无法使用\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", + "useItemEffect": "(function () {\n\tvar canBreak = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable) return false;\n\t\treturn block.event.canBreak;\n\t};\n\n\tvar success = false;\n\tvar pickaxeFourDirections = false; // 是否多方向破;如果是将其改成true\n\tif (pickaxeFourDirections) {\n\t\t// 多方向破\n\t\tfor (var direction in core.utils.scan) { // 多方向破默认四方向,如需改成八方向请将这两个scan改为scan2\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (canBreak(nx, ny)) {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 仅破当前\n\t\tif (canBreak(core.nextX(), core.nextY())) {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.playSound('破墙镐');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\t} else {\n\t\t// 无法使用\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name, itemId);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", "canUseItemEffect": "true" }, "icePickaxe": { "cls": "tools", "name": "破冰镐", "text": "可以破坏勇士面前的一堵冰墙", - "useItemEffect": "(function () {\n\tcore.openDoor(core.nextX(), core.nextY(), false);\n\tcore.playSound('破冰镐');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();", + "useItemEffect": "(function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\tcore.insertAction({ \"type\": \"openDoor\", \"loc\": [\"core.nextX()\", \"core.nextY()\"] });\n})();", "canUseItemEffect": "(function () {\n\treturn core.getBlockId(core.nextX(), core.nextY()) == 'ice';\n})();" }, "bomb": { "cls": "tools", "name": "炸弹", "text": "可以炸掉勇士面前的怪物", - "useItemEffect": "(function () {\n\tvar bombList = []; // 炸掉的怪物坐标列表\n\tvar todo = []; // 炸弹后事件\n\tvar money = 0,\n\t\texp = 0; // 炸弹获得的金币和经验\n\n\tvar canBomb = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable || block.event.cls.indexOf('enemy') != 0) return false;\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\treturn enemy && !enemy.notBomb;\n\t};\n\n\tvar bomb = function (x, y) {\n\t\tif (!canBomb(x, y)) return;\n\t\tbombList.push([x, y]);\n\t\tvar id = core.getBlockId(x, y),\n\t\t\tenemy = core.material.enemys[id];\n\t\tmoney += core.getEnemyValue(enemy, 'money', x, y) || 0;\n\t\texp += core.getEnemyValue(enemy, 'exp', x, y) || 0;\n\t\tcore.push(todo, core.floors[core.status.floorId].afterBattle[x + \",\" + y]);\n\t\tcore.push(todo, enemy.afterBattle);\n\t\tcore.removeBlock(x, y);\n\t}\n\n\t// 如果要四方形可炸,把这里的false改成true\n\tif (false) {\n\t\tvar scan = core.utils.scan; // 如果要改成八方向炸可以改成 core.utils.scan2\n\t\tfor (var direction in scan) {\n\t\t\tvar delta = scan[direction];\n\t\t\tbomb(core.getHeroLoc('x') + delta.x, core.getHeroLoc('y') + delta.y);\n\t\t}\n\t} else {\n\t\t// 仅炸当前\n\t\tbomb(core.nextX(), core.nextY());\n\t}\n\n\tif (bombList.length > 0) {\n\t\tcore.playSound('炸弹');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t\t// 取消这里的注释可以炸弹后获得金币和经验\n\t\t// core.status.hero.money += money;\n\t\t// core.status.hero.exp += exp;\n\n\t\t// 取消这里的注释可以炸弹引发战后事件\n\t\t// if (todo.length > 0) core.insertAction(todo);\n\t} else {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip('当前无法使用' + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n\n\t// 炸弹后事件\n\t// 这是一个使用炸弹也能开门的例子\n\t/*\n\tif (core.status.floorId=='xxx' && core.terrainExists(x0,y0,'specialDoor') // 某个楼层,该机关门存在\n\t\t&& !core.enemyExists(x1,y1) && !core.enemyExists(x2,y2)) // 且守门的怪物都不存在\n\t{\n\t\tcore.insertAction([ // 插入事件\n\t\t\t{\"type\": \"openDoor\", \"loc\": [x0,y0]} // 开门\n\t\t])\n\t}\n\t*/\n})();", + "useItemEffect": "(function () {\n\tvar bombList = []; // 炸掉的怪物坐标列表\n\tvar todo = []; // 炸弹后事件\n\tvar money = 0,\n\t\texp = 0; // 炸弹获得的金币和经验\n\n\tvar canBomb = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.disable || block.event.cls.indexOf('enemy') != 0) return false;\n\t\tvar enemy = core.material.enemys[block.event.id];\n\t\treturn enemy && !enemy.notBomb;\n\t};\n\n\tvar bomb = function (x, y) {\n\t\tif (!canBomb(x, y)) return;\n\t\tbombList.push([x, y]);\n\t\tvar id = core.getBlockId(x, y),\n\t\t\tenemy = core.material.enemys[id];\n\t\tmoney += core.getEnemyValue(enemy, 'money', x, y) || 0;\n\t\texp += core.getEnemyValue(enemy, 'exp', x, y) || 0;\n\t\tcore.push(todo, core.floors[core.status.floorId].afterBattle[x + \",\" + y]);\n\t\tcore.push(todo, enemy.afterBattle);\n\t\tcore.removeBlock(x, y);\n\t}\n\n\t// 如果要多方向可炸,把这里的false改成true\n\tif (false) {\n\t\tvar scan = core.utils.scan; // 多方向炸时默认四方向,如果要改成八方向炸可以改成 core.utils.scan2\n\t\tfor (var direction in scan) {\n\t\t\tvar delta = scan[direction];\n\t\t\tbomb(core.getHeroLoc('x') + delta.x, core.getHeroLoc('y') + delta.y);\n\t\t}\n\t} else {\n\t\t// 仅炸当前\n\t\tbomb(core.nextX(), core.nextY());\n\t}\n\n\tif (bombList.length > 0) {\n\t\tcore.playSound('炸弹');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功', itemId);\n\t\t// 取消这里的注释可以炸弹后获得金币和经验\n\t\t// core.status.hero.money += money;\n\t\t// core.status.hero.exp += exp;\n\n\t\t// 取消这里的注释可以炸弹引发战后事件\n\t\t// if (todo.length > 0) core.insertAction(todo);\n\t} else {\n\t\tcore.playSound('操作失败');\n\t\tcore.drawTip('当前无法使用' + core.material.items[itemId].name, itemId);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n\n\t// 炸弹后事件\n\t// 这是一个使用炸弹也能开门的例子\n\t/*\n\tif (core.status.floorId=='xxx' && core.terrainExists(x0,y0,'specialDoor') // 某个楼层,该机关门存在\n\t\t&& !core.enemyExists(x1,y1) && !core.enemyExists(x2,y2)) // 且守门的怪物都不存在\n\t{\n\t\tcore.insertAction([ // 插入事件\n\t\t\t{\"type\": \"openDoor\", \"loc\": [x0,y0]} // 开门\n\t\t])\n\t}\n\t*/\n})();", "canUseItemEffect": "true" }, "centerFly": { @@ -417,28 +417,28 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "tools", "name": "解毒药水", "text": "可以解除中毒状态", - "useItemEffect": "core.triggerDebuff('remove', 'poison');\ncore.playSound('回血');", + "useItemEffect": "core.triggerDebuff('remove', 'poison');", "canUseItemEffect": "core.hasFlag('poison');" }, "weakWine": { "cls": "tools", "name": "解衰药水", "text": "可以解除衰弱状态", - "useItemEffect": "core.triggerDebuff('remove', 'weak');\ncore.playSound('回血');", + "useItemEffect": "core.triggerDebuff('remove', 'weak');", "canUseItemEffect": "core.hasFlag('weak');" }, "curseWine": { "cls": "tools", "name": "解咒药水", "text": "可以解除诅咒状态", - "useItemEffect": "core.triggerDebuff('remove', 'curse');\ncore.playSound('回血');", + "useItemEffect": "core.triggerDebuff('remove', 'curse');", "canUseItemEffect": "core.hasFlag('curse');" }, "superWine": { "cls": "tools", "name": "万能药水", "text": "可以解除所有不良状态", - "useItemEffect": "core.triggerDebuff('remove', ['poison', 'weak', 'curse']);\ncore.playSound('回血');", + "useItemEffect": "core.triggerDebuff('remove', ['poison', 'weak', 'curse']);", "canUseItemEffect": "(function() {\n\treturn core.hasFlag('poison') || core.hasFlag('weak') || core.hasFlag('curse');\n})();" }, "hammer": { diff --git a/project/maps.js b/project/maps.js index c8211a5e..6c8d0509 100644 --- a/project/maps.js +++ b/project/maps.js @@ -5,7 +5,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}}, "4": {"cls":"animates","id":"star","name":"星空"}, "5": {"cls":"animates","id":"lava","name":"岩浆"}, - "6": {"cls":"animates","id":"ice","doorInfo":{"time":160,"openSound":"icepickaxe.mp3","closeSound":"door.mp3","keys":{"specialKey":1}},"animate":1}, + "6": {"cls":"animates","id":"ice","doorInfo":{"time":160,"openSound":"破冰镐","closeSound":"door.mp3","keys":{"icePickaxe":1}},"animate":1}, "7": {"cls":"terrains","id":"blueShopLeft"}, "8": {"cls":"terrains","id":"blueShopRight"}, "9": {"cls":"terrains","id":"pinkShopLeft"}, diff --git a/project/sounds/error.mp3 b/project/sounds/error.mp3 index 7d572668303b78a7fb0d33e5baed63ec79c8c4ee..329cca458198a0686ad1af9016a124b7b36c5374 100644 GIT binary patch literal 3178 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 literal 3387 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 diff --git a/project/sounds/open_ui.mp3 b/project/sounds/open_ui.mp3 index 31da851dd0b924df9e5234dd2076364a0115ea58..0282a089df2bbd2069a78d9ed621fc8895120e9c 100644 GIT binary patch literal 9448 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 C{0m$F