Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*============================================================================
- * ## Plugin Info
- *----------------------------------------------------------------------------
- * # Plugin Name
- * DoubleX RMMV State 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/EatwNufM
- * Mentioned Patreon Supporters:
- * https://www.patreon.com/posts/71738797
- *----------------------------------------------------------------------------
- * # Author
- * DoubleX
- *----------------------------------------------------------------------------
- * # Changelog
- * v1.02a(GMT 0200 14-5-2016):
- * 1. Added the timing while to <timing state trigger: STCX, STAX>
- * v1.01a(GMT 1300 26-2-2016):
- * 1. STCX and STAX take the state using them as an argument as well
- * v1.00g(GMT 0400 25-12-2015):
- * 1. The aliased functions can be accessed by other custom plugins now
- * 2. Exposed the state plugin calls that can access the notetag values
- * 3. Increased this plugin's compactness, compatibility and readability
- * v1.00f(GMT 1500 6-11-2015):
- * 1. Fixed undefined this in forEach bug
- * v1.00e(GMT 1400 6-11-2015):
- * 1. Simplified the notetag reading mechanisms
- * 2. Fixed some typos
- * v1.00d(GMT 1100 5-11-2015):
- * 1. Fixed undefined this under DoubleX_RMMV.State_Triggers bug
- * v1.00c(GMT 0000 5-11-2015):
- * 1. Fixed failing to load notetags due to nil $dataStates bug
- * v1.00b(GMT 1000 4-11-2015):
- * 1. Fixed several logic and syntax errors
- * 2. Increased this plugin's maintainability
- * v1.00a(GMT 1500 30-10-2015):
- * 1. 1st version of this plugin finished
- *============================================================================*/
- /*:
- * @plugindesc Sets some states 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
- *----------------------------------------------------------------------------
- * # State Notetags:
- * 1. <timing state trigger: STCX, STAX>
- * - Sets a state to trigger STAX when timing and STCX are met
- * - timing can be add, turn, remove or custom timings set by you
- * - add means the state's just added
- * - turn means the state's remaining turn's just reduced by 1
- * - remove means the state's just removed
- * - (v1.02a+)while means the STAX effects are active as long as the
- * state's active
- * - timing must only consist of alphanumeric characters
- * - STCX can be set in State Trigger Condition Functions
- * - STAX can be set in State Trigger Action Functions
- *============================================================================
- * ## Plugin Call Info
- *----------------------------------------------------------------------------
- * # Configuration manipulations
- * 1. DoubleX_RMMV.State_Triggers.prop
- * - Returns the property prop under DoubleX_RMMV.State_Triggers
- * 2. DoubleX_RMMV.State_Triggers.prop = val
- * - Sets the property prop under DoubleX_RMMV.State_Triggers as a
- * function which will be bound to the battler upon use
- * # State manipulations
- * All meta.stateTriggers changes can be saved if
- * DoubleX RMMV Dynamic Data is used
- * 1. meta.stateTriggers[timing]
- * - Returns the array of all STCX-STAX pairs of timing timing
- * 2. meta.stateTriggers[timing] = [[STCX, STAX], [STCX, STAX], ...]
- * - Adds a new timing with some STCX-STAX pairs or overwrites all the
- * existing ones with those pairs if timing is an existing timing
- * 3. meta.stateTriggers[timing][i] = [STCX, STAX]
- * - Set the ith STCX-STAX pair as the new STCX-STAX pair
- * # Battler manipulations
- * (v1.02a+)1. GBB.stateTriggerTraits.call(battler, state, timing)
- * - Collects all traits from all STAX meeting their corresponding
- * STCX with timing timing of state applied to battler
- * - GBB is DoubleX_RMMV.State_Triggers.Game_BattlerBase
- * 2. GBB.execStateTriggers.call(battler, stateId, timing)
- * - Executes all state triggers with timing timing of state with id
- * stateId applied to battler
- * - GBB is DoubleX_RMMV.State_Triggers.Game_BattlerBase
- *============================================================================
- */
- 'use strict';
- var DoubleX_RMMV = DoubleX_RMMV || {};
- DoubleX_RMMV["State Triggers"] = 'v1.02a';
- /*============================================================================
- * ## Plugin Configurations
- * You only need to edit this part as it's about what this plugin does
- *----------------------------------------------------------------------------*/
- DoubleX_RMMV.State_Triggers = {
- /*------------------------------------------------------------------------
- * State Trigger Condition Functions
- * - Setups STCX used by this plugin's notetags
- *------------------------------------------------------------------------*/
- /* STCX are used at:
- * 1. DoubleX_RMMV.State_Triggers.Game_BattlerBase
- * - return ST[trigger[0]].call(battler, state); in stateTriggerTraits
- * - if (ST[trigger[0]].call(this)) { ST[trigger[1]].call(this); } in
- * execStateTriggers
- * STCX are Javascript functions which will be bound to the battler upon use
- * STCX names can only use alphanumeric characters
- * state is the state using the STCX
- * The below STCX are examples added to help you set your STCX
- * You can freely use, rewrite and/or delete these examples
- */
- // Sets the state trigger condition as always true
- STC1: function(state) { return true; },
- // Sets the state trigger condition as needing switch with id x to be on
- STC2: function(state) { return $gameSwitches.value(x); },
- // Sets the state trigger condition as always true
- STC3: function(state) { return false; },
- // Adds new STCX here
- /*------------------------------------------------------------------------
- * State Trigger Action Values
- * - Setups STAX used by this plugin's notetags
- *------------------------------------------------------------------------*/
- /* STAX are used at:
- * 1. DoubleX_RMMV.State_Triggers.Game_BattlerBase
- * - return r.concat(ST[trigger[1]].call(battler, state)); in
- * stateTriggerTraits
- * - if (ST[trigger[0]].call(this)) { ST[trigger[1]].call(this); } in
- * execStateTriggers
- * STAX are Javascript functions which will be bound to the battler upon use
- * STAX names can only use alphanumeric characters
- * state is the state using the STAX
- * If the timing using the STAX is while, the STAX must return an array of
- * Trait Class
- * You can refer to Game_BattlerBase in rpg_objects.js and Trait Class in
- * the RMMV help html
- * The below STAX are examples added to help you set your STAX
- * You can freely use, rewrite and/or delete these examples
- */
- /* Sets the state trigger action as what Special Effect Escape does
- * This STAX's not supposed to work with the timing while as it doesn't
- * return an array of Trait Class
- */
- STA1: function(state) { this.hide(); },
- /* Sets the state trigger action as setting the battler's hp to full
- * This STAX's not supposed to work with the timing while as it doesn't
- * return an array of Trait Class
- */
- STA2: function(state) { this._hp = this.mhp; },
- /* Sets the state trigger action as ultiplying the battler's atk by x * 100%
- * This STAX's supposed to work with the timing while as it returns an array
- * of Trait Class
- */
- STA3: function(state) { return [{"code":21,"dataId":2,"value":x}]; }
- // Adds new STAX here
- }; // DoubleX_RMMV.State_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(ST) {
- ST.DataManager = {};
- var DM = ST.DataManager;
- DM.isDatabaseLoaded = DataManager.isDatabaseLoaded;
- DataManager.isDatabaseLoaded = function() {
- // Rewritten
- return DM.isDatabaseLoaded.apply(this, arguments) && DM.loadAllNotes();
- //
- }; // DataManager.isDatabaseLoaded
- DM.loadAllNotes = function() {
- $dataStates.forEach(function(data) {
- if (data) { DM.loadStateNotes(data); }
- });
- return true;
- }; // DM.loadAllNotes
- // data: The data to have its notetags read
- DM.loadStateNotes = function(data) {
- data.meta.stateTriggers = {};
- var timing, triggers = data.meta.stateTriggers;
- var regExp = /< *(\w+) +state +trigger *: *(\w+) *, *(\w+) *>/i;
- 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.loadStateNotes
- ST.Game_BattlerBase = {};
- var GBB = ST.Game_BattlerBase;
- GBB.clearStates = Game_BattlerBase.prototype.clearStates;
- Game_BattlerBase.prototype.clearStates = function() {
- // Added to store the state array right before it's cleared
- var lastStates = this._states;
- //
- GBB.clearStates.apply(this, arguments);
- // Added to trigger the remove actions if the remove conditions are met
- if (!lastStates) { return; }
- lastStates.forEach(function(stateId) {
- GBB.execStateTriggers.call(this, stateId, 'remove');
- }, this);
- //
- }; // Game_BattlerBase.prototype.clearStates
- GBB.eraseState = Game_BattlerBase.prototype.eraseState;
- Game_BattlerBase.prototype.eraseState = function(stateId) {
- // Added to store the state existence flag right before it's erased
- var trigger = this._states.indexOf(stateId) >= 0;
- //
- GBB.eraseState.apply(this, arguments);
- // Added to trigger the remove actions if the remove conditions are met
- if (trigger) { GBB.execStateTriggers.call(this, stateId, 'remove'); }
- //
- }; // Game_BattlerBase.prototype.eraseState
- GBB.resetStateCounts = Game_BattlerBase.prototype.resetStateCounts;
- Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
- GBB.resetStateCounts.apply(this, arguments);
- // Added to trigger the add actions if the add conditions are met
- if (this._states.indexOf(stateId) < 0) { return; }
- GBB.execStateTriggers.call(this, stateId, 'add');
- //
- }; // Game_BattlerBase.prototype.resetStateCounts
- GBB.updateStateTurns = Game_BattlerBase.prototype.updateStateTurns;
- Game_BattlerBase.prototype.updateStateTurns = function() {
- GBB.updateStateTurns.apply(this, arguments);
- // Added to trigger the turn actions if the turn conditions are met
- this._states.forEach(function(stateId) {
- GBB.execStateTriggers.call(this, stateId, 'turn');
- }, this);
- //
- }; // Game_BattlerBase.prototype.updateStateTurns
- GBB.allTraits = Game_BattlerBase.prototype.allTraits;
- Game_BattlerBase.prototype.allTraits = function() { // v1.02a+
- // Rewritten
- var stateTriggerTraits = GBB.allStateTriggerTraits.call(this);
- return stateTriggerTraits.concat(GBB.allTraits.apply(this, arguments));
- //
- }; // Game_BattlerBase.prototype.allTraits
- GBB.allStateTriggerTraits = function() { // v1.02a+
- var battler = this;
- return this.states().reduce(function(r, obj) {
- return r.concat(GBB.stateTriggerTraits.call(battler, obj, 'while'));
- }, []);
- }; // GBB.allStateTriggerTraits
- /* state: The state triggering its actions
- * timing: The timing of the state triggering its actions
- */
- GBB.stateTriggerTraits = function(state, timing) { // v1.02a+
- var triggers = state.meta.stateTriggers[timing];
- if (!triggers) { return []; }
- // Collects all traits returned by STAX meeting STCX with timing timing
- var battler = this;
- return triggers.filter(function(trigger) {
- return ST[trigger[0]].call(battler, state);
- }).reduce(function(r, trigger) {
- return r.concat(ST[trigger[1]].call(battler, state));
- }, []);
- //
- }; // GBB.stateTriggerTraits
- /*------------------------------------------------------------------------
- * Triggers each state action when each respective condition's met
- *------------------------------------------------------------------------*/
- /* stateId: The id of the state triggering its actions
- * timing: The timing of the state triggering its actions
- */
- GBB.execStateTriggers = function(stateId, timing) {
- var state = $dataStates[stateId];
- var triggers = state.meta.stateTriggers[timing];
- if (!triggers) { return; }
- // Calls each STCX to see if its paired STAX should be called as well
- triggers.forEach(function(trigger) {
- if (!ST[trigger[0]].call(this, state)) { return; }
- ST[trigger[1]].call(this, state);
- }, this);
- //
- }; // GBB.execStateTriggers
- })(DoubleX_RMMV.State_Triggers);
- /*============================================================================*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement