Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
355 lines (312 sloc) 12.4 KB
#==============================================================================
#
# ▼ Yanfly Engine Ace - Equip Dynamic Stats v1.00
# -- Last Updated: 2012.01.05
# -- Level: Normal, Hard
# -- Requires: n/a
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-EquipDynamicStats"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.05 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script allows for dynamic parameter bonuses acquired through equipment.
# These bonuses can come in the form of percentile bonuses based on the wearing
# actor's base stats or be based off of a variable.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Weapon Notetags - These notetags go in the weapons notebox in the database.
# -----------------------------------------------------------------------------
# <stat: +x>
# <stat: -x>
# Changes the stat bonus of the piece of equipment to yield +x or -x. Allows
# bonus to go over +500 and under -500. Replace stat with one of the following:
# MAXHP, MAXMP, ATK, DEF, MAT, MDF, AGI, LUK
#
# <stat: +x%>
# <stat: -x%>
# Changes the stat bonus of the piece of equipment to yield +x% or -x% of the
# equipped user's base stat. Replace stat with one of the following:
# MAXHP, MAXMP, ATK, DEF, MAT, MDF, AGI, LUK
#
# <stat variable: x>
# Changes the stat bonus to be modified by whatever variable x is. Replace stat
# with one of the following:
# MAXHP, MAXMP, ATK, DEF, MAT, MDF, AGI, LUK
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================
module YEA
module REGEXP
module EQUIPITEM
STAT_SET = /<(.*):[ ]([\+\-]\d+)>/i
STAT_PER = /<(.*):[ ]([\+\-]\d+)([%%])>/i
STAT_VAR = /<(.*)[ ](?:VARIABLE|var):[ ](\d+)>/i
end # EQUIPITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ Numeric
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# new method: group_digits
#--------------------------------------------------------------------------
unless $imported["YEA-CoreEngine"]
def group; return self.to_s; end
end # $imported["YEA-CoreEngine"]
end # Numeric
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_eds load_database; end
def self.load_database
load_database_eds
load_notetags_eds
end
#--------------------------------------------------------------------------
# new method: load_notetags_eds
#--------------------------------------------------------------------------
def self.load_notetags_eds
groups = [$data_weapons, $data_armors]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_eds
end
end
end
end # DataManager
#==============================================================================
# ■ RPG::EquipItem
#==============================================================================
class RPG::EquipItem < RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :per_params
attr_accessor :var_params
#--------------------------------------------------------------------------
# common cache: load_notetags_eds
#--------------------------------------------------------------------------
def load_notetags_eds
@per_params = [0] * 8
@var_params = [0] * 8
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::EQUIPITEM::STAT_SET
case $1.upcase
when "HP", "MAXHP", "MHP"
@params[0] = $2.to_i
when "MP", "MAXMP", "MMP", "SP", "MAXSP", "MSP"
@params[1] = $2.to_i
when "ATK"
@params[2] = $2.to_i
when "DEF"
@params[3] = $2.to_i
when "MAT", "INT", "SPI"
@params[4] = $2.to_i
when "MDF", "RES"
@params[5] = $2.to_i
when "AGI", "SPD"
@params[6] = $2.to_i
when "LUK", "LUCK"
@params[7] = $2.to_i
end
#---
when YEA::REGEXP::EQUIPITEM::STAT_PER
case $1.upcase
when "HP", "MAXHP", "MHP"
@per_params[0] = $2.to_i * 0.01
when "MP", "MAXMP", "MMP", "SP", "MAXSP", "MSP"
@per_params[1] = $2.to_i * 0.01
when "ATK"
@per_params[2] = $2.to_i * 0.01
when "DEF"
@per_params[3] = $2.to_i * 0.01
when "MAT", "INT", "SPI"
@per_params[4] = $2.to_i * 0.01
when "MDF", "RES"
@per_params[5] = $2.to_i * 0.01
when "AGI", "SPD"
@per_params[6] = $2.to_i * 0.01
when "LUK", "LUCK"
@per_params[7] = $2.to_i * 0.01
end
#---
when YEA::REGEXP::EQUIPITEM::STAT_VAR
case $1.upcase
when "HP", "MAXHP", "MHP"
@var_params[0] = $2.to_i
when "MP", "MAXMP", "MMP", "SP", "MAXSP", "MSP"
@var_params[1] = $2.to_i
when "ATK"
@var_params[2] = $2.to_i
when "DEF"
@var_params[3] = $2.to_i
when "MAT", "INT", "SPI"
@var_params[4] = $2.to_i
when "MDF", "RES"
@var_params[5] = $2.to_i
when "AGI", "SPD"
@var_params[6] = $2.to_i
when "LUK", "LUCK"
@var_params[7] = $2.to_i
end
end
} # self.note.split
#---
end
#--------------------------------------------------------------------------
# new method: bonus_performance
#--------------------------------------------------------------------------
def bonus_performance
n = 0
n += bonus_per_params
n += bonus_var_params
return n
end
#--------------------------------------------------------------------------
# new method: bonus_per_params
#--------------------------------------------------------------------------
def bonus_per_params
return 0 if $game_temp.nil? || $game_temp.eds_actor.nil?
n = 0
actor = $game_temp.eds_actor
for i in 0...8; n += @per_params[i] * actor.param_base(i); end
return n
end
#--------------------------------------------------------------------------
# new method: bonus_var_params
#--------------------------------------------------------------------------
def bonus_var_params
return 0 if $game_variables.nil?
n = 0
for i in 0...8; n += $game_variables[@var_params[i]] rescue 0; end
return n
end
end # RPG::EquipItem
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
class RPG::Weapon < RPG::EquipItem
#--------------------------------------------------------------------------
# alias method: performance
#--------------------------------------------------------------------------
alias rpg_weapon_performance_eds performance
def performance
n = rpg_weapon_performance_eds
n += bonus_performance
return n
end
end # RPG::Weapon
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :eds_actor
end # Game_Temp
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# alias method: param_plus
#--------------------------------------------------------------------------
alias game_actor_param_plus_eds param_plus
def param_plus(param_id)
n = game_actor_param_plus_eds(param_id)
n += (percent_parameter_rate(param_id) * param_base(param_id)).to_i
n += variable_parameter_bonus(param_id)
return n
end
#--------------------------------------------------------------------------
# new method: percent_parameter_rate
#--------------------------------------------------------------------------
def percent_parameter_rate(param_id)
rate = 0.0
rate += equips.compact.inject(0) {|r, i|
r += i.per_params[param_id] rescue 0 }
return rate
end
#--------------------------------------------------------------------------
# new method: variable_parameter_bonus
#--------------------------------------------------------------------------
def variable_parameter_bonus(param_id)
n = 0
n += equips.compact.inject(0) {|r, i|
r += $game_variables[i.var_params[param_id]] rescue 0 }
return n
end
#--------------------------------------------------------------------------
# alias method: optimize_equipments
#--------------------------------------------------------------------------
alias game_actor_optimize_equipments_eds optimize_equipments
def optimize_equipments
$game_temp.eds_actor = self
game_actor_optimize_equipments_eds
$game_temp.eds_actor = nil
end
end # Game_Actor
#==============================================================================
# ■ Window_ShopStatus
#==============================================================================
class Window_ShopStatus < Window_Base
#--------------------------------------------------------------------------
# overwrite method: draw_actor_param_change
#--------------------------------------------------------------------------
def draw_actor_param_change(x, y, actor, item1)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change = actor_param_change_value(actor, item1)
change_color(param_change_color(change))
text = change.group
text = "+" + text if change >= 0
draw_text(rect, text, 2)
end
#--------------------------------------------------------------------------
# new method: actor_param_change_value
#--------------------------------------------------------------------------
def actor_param_change_value(actor, item1)
n = @item.params[param_id] - (item1 ? item1.params[param_id] : 0)
n += @item.per_params[param_id] * actor.param_base(param_id) rescue 0
n += $game_variables[@item.var_params[param_id]] rescue 0
n -= item1.per_params[param_id] * actor.param_base(param_id) rescue 0
n -= $game_variables[item1.var_params[param_id]] rescue 0
return n
end
end # Window_ShopStatus
#==============================================================================
#
# ▼ End of File
#
#==============================================================================
You can’t perform that action at this time.