#==============================================================================
#
# ▼ Yanfly Engine Ace - Buff & State Manager v1.06
# -- Last Updated: 2012.01.23
# -- Level: Normal
# -- Requires: n/a
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-Buff&StateManager"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.23 - Compatibility Update: Doppelganger
# 2012.01.11 - Compatibility Update: Field State Effects
# 2012.01.09 - Bug Fixed: Remaining turns weren't drawn properly again.
# 2012.01.07 - Bug Fixed: Remaining turns weren't drawn properly.
# 2011.12.30 - Bug Fixed: Decimals are no longer shown on states turns.
# 2011.12.28 - Added <state x turn: +y> for actors, classes, weapons, armours,
# enemies, and states.
# 2011.12.27 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script alters some of the basic mechanics revolving behind states,
# buffs, and debuffs that aren't adjustable within RPG Maker VX Ace by default
# such as being able to affect the turns remaining on a state, buff, or debuff
# without affecting anything else or even adjusting how many times a buff (or
# debuff) can be applied to an actor.
#
#==============================================================================
# ▼ 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.
#
# -----------------------------------------------------------------------------
# Actor Notetags - These notetags go in the actors notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
# -----------------------------------------------------------------------------
# Class Notetags - These notetags go in the class notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
# -----------------------------------------------------------------------------
# Skill Notetags - These notetags go in the skill notebox in the database.
# -----------------------------------------------------------------------------
# <state x turn: +y>
# <state x turn: -y>
# If the target is affected by state x, this will alter the turns remaining on
# that state by y turns if the state can be removed by turns. If the state goes
# under 0 turns, the state will be removed.
#
# <buff stat turn: +x>
# <buff stat turn: -x>
# If the target's stat is buffed, this will alter the turns remaining on that
# buff by x turns. If the buff's remaining turns go under 0, the buff will be
# removed.
#
# <debuff stat turn: +x>
# <debuff stat turn: -x>
# If the target's stat is debuffed, this will alter the turns remaining on that
# debuff by x turns. If the debuff's remaining turns go under 0, the debuff
# will be removed.
#
# -----------------------------------------------------------------------------
# Item Notetags - These notetags go in the item notebox in the database.
# -----------------------------------------------------------------------------
# <state x turn: +y>
# <state x turn: -y>
# If the target is affected by state x, this will alter the turns remaining on
# that state by y turns if the state can be removed by turns. If the state goes
# under 0 turns, the state will be removed.
#
# <buff stat turn: +x>
# <buff stat turn: -x>
# If the target's stat is buffed, this will alter the turns remaining on that
# buff by x turns. If the buff's remaining turns go under 0, the buff will be
# removed.
#
# <debuff stat turn: +x>
# <debuff stat turn: -x>
# If the target's stat is debuffed, this will alter the turns remaining on that
# debuff by x turns. If the debuff's remaining turns go under 0, the debuff
# will be removed.
#
# -----------------------------------------------------------------------------
# Weapon Notetags - These notetags go in the weapons notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
# -----------------------------------------------------------------------------
# Armour Notetags - These notetags go in the armour notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
# -----------------------------------------------------------------------------
# Enemy Notetags - These notetags go in the enemies notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
# -----------------------------------------------------------------------------
# State Notetags - These notetags go in the states notebox in the database.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Increases or decreases the maximum times that particular stat can be buffed
# by x. Note that the max increase here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Increases or decreases the maximum times that particular stat can be debuffed
# by x. Note that the max decrease here is still limited by the module constant
# MAXIMUM_BUFF_LIMIT. Replace "stat" with "MAXHP", "MAXMP", "ATK", "DEF",
# "MAT", "MDF", "AGI", "LUK", or "ALL" for those respective stats.
#
# <reapply ignore>
# If this state is cast on a battler with the state already applied, turns
# remaining will not be reset nor will turns be added on.
#
# <reapply reset>
# If this state is cast on a battler with the state already applied, the turns
# will be reset to the default amount of turns the state normally starts with.
#
# <reapply total>
# If this state is cast on a battler with the state already applied, the turns
# will be added on to the current amount of turns remaining giving the battler
# a total of the remaining turns with the default turns for the state.
#
# <state x turn: +y>
# <state x turn: -y>
# When the battler is affected by state x, additional modifiers are made to the
# number of turns remaining for state x by y amount. The modifiers cannot
# reduce turns to under 0.
#
#==============================================================================
# ▼ 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.
#
#==============================================================================
module YEA
module BUFF_STATE_MANAGER
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Draw Remaining Turns -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# This setting will cause the game to show the number of turns remaining
# for a state in battle (if the state will remove itself through turns).
# Adjust the settings below to change the font size and the y coordinate
# adjustment to where the turns remaining appear if you so desire.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
SHOW_REMAINING_TURNS = true # Show the turns remaining?
TURNS_REMAINING_SIZE = 18 # Font size used for turns remaining.
TURNS_REMAINING_Y = -4 # Adjusts location of the text.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Buff Settings -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# These settings adjust how buffs play out in your game and the way they
# modify a battler's stats such as the maximum times a stat can be buffed
# and the buff boost formula. Note that these maximums apply to both buffs
# and debuffs.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
DEFAULT_BUFF_LIMIT = 4 # Normal times you can buff a stat. Default: 2
MAXIMUM_BUFF_LIMIT = 8 # Maximum times you can buff a stat. Default: 2
# This is the formula used to apply the rate used for buffs and debuffs.
BUFF_BOOST_FORMULA = "buff_level(param_id) * 0.25 + 1.0"
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Reapplying State Settings -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# These settings adjust how the rules apply to states when they are
# reapplied onto an actor with the state already intact. If you wish to
# have specific states use different rules, use notetags to have them
# adjust turns differently.
# 0 - Ignored. Default VX setting.
# 1 - Turns reset back to existing turns. Default VX Ace Setting.
# 2 - Default turns added onto existing turns.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
REAPPLY_STATE_RULES = 1
end # BUFF_STATE_MANAGER
end # YEA
#==============================================================================
# ▼ 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 BASEITEM
MAX_BUFF = /<(?:MAX_BUFF|max buff)[ ](.*):[ ]([\+\-]\d+)>/i
MAX_DEBUFF = /<(?:MAX_DEBUFF|max debuff)[ ](.*):[ ]([\+\-]\d+)>/i
CHANGE_STATE_TURN = /<(?:state)[ ](\d+)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
STATE_REAPPLY_IGNORE = /<(?:REAPPLY_IGNORE|reapply ignore)>/i
STATE_REAPPLY_RESET = /<(?:REAPPLY_RESET|reapply reset)>/i
STATE_REAPPLY_TOTAL = /<(?:REAPPLY_TOTAL|reapply total)>/i
end # BASEITEM
module USABLEITEM
CHANGE_STATE_TURN = /<(?:state)[ ](\d+)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
CHANGE_BUFF_TURN = /<(?:buff)[ ](.*)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
CHANGE_DEBUFF_TURN = /<(?:debuff)[ ](.*)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
end # USABLEITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_bsm load_database; end
def self.load_database
load_database_bsm
load_notetags_bsm
end
#--------------------------------------------------------------------------
# new method: load_notetags_bsm
#--------------------------------------------------------------------------
def self.load_notetags_bsm
groups = [$data_actors, $data_classes, $data_weapons, $data_armors,
$data_enemies, $data_states, $data_skills, $data_items]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_bsm
end
end
end
end # DataManager
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :max_buff
attr_accessor :max_debuff
attr_accessor :change_state_turns
attr_accessor :state_reapply_rules
#--------------------------------------------------------------------------
# common cache: load_notetags_bsm
#--------------------------------------------------------------------------
def load_notetags_bsm
@change_state_turns = {}
@max_buff = {
0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 }
@max_debuff = {
0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 }
if self.is_a?(RPG::State)
@state_reapply_rules = YEA::BUFF_STATE_MANAGER::REAPPLY_STATE_RULES
end
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::BASEITEM::MAX_BUFF
case $1.upcase
when "MAXHP", "MHP", "HP"
@max_buff[0] = $2.to_i
when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
@max_buff[1] = $2.to_i
when "ATK"
@max_buff[2] = $2.to_i
when "DEF"
@max_buff[3] = $2.to_i
when "MAT", "INT", "SPI"
@max_buff[4] = $2.to_i
when "MDF", "RES"
@max_buff[5] = $2.to_i
when "AGI"
@max_buff[6] = $2.to_i
when "LUK"
@max_buff[7] = $2.to_i
when "ALL"
for i in 0...8; @max_buff[i] = $2.to_i; end
end
#---
when YEA::REGEXP::BASEITEM::MAX_DEBUFF
case $1.upcase
when "MAXHP", "MHP", "HP"
@max_debuff[0] = $2.to_i
when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
@max_debuff[1] = $2.to_i
when "ATK"
@max_debuff[2] = $2.to_i
when "DEF"
@max_debuff[3] = $2.to_i
when "MAT", "INT", "SPI"
@max_debuff[4] = $2.to_i
when "MDF", "RES"
@max_debuff[5] = $2.to_i
when "AGI"
@max_debuff[6] = $2.to_i
when "LUK"
@max_debuff[7] = $2.to_i
when "ALL"
for i in 0...8; @max_debuff[i] = $2.to_i; end
end
#---
when YEA::REGEXP::BASEITEM::CHANGE_STATE_TURN
@change_state_turns[$1.to_i] = $2.to_i
#---
when YEA::REGEXP::BASEITEM::STATE_REAPPLY_IGNORE
next unless self.is_a?(RPG::State)
@state_reapply_rules = 0
when YEA::REGEXP::BASEITEM::STATE_REAPPLY_RESET
next unless self.is_a?(RPG::State)
@state_reapply_rules = 1
when YEA::REGEXP::BASEITEM::STATE_REAPPLY_TOTAL
next unless self.is_a?(RPG::State)
@state_reapply_rules = 2
#---
end
} # self.note.split
#---
end
end # RPG::BaseItem
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :change_state_turns
attr_accessor :change_buff_turns
attr_accessor :change_debuff_turns
#--------------------------------------------------------------------------
# common cache: load_notetags_bsm
#--------------------------------------------------------------------------
def load_notetags_bsm
@change_state_turns = {}
@change_buff_turns = {}
@change_debuff_turns = {}
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::USABLEITEM::CHANGE_STATE_TURN
@change_state_turns[$1.to_i] = $2.to_i
when YEA::REGEXP::USABLEITEM::CHANGE_BUFF_TURN
case $1.upcase
when "MAXHP", "MHP", "HP"
@change_buff_turns[0] = $2.to_i
when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
@change_buff_turns[1] = $2.to_i
when "ATK"
@change_buff_turns[2] = $2.to_i
when "DEF"
@change_buff_turns[3] = $2.to_i
when "MAT", "INT", "SPI"
@change_buff_turns[4] = $2.to_i
when "MDF", "RES"
@change_buff_turns[5] = $2.to_i
when "AGI"
@change_buff_turns[6] = $2.to_i
when "LUK"
@change_buff_turns[7] = $2.to_i
when "ALL"
for i in 0...8; @change_buff_turns[i] = $2.to_i; end
end
when YEA::REGEXP::USABLEITEM::CHANGE_DEBUFF_TURN
case $1.upcase
when "MAXHP", "MHP", "HP"
@change_debuff_turns[0] = $2.to_i
when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
@change_debuff_turns[1] = $2.to_i
when "ATK"
@change_debuff_turns[2] = $2.to_i
when "DEF"
@change_debuff_turns[3] = $2.to_i
when "MAT", "INT", "SPI"
@change_debuff_turns[4] = $2.to_i
when "MDF", "RES"
@change_debuff_turns[5] = $2.to_i
when "AGI"
@change_debuff_turns[6] = $2.to_i
when "LUK"
@change_debuff_turns[7] = $2.to_i
when "ALL"
for i in 0...8; @change_debuff_turns[i] = $2.to_i; end
end
end
} # self.note.split
#---
end
end # class RPG::UsableItem
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# overwrite method: param_buff_rate
#--------------------------------------------------------------------------
def param_buff_rate(param_id)
return eval(YEA::BUFF_STATE_MANAGER::BUFF_BOOST_FORMULA)
end
#--------------------------------------------------------------------------
# new method: max_buff_limit
#--------------------------------------------------------------------------
def max_buff_limit(param_id)
n = YEA::BUFF_STATE_MANAGER::DEFAULT_BUFF_LIMIT
if actor?
n += self.actor.max_buff[param_id]
n += self.class.max_buff[param_id]
for equip in equips
next if equip.nil?
n += equip.max_buff[param_id]
end
else
n += self.enemy.max_buff[param_id]
if $imported["YEA-Doppelganger"] && !self.class.nil?
n += self.class.max_buff[param_id]
end
end
for state in states
next if state.nil?
n += state.max_buff[param_id]
end
return [[n.to_i, 0].max, YEA::BUFF_STATE_MANAGER::MAXIMUM_BUFF_LIMIT].min
end
#--------------------------------------------------------------------------
# new method: max_debuff_limit
#--------------------------------------------------------------------------
def max_debuff_limit(param_id)
n = YEA::BUFF_STATE_MANAGER::DEFAULT_BUFF_LIMIT
if actor?
n += self.actor.max_debuff[param_id]
n += self.class.max_debuff[param_id]
for equip in equips
next if equip.nil?
n += equip.max_debuff[param_id]
end
else
n += self.enemy.max_debuff[param_id]
if $imported["YEA-Doppelganger"] && !self.class.nil?
n += self.class.max_debuff[param_id]
end
end
for state in states
next if state.nil?
n += state.max_debuff[param_id]
end
return [[n.to_i, 0].max, YEA::BUFF_STATE_MANAGER::MAXIMUM_BUFF_LIMIT].min
end
#--------------------------------------------------------------------------
# overwrite method: buff_icon_index
#--------------------------------------------------------------------------
def buff_icon_index(buff_level, param_id)
if buff_level > 0
return ICON_BUFF_START + ([buff_level - 1, 1].min) * 8 + param_id
elsif buff_level < 0
return ICON_DEBUFF_START + ([-buff_level - 1, -1].max) * 8 + param_id
else
return 0
end
end
#--------------------------------------------------------------------------
# new method: buff_turns
#--------------------------------------------------------------------------
def buff_turns(param_id)
return @buff_turns.include?(param_id) ? @buff_turns[param_id] : 0
end
#--------------------------------------------------------------------------
# new method: buff_level
#--------------------------------------------------------------------------
def buff_level(param_id)
return 0 if @buffs[param_id].nil?
buff_maximum = max_buff_limit(param_id)
debuff_maximum = max_debuff_limit(param_id)
return [[@buffs[param_id], buff_maximum].min, -debuff_maximum].max
end
#--------------------------------------------------------------------------
# new method: buff_change_turns
#--------------------------------------------------------------------------
def buff_change_turns(param_id, value)
@buff_turns[param_id] = 0 if @buff_turns[param_id].nil?
@buff_turns[param_id] = [value, 0].max
end
#--------------------------------------------------------------------------
# new method: state_turns
#--------------------------------------------------------------------------
def state_turns(state_id)
state_id = state_id.id if state_id.is_a?(RPG::State)
return @state_turns.include?(state_id) ? @state_turns[state_id] : 0
end
#--------------------------------------------------------------------------
# new method: state_steps
#--------------------------------------------------------------------------
def state_steps(state_id)
state_id = state_id.id if state_id.is_a?(RPG::State)
return @state_steps.include?(state_id) ? @state_steps[state_id] : 0
end
#--------------------------------------------------------------------------
# new method: state_change_turns
#--------------------------------------------------------------------------
def state_change_turns(state_id, value)
state_id = state_id.id if state_id.is_a?(RPG::State)
@state_turns[state_id] = 0 if @state_turns[state_id].nil?
@state_turns[state_id] = [value, 0].max
end
#--------------------------------------------------------------------------
# new method: state_turn_mod
#--------------------------------------------------------------------------
def state_turn_mod(state_id)
return 0 if $data_states[state_id].nil?
state = $data_states[state_id]
n = state.min_turns + rand(1 + [state.max_turns - state.min_turns, 0].max)
if actor?
if self.actor.change_state_turns.include?(state_id)
n += self.actor.change_state_turns[state_id]
end
if self.class.change_state_turns.include?(state_id)
n += self.class.change_state_turns[state_id]
end
for equip in equips
next if equip.nil?
next unless equip.change_state_turns.include?(state_id)
n += equip.change_state_turns[state_id]
end
else
if self.enemy.change_state_turns.include?(state_id)
n += self.enemy.change_state_turns[state_id]
end
if $imported["YEA-Doppelganger"] && !self.class.nil?
if self.class.change_state_turns.include?(state_id)
n += self.class.change_state_turns[state_id]
end
end
end
for state in states
next if state.nil?
next unless state.change_state_turns.include?(state_id)
n += state.change_state_turns[state_id]
end
return [n, 0].max
end
end # Game_BattlerBase
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# overwrite method: buff_max?
#--------------------------------------------------------------------------
def buff_max?(param_id)
return @buffs[param_id] == max_buff_limit(param_id)
end
#--------------------------------------------------------------------------
# overwrite method: debuff_max?
#--------------------------------------------------------------------------
def debuff_max?(param_id)
return @buffs[param_id] == -max_debuff_limit(param_id)
end
#--------------------------------------------------------------------------
# overwrite method: add_state
#--------------------------------------------------------------------------
def add_state(state_id)
return if $data_states[state_id].nil?
state_rules = $data_states[state_id].state_reapply_rules
return if state_rules == 0 && state?(state_id)
if state_addable?(state_id)
add_new_state(state_id) unless state?(state_id)
reset_state_counts(state_id) if state_rules == 1
total_state_counts(state_id) if state_rules == 2
@result.added_states.push(state_id).uniq!
end
end
#--------------------------------------------------------------------------
# overwrite method: state_removed?
#--------------------------------------------------------------------------
def state_removed?(state_id)
return false
end
#--------------------------------------------------------------------------
# overwrite method: reset_state_counts
#--------------------------------------------------------------------------
def reset_state_counts(state_id)
state = $data_states[state_id]
@state_turns[state_id] = state_turn_mod(state_id)
@state_steps[state_id] = state.steps_to_remove
end
#--------------------------------------------------------------------------
# new method: total_state_counts
#--------------------------------------------------------------------------
def total_state_counts(state_id)
state = $data_states[state_id]
value = state_turn_mod(state_id)
state_change_turns(state_id, value + state_turns(state_id))
end
#--------------------------------------------------------------------------
# alias method: item_user_effect
#--------------------------------------------------------------------------
alias game_battler_item_user_effect_bsm item_user_effect
def item_user_effect(user, item)
game_battler_item_user_effect_bsm(user, item)
apply_state_turn_changes(user, item)
apply_buff_turn_changes(user, item)
apply_debuff_turn_changes(user, item)
end
#--------------------------------------------------------------------------
# new method: apply_state_turn_changes
#--------------------------------------------------------------------------
def apply_state_turn_changes(user, item)
return if item.nil?
return unless $game_party.in_battle
for key in item.change_state_turns
state_id = key[0]
next if field_state?(state_id)
next unless state?(state_id)
next unless $data_states[state_id].auto_removal_timing > 0
state_change_turns(state_id, key[1] + state_turns(state_id))
remove_state(state_id) if state_turns(state_id) <= 0
@result.success = true
end
end
#--------------------------------------------------------------------------
# new method: field_state?
#--------------------------------------------------------------------------
def field_state?(state_id)
return false unless $imported["YEA-FieldStateEffects"]
return false unless $game_party.in_battle
return false unless SceneManager.scene_is?(Scene_Battle)
return BattleManager.field_state?(state_id)
end
#--------------------------------------------------------------------------
# new method: apply_buff_turn_changes
#--------------------------------------------------------------------------
def apply_buff_turn_changes(user, item)
return if item.nil?
return unless $game_party.in_battle
for key in item.change_buff_turns
param_id = key[0]
next unless buff?(param_id)
buff_change_turns(param_id, key[1] + buff_turns(param_id))
remove_buff(param_id) if buff_turns(param_id) < 0
@result.success = true
end
end
#--------------------------------------------------------------------------
# new method: apply_debuff_turn_changes
#--------------------------------------------------------------------------
def apply_debuff_turn_changes(user, item)
return if item.nil?
return unless $game_party.in_battle
for key in item.change_debuff_turns
param_id = key[0]
next unless debuff?(param_id)
buff_change_turns(param_id, key[1] + buff_turns(param_id))
remove_buff(param_id) if buff_turns(param_id) < 0
@result.success = true
end
end
end # Game_Battler
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# alias method: draw_actor_icons
#--------------------------------------------------------------------------
alias window_base_draw_actor_icons_bsm draw_actor_icons
def draw_actor_icons(actor, dx, dy, dw = 96)
window_base_draw_actor_icons_bsm(actor, dx, dy, dw)
draw_actor_icon_turns(actor, dx, dy, dw)
end
#--------------------------------------------------------------------------
# new method: draw_actor_icon_turns
#--------------------------------------------------------------------------
def draw_actor_icon_turns(actor, dx, dy, dw)
return unless YEA::BUFF_STATE_MANAGER::SHOW_REMAINING_TURNS
return unless SceneManager.scene_is?(Scene_Battle)
reset_font_settings
contents.font.out_color.alpha = 255
contents.font.bold = true
contents.font.size = YEA::BUFF_STATE_MANAGER::TURNS_REMAINING_SIZE
dy += YEA::BUFF_STATE_MANAGER::TURNS_REMAINING_Y
#---
for state in actor.states
break if dx + 24 > dw + dx
next if state.icon_index <= 0
turns = actor.state_turns(state.id).to_i
if $imported["YEA-FieldStateEffects"] &&
BattleManager.field_state?(state.id)
turns = BattleManager.field_state_turns(state.id)
end
if state.auto_removal_timing > 0 && turns < 100
draw_text(dx, dy, 24, line_height, turns, 2)
end
dx += 24
end
#---
for i in 0...8
break if dx + 24 > dx + dw
next if actor.buff_icon_index(actor.buff_level(i), i) == 0
turns = actor.buff_turns(i).to_i
draw_text(dx, dy, 24, line_height, turns, 2) if turns < 100
dx += 24
end
#---
contents.font.out_color = Font.default_out_color
reset_font_settings
end
end # Window_Base
#==============================================================================
#
# ▼ End of File
#
#==============================================================================