Stats Baseado Em Classes No RPG Maker XP

24 de julho de 2012

Class Based Stats é um script desenvolvido pelo SephirothSpawn que permite, em um projeto do RPG Maker XP, dar boost nos actor stats baseados em sua classe.

Ele permite que você personalize o valor de cada nível para cada stat através do início, final e inflation values. Se você quiser, você pode definir os actor stats no banco de dados para 0 e usar estas configurações, ao invés.

Instruções

Atenção: este script precisa do Trickster’s Curve Calculator Module, e do SDK.

Copie e cole o código do script abaixo do SDK e acima do Main. Para personalizar os stats das classes, dê uma lida nas instruções de customização “Customization“, comentadas no código.

É aconselhavel adicionar este script acima de quaisquer outros que dão bonus para actor stats, a não ser que você queira que estes sejam aplicados antes.

#==============================================================================
# ** Class Based Stats
#------------------------------------------------------------------------------
# SephirothSpawn
# Version 1
# 2006-08-27
#------------------------------------------------------------------------------
# * Requirements :
#
#   Trickster's Curve Calculator Module
#------------------------------------------------------------------------------
# * Description :
#
#   This script was designed to give actors stat boost based off their class.
#   It allows you to customize each level's value for each stat through
#   starting, finishing and inflation values. If you wanted, you could set the
#   actors stats in the database to 0 and use these settings instead.
#------------------------------------------------------------------------------
# * Instructions :
#
#   Place The Script Below the SDK and Above Main.
#   To Customize your clas stats, refer to the customization instructions.
#
#   ** NOTE : It is advised to put this script above any scripts that give
#   bonuses to actor stat, unless you want these to be aplied after
#   those bonuses take place.
#------------------------------------------------------------------------------
# * Customization :
#
#   Setting Lowest & Highest Levels
#    - Lowest_Level = X
#    - Highest_Level = Y
#
#   Setting Default Value at Lowest & Highest Level
#    - Default_Min_Max = [x_value, y_value]
#
#   Setting Default Early & Late Inflation Values
#    - Default_Inflation = [early_inflation, late_inflation]
#
#   Setting Defined Min & Max Values For Specific Stats & Classes
#    - Automatic_Stats_Min_Max = {
#        'stat_name' => {
#          class_id => [min, max], ...
#        },
#        ...
#      }
#
#   Setting Defined Early & Late Inflation Values For Specific Stats & Class
#    - Automatic_Stats_Inflation_Early_Late = {
#        'stat_name' => {
#          class_id => [early, late], ...
#        },
#        ...
#      }
#
#   Setting Defined Table of Stats For Specific Stats & Classes
#    - Preset_Stats = {
#        'stat_name' => {
#          class_id => [level_1, level_2, level_3, ..., level_max], ...
#        },
#        ...
#      }
#------------------------------------------------------------------------------
# * Syntax :
#
#   Retrieving Class Bonuses at specific level
#    - <data_class>.base_<stat_name>_bonus(<level>)
#
#   Stat Name Modifers
#   'maxhp', 'maxsp', 'str', 'dex', 'agi', 'int', 'atk', 'pdef', 'mdef', 'eva'
#------------------------------------------------------------------------------
# * Credits :
#
#   Thanks to Trickster For His Curve Generator
#==============================================================================

#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Class Based Stats', 'SephirothSpawn', 1, '2006-08-27')

#------------------------------------------------------------------------------
# * Curve Generator Test
#------------------------------------------------------------------------------
unless SDK.state('Curve Generator')
  # Print Error
  p 'Curve Generator Module Not Found. Class Based Stats Disabled.'
  # Disable Encounter Control
  SDK.disable('Class Based Stats')
end

#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Class Based Stats')

#==============================================================================
# ** Class_Based_Stats
#==============================================================================

