Code:
/*============================================================================
* ## Plugin Info
*----------------------------------------------------------------------------
* # Plugin Name
* DoubleX RMMV Item Triggers
*----------------------------------------------------------------------------
* # Terms Of Use
* You shall keep this plugin's Plugin Info part's contents intact
* You shalln't claim that this plugin's written by anyone other than
* DoubleX or his aliases
* None of the above applies to DoubleX or his aliases
*----------------------------------------------------------------------------
* # Prerequisites
* Abilities:
* 1. Decent Javascript coding proficiency to fully utilize this plugin
*----------------------------------------------------------------------------
* # Links
* This plugin:
* 1. http://pastebin.com/Caw27X83
* Mentioned Patreon Supporters:
* https://www.patreon.com/posts/71738797
*----------------------------------------------------------------------------
* # Author
* DoubleX
*----------------------------------------------------------------------------
* # Changelog
* v1.01a(GMT 1300 26-2-2016):
* 1. ITCX and ITAX take the skill/item using them as an argument as well
* v1.00b(GMT 1400 27-1-2016):
* 1. Fixed calling current action via battler function upon action end
* v1.00a(GMT 1500 17-12-2015):
* 1. 1st version of this plugin finished
*============================================================================*/
/*:
* @plugindesc Sets some items to trigger some actions when conditions are met
* @author DoubleX
*
* @help
* You're supposed to edit the plugin js file directly to set notetag values
*============================================================================
* ## Notetag Info
*----------------------------------------------------------------------------
* # Skill/Item Notetags:
* 1. <timing item trigger: ITCX, ITAX>
* - Sets a skill/item to trigger ITAX when timing and ITCX are met
* - timing can be pre, post or custom timings set by you
* - preBattle means right before using the skill/item in battles
* - postBattle means right after using the skill/item in battles
* - preMap means right before using the skill/item outside battles
* - postMap means right after using the skill/item outside battles
* - timing must only consist of alphanumeric characters
* - ITCX can be set in Item Trigger Condition Functions
* - ITAX can be set in Item Trigger Action Functions
*============================================================================
* ## Plugin Call Info
*----------------------------------------------------------------------------
* # Configuration manipulations
* 1. DoubleX_RMMV.Item_Triggers.prop
* - Returns the property prop under DoubleX_RMMV.Item_Triggers
* 2. DoubleX_RMMV.Item_Triggers.prop = function
* - Sets the property prop under DoubleX_RMMV.Item_Triggers as
* function which will be bound to the battler upon use
* - No DoubleX_RMMV.Item_Triggers.prop change will be saved
* # Item manipulations
* All meta.itemTriggers changes can be saved if
* DoubleX RMMV Dynamic Data is used
* 1. meta.itemTriggers[timing]
* - Returns the array of all ITCX-ITAX pairs of timing timing
* 2. meta.itemTriggers[timing] = [[ITCX, ITAX], [ITCX, ITAX], ...]
* - Adds a new timing with some ITCX-ITAX pairs or overwrites all the
* existing ones with those pairs if timing is an existing timing
* 3. meta.itemTriggers[timing][i] = [ITCX, ITAX]
* - Set the ith ITCX-ITAX pair as the new ITCX-ITAX pair
* # Battler manipulations
* 1. GBB.execItemTriggers.call(battler, item, timing)
* - Executes all item triggers with timing timing of item of battler
* battler
* - GBB is DoubleX_RMMV.Item_Triggers.Game_BattlerBase
*============================================================================
*/
"use strict";
var DoubleX_RMMV = DoubleX_RMMV || {};
DoubleX_RMMV["Item Triggers"] = "v1.01a";
/*============================================================================
* ## Script Configurations
* You only need to edit this part as it's about what this script does
*----------------------------------------------------------------------------*/
DoubleX_RMMV.Item_Triggers = {
/*------------------------------------------------------------------------
* Item Trigger Condition Functions
* - Setups ITCX used by <timing item trigger: ITCX, ITAX>
*------------------------------------------------------------------------*/
/* ITCX are used at:
1. DoubleX_RMMV.Item_Triggers.Game_BattlerBase
- if (IT[trigger[0]].call(this)) { IT[trigger[1]].call(this); } in
- execItemTriggers
ITCX are Javascript functions which will be bound to the battler upon use
ITCX names can only use alphanumeric characters
item is the skill/item using the ITCX
The below ITCX are examples added to help you set your ITCX
You can freely use, rewrite and/or delete these examples */
// Sets the item trigger condition as always true
ITC1: function(item) { return true; },
// Sets the item trigger condition as needing switch with id x to be on
ITC2: function(item) { return $gameSwitches.value(x); },
// Adds new ITCX here
/*------------------------------------------------------------------------
* Item Trigger Action Values
* - Setups ITAX used by <timing item trigger: ITCX, ITAX>
*------------------------------------------------------------------------*/
/* ITAX are used at:
1. DoubleX_RMMV.Item_Triggers.Game_BattlerBase
- if (IT[trigger[0]].call(this)) { IT[trigger[1]].call(this); } in
- execItemTriggers
ITAX are Javascript functions which will be bound to the battler upon use
ITAX names can only use alphanumeric characters
item is the skill/item using the ITAX
The below ITAX are examples added to help you set your ITAX
You can freely use, rewrite and/or delete these examples */
// Sets the item trigger action as what Special Effect Escape does
ITA1: function(item) { this.hide(); },
// Sets the item trigger action as setting the battler's hp to full
ITA2: function(item) { this._hp = this.mhp; },
// Adds new ITAX here
}; // DoubleX_RMMV.Item_Triggers
/*============================================================================
* ## Plugin Implementations
* You need not edit this part as it's about how this plugin works
*----------------------------------------------------------------------------
* # Plugin Support Info:
* 1. Prerequisites
* - Some Javascript coding proficiency to fully comprehend this
* plugin
* 2. Function documentation
* - The 1st part describes why this function's rewritten/extended for
* rewritten/extended functions or what the function does for new
* functions
* - The 2nd part describes what the arguments of the function are
* - The 3rd part informs which version rewritten, extended or created
* this function
* - The 4th part informs whether the function's rewritten or new
* - The 5th part informs whether the function's a real or potential
* hotspot
* - The 6th part describes how this function works for new functions
* only, and describes the parts added, removed or rewritten for
* rewritten or extended functions only
* Example:
* /*----------------------------------------------------------------------
* * Why rewrite/extended/What this function does
* *----------------------------------------------------------------------*/
/* // arguments: What these arguments are
* functionName = function(arguments) { // Version X+; Hotspot
* // Added/Removed/Rewritten to do something/How this function works
* functionContents
* //
* } // functionName
*----------------------------------------------------------------------------*/
(function(IT) {
IT.DataManager = {};
var DM = IT.DataManager;
DM.isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
// Rewritten
return DM.isDatabaseLoaded.apply(this, arguments) && DM.loadAllNotes();
//
}; // DataManager.isDatabaseLoaded
DM.loadAllNotes = function() {
[$dataSkills, $dataItems].forEach(function(type) {
type.forEach(function(data) {
if (data) { DM.loadItemNotes(data); }
});
});
return true;
}; // DM.loadAllNotes
// data: The data to have its notetags read
DM.loadItemNotes = function(data) {
var regExp = /< *(\w+) +item +trigger *: *(\w+) *, *(\w+) *>/i;
var timing, triggers;
data.meta.itemTriggers = {};
triggers = data.meta.itemTriggers;
data.note.split(/[\r\n]+/).forEach(function(line) {
if (!line.match(regExp)) { return; }
timing = RegExp.$1;
triggers[timing] = triggers[timing] || [];
triggers[timing].push([RegExp.$2, RegExp.$3]);
});
}; // DM.loadItemNotes
IT.BattleManager = {};
var BM = IT.BattleManager;
BM.startAction = BattleManager.startAction;
BattleManager.startAction = function() {
// Added
var item = this._subject.currentAction().item();
GBB.execItemTriggers.call(this._subject, item, "preBattle");
//
BM.startAction.apply(this, arguments);
}; // BattleManager.startAction
BM.endAction = BattleManager.endAction;
BattleManager.endAction = function() {
BM.endAction.apply(this, arguments);
// Added
var item = this._action ? this._action.item() : null;
if (!item) { return; }
GBB.execItemTriggers.call(this._subject, item, "postBattle");
//
}; // BattleManager.endAction
IT.Game_BattlerBase = {};
var GBB = IT.Game_BattlerBase;
/*------------------------------------------------------------------------
* Triggers each item action when each respective condition's met
*------------------------------------------------------------------------*/
// timing: The timing of the item triggering its actions
GBB.execItemTriggers = function(item, timing) {
var triggers = item.meta.itemTriggers[timing];
if (!triggers) { return; }
// Calls each ITCX to see if its ITAX should be called as well
triggers.forEach(function(trigger) {
if (!IT[trigger[0]].call(this, item)) { return; }
IT[trigger[1]].call(this, item);
}, this);
//
}; // GBB.execItemTriggers
IT.Scene_ItemBase = {};
var SIB = IT.Scene_ItemBase;
SIB.useItem = Scene_ItemBase.prototype.useItem;
Scene_ItemBase.prototype.useItem = function() {
GBB.execItemTriggers.call(this.user(), this.item(), "preMap"); // Added
SIB.useItem.apply(this, arguments);
GBB.execItemTriggers.call(this.user(), this.item(), "postMap"); // Added
}; // Scene_ItemBase.prototype.useItem
})(DoubleX_RMMV.Item_Triggers);
/*============================================================================*/