Help with a current script?

Started by Jragyn, March 12, 2009, 03:28:52 am

Previous topic - Next topic

Jragyn

First, the script in question is for VX.
However, it is already made! I just...want to modify it a bit.
Take a look:

Spoiler: ShowHide
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/◆     Attribute Point Stat Distribution - KGC_DistributeParameter     ◆ VX ◆
#_/◇                        Last Update: 2008/04/01                           ◇
#_/◆                 Original translation by Mr. Anonymous                    ◆
#_/◆              Extended annotation and updates by Touchfuzzy               ◆
#_/-----------------------------------------------------------------------------
#_/                       ◆ 2008/04/01 UPDATE ◆
#_/  Added toggle to display actor's AP and position on the status screen, and
#_/   toggle to enable the display of Accuracy, Evasion, and Critical parameters
#_/   on the status screen. Added by Mr. Anonymous
#_/-----------------------------------------------------------------------------
#_/                       ◆ 2008/03/23 UPDATE ◆         
#_/   Updated to latest version of KGC Script.  Fixes a bug in the calculation
#_/     of Max Ap.
#_/-----------------------------------------------------------------------------
#_/                       ◆ 2008/03/10 UPDATE ◆         
#_/   Level-based maximums moved into GAIN_PARAMETERS charts and MAXRP equation
#_/     moved into GAIN_PARAMETERS charts so that it can be changed for each
#_/     character/class by Touchfuzzy.
#_/-----------------------------------------------------------------------------
#_/                       ◆ 2008/03/09 UPDATE ◆         
#_/   Level-based maximums & separate maxes for current status bars
#_/     Added by Touchfuzzy
#_/-----------------------------------------------------------------------------
#_/                       ◆ 2008/03/08 UPDATE ◆
#_/   Updated to the newest KCG version through the efforts of Touchfuzzy,
#_/  which added Class-specific parameter tables and other features/fixes.
#_/=============================================================================
#_/                       ◆ Script Commands ◆
#_/  These commands are used in "Script" function in the third page of event
#_/   commands under "Advanced".
#_/
#_/ * gain_rp(ActorID, Value)
#_/    Increases the MaxRP of a given actor.
#_/
#_/ * reset_distributed_count(ActorID)
#_/    Resets the distributed RP of a given actor.
#_/
#_/ * $call_distribute_parameter(ActorID)
#_/    Calls the Distribute Parameter screen for a given actor.
#_/
#_/=============================================================================
#_/ Installation: Insert this script above Main.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

#==============================================================================#
#                           ★ Customization ★                                  #
#==============================================================================#

