DoubleX RMVXA State Triggers

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Purpose


Sets some states to trigger additional effects when conditions are met


Games using this script


None so far


Notetag

Spoiler




# * 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 |
# - 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 Notetag Values |
# - stax can be set in State Trigger Action Notetag Values |
Spoiler


Code:
    #--------------------------------------------------------------------------|
    #  State Trigger Condition Notetag Values                                  |
    #  - Setups stcx used by this script's notetags                            |
    #--------------------------------------------------------------------------|
    # stcx are read at:
    # 1. RPG::State
    #    - (@state_triggers[$1.downcase.to_sym] ||= []).push(
    #      [$2.downcase, $3.downcase]) in load_state_triggers_notes
    # stcx are used at:
    # 1. Game_BattlerBase
    #    - triggers.any? { |trigger| st.send(trigger[0], self, state) } in
    #      meet_any_state_trigger?
    #    - st.send(trigger[0], self, state) in state_trigger_features
    # 2. Game_Battler
    #    - st.send(trigger[1], self) if st.send(trigger[0], self) in
    #      exec_state_triggers
    # stcx are strings names of methods under DoubleX_RMVXA::State_Triggers
    # stcx names can only use alphanumeric characters and can't use uppercase
    # letters
    # battler is the battler calling the stcx
    # 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
    def self.stc1(battler, state)
      true
    end

    # Sets the state trigger condition as always false
    def self.stc2(battler, state)
      false
    end

    # Sets the state trigger condition as needing switch with id x to be on
    def self.stc3(battler, state)
      $game_switches[x]
    end

    # Sets the state trigger condition as needing the state using this stcx to
    # have its number of remaining turns greater than x
    def self.stc4(battler, state)
      battler.instance_exec { @state_turns[state_id] > x }
    end

    # Adds new stcx here
    

    #--------------------------------------------------------------------------|
    #  State Trigger Action Notetag Values                                     |
    #  - Setups stax used by this script's notetags                            |
    #--------------------------------------------------------------------------| 
    # stax are read at:
    # 1. RPG::State
    #    - (@state_triggers[$1.downcase.to_sym] ||= []).push(
    #      [$2.downcase, $3.downcase]) in load_state_triggers_notes
    # stax are used at:
    # 1. Game_BattlerBase
    #    - }.collect! { |trigger| st.send(trigger[1], self, state) }.flatten! in
    #      state_trigger_features
    # 2. Game_Battler
    #    - st.send(trigger[1], self) if st.send(trigger[0], self) in
    #      exec_state_triggers
    # stax are strings of names of methods under DoubleX_RMVXA::State_Triggers
    # stax names can only use alphanumeric characters and can't use uppercase
    # letters
    # battler is the battler calling the stax
    # state is the state using the stax
    # If the timing using the stax is while, the stax must return an array of
    # RPG::BaseItem::Feature
    # You can refer to Game_BattlerBase and RPG::BaseItem::Feature for more info
    # 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 RPG::BaseItem::Feature
    def self.sta1(battler, state)
      battler.hide
    end

    # Sets the state trigger action as calling common event with id
    # common_event_id
    # This stax's not supposed to work with the timing while as it doesn't
    # return an array of RPG::BaseItem::Feature
    def self.sta2(battler, state)
      $game_temp.reserve_common_event(common_event_id)
    end

    # Sets the state trigger action as executing damage equal to the value of
    # game variable with id x to self with type equal to that of skill with id
    # equal to y
    # This stax's not supposed to work with the timing while as it doesn't
    # return an array of RPG::BaseItem::Feature
    def self.sta3(battler, state)
      battler.result.clear
      battler.result.make_damage($game_variables[x], $data_skills[y])
      battler.execute_damage(battler)
    end

    # Sets the state trigger action as multiplying the battler's atk by x * 100%
    # This stax's supposed to work with the timing while as it returns an array
    # of RPG::BaseItem::Feature
    def self.sta4(battler, state)
      [RPG::BaseItem::Feature.new(21, 2, x)]
    end

    # Adds new stax here



Script Call

Spoiler




# * Battler manipulations |
# 1. exec_state_triggers(state_id, timing) |
# - Executes all state triggers with timing timing of state with id |
# state_id |
# 2. meet_any_state_trigger?(state, timing) |
# - Checks if any stcx with timing timing of state state is met |
# 3. state_trigger_features(state, timing) |
# - Returns an array of features returned by all stax meeting stcx with |
# timing timing of state |
# - This script call's not supposed to work with timing add, turn nor |
# remove but supposed to work with timing while |



Prerequisites


Abilities:


1. Decent RGSS3 scripting proficiency to fully utilize this script


Terms Of Use


You shall keep this script's Script Info part's contents intact


You shalln't claim that this script is written by anyone other than DoubleX or his aliases


None of the above applies to DoubleX or his/her aliases


Instructions


Open the script editor and put this script into an open slot between Materials and Main. Save to take effect.


FAQ


None so far


Authors


DoubleX


Changelog

Spoiler




