じ☆ve冰风 发表于 2026-7-28 08:55:42

Item Call Script

ItemCallScript - Version 1.0.0 (2018/09/16)

Creator name: Triacontane

Introduction
Create an item or skill that will run any script when used.

Note: Javascript knowledge is required for use.



Instructions-
Specify the following in the item or skill note box:
<call:insert script here>

Example-
                Code:       
<call:AudioManager.playSe({name: 'Item2', pan: 0, pitch: 100, volume: 100});>


Note: If you want play your own sound effect for item without default sound (Item3)-
In database > System > Sounds for "Use Item" set to (None)
That is, if you plan on using item call script to play sound individually for each items.

Credit and Thanks: Triacontane

Terms of Use- Free for commercial and non-commercial use.

License- MIT License: http://opensource.org/licenses/mit-license.php

Dropbox link: https://www.dropbox.com/s/fugjlnqjk358kyj/ItemCallScript.js?dl=1

Spoiler: js sample                Code:       
/*=============================================================================
ItemCallScript.js
----------------------------------------------------------------------------
(C)2018 Triacontane
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
Version
1.0.0 2018/09/16 初版
----------------------------------------------------------------------------
   : https://triacontane.blogspot.jp/
: https://twitter.com/triacontane/
: https://github.com/triacontane/
=============================================================================*/

/*:
* @plugindesc ItemCallScriptPlugin
* @author triacontane
*
* @param commandPrefix
* @text Note box prefix
* @desc Prefix specified when the note of another plugin is used. (Can be a blank)
* @default
*
* @help ItemCallScript.js
*
* Create an item or skill that will run any script when used.
* JavaScript knowlegde is required for use.
* Specify the following in the Note box.
* <call:(insert script here)>
*
* If the effect range is set for all allies and all enemies,
* this plugin will be executed for all targets.
*
* The following variables and functions can be used.
* user   : Item user
* target   : Item target
* v(n)   : Get the value of variable
* sv(n, m) : Set value to variable
* s(n)   : Get the value of switch
* ss(n, m) : Set value to switch
* 
* There are no plugin commands for this plugin.
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc スクリプト呼び出しアイテムプラグイン
* @author トリアコンタン
*
* @param commandPrefix
* @text メモ欄接頭辞
* @desc 他のプラグインとメモ欄もしくはプラグインコマンドの名称が被ったときに指定する接頭辞です。通常は指定不要です。
* @default
*
* @help ItemCallScript.js
*
* 使用したときに任意のスクリプトを実行するアイテムもしくはスキルを作成できます。
* 活用にはJavaScriptの知識が必要です。
* メモ欄に以下の通り指定してください。
* <call:(実行したいスクリプト)>
* <スクリプト:(実行したいスクリプト)>
*
* 効果範囲を味方全体、敵全体にすると対象の全員分だけスクリプトが実行されます。
*
* スクリプト中では以下の変数、関数が使用できます。
* user   : アイテムの使用者
* target   : アイテムの対象
* v(n)   : 変数の値を取得
* sv(n, m) : 変数に値を設定
* s(n)   : スイッチの値を取得
* ss(n, m) : スイッチに値を設定
* 
* このプラグインにはプラグインコマンドはありません。
*
* 利用規約:
*作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
*についても制限はありません。
*このプラグインはもうあなたのものです。
*/

(function() {
    'use strict';

    /**
   * Get database meta information.
   * @param object Database item
   * @param name Meta name
   * @returns {String} meta value
   */
    var getMetaValue = function(object, name) {
      var tagName = param.commandPrefix + name;
      return object.meta.hasOwnProperty(tagName) ? convertEscapeCharacters(object.meta) : null;
    };

    /**
   * Get database meta information.(for multi language)
   * @param object Database item
   * @param names Meta name array (for multi language)
   * @returns {String} meta value
   */
    var getMetaValues = function(object, names) {
      var metaValue;
      names.some(function(name) {
            metaValue = getMetaValue(object, name);
            return metaValue !== null;
      });
      return metaValue;
    };

    /**
   * Convert escape characters.(require any window object)
   * @param text Target text
   * @returns {String} Converted text
   */
    var convertEscapeCharacters = function(text) {
      var windowLayer = SceneManager._scene._windowLayer;
      return windowLayer ? windowLayer.children.convertEscapeCharacters(text.toString()) : text;
    };

    /**
   * Create plugin parameter. param ex. param.commandPrefix
   * @param pluginName plugin name(EncounterSwitchConditions)
   * @returns {Object} Created parameter
   */
    var createPluginParameter = function(pluginName) {
      var paramReplacer = function(key, value) {
            if (value === 'null') {
                return value;
            }
            if (value === '"' && value === '"') {
                return value;
            }
            try {
                return JSON.parse(value);
            } catch (e) {
                return value;
            }
      };
      var parameter   = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
      PluginManager.setParameters(pluginName, parameter);
      return parameter;
    };

    var param = createPluginParameter('ItemCallScript');

    var _Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect;
    Game_Action.prototype.applyItemUserEffect = function(target) {
      _Game_Action_applyItemUserEffect.apply(this, arguments);
      this.applyItemScript(target);
    };

    var _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();
    };

    var _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) {
      var script = this.getItemScript();
      var user = this.subject();
      if (script) {
            var v = $gameVariables.value.bind($gameVariables);
            var sv = $gameVariables.setValue.bind($gameVariables);
            var s = $gameSwitches.value.bind($gameSwitches);
            var ss = $gameSwitches.setValue.bind($gameSwitches);
            eval(script);
      }
    };

    Game_Action.prototype.getItemScript = function() {
      return getMetaValues(this.item(), ['スクリプト', 'call']);
    };
})();




本贴来自国际rpgmaker官方论坛作者:ovate处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/item-call-script.115897/
页: [1]
查看完整版本: Item Call Script