module KGC
module DistributeParameter
  #                      ◆ Distribution Tables ◆
  # Here you may customize the costs and increase rates of specific parameters.
  # The order in which these costs and increase rates are set are as follows:
  #                     [IPC, IPSG, MAP, PCI, PSGI, SBM]
  #                                Key:
  # IPC = Initial Point Cost. This is how many AP it cost to buy the first
  #       point of this parameter.
  #
  # IPSG = Initial Point Stat Growth. This is how much the stat will go up with
  #        the first point of this parameter.
  #                                             
  # MAP = Maximum Attribute Points. The maximum amount of AP that can be spent 
  #       on this stat.  You may also put a level based equation in this but
  #       remember that if you put in an equation it is IMPORTANT that you put
  #       quotation marks ("") around it and to use level in all lower case.
  #       Example: "level"
  #
  # PCI = Point Cost Increase.  For every AP spent in this parameter the cost
  #       of this parameter increases by this amount.
  #
  # PSGI = Point Stat Growth Increase.  For every AP spent in this parameter
  #        the number of points you gain in the stat increases by this much.
  #
  #                           A Touchfuzzy Update
  # SBM = Separate Bar Maximum. This will let you use a different maximum for
  #       the bar in the current status section.  Useful if using a level based
  #       MAP and wish to show the bar at max level instead of current.  If
  #       this is omitted the script instead uses the MAP (or the result of the
  #       equation your maximum is based on).
  #
  #   Also, if you completely remove a line (e.g. ":hit => [1, 1, 20, 0.7],")
  #   it will remove it from the distribution screen altogether.
  #   Very useful if your project doesn't require a specific stat.
 
  #                         ◆ AP Gain Rate ◆
  #  I added this in to the GAIN_PARAMETER tables so that you can use seperate
  #  equations for different characters and classes.
  #  This is the equation that determines your total AP gained every level.
  #  (Character Level to the 0.25th power + 2) * Level
  #  This causes you to start at 3 points per level and increase slightly over
  #  time.
  #  As an example if you wish to gain a static 3 points per level write it as
  #  :maxrpexp = "level * 3"
 
  GAIN_PARAMETER = {
#           
    :maxhp => [2,  5, 999, 0, 0],    # Maximum HP
    :maxmp => [2,  5, 999, 0, 0],  # Maximum MP
    :atk   => [1,  1, 999, 0, 0],  # Attack
    :def   => [1,  1, 999, 0, 0],  # Defense
    :spi   => [1,  1, 999, 0, 0],  # Spirit
    :agi   => [1,  1, 999, 0, 0],  # Agility
    :hit   => [3,  1, 999, 0],       # Hit Percentage
    :eva   => [3,  1, 999, 0],       # Evasion
    :cri   => [5,  1, 999, 0],       # Critical
    :maxrpexp => ["level * 5"]  #Max AP, DO NOT REMOVE
  }
 

  #              ◆ Individual Actor Gain Parameter Tables ◆
    PERSONAL_GAIN_PARAMETER = []  # DO NOT REMOVE

     PERSONAL_GAIN_PARAMETER[0] = {
    :maxhp => [1, 30, 30, 0.4, 2],    # Maximum HP
    :maxmp => [1,  5, 30, 0.4, 0.5],  # Maximum MP
    :atk   => [1,  2, 30, 0.4, 0.5],  # Attack
    :def   => [1,  2, 30, 0.4, 0.5],  # Defense
    :spi   => [1,  2, 30, 0.4, 0.5],  # Spirit (AKA Intelligence)
    :agi   => [1,  2, 30, 0.4, 0.5],  # Agility
    :hit   => [1,  1, 20, 0.7],       # Hit Percentage (AKA Accuracy)
    :eva   => [1,  1, 20, 0.7],       # Evasion
    :cri   => [1,  1, 20, 0.7],       # Critical
    :maxrpexp => ["(level ** 0.25 + 2.0) * level"]  #Max AP, DO NOT REMOVE
    }
  #  You may choose to manually specify an individual actor's gain parameters.
  #  To do so, use the same format as above GAIN_PARAMETER table but instead
  #  use PERSONAL_GAIN_PARAMETER [n] (Where n = Actor ID)
  #  Any parameter you do not set in this table will instead draw from the
  #  GAIN_PARAMETER chart.
  #
  #  Example:
  # PERSONAL_GAIN_PARAMETER[1] = {
  # :maxhp => [2, 20, 50, 0.5,   5],   
  # :maxmp => [1, 10, 30, 0.3, 0.5], 
  # :atk   => [1,  1, 30, 0.3, 0.5], 
  # :def   => [1,  2, 30, 0.4, 0.5], 
  # :spi   => [1,  2, 50, 0.5, 0.8], 
  # :agi   => [1,  2, 30, 0.4, 0.6], 
  # :hit   => [1,  1, 20, 0.7],     
  # :eva   => [1,  1, 20, 0.7],     
  # :cri   => [1,  1, 20, 0.7],     
  # :maxrpexp => ["(level ** 0.25 + 2.0) * level"]
  # }
 
  #               ◆ Class-Specific Gain Parameter Tables ◆
    CLASS_GAIN_PARAMETER = [] # DO NOT REMOVE

  #  You may choose to manually specify an entire class's gain parameters.
  #  To do so, use the same format as above GAIN_PARAMETER table but instead
  #  use CLASS_GAIN_PARAMETER [n] (Where n = Number of class in the database)
  #  Any parameter you do not set in this table will instead draw from the
  #  GAIN_PARAMETER chart.
 
  # ◆ AP = Attribute Points. These settings are for the AP Distrubution Screen.
  #  VOCAB_RP appears at the top of the column which lists the AP cost of
  #  the parameter
  VOCAB_RP   = "Cost"

  # VOCAB_RP_A appears next to where it lists your current and total AP.
  VOCAB_RP_A = "AP"

  #                        ◆ Extended Vocabulary ◆
  #  Allows you to change the text of Hit Ratio, Evasion, and Critical on the
  #   distribution screen.
  VOCAB_PARAM = {
    :hit => "ACU",       # Hit Ratio
    :eva => "EVA",        # Evasion
    :cri => "CRI",        # Criticals
  }
  #  Text of the menu title for the AP Distribution Screen.
  DISTRIBUTE_SCENE_CAPTION = "Attribute Distribution - Press L or R to change characters."

  #  Allows you to change the color of the guages that appear under the stats
  #   side bar. The color can also be determined by a numerical expression.
  #  Example: GAUGE_START_COLOR = Color.new(255, 0, 0)  <- This is red.
  #  This is the fill color for the early phase of the guage.
  GAUGE_START_COLOR = 28
  #  This is the fill color for the late phase of the guage. (When full)
  GAUGE_END_COLOR   = 29

  #                   ◆ Menu Command Button & Text ◆
  #  When USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = true,
  #  the AP Distribution System is added to the menu under "Quit Game".
  #  When false, it does not. (Obviously)
  USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = false
  #  Allows you to change the text for this button on the main command menu.
  VOCAB_MENU_DISTRIBUTE_PARAMETER       = "Level Up"
 
  #                    ◆ Parameter Re-distribution ◆
  #  This affects whether the player can delevel the parameters that have
  #  been increased.
  #  true  : Allows the player to reassign AP.
  #  false : Prevents the player from unassigning AP if set to false.
  ENABLE_REVERSE_DISTRIBUTE = false
 
  #                        ◆ AP in Status Window ◆
  # The following four features have been scripted by Mr. Anonymous.
  #  This toggle allows you to enable/disable the AP display on the status
  #   screen.
  SHOW_STATUS_RP = true
  #  This toggle allows you to adjust the position of the AP display on the
  #   status screen. (If SHOW_STATUS_RP = true)
  #  0. Below Actor's Face Image
  #  1. Below Actor's Parameters
  SHOW_STATUS_RP_POS = 1
 
  #                   ◆ Extra Parameters in Status Window ◆
  #  This toggle allows you to enable/disable the parameters for accuracy,
  #   evasion, and critical below the regular paramaters (STR, DEF, SPI, AGI)
  SHOW_STATUS_EX_PARAMS = true
 
  #              ◆ Call DistributeParameter from the Status Window ◆
  #  This allows you to change what key/button is pressed on the status window
  #   to shift to the DistributeParameter window.
  #  When set to nil, this is disabled. ( CALL_DISTPARAMKEY = Input::nil )
  CALL_DISTPARAMKEY = Input::X   # On the keyboard, button X is the A key.
 
