176 lines
4.8 KiB
JavaScript
176 lines
4.8 KiB
JavaScript
//=============================================================================
|
|
// PluginCommandMVInScriptArea.js
|
|
//=============================================================================
|
|
// Copyright (c) 2020 Thirop
|
|
// Released under the MIT license
|
|
// http://opensource.org/licenses/mit-license.php
|
|
//=============================================================================
|
|
/*:
|
|
* @target MZ
|
|
* @author Thirop
|
|
* @plugindesc スクリプト欄でMV形式プラグインコマンドを実行
|
|
*
|
|
* @param commands
|
|
* @text コマンド登録
|
|
* @desc 登録したコマンドはcmdを省略して記述できます。
|
|
* @type String[]
|
|
* @default ["skit","スキット","particle","パーティクル"]
|
|
*
|
|
* @help
|
|
* スクリプトコマンドでMV形式のプラグインコマンドが実行できます。
|
|
* たとえば「command1 arg1」というプラグインコマンドを実行するには
|
|
* cmdを頭につけてスクリプトに
|
|
*
|
|
* cmd command1 arg1
|
|
*
|
|
* と記述します。
|
|
* 複数行入力することも可能ですが、ウェイトが無視されたり
|
|
* 意図しない動作となる場合があるのでスクリプトコマンド1つにつき
|
|
* プラグインコマンド1つを実行することを推奨します。
|
|
*
|
|
* また、プラグイン設定にコマンド名を登録することで先頭の「cmd」が
|
|
* 省略できるようになります。
|
|
*
|
|
*
|
|
* 【更新履歴】
|
|
* 1.0.0 2020/8/23 初版
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
//PRAGMA: englishHeader
|
|
//PRAGMA_END: englishHeader
|
|
|
|
(() => {
|
|
"use strict";
|
|
|
|
let cmdRegExp;
|
|
function setupPluginParameters() {
|
|
const parameters = PluginManager.parameters(
|
|
"PluginCommandMVInScriptArea".toLowerCase()
|
|
);
|
|
let expStr = "^(?:cmd";
|
|
if (parameters.commands) {
|
|
const commands = JSON.parse(parameters.commands);
|
|
for (let command of commands) {
|
|
expStr += "|" + command;
|
|
}
|
|
}
|
|
expStr += ")";
|
|
cmdRegExp = new RegExp(expStr);
|
|
}
|
|
|
|
const _Scene_Boot_start = Scene_Boot.prototype.start;
|
|
Scene_Boot.prototype.start = function () {
|
|
_Scene_Boot_start.call(this);
|
|
setupPluginParameters();
|
|
};
|
|
|
|
const Game_Interpreter_command355 = Game_Interpreter.prototype.command355;
|
|
Game_Interpreter.prototype.command355 = function (args) {
|
|
if (cmdRegExp.test(this.currentCommand().parameters[0])) {
|
|
this.processMVPluginCommandByScript();
|
|
return true;
|
|
} else {
|
|
return Game_Interpreter_command355.call(this, args);
|
|
}
|
|
};
|
|
|
|
Game_Interpreter.prototype.processMVPluginCommandByScript = function () {
|
|
let script = this.currentCommand().parameters[0];
|
|
this._processMvPluginCommandByScript(script);
|
|
|
|
while (this.nextEventCode() === 655) {
|
|
this._index++;
|
|
let script = this.currentCommand().parameters[0];
|
|
this._processMvPluginCommandByScript(script);
|
|
}
|
|
};
|
|
|
|
Game_Interpreter.prototype._processMvPluginCommandByScript = function (
|
|
script
|
|
) {
|
|
if (!cmdRegExp.test(script)) {
|
|
return;
|
|
}
|
|
script = script.replace(/^cmd /, "");
|
|
|
|
let args = script.split(" ");
|
|
if (args.length > 0) {
|
|
let command = args.shift();
|
|
this.pluginCommand(command, args);
|
|
}
|
|
};
|
|
|
|
Game_Interpreter.processKeyValuePluginCommandArguments = function (
|
|
elems,
|
|
defaults,
|
|
map = null,
|
|
keys,
|
|
param
|
|
) {
|
|
keys = keys || Object.keys(defaults);
|
|
param = param || {};
|
|
|
|
const keyLen = keys.length;
|
|
for (let i = 0; i < keyLen; i = (i + 1) | 0) {
|
|
let key = keys[i];
|
|
param[key] = defaults[key];
|
|
}
|
|
|
|
const elemLen = elems.length;
|
|
let keyIdx = 0;
|
|
for (let elem of elems) {
|
|
if (map && map[elem]) {
|
|
elem = map[elem];
|
|
}
|
|
|
|
let index = elem.indexOf(":");
|
|
if (index <= 0) {
|
|
if (keys.contains(elem)) {
|
|
//flag
|
|
index = elem.length;
|
|
elem += ":true";
|
|
} else {
|
|
param[keys[keyIdx++]] = elem;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
let key = elem.substring(0, index);
|
|
if (map && map[key]) {
|
|
key = map[key];
|
|
}
|
|
var order = keys.indexOf(key);
|
|
if (order < 0) {
|
|
param[keys[keyIdx++]] = elem;
|
|
continue;
|
|
}
|
|
|
|
let valueStr = elem.substring(index + 1);
|
|
let value;
|
|
switch (typeof defaults[key]) {
|
|
case "boolean":
|
|
if (valueStr === "f" || valueStr === "false" || valueStr === "0") {
|
|
value = false;
|
|
} else {
|
|
value = true;
|
|
}
|
|
break;
|
|
case "number":
|
|
value = Number(valueStr);
|
|
break;
|
|
default:
|
|
value = valueStr;
|
|
}
|
|
param[key] = value;
|
|
|
|
if (order === keyIdx) {
|
|
keyIdx += 1;
|
|
}
|
|
}
|
|
|
|
return param;
|
|
};
|
|
Game_Interpreter.prototype.processKeyValuePluginCommandArguments =
|
|
Game_Interpreter.processKeyValuePluginCommandArguments;
|
|
})();
|