# v1.03b(GMT 1400 10-5-2016): |
# 1. timing while won't replace but will combine the state's existing |
# features with all stax meeting the corresponding stcx |
# v1.03a(GMT 1500 9-5-2016): |
# 1. adding the timing while to <timing state trigger: stcx, stax> |
# v1.02a(GMT 1300 26-2-2016): |
# 1. stcx and stax take the state calling them as an argument as well |
# v1.01b(GMT 0300 7-11-2015): |
# 1. Notetag values are now symbols of methods in the configuration regions |
# 2. This script doesn't need DoubleX RMVXA State Triggers Compatibility to |
# be compatible with all its addressed scripts |
# 3. Further improved this script's compatibility, efficiency and simplicity|
# v1.01a(GMT 1100 8-5-2015): |
# 1. Lets users use state triggers with timings set by them |
# v1.00g(GMT 1600 4-5-2015): |
# 1. Improved this script's efficiency |
# v1.00f(GMT 0300 25-4-2015): |
# 1. Improved this script's effectiveness |
# v1.00e(GMT 1400 21-4-2015): |
# 1. Further improved this script's robustness |
# v1.00d(GMT 1500 14-4-2015): |
# 1. Improved this script's robustness |
# v1.00c(GMT 0200 12-4-2015): |
# 1. Fixed triggering remove actions upon adding state resists bug |
# 2. Fixed not triggering remove actions upon death, escape and recovery bug|
# v1.00b(GMT 1400 11-4-2015): |
# 1. Fixed not supporting multiple notetags on the same state bug |
# v1.00a(GMT 1100 11-4-2015): |
# 1. 1st version of this script finished |



View attachment (DoubleX)State Triggers v1.03b.rar
 
Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

v1.00d(GMT 1500 14-4-2015):

1. Improved this script's robustness
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

v1.00e(GMT 1400 21-4-2015):

1. Further improved this script's robustness
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

v1.00f(GMT 0300 25-4-2015):

1. Improved this script's effectiveness
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

v1.00g(GMT 1600 4-5-2015):

1. Improved this script's efficiency
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

v1.01a(GMT 1100 8-5-2015):

1. Lets users use state triggers with timings set by them
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

Code:
#    v1.01b(GMT 0300 7-11-2015):                                               |#    1. Notetag values are now symbols of methods in the configuration regions |#    2. This script doesn't need DoubleX RMVXA State Triggers Compatibility to |#       be compatible with all its addressed scripts                           |#    3. Further improved this script's compatibility, efficiency and simplicity|
 

nazgul

Husband
Veteran
Joined
Jul 23, 2015
Messages
116
Reaction score
39
First Language
english
Primarily Uses
I can't believe this script does not have more comments! This is the most brilliant thing I have found! It's adding so many new dimension to my game! Thank you so much Doublex for all your contributions and hardwork!
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

Code:
#    v1.02a(GMT 1300 26-2-2016):                                               |
#    1. stcx and stax take the state calling them as an argument as well       |
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

Code:
#    v1.03a(GMT 1500 9-5-2016):                                                |
#    1. adding the timing while to <timing state trigger: stcx, stax>          |
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Updates

Code:
#    v1.03b(GMT 1400 10-5-2016):                                               |
#    1. timing while won't replace but will combine the state's existing       |
#       features with all stax meeting the corresponding stcx                  |
 

nazgul

Husband
Veteran
Joined
Jul 23, 2015
Messages
116
Reaction score
39
First Language
english
Primarily Uses
One of my state triggers: 

"def self.sta22(battler)
      battler.force_action(125, -1)
      BattleManager.force_action(battler)
    end"



This does not trigger if the enemy affected by self.sta22 dies. Is there a way to make the trigger cast after the enemy dies? currently it seems I am forcing an action from the enemy with that state(When hes dead he cant perform the action). I  want to force an action from any random enemy. So when the enemy with the state dies, a random enemy that is still alive can perform the action. Does that make sense? 

The problem I am having revolves around having a pair of states that cycle each other with triggers. The first first state has a State animation of a flying pet, and simply triggers skill 125 when it is removed. It works just fine if it is removed through time, but if the enemy with this state dies the state vanishes without the trigger casting. 

Below I will show a GIF of the state running out and triggering and reapplying itself. The problem is in this GIF Ninja A has the state. If Ninja A dies before the state is removed by turns passing. The state vanishes and does not trigger.



In this GIF you can see the state trigger a second state which triggers a skill and reapplies the initial state back on the enemy. I need this to happen to a random enemy whenever the state is removed. Or another way to make this happen. Please I am begging you let me know if I can give you more information. Please help with this problem.

Alternatively do you know the command in code to add a state to random enemy? Please DoubleX Sama help me!

The overall goal here, is to keep a state on an enemy, until the last enemy is killed, but just one enemy at a time. I am using version 1.01b, when I use version 1.03b and adjust the script stax to:
 


"def self.sta22(battler, state)
      battler.force_action(125, -1)
      BattleManager.force_action(battler)
    end"

 


The state Tags I am using are: <remove state trigger: stc1, sta22>


The same thing happens. Essentially it will work unless Ninja A dies from an actor killing it.
 
Last edited by a moderator:

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Profile Posts

Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD
How many parameters is 'too many'??
Yay, now back in action Happy Christmas time, coming back!






Back in action to develop the indie game that has been long overdue... Final Fallacy. A game that keeps on giving! The development never ends as the developer thinks to be the smart cookie by coming back and beginning by saying... "Oh bother, this indie game has been long overdue..." How could one resist such? No-one c
So I was playing with filters and this looked interesting...

Versus the normal look...

Kind of gives a very different feel. :LZSexcite:

Forum statistics

Threads
105,854
Messages
1,017,004
Members
137,562
Latest member
tamedeathman
Top