end
end

#------------------------------------------------------------------------------#

$imported = {} if $imported == nil
$imported["DistributeParameter"] = true

module KGC::DistributeParameter
  PARAMS = [:maxhp, :maxmp, :atk, :def, :spi, :agi, :hit, :eva, :cri]
end

#==============================================================================
# ■ Vocab
#==============================================================================

module Vocab

  def self.hit
    return KGC::DistributeParameter::VOCAB_PARAM[:hit]
    return $data_system.terms.hit    # Added 4/1/08
  end

  def self.eva
    return KGC::DistributeParameter::VOCAB_PARAM[:eva]
    return $data_system.terms.eva    # Added 4/1/08
  end

  def self.cri
    return KGC::DistributeParameter::VOCAB_PARAM[:cri]
    return $data_system.terms.cri    # Added 4/1/08
  end

  def self.rp
    return KGC::DistributeParameter::VOCAB_RP
  end

  def self.rp_a
    return KGC::DistributeParameter::VOCAB_RP_A
  end

  def self.distribute_parameter
    return KGC::DistributeParameter::VOCAB_MENU_DISTRIBUTE_PARAMETER
  end
end

#==============================================================================
# □ KGC::Commands
#==============================================================================

module KGC::Commands
  module_function

  def check_distribution_values
    (1...$data_actors.size).each { |i|
      actor = $game_actors
      actor.check_distribution_values
      actor.calc_distribution_values
    }
  end

  def gain_rp(actor_id, value)
    actor = $game_actors[actor_id]
    return if actor == nil
    actor.gain_rp(value)
  end

  def reset_distributed_count(actor_id)
    actor = $game_actors[actor_id]
    return if actor == nil
    actor.clear_distribution_values
    actor.calc_distribution_values
  end

  def call_distribute_parameter(actor_index = 0)
    return if $game_temp.in_battle
    $game_temp.next_scene = :distribute_parameter
    $game_temp.next_scene_actor_index = actor_index
  end
end

class Game_Interpreter
  include KGC::Commands
end

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler

  alias clear_extra_values_KGC_DistributeParameter clear_extra_values
  def clear_extra_values
    clear_extra_values_KGC_DistributeParameter

    clear_distribution_values
    calc_distribution_values
  end

  def clear_distribution_values
    @distributed_count = {}
    KGC::DistributeParameter::PARAMS.each { |param|
      @distributed_count[param] = 0
    }
  end

  def check_distribution_values
    last_distributed_count = @distributed_count

    clear_distribution_values

    @distributed_count = last_distributed_count if last_distributed_count !=

