diff --git a/_docs/event.md b/_docs/event.md index 080108e4..eef54da8 100644 --- a/_docs/event.md +++ b/_docs/event.md @@ -1433,6 +1433,8 @@ async可选,如果为true则会异步执行(即不等待当前事件执行 目前支持mp3/ogg/wav等多种格式的音乐播放。 +从V2.6.3开始,还提供了keep项。如果此项为真,则会记录该bgm,并且持续到下次调用本事件位置(楼层切换不改变bgm,读档也有效)。 + 有关BGM播放的详细说明参见[背景音乐](element#背景音乐) ### pauseBgm:暂停背景音乐 diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 8d62eba8..27bacb0f 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1468,15 +1468,16 @@ return code; */; playBgm_s - : '播放背景音乐' EvalString Newline + : '播放背景音乐' EvalString '持续到下个本事件' Bool Newline /* playBgm_s tooltip : playBgm: 播放背景音乐 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=playbgm%EF%BC%9A%E6%92%AD%E6%94%BE%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90 -default : ["bgm.mp3"] +default : ["bgm.mp3", true] colour : this.soundColor -var code = '{"type": "playBgm", "name": "'+EvalString_0+'"},\n'; +Bool_0 = Bool_0 ? ', "keep": true' : ''; +var code = '{"type": "playBgm", "name": "'+EvalString_0+'"'+Bool_0+'},\n'; return code; */; @@ -3069,7 +3070,7 @@ ActionParser.prototype.parseAction = function() { break; case "playBgm": this.next = MotaActionBlocks['playBgm_s'].xmlText([ - data.name,this.next]); + data.name,data.keep||false,this.next]); break case "pauseBgm": this.next = MotaActionBlocks['pauseBgm_s'].xmlText([ diff --git a/libs/events.js b/libs/events.js index 8e9a9046..0c30dfb0 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1261,6 +1261,7 @@ events.prototype._action_insert = function (data, x, y, prefix) { events.prototype._action_playBgm = function (data, x, y, prefix) { core.playBgm(data.name); + core.setFlag("__bgm__", data.keep ? data.name : null); core.doAction(); } @@ -1820,11 +1821,15 @@ events.prototype.openToolbox = function (fromUserAction) { events.prototype.openQuickShop = function (fromUserAction) { if (core.isReplaying()) return; + if (Object.keys(core.status.shops).length == 0) { + core.drawTip("本塔没有快捷商店!"); + return; + } + // --- 如果只有一个商店,则直接打开之 if (Object.keys(core.status.shops).length == 1) { var shopId = Object.keys(core.status.shops)[0]; - if (core.status.event.id != null) return; - if (!this._checkStatus('shop', false)) return; + if (core.status.event.id != null || !this._checkStatus('shop', false)) return; var reason = core.events.canUseQuickShop(shopId); if (!core.flags.enableDisabledShop && reason) { core.drawText(reason); diff --git a/project/functions.js b/project/functions.js index 9b9bdc5f..774e6b9e 100644 --- a/project/functions.js +++ b/project/functions.js @@ -142,7 +142,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (core.status.maps[floorId].bgm) { var bgm = core.status.maps[floorId].bgm; if (bgm instanceof Array) bgm = bgm[0]; - core.playBgm(bgm); + if (!core.hasFlag("__bgm__")) core.playBgm(bgm); } // 更改画面色调 var color = core.getFlag('__color__', null); @@ -1004,7 +1004,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 切换到对应的楼层 core.changeFloor(data.floorId, null, data.hero.loc, 0, function () { // TODO:可以在这里设置读档后播放BGM - // if (core.getFlag("bgm", 0)==1) core.playBgm("bgm.mp3"); + if (core.hasFlag("__bgm__")) { // 持续播放 + core.playBgm(core.getFlag("__bgm__")); + } if (callback) callback(); }, true);