169 lines
No EOL
4.5 KiB
JavaScript
169 lines
No EOL
4.5 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;
|
|
|
|
|
|
})(); |