module Class_Based_Stats
  #--------------------------------------------------------------------------
  # * Saved Class Curves
  #
  #  ~ Cache = { class_id => { stat_name => [<stats>], ... }, ... }
  #--------------------------------------------------------------------------
  @cache = {}
  #--------------------------------------------------------------------------
  # ** Automatic Stats 
  #
  #   Stats Will Be Calculated From 4 Values : Lowest Level Value, Highest
  # Level Value, Early Inflation & Late Inflation
  #
  # * Min Max Values (Bases at lowest and highest level)
  #  ~ 'stat_name' => {class_id => [min_stat, max_stat], ...}
  #
  # * Inflation Values (Early & Late Inflation Curves)
  #  ~ 'stat_name' => {class_id => [early_inflation, late_inflation], ...}
  #
  # ** NOTE: Use 0 as class id for all classes. If no 0 is found, will rely
  #    on Default_Min_Max or Default_Inflation
  #--------------------------------------------------------------------------
  Lowest_Level = 1
  Highest_Level = 99
  Default_Min_Max = [0, 0]
  Default_Inflation = [1, 1]
  #--------------------------------------------------------------------------
  Automatic_Stats_Min_Max = {
    'maxhp' => {},
    'maxsp' => {},
    'str' => {},
    'dex' => {},
    'agi' => {},
    'int' => {},
    'atk' => {},
    'mdef' => {},
    'pdef' => {},
    'eva' => {}
  }
  #--------------------------------------------------------------------------
  Automatic_Stats_Inflation_Early_Late = {
    'maxhp' => {},
    'maxsp' => {},
    'str' => {},
    'dex' => {},
    'agi' => {},
    'int' => {},
    'atk' => {},
    'mdef' => {},
    'pdef' => {},
    'eva' => {}
  }
  #--------------------------------------------------------------------------
  # ** Preset Values
  #
  #   Base Stats Will Be Calculated of a preset table you set up. Table will
  # be the size of the characters level range (highest_level).
  #
  # * Preset_Stats
  #  ~ 'stat_name' => [class_id => [level_1, level_2, ..., level_max], ...]
  #--------------------------------------------------------------------------
  Preset_Stats = {
    'maxhp' => {},
    'maxsp' => {},
    'str' => {},
    'dex' => {},
    'agi' => {},
    'int' => {},
    'atk' => {},
    'mdef' => {},
    'pdef' => {},
    'eva' => {}
  }
  #--------------------------------------------------------------------------
  # * Get Base Stat
  #--------------------------------------------------------------------------
  def self.get_base_stat(class_id, stat_name, level)
    # If No Class ID Curve Saved
    unless @cache.has_key?(class_id)
      # Saves Blank Array of Stat Names
      @cache[class_id] = {}
    end
    # If Stat Name Not Saved
    unless @cache[class_id].has_key?(stat_name)
      # If Preset Stat Set
      if Preset_Stats[stat_name].has_key?(class_id)
        @cache[class_id][stat_name] = Preset_Stats[stat_name][class_id]
      # Generate Curve
      else
        min_max = self.get_min_max(class_id, stat_name)
        early_late = self.get_early_late(class_id, stat_name)
        # Retrieves Curve From Curve Generator
        @cache[class_id][stat_name] = Curve_Calculator.generate_curve(
          Lowest_Level, Highest_Level, min_max[0], min_max[1],
          early_late[0], early_late[1])
      end
    end
    # Returns Stat
    return @cache[class_id][stat_name][level]
  end
  #--------------------------------------------------------------------------
  # * Get Min & Max
  #--------------------------------------------------------------------------
  def self.get_min_max(class_id, stat_name)
    if Automatic_Stats_Min_Max[stat_name].has_key?(class_id)
      return Automatic_Stats_Min_Max[stat_name][class_id]
    elsif Automatic_Stats_Min_Max[stat_name].has_key?(0)
      return Automatic_Stats_Min_Max[stat_name][0]
    end
    return Default_Min_Max
  end
  #--------------------------------------------------------------------------
  # * Get Early & Late Inflation
  #--------------------------------------------------------------------------
  def self.get_early_late(class_id, stat_name)
    if Automatic_Stats_Inflation_Early_Late[stat_name].has_key?(class_id)
      return Automatic_Stats_Inflation_Early_Late[stat_name][class_id]
    elsif Automatic_Stats_Inflation_Early_Late[stat_name].has_key?(0)
      return Automatic_Stats_Inflation_Early_Late[stat_name][0]
    end
    return Default_Inflation
  end
end

#==============================================================================
# ** RPG::Class
#==============================================================================