nil
  end

  def calc_distribution_values

  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler

  alias initialize_KGC_DistributeParameter initialize
  def initialize(actor_id)
    @actor_id = actor_id
    @class_id = $data_actors[actor_id].class_id
    initialize_KGC_DistributeParameter(actor_id)
  end

  def gain_parameter_list
    result = KGC::DistributeParameter::GAIN_PARAMETER
    list = KGC::DistributeParameter::PERSONAL_GAIN_PARAMETER[self.id]
    result = result.merge(list) if list != nil
    list = KGC::DistributeParameter::CLASS_GAIN_PARAMETER[self.class_id]
    result = result.merge(list) if list != nil
    return result
  end

  def calc_distribution_values
    @rp_cost = 0
    @distributed_param = {}
    gain_parameter_list.each { |k, v|
      next if v == nil
      cost = 0
      param = 0
      distributed_count(k).times { |i|
        cost_plus   = v[0]
        cost_plus  += v[3] * i if v[3] != nil
        param_plus  = v[1]
        param_plus += v[4] * i if v[4] != nil
        cost  += Integer(cost_plus)
        param += Integer(param_plus)
      }
      @rp_cost += [cost, 0].max
      @distributed_param[k] = param
    }
  end

  def distributed_param(param)
    return 0 if @distributed_param == nil
    return 0 if @distributed_param[param] == nil
    return @distributed_param[param]
  end

  alias base_maxhp_KGC_DistributeParameter base_maxhp
  def base_maxhp
    n = base_maxhp_KGC_DistributeParameter + distributed_param(:maxhp)
    return n
  end

  alias base_maxmp_KGC_DistributeParameter base_maxmp
  def base_maxmp
    n = base_maxmp_KGC_DistributeParameter + distributed_param(:maxmp)
    return n
  end

  alias base_atk_KGC_DistributeParameter base_atk
  def base_atk
    n = base_atk_KGC_DistributeParameter + distributed_param(:atk)
    return n
  end

  alias base_def_KGC_DistributeParameter base_def
  def base_def
    n = base_def_KGC_DistributeParameter + distributed_param(:def)
    return n
  end

  alias base_spi_KGC_DistributeParameter base_spi
  def base_spi
    n = base_spi_KGC_DistributeParameter + distributed_param(:spi)
    return n
  end

  alias base_agi_KGC_DistributeParameter base_agi
  def base_agi
    n = base_agi_KGC_DistributeParameter + distributed_param(:agi)
    return n
  end

  alias hit_KGC_DistributeParameter hit
  def hit
    n = hit_KGC_DistributeParameter + distributed_param(:hit)
    return n
  end

  alias eva_KGC_DistributeParameter eva
  def eva
    n = eva_KGC_DistributeParameter + distributed_param(:eva)
    return n
  end

  alias cri_KGC_DistributeParameter cri
  def cri
    n = cri_KGC_DistributeParameter + distributed_param(:cri)
    return n
  end

  def maxrp
    gain = gain_parameter_list[:maxrpexp]
    n = Integer(eval(gain[0]))
    return [n + maxrp_plus, 0].max
  end

  def maxrp_plus
    @maxrp_plus = 0 if @maxrp_plus == nil
    return @maxrp_plus
  end

  def rp
    return [maxrp - @rp_cost, 0].max
  end

  def distributed_count(param)
    clear_distribution_values if @distributed_count == nil
    @distributed_count[param] = 0 if @distributed_count[param] == nil
    return @distributed_count[param]
  end

  def gain_rp(value)
    @maxrp_plus = maxrp_plus + value
  end

  def gain_distributed_count(param, value = 1)
    n = distributed_count(param)
    @distributed_count[param] += value if n.is_a?(Integer)
  end

  def rp_growth_effect(param, reverse = false)
    gain = gain_parameter_list[param]
    return if gain == nil

    if reverse
      return if distributed_count(param) == 0
    else
      return unless can_distribute?(param)
    end

    gain_distributed_count(param, reverse ? -1 : 1)
    calc_distribution_values
  end

  def can_distribute?(param)
    gain = gain_parameter_list[param]
    return false if gain == nil
    return false if self.rp < distribute_cost(param)
    return false if gain[2] <= distributed_count(param)

    return true
  end

  def distribute_cost(param)
    gain = gain_parameter_list[param]
    return 0 if gain == nil

    n = gain[0]
    n += gain[3] * distributed_count(param) if gain[3] != nil
    return [Integer(n), 0].max
  end

  def distribute_gain(param)
    gain = gain_parameter_list[param]
    return 0 if gain == nil

    n = gain[1]
    n += gain[4] * distributed_count(param) if gain[4] != nil
    return Integer(n)
  end
