08-09-2014, 02:47 PM
DoubleX RMVXA Dynamic Cost
Version: v1.00a
IntroductionVersion: v1.00a
Lets users alter the skill's mp or tp cost via custom formulae
Features
* Use of notetags(requires knowledge of notetag usage) to set specific skills to have custom mp and tp costs for users having dynamic mp and tp states respectively
* Some custom damage formula and scripting knowledge is needed to use this script to its full potential
Video
Script
"script"
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
#==============================================================================|
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
- 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 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