変数監視プラグイン
//=============================================================================
// Lunatlazur_VariableObserver.js
// ----------------------------------------------------------------------------
// Copyright (c) 2018 Taku Aoi
// This plugin is released under the zlib License.
// https://zlib.net/zlib_license.html
// ----------------------------------------------------------------------------
// Version
// 1.0.0 2018-10-14
// ----------------------------------------------------------------------------
// [Web] : https://lunatlazur.com
// [Twitter]: https://twitter.com/aoitaku
// [GitHub] : https://github.com/lunatlazur
//=============================================================================
/*:
* @plugindesc Monitor variable changes
* @author Taku Aoi
* @help This plugin provides the feature to perform the specified action
* when the value of a variable changes.
*
* Usage
* =====
*
* Plug-in command list
* ====================
*
* ACTIVATE_VARIABLE_OBSERVER
* --------------------------
*
* ACTIVATE_VARIABLE_OBSERVER
*
* Start monitoring variables.
*
*
*
*
* Specifies the number of the variable to be monitored.
*
*
*
*
* Specifies the ID of the common event that will be executed when the variable
* changes.
*
*
* DEACTIVATE_VARIABLE_OBSERVER
* --------------------------
*
* DEACTIVATE_VARIABLE_OBSERVER
*
* Stop monitoring variables.
*
*
*
*
* Specifies the number of the variable to stop monitoring.
*
*
* Changelog
* =========
*
* 1.0.0 2018-10-14
* ----------------
* - Published.
*
*/
/*:ja
* @plugindesc 変数監視プラグイン
* @author あおいたく
* @help このプラグインは任意の変数を監視して、値の変更時に行う処理を設定できるようにします。
*
* 使い方
* ======
*
* プラグインコマンド一覧
* ======================
*
* 変数監視開始
* ----------
*
* 変数監視開始 <監視する変数番号> <コモンイベントID>
*
* 変数の監視を開始します。
*
*
* <監視する変数番号>
*
* 監視する変数の番号を指定します。
*
*
* <コモンイベントID>
*
* 変数に変更があったときに実行されるコモンイベントのIDを指定します。
*
*
* 変数監視停止
* ----------
*
* 変数監視停止 <監視を停止する変数番号>
*
* 変数の監視を停止します。
*
*
* <監視を停止する変数番号>
*
* 監視を停止する変数の番号を指定します。
*
*
* 変更履歴
* ========
*
* 1.0.0 2018-10-14
* ----------------
* - 公開
*
*/
(function () {
'use strict';
const observedVariables = {};
function execCommonEvent(commonEventId) {
const commonEvent = $dataCommonEvents[commonEventId];
if (!commonEvent) {
return;
}
const interpreter = new Game_Interpreter;
interpreter.setup(commonEvent.list, 0);
interpreter.update();
}
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
switch ((command || '').toUpperCase()) {
case 'ACTIVATE_VARIABLE_OBSERVER':
case '変数監視開始':
const [activateTarget, commonEventId] = args;
activateObserver(parseInt(activateTarget), parseInt(commonEventId));
break;
case 'DEACTIVATE_VARIABLE_OBSERVER':
case '変数監視停止':
const [deactivateTarget] = args;
deactivateObserver(parseInt(deactivateTarget));
break;
}
};
function activateObserver(variable, commonEventId) {
observedVariables[variable] = {
previousValue: $gameVariables.value(variable),
commonEventId,
};
}
function deactivateObserver(variable) {
delete observedVariables[variable];
}
const _Game_Map_updateInterpreter = Game_Map.prototype.updateInterpreter;
Game_Map.prototype.updateInterpreter = function () {
_Game_Map_updateInterpreter.call(this);
Object.keys(observedVariables).map((key) => {
const index = parseInt(key, 10);
return [index, observedVariables[index]];
}).filter(([key, observer]) => observer.previousValue !== $gameVariables.value(key))
.forEach(([_, observer]) => execCommonEvent(observer.commonEventId));
};
}());
このプラグインは任意の変数を監視して、値の変更時に行う処理を設定できるようにします。
利用方法
プラグインコマンド一覧を参照してください。
プラグインコマンド一覧
変数監視開始
変数の監視を開始します。
- 呼び出し形式
-
変数監視開始 <監視する変数番号> <コモンイベントID>
- パラメータ
-
監視する変数番号
<番号>
監視する変数の番号を指定します。
コモンイベントID
<ID>
変数に変更があったときに実行されるコモンイベントのIDを指定します。
変数監視停止
変数の監視を停止します。
- 呼び出し形式
-
変数監視停止 <監視を停止する変数番号>
- パラメータ
-
監視を停止する変数番号
<番号>
監視を停止する変数の番号を指定します。
変更履歴
1.0.0 2018-10-14
- 公開
ライセンス
このプラグインは zlib ライセンス のもと配布されます。
Copyright © 2018 あおいたく / Lunatlazur
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
- The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- This notice may not be removed or altered from any source distribution.