the-wombs-throes/js/plugins/VariableControlItem.js
2025-11-19 09:09:38 -06:00

152 lines
No EOL
6.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// VariableControlItem.js
// ----------------------------------------------------------------------------
// (C)2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.4.0 2023/10/21 変数の代わりにスイッチを操作できる機能を追加
// 1.3.0 2020/11/23 変数操作の実行条件に実行者を指定できる機能を追加
// 1.2.0 2020/11/22 MZで動作するよう全面的に修正
// 1.1.1 2017/04/19 範囲が「なし」の場合も操作できるよう修正
// 1.1.0 2016/10/21 加算と代入を別々のメモ欄で設定できるよう変更
// 1.0.0 2016/10/21 初版
// ----------------------------------------------------------------------------
// [Blog] : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc VariableControlItemPlugin
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/VariableControlItem.js
* @base PluginCommonBase
* @author triacontane
*
* @help You can manipulate variables when you use an
* item (skill) and when the action is successful.
* Specify the following in the memo field of the item or skill.
* <VCIVarNumber:3>
* <VCISetValue:5>
* <VCIAddValue:5>
* <VCISubject:actor>
* <VCISubject:enemy>
*
* The base plugin "PluginCommonBase.js" is required to use this plugin.
* The "PluginCommonBase.js" is here.
* (MZ install path)dlc/BasicResources/plugins/official/PluginCommonBase.js
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc 変数操作アイテムプラグイン
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/VariableControlItem.js
* @base PluginCommonBase
* @author トリアコンタン
*
* @help アイテム(スキル)を使用し、かつ行動が成功した場合に変数を操作できます。
* アイテムもしくはスキルのメモ欄に以下の通り指定してください。
*
* <VCIスイッチ番号:3> # スイッチ番号[3]をONにします。
* <VCISwiNumber:3> # 同上
* <VCI変数番号:3> # 変数番号[3]に値を設定します。
* <VCIVarNumber:3> # 同上
* <VCI代入値:5> # 指定した変数に値[5]を代入します。
* <VCISetValue:5> # 同上
* <VCI加算値:5> # 指定した変数に値[5]を加算します。
* <VCIAddValue:5> # 同上
* <VCI実行者:actor> # 実行者がアクターの場合のみ変数操作します。
* <VCISubject:actor> # 同上
* <VCI実行者:enemy> # 実行者が敵キャラの場合のみ変数操作します。
* <VCISubject:enemy> # 同上
* ※加算値に負の値を指定すると減算になります。
*
* 設定値は、制御文字を適用した上でJavaScript計算式として評価されます。
* 例えばアイテムの使用で変数[1]に[5]を乗算したい場合は以下の通り設定します。
* <VCI変数番号:1>
* <VCI代入値:\v[1] * 5> # 変数[1]の値に[5]を乗算した結果を変数[1]に設定
*
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
* 以下のフォルダに格納されています。
* dlc/BasicResources/plugins/official
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態商用、18禁利用等
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function() {
'use strict';
//=============================================================================
// Game_Action
// 行動が成功した場合、変数の操作を実行します。
//=============================================================================
const _Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect;
Game_Action.prototype.applyItemUserEffect = function(target) {
_Game_Action_applyItemUserEffect.apply(this, arguments);
if (!this.isForNone()) {
this.applyVariableControl();
}
};
const _Game_Action_applyGlobal = Game_Action.prototype.applyGlobal;
Game_Action.prototype.applyGlobal = function(target) {
_Game_Action_applyGlobal.apply(this, arguments);
if (this.isForNone()) {
this.applyVariableControl();
}
};
Game_Action.prototype.isForNone = function() {
return this.checkItemScope([0]);
};
Game_Action.prototype.applyVariableControl = function() {
if (!this.isVariableControlSubject()) {
return;
}
const varNumberStr = this.findMetaForVariableControl(['VarNumber', '変数番号']);
if (varNumberStr) {
const varNumber = parseInt(varNumberStr);
const setValue = this.findMetaForVariableControl(['SetValue', '代入値']);
if (setValue) {
$gameVariables.setValue(varNumber, eval(setValue));
}
const addValue = this.findMetaForVariableControl(['AddValue', '加算値']);
if (addValue) {
const originalValue = $gameVariables.value(varNumber);
$gameVariables.setValue(varNumber, originalValue + eval(addValue));
}
}
const swiNumberStr = this.findMetaForVariableControl(['SwiNumber', 'スイッチ番号']);
if (swiNumberStr) {
const swiNumber = parseInt(swiNumberStr);
$gameSwitches.setValue(swiNumber, true);
}
};
Game_Action.prototype.isVariableControlSubject = function() {
let subject = this.findMetaForVariableControl(['Subject', '実行者']);
if (!subject || subject === true) {
return true;
}
subject = subject.toLowerCase();
if (subject === 'actor' && this._subjectEnemyIndex >= 0) {
return false;
}
if (subject === 'enemy' && this._subjectActorId > 0) {
return false;
}
return true;
};
Game_Action.prototype.findMetaForVariableControl = function(tags) {
return PluginManagerEx.findMetaValue(this.item(), tags.map(tag => 'VCI' + tag))
};
})();