Code:
#==============================================================================|
# ** DoubleX RMVXA Dynamic Cost v1.00a |
#------------------------------------------------------------------------------|
# * Changelog |
# v1.00a(GMT 0900 9-8-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 |
# - Lets users alter the skill's mp or tp cost via custom formulae |
#------------------------------------------------------------------------------|
# * 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 rewriting or aliasing method: |
# - self.load_database under module DataManager |
# - skill_mp_cost or skill_tp_cost under class Game_BattlerBase |
# may have compatibility issues with this script |
# Place this script above those aliasing any of these method if possible |
#==============================================================================|
$imported = {} if $imported.nil?
$imported["DoubleX RMVXA Dynamic Cost"] = true
#------------------------------------------------------------------------------|
# * Notetag <dynamic mp: string> for skills: |
# To add numerical values evaluated from string to its skill's mp cost, put |
# the above notetag into that skill's notebox in the database. This notetag |
# only takes effects on users having states with <dynamic mp> notetag. |
# string supports numeric constants and (needs scripting knowledge)methods |
# currently applicable to the current user trying to use this skill. |
#------------------------------------------------------------------------------|
# * Notetag <dynamic tp: string> for skills: |
# To add numerical values evaluated from string to its skill's tp cost, put |
# the above notetag into that skill's notebox in the database. This notetag |
# only takes effects on users having states with <dynamic tp> notetag. |
# string supports numeric constants and (needs scripting knowledge)methods |
# currently applicable to the current user trying to use this skill. |
#------------------------------------------------------------------------------|
# * Notetag <dynamic mp> for states: |
# To make dynamic mp costs applicable to a battler, add a state with this |
# notetag added to its notebox in the database to that battler. |
#------------------------------------------------------------------------------|
# * Notetag <dynamic tp> for states: |
# To make dynamic tp costs applicable to a battler, add a state with this |
# notetag added to its notebox in the database to that battler. |
#------------------------------------------------------------------------------|
#==============================================================================|
# ** You only need to edit this part as it's about what this script does |
#------------------------------------------------------------------------------|
module DoubleX_RMVXA
module Dynamic_Cost
#------------------------------------------------------------------------------|
# * Multiply_MCR, default = true |
# The numerical values evaluated from string in skills' dynamic mp notetags |
# will be multiplied by user's mcr before being added to their mp costs. |
#------------------------------------------------------------------------------|
Multiply_MCR = true
end # Dynamic_Cost
end # DoubleX_RMVXA
#==============================================================================|
#==============================================================================|
# ** You need not edit this part as it's about how this script works |
#------------------------------------------------------------------------------|
module DoubleX_RMVXA
module REGEXP
module SKILL
DYNAMIC_MP = /<(?:DYNAMIC_MP|dynamic mp):[ ]*(.+)>/i
DYNAMIC_TP = /<(?:DYNAMIC_TP|dynamic tp):[ ]*(.+)>/i
end # SKILL
module STATE
DYNAMIC_MP = /<(?:DYNAMIC_MP|dynamic mp)>/i
DYNAMIC_TP = /<(?:DYNAMIC_TP|dynamic tp)>/i
end # STATE
end # REGEXP
end # DoubleX_RMVXA
module DataManager
#----------------------------------------------------------------------------|
# Alias method: self.load_database |
#----------------------------------------------------------------------------|
class <<self; alias load_database_dynamic_cost load_database; end
def self.load_database
load_database_dynamic_cost
# This part is added by this script to load dynamic cost notetags
load_notetags_dynamic_cost
#
end # self.load_database
#----------------------------------------------------------------------------|
# New method: self.load_notetags_dynamic_cost |
#----------------------------------------------------------------------------|
def self.load_notetags_dynamic_cost
for group in [$data_skills, $data_states]
for obj in group
next if obj.nil?
obj.load_notetags_dynamic_cost
end
end
end # self.load_notetags_dynamic_cost
end # DataManager
class RPG::Skill
#----------------------------------------------------------------------------|
# New public instance variables |
#----------------------------------------------------------------------------|
attr_accessor :dynamic_mp
attr_accessor :dynamic_tp
#----------------------------------------------------------------------------|
# New method: load_notetags_dynamic_cost |
#----------------------------------------------------------------------------|
def load_notetags_dynamic_cost
@dynamic_mp = "0"
@dynamic_tp = "0"
self.note.split(/[\r\n]+/).each { |line|
case line
when DoubleX_RMVXA::REGEXP::SKILL::DYNAMIC_MP
@dynamic_mp = $1.to_s
when DoubleX_RMVXA::REGEXP::SKILL::DYNAMIC_TP
@dynamic_tp = $1.to_s
end
}
end # load_notetags_dynamic_cost
end # RPG::Skill
class RPG::State
#----------------------------------------------------------------------------|
# New public instance variables |
#----------------------------------------------------------------------------|
attr_accessor :dynamic_mp
attr_accessor :dynamic_tp
#----------------------------------------------------------------------------|
# New method: load_notetags_dynamic_cost |
#----------------------------------------------------------------------------|
def load_notetags_dynamic_cost
@dynamic_mp = false
@dynamic_tp = false
self.note.split(/[\r\n]+/).each { |line|
case line
when DoubleX_RMVXA::REGEXP::STATE::DYNAMIC_MP
@dynamic_mp = true
when DoubleX_RMVXA::REGEXP::STATE::DYNAMIC_TP
@dynamic_tp = true
end
}
end # load_notetags_dynamic_cost
end # RPG::State
class Game_BattlerBase
#----------------------------------------------------------------------------|
# Alias method: skill_mp_cost |
#----------------------------------------------------------------------------|
alias skill_mp_cost_dynamic_cost skill_mp_cost
def skill_mp_cost(skill)
skill_mp_cost_dynamic_cost(skill) + (dynamic_cost("mp") ? dynamic_skill_mp_cost(skill) : 0)
end # skill_mp_cost
#----------------------------------------------------------------------------|
# Alias method: skill_tp_cost |
#----------------------------------------------------------------------------|
alias skill_tp_cost_dynamic_cost skill_tp_cost
def skill_tp_cost(skill)
skill_tp_cost_dynamic_cost(skill) + (dynamic_cost("tp") ? eval("(" + skill.dynamic_tp + ").to_i") : 0)
end # skill_mp_cost
#----------------------------------------------------------------------------|
# New method: dynamic_skill_mp_cost |
#----------------------------------------------------------------------------|
def dynamic_skill_mp_cost(skill)
eval("((" + skill.dynamic_mp + ")" + (DoubleX_RMVXA::Dynamic_Cost::Multiply_MCR ? " * mcr" : "") + ").to_i")
end # dynamic_skill_mp_cost
#----------------------------------------------------------------------------|
# New method: dynamic_cost |
#----------------------------------------------------------------------------|
def dynamic_cost(cost)
states.each { |state| return true if eval("state.dynamic_" + cost) }
false
end # dynamic_cost
end # Game_BattlerBase
#==============================================================================|