05-26-2014, 01:54 PM
DoubleX RMVXA Caster Aftermath
Version: v1.00a
IntroductionVersion: v1.00a
Allows users to add effects applied to the casters after casting skills
Features
* Use of notetags(requires knowledge of notetag usage) to set specific skills to add effects to their caster after casting them
Video
Script
"script"
Code:
#==============================================================================|
# ** DoubleX RMVXA Caster Aftermath v1.00a |
#------------------------------------------------------------------------------|
# * Changelog |
# v1.00a(GMT 1200 25-5-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 |
# - Allows users to add effects applied to the casters after casting skills |
#------------------------------------------------------------------------------|
# * 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: |
# - self.load_database under module DataManager |
# - use_item under class Scene_Battle |
# may have compatibility issues with this script |
# Place this script above those aliasing any of these methods if possible |
#==============================================================================|
$imported = {} if $imported.nil?
$imported["DoubleX RMVXA Caster Aftermath"] = true
#------------------------------------------------------------------------------|
# * Notetag <change hp: x, s> for skills/items |
# To make a skill or item to change hp of the casters by x after casting it,|
# put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <change hp %: x, s> for skills/items |
# To make a skill or item to change hp of the casters by x% after casting |
# it, put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <change mp: x, s> for skills/items |
# To make a skill or item to change mp of the casters by x after casting it,|
# put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <change mp %: x, s> for skills/items |
# To make a skill or item to change mp of the casters by x% after casting |
# it, put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <change tp: x, s> for skills/items |
# To make a skill or item to change tp of the casters by x after casting it,|
# put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <change tp %: x, s> for skills/items |
# To make a skill or item to change tp of the casters by x% after casting |
# it, put the above notetag into its notebox in the database. |
# Setting s as 0 and 1 indicates decrement and increment respectively. |
#------------------------------------------------------------------------------|
# * Notetag <add state: id, r%> for skills/items |
# To make a skill or item to add state with id id and rate r to the casters |
# after casting it, put the above notetag into its notebox in the database. |
# Normal attack isn't supported by this notetag. |
#------------------------------------------------------------------------------|
# * Notetag <remove state: id, r%> for skills/items |
# To make a skill or item to remove state with id id and rate r from the |
# casters after casting it, put the above notetag into its notebox in the |
# database. |
#------------------------------------------------------------------------------|
# * Notetag <add buff: id, t> for skills/items |
# To make a skill or item to add buff of parameter with id id and turn t to |
# the casters after casting it, put the above notetag into its notebox in |
# the database. |
#------------------------------------------------------------------------------|
# * Notetag <add debuff: id, t> for skills/items |
# To make a skill or item to add debuff of parameter with id id and turn t |
# to the casters after casting it, put the above notetag into its notebox in|
# the database. |
#------------------------------------------------------------------------------|
# * Notetag <remove buff: id> for skills/items |
# To make a skill or item to remove buff of parameter with id id from the |
# casters after casting it, put the above notetag into its notebox in the |
# database. |
#------------------------------------------------------------------------------|
# * Notetag <remove buff: id> for skills/items |
# To make a skill or item to remove debuff of parameter with id id from the |
# casters after casting it, put the above notetag into its notebox in the |
# database. |
#------------------------------------------------------------------------------|
#==============================================================================|
# ** You need not edit this part as it's about how this script works |
#------------------------------------------------------------------------------|
module DoubleX_RMVXA
module REGEXP
module USABLEITEM
CHANGE_HP = /<(?:CHANGE_HP|change hp):[ ](\d+(?:\s*,\s*\d+)*)>/i
CHANGE_HP_PERCENT = /<(?:CHANGE_HP_PERCENT|change hp %):[ ](\d+(?:\s*,\s*\d+)*)>/i
CHANGE_MP = /<(?:CHANGE_MP|change mp):[ ](\d+(?:\s*,\s*\d+)*)>/i
CHANGE_MP_PERCENT = /<(?:CHANGE_MP_PERCENT|change mp %):[ ](\d+(?:\s*,\s*\d+)*)>/i
CHANGE_TP = /<(?:CHANGE_TP|change tp):[ ](\d+(?:\s*,\s*\d+)*)>/i
CHANGE_TP_PERCENT = /<(?:CHANGE_TP_PERCENT|change tp %):[ ](\d+(?:\s*,\s*\d+)*)>/i
ADD_STATE = /<(?:ADD_STATE|add state):[ ](\d+(?:\s*,\s*\d+)*)>/i
REMOVE_STATE = /<(?:REMOVE_STATE|remove state):[ ](\d+(?:\s*,\s*\d+)*)>/i
ADD_BUFF = /<(?:ADD_BUFF|add buff):[ ](\d+(?:\s*,\s*\d+)*)>/i
ADD_DEBUFF = /<(?:ADD_DEBUFF|add debuff):[ ](\d+(?:\s*,\s*\d+)*)>/i
REMOVE_BUFF = /<(?:REMOVE_BUFF|remove buff):[ ]*(\d+)>/i
REMOVE_DEBUFF = /<(?:REMOVE_DEBUFF|remove debuff):[ ]*(\d+)>/i
end # USABLEITEM
end # REGEXP
end # DoubleX_RMVXA
module DataManager
CASTER_AFTERMATH = ["change_hp", "change_hp_percent", "change_mp", "change_mp_percent", "change_tp", "change_tp_percent", "add_state", "remove_state", "add_buff", "add_debuff", "remove_buff", "remove_debuff"]
#----------------------------------------------------------------------------|
# Alias method: self.load_database |
#----------------------------------------------------------------------------|
class <<self; alias load_database_caster_aftermath load_database; end
def self.load_database
load_database_caster_aftermath
# This part is added by this script to load caster aftermath notetags
load_notetags_caster_aftermath
#
end # self.load_database
#----------------------------------------------------------------------------|
# New method: self.load_notetags_caster_aftermath |
#----------------------------------------------------------------------------|
def self.load_notetags_caster_aftermath
groups = [$data_skills, $data_items]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_caster_aftermath
end
end
end # self.load_notetags_caster_aftermath
end # DataManager
class RPG::UsableItem < RPG::BaseItem
#----------------------------------------------------------------------------|
# New public instance variable |
#----------------------------------------------------------------------------|
DataManager::CASTER_AFTERMATH.each { |note| eval("attr_accessor :" + note) }
#----------------------------------------------------------------------------|
# New common cache: load_notetags_caster_aftermath |
#----------------------------------------------------------------------------|
def load_notetags_caster_aftermath
DataManager::CASTER_AFTERMATH.each { |note| eval("@" + note + " = []") }
self.note.split(/[\r\n]+/).each { |line|
DataManager::CASTER_AFTERMATH.each_with_index { |note, i|
case line
when eval("DoubleX_RMVXA::REGEXP::USABLEITEM::" + note.upcase)
if i > 9
eval("@" + note + ".push($1.to_i)")
else
$1.scan(/\d+/).each_with_index { |input, index|
eval("@" + note + ".push([input.to_i, 0].max)")
}
end
end
}
}
end # load_notetags_caster_aftermath
end # RPG::UsableItem
class Game_Battler < Game_BattlerBase
#----------------------------------------------------------------------------|
# New method : apply_caster_aftermath |
#----------------------------------------------------------------------------|
def apply_caster_aftermath(item)
@result.clear
@result.used = item_test(self, item)
DataManager::CASTER_AFTERMATH.each_with_index { |note, index|
aftermath = eval("item." + note)
next if aftermath.size <= 0
if index < 10
next if aftermath.size % 2 != 0
note_1 = []
note_2 = []
aftermath.each_with_index { |a, i| i % 2 == 0 ? note_1.push(a) : note_2.push(a) }
eval(index < 4 ? "caster_" + note + "(item, note_1, note_2)" : "caster_" + note + "(note_1, note_2)")
else
eval("caster_" + note + "(aftermath)")
end
}
end # apply_caster_aftermath
#----------------------------------------------------------------------------|
# New method : caster_change_hp |
#----------------------------------------------------------------------------|
def caster_change_hp(item, value, sign)
caster_change_vp_hm(item, value, sign, "value", "hp")
end # caster_change_hp
#----------------------------------------------------------------------------|
# New method : caster_change_hp_percent |
#----------------------------------------------------------------------------|
def caster_change_hp_percent(item, percent, sign)
caster_change_vp_hm(item, precent, sign, "percent", "hp")
end # caster_change_hp_percent
#----------------------------------------------------------------------------|
# New method : caster_change_mp |
#----------------------------------------------------------------------------|
def caster_change_mp(item, value, sign)
caster_change_vp_hm(item, value, sign, "value", "mp")
end # caster_change_mp
#----------------------------------------------------------------------------|
# New method : caster_change_mp_percent |
#----------------------------------------------------------------------------|
def caster_change_mp_percent(item, percent, sign)
caster_change_vp_hm(item, precent, sign, "percent", "mp")
end # caster_change_mp_percent
#----------------------------------------------------------------------------|
# New method : caster_change_vp_hm |
#----------------------------------------------------------------------------|
def caster_change_vp_hm(item, value, sign, vp, hm)
sign.each_index { |i|
v = rec * (sign[i] * 2 - 1) * value[i] * (vp == "value" ? 1 : eval("m" + hm))
v *= pha if item.is_a?(RPG::Item)
eval("@result." + hm + "_damage -= v.to_i")
eval("self." + hm + " += v.to_i")
@result.success = true if hm == "hp" || v != 0
}
end # caster_change_vp_hm
#----------------------------------------------------------------------------|
# New method : caster_change_tp |
#----------------------------------------------------------------------------|
def caster_change_tp(value, sign)
caster_change_tp_vp(value, sign, "value")
end # caster_change_tp
#----------------------------------------------------------------------------|
# New method : caster_change_tp_percent |
#----------------------------------------------------------------------------|
def caster_change_tp_percent(percent, sign)
caster_change_tp_vp(value, sign, "percent")
end # caster_change_tp_percent
#----------------------------------------------------------------------------|
# New method : caster_change_tp_vp |
#----------------------------------------------------------------------------|
def caster_change_tp_vp(value, sign, vp)
sign.each_index { |i|
v = (sign[i] * 2 - 1) * value[i] * (vp = "value" ? 1 : max_tp)
@result.tp_damage -= v.to_i
self.tp += v.to_i
@result.success = true if v != 0
}
end # caster_change_tp_vp
#----------------------------------------------------------------------------|
# New method : caster_add_state |
#----------------------------------------------------------------------------|
def caster_add_state(state_id, rate)
rate.each_index { |i|
rate[i] *= state_rate(state_id[i]) * luk_effect_rate(self) if opposite?(self)
add_state(state_id[i]) if rand < rate[i] / 100
}
@result.success = true
end # caster_add_state
#----------------------------------------------------------------------------|
# New method : caster_remove_state |
#----------------------------------------------------------------------------|
def caster_remove_state(state_id, rate)
rate.each_index { |i| remove_state(state_id[i]) if rand < rate[i] / 100 }
@result.success = true
end # caster_remove_state
#----------------------------------------------------------------------------|
# New method : caster_add_buff |
#----------------------------------------------------------------------------|
def caster_add_buff(param_id, turn)
turn.each_index { |i| add_buff(param_id[i], turn[i]) }
@result.success = true
end # caster_add_buff
#----------------------------------------------------------------------------|
# New method : caster_add_debuff |
#----------------------------------------------------------------------------|
def caster_add_debuff(param_id, turn)
turn.each_index { |i| add_debuff(param_id[i], turn[i]) if rand < debuff_rate(param_id[i]) * luk_effect_rate(self) }
@result.success = true
end # caster_add_debuff
#----------------------------------------------------------------------------|
# New method : caster_remove_buff |
#----------------------------------------------------------------------------|
def caster_remove_buff(param_id)
caster_remove_buff_debuff(param_id, ">")
end # caster_remove_buff
#----------------------------------------------------------------------------|
# New method : caster_remove_debuff |
#----------------------------------------------------------------------------|
def caster_remove_debuff(param_id)
caster_remove_buff_debuff(param_id, "<")
end # caster_remove_debuff
#----------------------------------------------------------------------------|
# New method : caster_remove_buff_debuff |
#----------------------------------------------------------------------------|
def caster_remove_buff_debuff(param_id, operator)
param_id.each { |id| remove_buff(id) if eval("@buffs[id] " + operator + " 0") }
@result.success = true
end # caster_remove_buff_debuff
end # Game_Battler
class Scene_Battle < Scene_Base
#----------------------------------------------------------------------------|
# Alias method : use_item |
#----------------------------------------------------------------------------|
alias use_item_caster_aftermath use_item
def use_item
use_item_caster_aftermath
# This part is added by this script to apply caster aftermath after use_item
if @subject && @subject.current_action && item_caster_aftermath?(@subject.current_action.item)
@subject.apply_caster_aftermath(@subject.current_action.item)
refresh_status
@subject.current_action ? @log_window.display_action_results(@subject, @subject.current_action.item) : @subject.perform_collapse_effect
end
#
end # use_item
#----------------------------------------------------------------------------|
# New method : item_caster_aftermath? |
#----------------------------------------------------------------------------|
def item_caster_aftermath?(item)
return false if !item
DataManager::CASTER_AFTERMATH.each { |note|
return true if eval("item." + note + ".size > 0")
}
end # item_caster_aftermath?
end # Scene_Battle
#==============================================================================|
Instructions
Open the script editor and put this script into an open slot between Materials and Main. Save to take effect.
FAQ
None
Compatibility
Scripts aliasing or rewriting method:
- self.load_database under module DataManager
- use_item under class Scene_Battle
may have compatibility issues with this script
Place this script above those aliasing any of these methods if possible
Credits and Thanks
None
Author's Notes
None
Terms and Conditions
None other than not claiming this script as created by anyone except DoubleX or his alias