enicia-contract-mark/js/plugins/ItemCallScript.js

100 lines
4.1 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

/*=============================================================================
ItemCallScript.js
----------------------------------------------------------------------------
(C)2018 Triacontane
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
Version
1.1.0 2021/11/14 MZで動作するようリファクタリング
1.0.0 2018/09/16 初版
----------------------------------------------------------------------------
[Blog] : https://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
=============================================================================*/
/*:
* @plugindesc スクリプト呼び出しアイテムプラグイン
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/ItemCallScript.js
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @author トリアコンタン
*
* @param scriptTagName
* @text スクリプトタグ名称
* @desc スクリプトを取得するタグの名称です。他プラグインとの競合がある場合などに変更します。
* @default SCRIPT
*
* @help ItemCallScript.js
*
* 使用したときに任意のスクリプトを実行するアイテム、スキルを作成できます。
* 活用にはJavaScriptの知識が必要です。メモ欄に以下の通り指定します。
* <SCRIPT:(実行したいスクリプト)>
*
* 効果範囲を味方全体、敵全体にすると対象の全員分だけスクリプトが実行されます。
*
* スクリプト中では以下の変数、関数が使用できます。
* user : アイテムの使用者
* target : アイテムの対象
* v(n) : 変数[n]の値を取得
* sv(n, m) : 変数[n]に値[m]を設定
* s(n) : スイッチ[n]の値を取得
* ss(n, m) : スイッチ[n]に値[m]を設定
* 
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
* 以下のフォルダに格納されています。
* dlc/BasicResources/plugins/official
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態商用、18禁利用等
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(() => {
'use strict';
const script = document.currentScript;
const param = PluginManagerEx.createParameter(script);
const _Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect;
Game_Action.prototype.applyItemUserEffect = function (target) {
_Game_Action_applyItemUserEffect.apply(this, arguments);
this.applyItemScript(target);
};
const _Game_Action_applyGlobal = Game_Action.prototype.applyGlobal;
Game_Action.prototype.applyGlobal = function () {
_Game_Action_applyGlobal.apply(this, arguments);
if (this.isForNone()) {
this.applyItemScript(null);
}
};
Game_Action.prototype.isForNone = function () {
return this.checkItemScope([0]);
};
const _Game_Action_testApply = Game_Action.prototype.testApply;
Game_Action.prototype.testApply = function (target) {
return _Game_Action_testApply.apply(this, arguments) || !!this.getItemScript();
};
Game_Action.prototype.applyItemScript = function (target) {
const script = this.getItemScript();
const user = this.subject();
if (script) {
const v = $gameVariables.value.bind($gameVariables);
const sv = $gameVariables.setValue.bind($gameVariables);
const s = $gameSwitches.value.bind($gameSwitches);
const ss = $gameSwitches.setValue.bind($gameSwitches);
eval(script);
}
};
Game_Action.prototype.getItemScript = function () {
return PluginManagerEx.findMetaValue(this.item(), param.scriptTagName || 'SCRIPT');
};
})();