272 lines
9.2 KiB
JavaScript
272 lines
9.2 KiB
JavaScript
//=============================================================================
|
||
// MPP_DeleteSelfSwitch.js
|
||
//=============================================================================
|
||
// Copyright (c) 2022 Mokusei Penguin
|
||
// Released under the MIT license
|
||
// http://opensource.org/licenses/mit-license.php
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @target MV MZ
|
||
* @plugindesc When you move to another place, turn off the specified self-switch.
|
||
* @author Mokusei Penguin
|
||
* @url
|
||
*
|
||
* @help [version 2.1.0]
|
||
* This plugin is for RPG Maker MV and MZ.
|
||
*
|
||
* ▼ Plugin command details
|
||
* - In MV, the variable N is referred to by writing v [N] in the item for
|
||
* inputting a numerical value.
|
||
* - In MZ, in the item to enter a numerical value, select the text and
|
||
* write v [N] to refer to the variable N.
|
||
*
|
||
* 〇 MV / MZ
|
||
*
|
||
* 〇 DeleteSelfSwitch mapIds sw / delete
|
||
* mapIds : Range can be specified
|
||
* sw : Self switch to turn off
|
||
* - Turns off all self-switches on the specified map.
|
||
* - When specifying the range, do not put a space between them. (MV only)
|
||
* - Do not put a space between the self-switch specifications.
|
||
* Example: DeleteSelfSwitch 1 A
|
||
* => Change self-switch A of map ID 1 to OFF
|
||
* DeleteSelfSwitch v[13] BCD
|
||
* => Change the self-switch B, C, D of the map ID of
|
||
* variable 13 to OFF
|
||
* DeleteSelfSwitch 1-5,8 BC
|
||
* => Change the self-switches B and C of map IDs 1 to 5 and
|
||
* 8 to OFF
|
||
*
|
||
* ▼ About range specification
|
||
* - When setting numbers in an array, you can specify numbers from N to M by
|
||
* writing N-M.
|
||
* Example: 1-4,8,10-12
|
||
*
|
||
* ================================
|
||
* Mail : wood_penguin@yahoo.co.jp (@ is half-width)
|
||
* Blog : http://woodpenguin.blog.fc2.com/
|
||
* License : MIT license
|
||
*
|
||
* @command delete
|
||
* @desc
|
||
* @arg mapIds
|
||
* @desc Range can be specified
|
||
* @default 0
|
||
* @arg switchs
|
||
* @desc
|
||
* @default ABCD
|
||
*
|
||
*
|
||
* @param Map IDs
|
||
* @desc Map ID that turns off the self-switch when moving to another location
|
||
* (All maps if empty / Range can be specified)
|
||
* @default
|
||
*
|
||
* @param Self Switches
|
||
* @desc Self switch to turn off
|
||
* @default ABCD
|
||
*
|
||
* @param Self Variables
|
||
* @desc Self variable to be 0
|
||
* (Only when MPP_SelfVariable is installed / Range can be specified)
|
||
* @default
|
||
*
|
||
*/
|
||
|
||
/*:ja
|
||
* @target MV MZ
|
||
* @plugindesc 場所移動した際に、指定したセルフスイッチをOFFにします。
|
||
* @author 木星ペンギン
|
||
* @url
|
||
*
|
||
* @help [version 2.1.0]
|
||
* このプラグインはRPGツクールMVおよびMZ用です。
|
||
*
|
||
* ▼ プラグインコマンド
|
||
* - MVでは数値を入力する項目で v[N] と記述することで変数N番を参照します。
|
||
* - MZでは数値を入力する項目で、テキストを選択して v[N] と記述することで
|
||
* 変数N番を参照します。
|
||
*
|
||
* 〇 MV / MZ
|
||
*
|
||
* 〇 DeleteSelfSwitch mapIds sw / セルフスイッチ削除
|
||
* mapIds : マップID (範囲指定可)
|
||
* sw : OFFにするセルフスイッチ
|
||
* - 指定したマップのセルフスイッチを全てOFFにします。
|
||
* - 範囲指定する場合は間にスペースを入れないでください。(MVのみ)
|
||
* - セルフスイッチの指定は間にスペースを入れないでください。
|
||
* 例: DeleteSelfSwitch 1 A
|
||
* => マップID 1 番のセルフスイッチ A をOFFに変更
|
||
* DeleteSelfSwitch v[13] BCD
|
||
* => 変数13番のマップIDのセルフスイッチ B,C,D をOFFに変更
|
||
* DeleteSelfSwitch 1-5,8 BC
|
||
* => マップID 1~5と8 のセルフスイッチ B,C をOFFに変更
|
||
*
|
||
* ▼ 範囲指定について
|
||
* - 数値を配列で設定する際、n-m と表記することでnからmまでの数値を指定できます。
|
||
* 例: 1-4,8,10-12
|
||
*
|
||
* ================================
|
||
* Mail : wood_penguin@yahoo.co.jp (@は半角)
|
||
* Blog : http://woodpenguin.blog.fc2.com/
|
||
* License : MIT license
|
||
*
|
||
* @command delete
|
||
* @text 削除
|
||
* @desc
|
||
* @arg mapIds
|
||
* @text マップID
|
||
* @desc 範囲指定可
|
||
* @default 0
|
||
* @arg switchs
|
||
* @text スイッチ
|
||
* @desc
|
||
* @default ABCD
|
||
*
|
||
*
|
||
* @param Map IDs
|
||
* @text マップID
|
||
* @desc 場所移動でセルフスイッチをOFFにするマップIDの配列
|
||
* (空の場合はすべてのマップ / 範囲指定可)
|
||
* @default
|
||
*
|
||
* @param Self Switches
|
||
* @text セルフスイッチ
|
||
* @desc OFFにするセルフスイッチ
|
||
* @default ABCD
|
||
*
|
||
* @param Self Variables
|
||
* @text セルフ変数
|
||
* @desc 0にするセルフ変数
|
||
* (MPP_SelfVariable導入時のみ / 範囲指定可)
|
||
* @default
|
||
*
|
||
*/
|
||
|
||
(() => {
|
||
'use strict';
|
||
|
||
const pluginName = 'MPP_DeleteSelfSwitch';
|
||
|
||
// Plugin Parameters
|
||
const parameters = PluginManager.parameters(pluginName);
|
||
const range = function*(start, end) {
|
||
for (let i = start; i < end; i++) {
|
||
yield i;
|
||
}
|
||
};
|
||
const convertToArray = (param) => {
|
||
return param.split(',').reduce((r, item) => {
|
||
if (item) {
|
||
const match = /(\d+)-(\d+)/.exec(item);
|
||
if (match) {
|
||
r.push(...range(+match[1], +match[2] + 1));
|
||
} else {
|
||
r.push(+item);
|
||
}
|
||
}
|
||
return r;
|
||
}, []);
|
||
};
|
||
const params_MapIDs = convertToArray(parameters['Map IDs']);
|
||
const params_SelfSwitches = parameters['Self Switches'];
|
||
const params_SelfVariables = convertToArray(parameters['Self Variables']);
|
||
|
||
// Dealing with other plugins
|
||
const _importedPlugin = (...names) => {
|
||
return names.some(name => PluginManager._scripts.includes(name));
|
||
};
|
||
|
||
//-------------------------------------------------------------------------
|
||
// Game_SelfSwitches
|
||
|
||
Game_SelfSwitches.prototype.delete = function(mapId, switchs) {
|
||
const regexp = new RegExp(`${mapId},\\d+,[${switchs}]`);
|
||
for (const key of Object.keys(this._data)) {
|
||
if (regexp.test(key)) {
|
||
delete this._data[key];
|
||
}
|
||
}
|
||
this.onChange();
|
||
};
|
||
|
||
//-------------------------------------------------------------------------
|
||
// Game_Map
|
||
|
||
const _Game_Map_setup = Game_Map.prototype.setup;
|
||
Game_Map.prototype.setup = function(mapId) {
|
||
if (
|
||
this._mapId !== mapId &&
|
||
(params_MapIDs.length === 0 || params_MapIDs.includes(this._mapId))
|
||
) {
|
||
$gameSelfSwitches.delete(this._mapId, params_SelfSwitches);
|
||
if (_importedPlugin('MPP_SelfVariable')) {
|
||
$gameVariables.deleteSelfValues(this._mapId, [], params_SelfVariables);
|
||
}
|
||
}
|
||
_Game_Map_setup.apply(this, arguments);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Game_Interpreter
|
||
|
||
const _mzCommands = {
|
||
DeleteSelfSwitch: { name:'delete', keys:['mapIds', 'switchs'] }
|
||
};
|
||
Object.assign(_mzCommands, {
|
||
'セルフスイッチ削除': _mzCommands.DeleteSelfSwitch
|
||
});
|
||
|
||
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
||
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
||
_Game_Interpreter_pluginCommand.apply(this, arguments);
|
||
const mzCommand = _mzCommands[command];
|
||
if (mzCommand) {
|
||
const args2 = Object.assign(
|
||
{},
|
||
...mzCommand.keys.map((k, i) => ({ [k]: args[i] }))
|
||
);
|
||
PluginManager.callCommandMV(this, pluginName, mzCommand.name, args2);
|
||
}
|
||
};
|
||
|
||
//-------------------------------------------------------------------------
|
||
// PluginManager
|
||
|
||
if (!PluginManager.registerCommand) {
|
||
PluginManager._commandsMV = PluginManager._commandsMV || {};
|
||
|
||
PluginManager.registerCommandMV = function(pluginName, commandName, func) {
|
||
const key = pluginName + ':' + commandName;
|
||
this._commandsMV[key] = func;
|
||
};
|
||
|
||
PluginManager.callCommandMV = function(self, pluginName, commandName, args) {
|
||
const key = pluginName + ':' + commandName;
|
||
const func = this._commandsMV[key];
|
||
if (typeof func === 'function') {
|
||
func.bind(self)(args);
|
||
}
|
||
};
|
||
}
|
||
|
||
{
|
||
const _registerCommand = PluginManager.registerCommand || PluginManager.registerCommandMV;
|
||
|
||
_registerCommand.call(PluginManager, pluginName, 'delete', function(args) {
|
||
const switchs = args.switchs.toUpperCase();
|
||
for (const mapId of PluginManager.mppConvertRange(args.mapIds)) {
|
||
$gameSelfSwitches.delete(mapId || this._mapId, switchs);
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
PluginManager.mppConvertRange = function(text) {
|
||
return convertToArray(text.replace(
|
||
/V\[(\d+)\]/gi, (_, p1) => $gameVariables.value(parseInt(p1))
|
||
));
|
||
};
|
||
|
||
})();
|