Code:
#==============================================================================|
# ** DoubleX RMVXA Permanent States v1.00c |
#------------------------------------------------------------------------------|
# * Changelog |
# v1.00c(GMT 1400 14-7-2015): |
# - Increased this script's compactness and efficiency |
# v1.00b(GMT 0200 12-3-2014): |
# - Fixed permanent states bug upon battler's revival |
# v1.00a(GMT 0700 13-2-2014): |
# - 1st version of this script finished |
#------------------------------------------------------------------------------|
# * Author |
# DoubleX |
#------------------------------------------------------------------------------|
# * Terms of use |
# None other than not claiming this script as created by anyone except |
# DoubleX or his alias |
#------------------------------------------------------------------------------|
# * Prerequisites |
# Scripts: |
# - none |
# Knowledge: |
# - Use of notetags |
#------------------------------------------------------------------------------|
# * Functions |
# - Sets specific states to be always added back automatically upon revival |
#------------------------------------------------------------------------------|
# * Manual |
# To use this script, open the script editor and put this script into an |
# open slot between ▼ Materials and ▼ Main. Save to take effect. |
#------------------------------------------------------------------------------|
# * Compatibility |
# Scripts aliasing or rewriting method: |
# - clear_states under class Game_BattlerBase |
# - revive under class Game_Battler |
# may have compatibility issues with this script |
# Place this script above those aliasing any of these methods if possible |
#==============================================================================|
($imported ||= {})["DoubleX RMVXA Permanent States"] = true
#==============================================================================|
# ** You only need to edit this part as it's about what this script does |
#------------------------------------------------------------------------------|
module DoubleX_RMVXA
module Permanent_States
#------------------------------------------------------------------------------|
# * Notetag <permanent state> for states |
# To make a state always being automatically added back upon revival, put |
# the above notetag into that state's notebox in the database. |
#------------------------------------------------------------------------------|
#------------------------------------------------------------------------------|
# * ALL_STATES_PERMANENT, default = false |
# Notetags will be ignored and all states will be permanent states |
#------------------------------------------------------------------------------|
ALL_STATES_PERMANENT = false
end # Permanent_States
end # DoubleX_RMVXA
#==============================================================================|
#==============================================================================|
# ** You need not edit this part as it's about how this script works |
#------------------------------------------------------------------------------|
class << DataManager
#----------------------------------------------------------------------------|
# Alias method: load_database |
#----------------------------------------------------------------------------|
alias load_database_permanent_state load_database
def load_database
load_database_permanent_state
# Added to load permanent state notetags
load_notetags_permanent_state
#
end # load_database
#----------------------------------------------------------------------------|
# New method: load_notetags_permanent_state |
#----------------------------------------------------------------------------|
def load_notetags_permanent_state
$data_states.each { |obj| obj.load_notetags_permanent_state if obj }
end # load_notetags_permanent_state
end # DataManager
class RPG::State < RPG::BaseItem
#----------------------------------------------------------------------------|
# New public instance variable |
#----------------------------------------------------------------------------|
attr_accessor :permanent_state
#----------------------------------------------------------------------------|
# New method: load_notetags_permanent_state |
#----------------------------------------------------------------------------|
def load_notetags_permanent_state
if DoubleX_RMVXA::Permanent_States::ALL_STATES_PERMANENT
return @permanent_state = true
end
@note.split(/[\r\n]+/).each { |line|
case line
when /<(?:PERMANENT_STATE|permanent state)>/i
return @permanent_state = true
end
}
end # load_notetags_permanent_state
end # RPG::State
class Game_BattlerBase
#----------------------------------------------------------------------------|
# Alias method: clear_states |
#----------------------------------------------------------------------------|
alias clear_states_permanent_state clear_states
def clear_states
# Added to store permanent states
@permanent_states = []
@permanent_states_turns = {}
if @states && @states.size > 0
@states.each { |state|
next unless $data_states[state].permanent_state
@permanent_states << state
@permanent_states_turns[state] = @state_turns[state]
}
end
#
clear_states_permanent_state
end # clear_states
end # Game_BattlerBase
class Game_Battler < Game_BattlerBase
#----------------------------------------------------------------------------|
# Alias method: revive |
#----------------------------------------------------------------------------|
alias revive_permanent_states revive
def revive
# Added to add permanent states upon revival
add_permanent_states
#
revive_permanent_states
end # revive
#----------------------------------------------------------------------------|
# New method: add_permanent_states |
#----------------------------------------------------------------------------|
def add_permanent_states
@states = @permanent_states
@state_turns = @permanent_states_turns
end # add_permanent_states
end # Game_Battler
#==============================================================================|