end

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window

  def rp_color(actor)
    return (actor.rp == 0 ? knockout_color : normal_color)
  end

  def distribute_gauge_color1
    color = KGC::DistributeParameter::GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end

  def distribute_gauge_color2
    color = KGC::DistributeParameter::GAUGE_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end

  def draw_actor_rp(actor, x, y, width = 120)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 40, WLH, Vocab::rp_a)
    self.contents.font.color = rp_color(actor)
    xr = x + width
    if width < 120
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.rp, 2)
    else
      self.contents.draw_text(xr - 90, y, 40, WLH, actor.rp, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxrp, 2)
    end
    self.contents.font.color = normal_color
  end

  def draw_actor_distribute_gauge(actor, param, x, y, width = 120)
    gain = actor.gain_parameter_list[param]
    return if gain == nil
    if gain[5] == nil
      n = 2
    else
      n = 5
    end
    gw = width * actor.distributed_count(param) / [gain[n], 1].max
    gc1 = distribute_gauge_color1
    gc2 = distribute_gauge_color2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
  #==========================================================================
  #   Added by Mr. Anonymous ( 4/1/08 )
  # Sets up the initial parameters and the entended/extra parameters.
  #==========================================================================
  if KGC::DistributeParameter::SHOW_STATUS_EX_PARAMS
    alias draw_actor_parameter_KGC_DistributeParameter draw_actor_parameter
    def draw_actor_parameter(actor, x, y, type)
      case type
        when 0
          parameter_name = Vocab::atk
          parameter_value = actor.atk
        when 1
          parameter_name = Vocab::def
          parameter_value = actor.def
        when 2
          parameter_name = Vocab::spi
          parameter_value = actor.spi
        when 3
          parameter_name = Vocab::agi
          parameter_value = actor.agi
        when 4
          parameter_name = Vocab::hit
          parameter_value = actor.hit
        when 5
          parameter_name = Vocab::eva
          parameter_value = actor.eva
        when 6
          parameter_name = Vocab::cri
          parameter_value = actor.cri
       end
       self.contents.font.color = system_color
       self.contents.draw_text(x, y, 120, WLH, parameter_name)
       self.contents.font.color = normal_color
       self.contents.draw_text(x + 120, y, 36, WLH, parameter_value, 2)
     end
  end
end

#==============================================================================
# ■ Window_Command
#==============================================================================

class Window_Command < Window_Selectable
  unless method_defined?(:add_command)

  def add_command(command)
    @commands << command
    @item_max = @commands.size
    item_index = @item_max - 1
    refresh_command
    draw_item(item_index)
    return item_index
  end

  def refresh_command
    buf = self.contents.clone
    self.height = [self.height, row_max * WLH + 32].max
    create_contents
    self.contents.blt(0, 0, buf, buf.rect)
    buf.dispose
  end

  def insert_command(index, command)
    @commands.insert(index, command)
    @item_max = @commands.size
    refresh_command
    refresh
  end

  def remove_command(command)
    @commands.delete(command)
    @item_max = @commands.size
    refresh
  end
end
end

#==============================================================================
# ■ Window_Status
#==============================================================================
# Added by Mr. Anonymous  ( 4/1/08 )
# Checks SHOW_STATUS_RP's value, if true RP is added to Status Window.
#==============================================================================
if KGC::DistributeParameter::SHOW_STATUS_RP
  class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # ● Draw RP in Status Window
  #     x : Width X - 128 (beneath actor face)
  #     y : Hight Y (On row + Window_Status Definition)
  #--------------------------------------------------------------------------
    alias draw_basic_info_KGC_DistributeParameter draw_basic_info
    def draw_basic_info(x, y)
      draw_basic_info_KGC_DistributeParameter(x, y)
      # Checks SHOW_STATUS_RP_POS, if 0, RP is shown beneath face of actor.
      if KGC::DistributeParameter::SHOW_STATUS_RP_POS == 0
         draw_actor_rp(@actor, x - 129, y + WLH * 4)
       end
      # If 1, RP is shown under parameters. (Centered)
      if KGC::DistributeParameter::SHOW_STATUS_RP_POS == 1
         draw_actor_rp(@actor, x - 80, y + WLH * 13)
      end
    end
  end
