Chaos Project

RPG Maker => RPG Maker Scripts => Script Requests => Topic started by: Jragyn on March 12, 2009, 03:28:52 am

Title: Help with a current script?
Post by: Jragyn on March 12, 2009, 03:28:52 am
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. :(
Title: Re: Help with a current script?
Post by: Blizzard on March 12, 2009, 03:35:52 am
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.
Title: Re: Help with a current script?
Post by: Jragyn on March 12, 2009, 03:47:39 am
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
Title: Re: Help with a current script?
Post by: Blizzard on March 12, 2009, 04:32:37 am
Nope. I lack the time to teach people. xD