class RPG::Class
  #--------------------------------------------------------------------------
  # * Base Maxhp Bonus
  #--------------------------------------------------------------------------
  def base_maxhp_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'maxhp', level)
  end
  #--------------------------------------------------------------------------
  # * Base Maxsp Bonus
  #--------------------------------------------------------------------------
  def base_maxsp_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'maxsp', level)
  end
  #--------------------------------------------------------------------------
  # * Base Str Bonus
  #--------------------------------------------------------------------------
  def base_str_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'str', level)
  end
  #--------------------------------------------------------------------------
  # * Base Dex Bonus
  #--------------------------------------------------------------------------
  def base_dex_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'dex', level)
  end
  #--------------------------------------------------------------------------
  # * Base Agi Bonus
  #--------------------------------------------------------------------------
  def base_agi_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'agi', level)
  end
  #--------------------------------------------------------------------------
  # * Base Int Bonus
  #--------------------------------------------------------------------------
  def base_int_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'int', level)
  end
  #--------------------------------------------------------------------------
  # * Base Atk Bonus
  #--------------------------------------------------------------------------
  def base_atk_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'atk', level)
  end
  #--------------------------------------------------------------------------
  # * Base Mdef Bonus
  #--------------------------------------------------------------------------
  def base_mdef_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'mdef', level)
  end
  #--------------------------------------------------------------------------
  # * Base Pdef Bonus
  #--------------------------------------------------------------------------
  def base_pdef_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'pdef', level)
  end
  #--------------------------------------------------------------------------
  # * Base Eva Bonus
  #--------------------------------------------------------------------------
  def base_eva_bonus(level = 1)
    return Class_Based_Stats.get_base_stat(@id, 'eva', level)
  end
end

#==============================================================================
# ** Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_classbasestat_gmactr_bmaxhp base_maxhp
  alias seph_classbasestat_gmactr_bmaxsp base_maxsp
  alias seph_classbasestat_gmactr_bpdef  base_pdef
  alias seph_classbasestat_gmactr_bmdef  base_mdef
  alias seph_classbasestat_gmactr_bstr   base_str
  alias seph_classbasestat_gmactr_bdex   base_dex
  alias seph_classbasestat_gmactr_bagi   base_agi
  alias seph_classbasestat_gmactr_bint   base_int
  alias seph_classbasestat_gmactr_batk   base_atk
  alias seph_classbasestat_gmactr_beva   base_eva
  #--------------------------------------------------------------------------
  # * Base Maxhp
  #--------------------------------------------------------------------------
  def base_maxhp
    n = seph_classbasestat_gmactr_bmaxhp
    return n + $data_classes[@class_id].base_maxhp_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Maxsp
  #--------------------------------------------------------------------------
  def base_maxsp
    n = seph_classbasestat_gmactr_bmaxsp
    return n + $data_classes[@class_id].base_maxsp_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Str
  #--------------------------------------------------------------------------
  def base_str
    n = seph_classbasestat_gmactr_bstr
    return n + $data_classes[@class_id].base_str_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Dex
  #--------------------------------------------------------------------------
  def base_dex
    n = seph_classbasestat_gmactr_bdex
    return n + $data_classes[@class_id].base_dex_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Agi
  #--------------------------------------------------------------------------
  def base_agi
    n = seph_classbasestat_gmactr_bagi
    return n + $data_classes[@class_id].base_agi_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Int
  #--------------------------------------------------------------------------
  def base_int
    n = seph_classbasestat_gmactr_bint
    return n + $data_classes[@class_id].base_int_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Atk
  #--------------------------------------------------------------------------
  def base_atk
    n = seph_classbasestat_gmactr_batk
    return n + $data_classes[@class_id].base_atk_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base PDef
  #--------------------------------------------------------------------------
  def base_pdef
    n = seph_classbasestat_gmactr_bpdef
    return n + $data_classes[@class_id].base_pdef_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base MDef
  #--------------------------------------------------------------------------
  def base_mdef
    n = seph_classbasestat_gmactr_bmdef
    return n + $data_classes[@class_id].base_mdef_bonus(@level)
  end
  #--------------------------------------------------------------------------
  # * Base Eva
  #--------------------------------------------------------------------------
  def base_eva
    n = seph_classbasestat_gmactr_beva
    return n + $data_classes[@class_id].base_eva_bonus(@level)
  end
end

#------------------------------------------------------------------------------
# * End SDK Enable Test
#------------------------------------------------------------------------------
end

Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Clique aqui e saiba como. Obrigado!

Deixe um comentário

Inscreva-se na nossa newsletter!