end
  #--------------------------------------------------------------------------
  # ● Draw Extra (Normally Hidden) Parameters in Status Window
  #     x : Width X - 128 (beneath actor face)
  #     y : Hight Y (On row + Window_Status Definition)
  # Added by Mr. Anonymous  ( 4/1/08 )
  #--------------------------------------------------------------------------
if KGC::DistributeParameter::SHOW_STATUS_EX_PARAMS
  class Window_Status < Window_Base
    alias draw_parameters_KCG_DistributeParameter draw_parameters
    def draw_parameters(x, y)
       draw_actor_parameter(@actor, x, y + WLH * 0, 0)
       draw_actor_parameter(@actor, x, y + WLH * 1, 1)
       draw_actor_parameter(@actor, x, y + WLH * 2, 2)
       draw_actor_parameter(@actor, x, y + WLH * 3, 3)
       draw_actor_parameter(@actor, x, y + WLH * 4, 4)
       draw_actor_parameter(@actor, x, y + WLH * 5, 5)
       draw_actor_parameter(@actor, x, y + WLH * 6, 6)
     end
  end
end

#==============================================================================
# □ Window_DistributeParameterActor
#==============================================================================

class Window_DistributeParameterActor < Window_Base

  def initialize(x, y, actor)
    super(x, y, Graphics.width, WLH + 32)
    @actor = actor
    refresh
  end

  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_level(@actor, 140, 0)
    draw_actor_rp(@actor, 240, 0)
  end
end

#==============================================================================
# □ Window_DistributeParameterList
#==============================================================================

class Window_DistributeParameterList < Window_Selectable

  def initialize(actor)
    off_h = (WLH + 32) * 2
    super(0, off_h, Graphics.width / 2 + 80, Graphics.height - off_h)
    @actor = actor
    refresh
    self.index = 0
  end

  def parameter_symbol
    return @data[self.index]
  end

  def refresh
    @data = []
    gain_params = @actor.gain_parameter_list
    KGC::DistributeParameter::PARAMS.each { |param|
      next if gain_params[param] == nil
      @data << param
    }
    @item_max = @data.size
    create_contents
    draw_caption
    @item_max.times { |i| draw_item(i, @actor.can_distribute?(@data)) }
  end

  def item_rect(index)
    rect = super(index)
    rect.y += WLH
    return rect
  end

  def draw_caption
    self.contents.font.color = system_color
  # This is shown at the top of the column that lists the stats.
    self.contents.draw_text(  4, 0, 96, WLH, "Attribute")
    self.contents.draw_text(120, 0, 40, WLH, Vocab.rp, 2)
  # This is shown at the top of the column that lists the number of stat points
  #   you will gain from buying the next point of the parameter.
    self.contents.draw_text(170, 0, 60, WLH, "Rate", 2)
  # This is shown at the top of the column that lists the current and max
  #   points you have in each parameter.
    self.contents.draw_text(240, 0, 80, WLH, "Spent", 2)
    self.contents.font.color = normal_color
  end

  def draw_item(index, enabled = true)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      draw_parameter(rect.x, rect.y, @data[index], enabled)
    end
  end

  def draw_parameter(x, y, type, enabled)
    case type
    when :maxhp
      name  = Vocab.hp
    when :maxmp
      name  = Vocab.mp
    when :atk
      name  = Vocab.atk
    when :def
      name  = Vocab.def
    when :spi
      name  = Vocab.spi
    when :agi
      name  = Vocab.agi
    when :hit
      name  = Vocab.hit
    when :eva
      name  = Vocab.eva
    when :cri
      name  = Vocab.cri
    else
      return
    end

    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(x + 4, y, 96, WLH, name)

    gain = @actor.gain_parameter_list[type]
    value = @actor.distribute_cost(type)
    self.contents.draw_text(x + 120, y, 40, WLH, value, 2)
    value = sprintf("%+d", @actor.distribute_gain(type))
    self.contents.draw_text(x + 190, y, 40, WLH, value, 2)
    value = sprintf("%3d/%3d", @actor.distributed_count(type), gain[2])
    self.contents.draw_text(x + 236, y, 80, WLH, value, 2)
    self.contents.font.color = normal_color
  end
end

#==============================================================================
# □ Window_DistributeParameterStatus
#==============================================================================

class Window_DistributeParameterStatus < Window_Base

  def initialize(actor)
    dx = Graphics.width / 2 + 80
    off_h = (WLH + 32) * 2
    super(dx, off_h, Graphics.width - dx, Graphics.height - off_h)
    @actor = actor
    refresh
  end

  def refresh
    self.contents.clear
    self.contents.font.color = system_color
  # This allows you to change the text that appears on top of the right panel
  #  which contains current parameter changes.
    self.contents.draw_text(0, 0, width - 32, WLH, "Current Status", 1)
    self.contents.font.color = normal_color
    dy = WLH
    gain_params = @actor.gain_parameter_list
    KGC::DistributeParameter::PARAMS.each { |param|
      next if gain_params[param] == nil
      draw_parameter(0, dy, param)
      dy += WLH
    }
  end

  def draw_parameter(x, y, type)
    case type
    when :maxhp
      name  = Vocab.hp
      value = @actor.maxhp
    when :maxmp
      name  = Vocab.mp
      value = @actor.maxmp
    when :atk
      name  = Vocab.atk
      value = @actor.atk
    when :def
      name  = Vocab.def
      value = @actor.def
    when :spi
      name  = Vocab.spi
      value = @actor.spi
    when :agi
      name  = Vocab.agi
      value = @actor.agi
    when :hit
      name  = Vocab.hit
      value = @actor.hit
    when :eva
      name  = Vocab.eva
      value = @actor.eva
    when :cri
      name  = Vocab.cri
      value = @actor.cri
    else
      return
    end
    draw_actor_distribute_gauge(@actor, type, x + 106, y, 48)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 4, y, 96, WLH, name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
  end
end

#==============================================================================
# ■ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base

  alias update_scene_change_KGC_DistributeParameter update_scene_change
  def update_scene_change
    return if $game_player.moving?

    if $game_temp.next_scene == :distribute_parameter
      call_distribute_parameter
      return
    end

    update_scene_change_KGC_DistributeParameter
  end

  def call_distribute_parameter
    $game_temp.next_scene = nil
    $scene = Scene_DistributeParameter.new(
      $game_temp.next_scene_actor_index,
      0,
      Scene_DistributeParameter::HOST_MAP)
  end
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================

class Scene_Menu < Scene_Base
  if KGC::DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND

  alias create_command_window_KGC_DistributeParameter create_command_window
  def create_command_window
    create_command_window_KGC_DistributeParameter

    return if $imported["CustomMenuCommand"]

    @__command_distribute_parameter_index =
      @command_window.add_command(Vocab.distribute_parameter)
    if @command_window.oy > 0
      @command_window.oy -= Window_Base::WLH
    end
    @command_window.index = @menu_index
  end
  end

  alias update_command_selection_KGC_DistributeParameter

update_command_selection
  def update_command_selection
    call_distribute_parameter_flag = false
    if Input.trigger?(Input::C)
      case @command_window.index
      when @__command_distribute_parameter_index
        call_distribute_parameter_flag = true
      end
    end

    if call_distribute_parameter_flag
      if $game_party.members.size == 0
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      start_actor_selection
      return
    end

    update_command_selection_KGC_DistributeParameter
  end

  alias update_actor_selection_KGC_DistributeParameter update_actor_selection
  def update_actor_selection
    if Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when @__command_distribute_parameter_index
        $scene = Scene_DistributeParameter.new(
          @status_window.index,
          @__command_distribute_parameter_index,
          Scene_DistributeParameter::HOST_MENU)
        return
      end
    end

    update_actor_selection_KGC_DistributeParameter
  end
end

#==============================================================================
# □ Scene_DistributeParameter
#==============================================================================

class Scene_DistributeParameter < Scene_Base

  HOST_MENU   = 0
  HOST_MAP    = 1

  def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
    @actor_index = actor_index
    @menu_index = menu_index
    @host_scene = host_scene
  end

  def start
    super
    create_menu_background

    @actor = $game_party.members[@actor_index]
    create_windows
  end

  def create_windows
    @help_window = Window_Help.new
    @help_window.set_text(KGC::DistributeParameter::DISTRIBUTE_SCENE_CAPTION)
    dy = @help_window.height
    @actor_window = Window_DistributeParameterActor.new(0, dy, @actor)
    @parameter_window = Window_DistributeParameterList.new(@actor)
    @status_window = Window_DistributeParameterStatus.new(@actor)
  end

  def terminate
    super
    dispose_menu_background
    @help_window.dispose
    @actor_window.dispose
    @parameter_window.dispose
    @status_window.dispose
  end

  def return_scene
    case @host_scene
    when HOST_MENU
      $scene = Scene_Menu.new(@menu_index)
    when HOST_MAP
      $scene = Scene_Map.new
    end
  end

  def update
    super
    update_menu_background
    update_window
    if @parameter_window.active
      update_parameter_list
    end
  end

  def update_window
    @help_window.update
    @actor_window.update
    @parameter_window.update
    @status_window.update
  end

  def refresh_window
    @actor_window.refresh
    @parameter_window.refresh
    @status_window.refresh
    Graphics.frame_reset
  end

  def next_actor
    @actor_index += 1
    @actor_index %= $game_party.members.size
    $scene = Scene_DistributeParameter.new(@actor_index,
      @menu_index, @host_scene)
  end

  def prev_actor
    @actor_index += $game_party.members.size - 1
    @actor_index %= $game_party.members.size
    $scene = Scene_DistributeParameter.new(@actor_index,
      @menu_index, @host_scene)
  end

  def update_parameter_list
    if Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    elsif input_growth?
      param = @parameter_window.parameter_symbol
      unless @actor.can_distribute?(param)
        Sound.play_buzzer
        return
      end
      Input.repeat?(Input::C) ? Sound.play_decision : Sound.play_cursor
      @actor.rp_growth_effect(param)
      refresh_window
    elsif input_reverse_growth?
      param = @parameter_window.parameter_symbol
      if @actor.distributed_count(param) == 0
        Sound.play_buzzer
        return
      end
      Input.repeat?(Input::A) ? Sound.play_decision : Sound.play_cursor
      @actor.rp_growth_effect(param, true)
      refresh_window
    elsif Input.trigger?(Input::R)
      Sound.play_cursor
      next_actor
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      prev_actor
    end
  end

  def input_growth?
    if KGC::DistributeParameter::ENABLE_REVERSE_DISTRIBUTE
      return Input.repeat?(Input::C) || Input.repeat?(Input::RIGHT)
    else
      return Input.trigger?(Input::C)
    end
  end

  def input_reverse_growth?
    if KGC::DistributeParameter::ENABLE_REVERSE_DISTRIBUTE
      return Input.repeat?(Input::A) || Input.repeat?(Input::LEFT)
    else
      return false
    end
  end
end

#==============================================================================
# ■ Scene_File
#==============================================================================

class Scene_File < Scene_Base

  alias read_save_data_KGC_DistributeParameter read_save_data
  def read_save_data(file)
    read_save_data_KGC_DistributeParameter(file)

    KGC::Commands.check_distribution_values
    Graphics.frame_reset
  end
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
# Added by Mr. Anonymous
#==============================================================================
class Scene_Status < Scene_Base
  #--------------------------------------------------------------------------
  #  Update Actor
  #--------------------------------------------------------------------------
    alias update_KGC_DistributeParameter update
    def update
      if KGC::DistributeParameter::CALL_DISTPARAMKEY != nil &&
         Input.trigger?(KGC::DistributeParameter::CALL_DISTPARAMKEY)
         Sound.play_decision
         $scene = Scene_DistributeParameter.new(@actor_index)#,@menu_index,@host_scene
      end
     update_KGC_DistributeParameter
   end
end

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/  The original untranslated version of this script can be found here:
# http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/special_system&tech=distribute_parameter
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_


Its a lot to look at, but in short, it is a method of statistic distribution.
Infact, its really similar to Blizzards Statistic Distribution script for XP.
There is one raging and prime difference though that I hope to fix:
When you level up, and earn points to distribute with your stats, they aren't just...points earned.
What I'm specifically trying to get at, is that if I leveled a character up, spent the points, and leveled them back down by whatever means...I don't re-earn points if I level them up again.
The points are already spent!

And that is the problem I hope someone can aid me with.
This is my intended method of gaining stats in this game, I hope someone can help soon. :(
A bright light can either illuminate or blind, but how will you know which until you open your eyes?

Blizzard

March 12, 2009, 03:35:52 am #1 Last Edit: March 12, 2009, 03:37:00 am by Blizzard
Maybe you should rather ask somebody to convert my XP script to a VX script. I'm not touching KGC's scripts. -_- Knowing KGC's way to code it would really be much easier to convert my script than to fix his.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Jragyn

Perhaps thats not so bad an idea.
Though comparing the two, though the layout is nicer on your own...
KGC opens up a few more statistics to push points into, like maxhp/sp, crit, and evade to be specific.

Eck.
I really need to pick up scripting.
This way I can just sift and locate the tidbits I want to change, myself. :(
You offer classes, right Blizzard? hah... o.o
A bright light can either illuminate or blind, but how will you know which until you open your eyes?

Blizzard

Nope. I lack the time to teach people. xD
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.