TheDrifter

Veteran
Veteran
Joined
Apr 18, 2012
Messages
124
Reaction score
7
First Language
English
Primarily Uses
Greetings,

In my project, the Attack stat is separated from the Strength stat, and it is required for me to use the N.A.S.T.Y. Extra Stats script.

If you want to access the stats, just use:

        actor.xstat.STAT - Where STAT is the name of the new stat
     
     Ex. $game_actors[1].xstat.str , will return actor 1's str


actor.xstat.cha  is the stat I chose to represent Attack in this case.

Here's the issue:

I am using the Ace Equip Engine v1.06 script, as well as almost all of Yanfly's other scripts.

On the equip screen, there are 8 parameters drawn in a window to the right. There's not enough space to show the 9th one (Attack), but as you can guess, it is a very important and vital stat to my project. and I really can't replace one that's already there with the extra stat.

Therefore, I'd like to draw the 9th stat into a new popup window that appears right below where the HP and MP bars are shown, and above where the eight parameters are drawn.

I can set its x,y location later into the script if you allow me to, so you don't really have to bother with placing it right. Just help me draw that window over the others.

The text shown into the pop-up window should read:

Attack [value of xstat.cha] →

 

Then once I select a weapon or item slot to equip something, it should show:

 

Attack [value of xstat.cha] → [value of xstat.cha once it'll be updated with the newly equipped item]

That new value should be shown in font color 24 when powered up, and font color 31 when powered down.

 

Thank you so very very much for your help, it would mean the world to me.
 
Last edited by a moderator:

TheDrifter

Veteran
Veteran
Joined
Apr 18, 2012
Messages
124
Reaction score
7
First Language
English
Primarily Uses
Here is the Yanfly Engine Ace - Ace Equip Engine v1.06 Script.

#==============================================================================



# ▼ Yanfly Engine Ace - Ace Equip Engine v1.06

# -- Last Updated: 2012.02.02

# -- Level: Normal, Hard

# -- Requires: n/a



#==============================================================================

 

$imported = {} if $imported.nil?

$imported["YEA-AceEquipEngine"] = true

 

#==============================================================================

# ▼ Updates

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# 2012.02.02 - Bug Fixed: Crash when changing classes to different equip slots.

# 2012.01.22 - Bug Fixed: <equip slot> notetags updated to factor in spaces.

# 2012.01.05 - Compatibility Update: Equip Dynamic Stats

# 2011.12.30 - Bug Fixed: Stats didn't update.

# 2011.12.23 - Script efficiency optimized.

# 2011.12.18 - Script efficiency optimized.

# 2011.12.13 - Started Script and Finished.



#==============================================================================

# ▼ Introduction

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# The default equipment system in RPG Maker VX is the standard equipment system

# seen in all of the previous iterations, which consists of weapon, shield,

# headgear, bodygear, and accessory. To break free of that norm, this script

# allows users access to giving actors and/or classes dynamic equipment setups

# (including having multiples of the same categories). In addition to having

# different equip slot setups, newer equipment types can be made to allow for

# more diversity in armour types.



#==============================================================================

# ▼ Instructions

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# To install this script, open up your script editor and copy/paste this script

# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.



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

# Actor Notetags - These notetags go in the actors notebox in the database.

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

# <equip slots>

#  string

#  string

# </equip slots>

# This sets the actor's default slots to whatever is listed in between the two

# notetags. An actor's custom equip slots will take priority over a class's

# custom equip slots, which will take priority over the default equip slots.

# Replace "string" with the proper equipment type name or when in doubt, use

# "equip type: x" with x as the equipment type.



# <starting gear: x>

# <starting gear: x, x>

# Adds armour x to the actor's list of starting gear. This is used primarily

# for the newer pieces of gear that can't be added through the starting set of

# equipment through the RPG Maker VX Ace editor by default. Insert multiple of

# these notetags to add more pieces of starting gear if so desired.



# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.



# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.



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

# Class Notetags - These notetags go in the class notebox in the database.

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

# <equip slots>

#  string

#  string

# </equip slots>

# This sets the class's default slots to whatever is listed in between the two

# notetags. An actor's custom equip slots will take priority over a class's

# custom equip slots, which will take priority over the default equip slots.

# Replace "string" with the proper equipment type name or when in doubt, use

# "equip type: x" with x as the equipment type.



# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.



# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.



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

# Weapon Notetags - These notetags go in the weapons notebox in the database.

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

# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.



# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.



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

# Armour Notetags - These notetags go in the armour notebox in the database.

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

# <equip type: x>

# <equip type: string>

# For the newer equip types, replace x or string with the equip type ID or the

# name of the equip type respectively. This will set that armour to that

# particular equip type.



# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.



# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.



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

# State Notetags - These notetags go in the states notebox in the database.

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

# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.



# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.



#==============================================================================

# ▼ Compatibility

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that

# it will run with RPG Maker VX without adjusting.



#==============================================================================

 

module YEA

  module EQUIP

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - General Equip Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This adjusts the default equip configuration. While actors can have their

    # own unique equipment configurations, it's recommended to not change too

    # much as things get really hairy when it comes to proper eventing.

    # 

    # ID   Equip Type

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

    #  0   Weapon

    #  1   Shield

    #  2   Headgear

    #  3   Bodygear

    #  4   Accessory

    # 

    # Whatever you set the below slots to, the dual wield setup will be exactly

    # identical except that the second slot will be changed to a weapon (0).

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Adjust this array to set the default slots used for all of your actors

    # and classes if they do not have a custom equipment slot setup.

    DEFAULT_BASE_SLOTS = [ 0, 1, 2, 3, 5, 6, 4, 4 ]

    

    # This hash adjusts the new equip types (past 4+). Adjust them to match

    # their names properly. You can choose to allow certain types of equipment

    # be removable or not, or whether or not optimize will affect them.

    TYPES ={

    # TypeID => ["Type Name", Removable?, Optimize?],

           0 => [   "Main Hand", true,      true],

           1 => [   "Off Hand",  true,      true],

           2 => [   "Head",      true,      true],

           3 => [   "Chest",     true,      true],

           4 => [   "Accessory", true,      false],

           5 => [   "Arms",     true,      true],

           6 => [   "Legs",      true,      true],

    } # Do not remove this.

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Equip Command List -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Here, you can adjust the order at which the commands appear (or even

    # remove commands as you see fit). Here's a list of which does what:

    # 

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

    # :command         Description

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

    # :equip           Activates the manual equip window. Default.

    # :optimize        Optimizes equipment for the actor. Default.

    # :clear           Clears all equipment from the actor. Default

    # 

    # And that's all of the currently available commands. This list will be

    # updated as more scripts become available.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This array arranges the order of which the commands appear in the Equip

    # Command window in the Equip Scene.

    COMMAND_LIST =[

      :equip,

      :optimize,

      :clear,

    # :custom1,

    # :custom2,

    ] # Do not remove this.

    

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

    # - Equip Custom Commands -

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

    # For those who use scripts to that may produce unique effects for

    # equipping, use this hash to manage the custom commands for the Equip

    # Command Window. You can disable certain commands or prevent them from

    # appearing by using switches. If you don't wish to bind them to a switch,

    # set the proper switch to 0 for it to have no impact.

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

    CUSTOM_EQUIP_COMMANDS ={

    # :command => ["Display Name", EnableSwitch, ShowSwitch, Handler Method],

      :custom1 => [ "Custom Name",            0,          0, :command_name1],

      :custom2 => [ "Custom Text",           13,          0, :command_name2],

    } # Do not remove this.

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Misc Window Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This section adjusts the minor visuals that you see inside of the newly

    # organized Equip Scene. Adjust the settings as you see fit.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This sets the font size used for the status window in the lower right

    # corner of the screen (which shows stats and comparisons).

    STATUS_FONT_SIZE = 20

    

    # This sets the remove equip command in the item window.

    REMOVE_EQUIP_ICON = 0

    REMOVE_EQUIP_TEXT = "-----"

    

    # This sets the no-equipment text in the slot window.

    NOTHING_ICON = 0

    NOTHING_TEXT = "-----"

    

  end # EQUIP

end # YEA

 

#==============================================================================

# ▼ Editting anything past this point may potentially result in causing

# computer damage, incontinence, explosion of user's head, coma, death, and/or

# halitosis so edit at your own risk.

#==============================================================================

 

module YEA

  module REGEXP

  module BASEITEM

    

    EQUIP_SLOTS_ON  = /<(?:EQUIP_SLOTS|equip slots)>/i

    EQUIP_SLOTS_OFF = /<\/(?:EQUIP_SLOTS|equip slots)>/i

    

    EQUIP_TYPE_INT = /<(?:EQUIP_TYPE|equip type):[ ]*(\d+)>/i

    EQUIP_TYPE_STR = /<(?:EQUIP_TYPE|equip type):[ ]*(.*)>/i

    

    STARTING_GEAR = /<(?:STARTING_GEAR|starting gear):[ ](\d+(?:\s*,\s*\d+)*)>/i

    

    FIXED_EQUIP = /<(?:FIXED_EQUIP|fixed equip):[ ](\d+(?:\s*,\s*\d+)*)>/i

    SEALED_EQUIP = /<(?:SEALED_EQUIP|sealed equip):[ ](\d+(?:\s*,\s*\d+)*)>/i

    

  end # BASEITEM

  end # REGEXP

end # YEA

 

#==============================================================================

# ■ Vocab

#==============================================================================

 

module Vocab

  

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

  # overwrite method: self.etype

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

  def self.etype(etype)

    return $data_system.terms.etypes[etype] if [0,1,2,3,4].include?(etype)

    return YEA::EQUIP::TYPES[etype][0] if YEA::EQUIP::TYPES.include?(etype)

    return ""

  end

  

end # Vocab

 

#==============================================================================

# ■ Icon

#==============================================================================

 

module Icon

  

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

  # self.remove_equip

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

  def self.remove_equip; return YEA::EQUIP::REMOVE_EQUIP_ICON; end

  

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

  # self.nothing_equip

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

  def self.nothing_equip; return YEA::EQUIP::NOTHING_ICON; end

    

end # Icon

 

#==============================================================================

# ■ Numeric

#==============================================================================

 

class Numeric

  

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

  # new method: group_digits

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

  unless $imported["YEA-CoreEngine"]

  def group; return self.to_s; end

  end # $imported["YEA-CoreEngine"]

    

end # Numeric

 

#==============================================================================

# ■ DataManager

#==============================================================================

 

module DataManager

  

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

  # alias method: load_database

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

  class <<self; alias load_database_aee load_database; end

  def self.load_database

    load_database_aee

    load_notetags_aee

  end

  

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

  # new method: load_notetags_aee

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

  def self.load_notetags_aee

    groups = [$data_actors, $data_classes, $data_weapons, $data_armors,

      $data_states]

    for group in groups

      for obj in group

        next if obj.nil?

        obj.load_notetags_aee

      end

    end

  end

  

end # DataManager

 

#==============================================================================

# ■ RPG::BaseItem

#==============================================================================

 

class RPG::BaseItem

  

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

  # public instance variables

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

  attr_accessor :base_equip_slots

  attr_accessor :fixed_equip_type

  attr_accessor :sealed_equip_type

  attr_accessor :extra_starting_equips

  

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

  # common cache: load_notetags_aee

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

  def load_notetags_aee

    @base_equip_slots = []

    @equip_slots_on = false

    @fixed_equip_type = []

    @sealed_equip_type = []

    @extra_starting_equips = []

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_ON

        next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)

        @equip_slots_on = true

      when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_OFF

        next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)

        @equip_slots_on = false

      #---

      when YEA::REGEXP::BASEITEM::STARTING_GEAR

        next unless self.is_a?(RPG::Actor)

        $1.scan(/\d+/).each { |num| 

        @extra_starting_equips.push(num.to_i) if num.to_i > 0 }

      when YEA::REGEXP::BASEITEM::FIXED_EQUIP

        $1.scan(/\d+/).each { |num| 

        @fixed_equip_type.push(num.to_i) if num.to_i > 0 }

      when YEA::REGEXP::BASEITEM::SEALED_EQUIP

        $1.scan(/\d+/).each { |num| 

        @sealed_equip_type.push(num.to_i) if num.to_i > 0 }

      #---

      when YEA::REGEXP::BASEITEM::EQUIP_TYPE_INT

        next unless self.is_a?(RPG::Armor)

        @etype_id = [1, $1.to_i].max

      when YEA::REGEXP::BASEITEM::EQUIP_TYPE_STR

        next unless self.is_a?(RPG::Armor)

        for key in YEA::EQUIP::TYPES

          id = key[0]

          next if YEA::EQUIP::TYPES[id][0].upcase != $1.to_s.upcase

          @etype_id = [1, id].max

          break

        end

      #---

      else

        if @equip_slots_on

          case line.upcase

          when /EQUIP TYPE[ ](\d+)/i, /EQUIP TYPE:[ ](\d+)/i

            id = $1.to_i

            @base_equip_slots.push(id) if [0,1,2,3,4].include?(id)

            @base_equip_slots.push(id) if YEA::EQUIP::TYPES.include?(id)

          when /WEAPON/i

            @base_equip_slots.push(0)

          when /SHIELD/i

            @base_equip_slots.push(1)

          when /HEAD/i

            @base_equip_slots.push(2)

          when /BODY/i, /ARMOR/i, /ARMOUR/i

            @base_equip_slots.push(3)

          when /ETC/i, /OTHER/i, /ACCESSOR/i

            @base_equip_slots.push(4)

          else

            text = line.upcase.delete(" ")

            for key in YEA::EQUIP::TYPES

              id = key[0]

              next if YEA::EQUIP::TYPES[id][0].upcase.delete(" ")!= text

              @base_equip_slots.push(id)

              break

            end

          end

        end

      end

    } # self.note.split

    #---

    return unless self.is_a?(RPG::Class)

    if @base_equip_slots.empty?

      @base_equip_slots = YEA::EQUIP::DEFAULT_BASE_SLOTS.clone

    end

  end

  

end # RPG::BaseItem

 

#==============================================================================

# ■ Game_Temp

#==============================================================================

 

class Game_Temp

  

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

  # public instance variables

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

  attr_accessor :eds_actor

  attr_accessor :scene_equip_index

  attr_accessor :scene_equip_oy

  

end # Game_Temp

 

#==============================================================================

# ■ Game_BaseItem

#==============================================================================

 

class Game_BaseItem

  

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

  # public instance variables

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

  attr_accessor :item_id

  

end # Game_BaseItem

 

#==============================================================================

# ■ Game_BattlerBase

#==============================================================================

 

class Game_BattlerBase

  

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

  # alias method: equip_type_fixed?

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

  alias game_battlerbase_equip_type_fixed_aee equip_type_fixed?

  def equip_type_fixed?(etype_id)

    return true if fixed_etypes.include?(etype_id) if actor?

    return game_battlerbase_equip_type_fixed_aee(etype_id)

  end

  

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

  # alias method: equip_type_sealed?

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

  alias game_battlerbase_equip_type_sealed_aee equip_type_sealed?

  def equip_type_sealed?(etype_id)

    return true if sealed_etypes.include?(etype_id) if actor?

    return game_battlerbase_equip_type_sealed_aee(etype_id)

  end

  

end # Game_BattlerBase

 

#==============================================================================

# ■ Game_Actor

#==============================================================================

 

class Game_Actor < Game_Battler

  

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

  # alias method: init_equips

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

  alias game_actor_init_equips_aee init_equips

  def init_equips(equips)

    game_actor_init_equips_aee(equips)

    equip_extra_starting_equips

  end

  

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

  # new method: equip_extra_starting_equips

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

  def equip_extra_starting_equips

    for equip_id in actor.extra_starting_equips

      armour = $data_armors[equip_id]

      next if armour.nil?

      etype_id = armour.etype_id

      next unless equip_slots.include?(etype_id)

      slot_id = empty_slot(etype_id)

      @equips[slot_id].set_equip(etype_id == 0, armour.id)

    end

    refresh

  end

  

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

  # overwrite method: equip_slots

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

  def equip_slots

    return equip_slots_dual if dual_wield?

    return equip_slots_normal

  end

  

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

  # new method: equip_slots_normal

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

  def equip_slots_normal

    return self.actor.base_equip_slots if self.actor.base_equip_slots != []

    return self.class.base_equip_slots

  end

  

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

  # new method: equip_slots_dual

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

  def equip_slots_dual

    array = equip_slots_normal.clone

    array[1] = 0 if array.size >= 2

    return array

  end

  

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

  # new method: fixed_etypes

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

  def fixed_etypes

    array = []

    array |= self.actor.fixed_equip_type

    array |= self.class.fixed_equip_type

    for equip in equips

      next if equip.nil?

      array |= equip.fixed_equip_type

    end

    for state in states

      next if state.nil?

      array |= state.fixed_equip_type

    end

    return array

  end

  

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

  # new method: sealed_etypes

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

  def sealed_etypes

    array = []

    array |= self.actor.sealed_equip_type

    array |= self.class.sealed_equip_type

    for equip in equips

      next if equip.nil?

      array |= equip.sealed_equip_type

    end

    for state in states

      next if state.nil?

      array |= state.sealed_equip_type

    end

    return array

  end

  

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

  # alias method: change_equip

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

  alias game_actor_change_equip_aee change_equip

  def change_equip(slot_id, item)

    if item.nil? && !@optimize_clear

      etype_id = equip_slots[slot_id]

      return unless YEA::EQUIP::TYPES[etype_id][1]

    elsif item.nil? && @optimize_clear

      etype_id = equip_slots[slot_id]

      return unless YEA::EQUIP::TYPES[etype_id][2]

    end

    @equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil?

    game_actor_change_equip_aee(slot_id, item)

  end

  

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

  # overwrite method: optimize_equipments

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

  def optimize_equipments

    $game_temp.eds_actor = self

    @optimize_clear = true

    clear_equipments

    @optimize_clear = false

    equip_slots.size.times do |i|

      next if !equip_change_ok?(i)

      next unless can_optimize?(i)

      items = $game_party.equip_items.select do |item|

        item.etype_id == equip_slots &&

        equippable?(item) && item.performance >= 0

      end

      change_equip(i, items.max_by {|item| item.performance })

    end

    $game_temp.eds_actor = nil

  end

  

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

  # new method: can_optimize?

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

  def can_optimize?(slot_id)

    etype_id = equip_slots[slot_id]

    return YEA::EQUIP::TYPES[etype_id][2]

  end

  

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

  # alias method: force_change_equip

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

  alias game_actor_force_change_equip_aee force_change_equip

  def force_change_equip(slot_id, item)

    @equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil?

    game_actor_force_change_equip_aee(slot_id, item)

  end

  

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

  # alias method: weapons

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

  alias game_actor_weapons_aee weapons

  def weapons

    anti_crash_equips

    return game_actor_weapons_aee

  end

  

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

  # alias method: armors

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

  alias game_actor_armors_aee armors

  def armors

    anti_crash_equips

    return game_actor_armors_aee

  end

  

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

  # alias method: equips

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

  alias game_actor_equips_aee equips

  def equips

    anti_crash_equips

    return game_actor_equips_aee

  end

  

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

  # new method: equips

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

  def anti_crash_equips

    for i in 0...@equips.size

      next unless @equips.nil?

      @equips = Game_BaseItem.new

    end

  end

  

end # Game_Actor

 

#==============================================================================

# ■ Game_Interpreter

#==============================================================================

 

class Game_Interpreter

  

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

  # overwrite method: change equip

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

  def command_319

    actor = $game_actors[@params[0]]

    return if actor.nil?

    if @params[1] == 0 && @params[2] != 0

      item = $data_weapons[@params[2]]

      return unless actor.equip_slots.include?(0)

      slot_id = actor.empty_slot(0)

    elsif @params[2] != 0

      item = $data_armors[@params[2]]

      return unless actor.equip_slots.include?(item.etype_id)

      slot_id = actor.empty_slot(item.etype_id)

    else

      slot_id = @params[1]

    end

    actor.change_equip_by_id(slot_id, @params[2])

  end

  

end # Game_Interpreter

 

#==============================================================================

# ■ Window_EquipStatus

#==============================================================================

 

class Window_EquipStatus < Window_Base

  

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

  # overwrite method: initialize

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

  def initialize(dx, dy)

    super(dx, dy, window_width, Graphics.height - dy)

    @actor = nil

    @temp_actor = nil

    refresh

  end

  

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

  # overwrite method: window_width

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

  def window_width; return Graphics.width * 2 / 5; end

  

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

  # overwrite method: refresh

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

  def refresh

    contents.clear

    8.times {|i| draw_item(0, line_height * i, i) }

  end

  

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

  # overwrite method: draw_item

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

  def draw_item(dx, dy, param_id)

    draw_background_colour(dx, dy)

    draw_param_name(dx + 4, dy, param_id)

    draw_current_param(dx + 4, dy, param_id) if @actor

    drx = (contents.width + 22) / 2

    draw_right_arrow(drx, dy)

    draw_new_param(drx + 22, dy, param_id) if @temp_actor

    reset_font_settings

  end

  

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

  # new method: draw_background_colour

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

  def draw_background_colour(dx, dy)

    colour = Color.new(0, 0, 0, translucent_alpha/2)

    rect = Rect.new(dx+1, dy+1, contents.width - 2, line_height - 2)

    contents.fill_rect(rect, colour)

  end

  

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

  # overwrite method: draw_param_name

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

  def draw_param_name(dx, dy, param_id)

    contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE

    change_color(system_color)

    draw_text(dx, dy, contents.width, line_height, Vocab::param(param_id))

  end

  

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

  # overwrite method: draw_current_param

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

  def draw_current_param(dx, dy, param_id)

    change_color(normal_color)

    dw = (contents.width + 22) / 2

    draw_text(0, dy, dw, line_height, @actor.param(param_id).group, 2)

    reset_font_settings

  end

  

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

  # overwrite method: draw_new_param

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

  def draw_new_param(dx, dy, param_id)

    contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE

    new_value = @temp_actor.param(param_id)

    change_color(param_change_color(new_value - @actor.param(param_id)))

    draw_text(0, dy, contents.width-4, line_height, new_value.group, 2)

    reset_font_settings

  end

  

end # Window_EquipStatus

 

#==============================================================================

# ■ Window_EquipCommand

#==============================================================================

 

class Window_EquipCommand < Window_HorzCommand

  

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

  # overwrite method: make_command_list

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

  def make_command_list

    for command in YEA::EQUIP::COMMAND_LIST

      case command

      when :equip

        add_command(Vocab::equip2, :equip)

      when :optimize

        add_command(Vocab::optimize, :optimize)

      when :clear

        add_command(Vocab::clear, :clear)

      else

        process_custom_command(command)

      end

    end

  end

  

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

  # process_ok

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

  def process_ok

    $game_temp.scene_equip_index = index

    $game_temp.scene_equip_oy = self.oy

    super

  end

  

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

  # new method: process_custom_command

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

  def process_custom_command(command)

    return unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)

    show = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][2]

    continue = show <= 0 ? true : $game_switches[show]

    return unless continue

    text = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][0]

    switch = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][1]

    enabled = switch <= 0 ? true : $game_switches[switch]

    add_command(text, command, enabled)

  end

  

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

  # overwrite method: window_width

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

  def window_width; return 160; end

  

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

  # overwrite method: contents_width

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

  def contents_width; return width - standard_padding * 2; end

  

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

  # overwrite method: contents_height

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

  def contents_height

    ch = height - standard_padding * 2

    return [ch - ch % item_height, row_max * item_height].max

  end

  

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

  # overwrite method: visible_line_number

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

  def visible_line_number; return 4; end

  

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

  # overwrite method: col_max

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

  def col_max; return 1; end

    

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

  # overwrite method: item_rect

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

  def item_rect(index)

    rect = Rect.new

    rect.width = item_width

    rect.height = item_height

    rect.x = index % col_max * (item_width + spacing)

    rect.y = index / col_max * item_height

    rect

  end

  

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

  # overwrite method: ensure_cursor_visible

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

  def ensure_cursor_visible

    self.top_row = row if row < top_row

    self.bottom_row = row if row > bottom_row

  end

    

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

  # overwrite method: cursor_down

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

  def cursor_down(wrap = false)

    if index < item_max - col_max || (wrap && col_max == 1)

      select((index + col_max) % item_max)

    end

  end

  

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

  # overwrite method: cursor_up

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

  def cursor_up(wrap = false)

    if index >= col_max || (wrap && col_max == 1)

      select((index - col_max + item_max) % item_max)

    end

  end

  

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

  # overwrite method: process_pageup

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

  def process_pageup

    Sound.play_cursor

    Input.update

    deactivate

    call_handler:)pageup)

  end

  

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

  # overwrite method: process_pagedown

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

  def process_pagedown

    Sound.play_cursor

    Input.update

    deactivate

    call_handler:)pagedown)

  end

  

end # Window_EquipCommand

 

#==============================================================================

# ■ Window_EquipSlot

#==============================================================================

 

class Window_EquipSlot < Window_Selectable

  

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

  # overwrite method: initialize

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

  def initialize(dx, dy, dw)

    super(dx, dy, dw, Graphics.height - dy)

    @actor = nil

    refresh

  end

  

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

  # overwrite method: window_height

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

  def window_height; return self.height; end

  

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

  # overwrite method: visible_line_number

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

  def visible_line_number; return item_max; end

  

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

  # overwrite method: refresh

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

  def refresh

    create_contents

    super

  end

  

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

  # overwrite method: draw_item

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

  def draw_item(index)

    return unless @actor

    rect = item_rect_for_text(index)

    change_color(system_color, enable?(index))

    draw_text(rect.x, rect.y, 92, line_height, slot_name(index))

    item = @actor.equips[index]

    dx = rect.x + 92

    dw = contents.width - dx - 24

    if item.nil?

      draw_nothing_equip(dx, rect.y, false, dw)

    else

      draw_item_name(item, dx, rect.y, enable?(index), dw)

    end

  end

  

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

  # new method: draw_nothing_equip

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

  def draw_nothing_equip(dx, dy, enabled, dw)

    change_color(normal_color, enabled)

    draw_icon(Icon.nothing_equip, dx, dy, enabled)

    text = YEA::EQUIP::NOTHING_TEXT

    draw_text(dx + 24, dy, dw - 24, line_height, text)

  end

  

end # Window_EquipSlot

 

#==============================================================================

# ■ Window_EquipItem

#==============================================================================

 

class Window_EquipItem < Window_ItemList

  

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

  # overwrite method: col_max

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

  def col_max; return 1; end

  

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

  # overwrite method: slot_id=

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

  def slot_id=(slot_id)

    return if @slot_id == slot_id

    @slot_id = slot_id

    @last_item = nil

    self.oy = 0

  end

  

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

  # overwrite method: draw_item

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

  def draw_item(index)

    item = @data[index]

    rect = item_rect(index)

    rect.width -= 4

    if item.nil?

      draw_remove_equip(rect)

      return

    end

    dw = contents.width - rect.x - 24

    draw_item_name(item, rect.x, rect.y, enable?(item), dw)

    draw_item_number(rect, item)

  end

  

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

  # new method: draw_remove_equip

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

  def draw_remove_equip(rect)

    draw_icon(Icon.remove_equip, rect.x, rect.y)

    text = YEA::EQUIP::REMOVE_EQUIP_TEXT

    rect.x += 24

    rect.width -= 24

    draw_text(rect, text)

  end

  

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

  # overwrite method: include?

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

  def include?(item)

    if item.nil? && !@actor.nil?

      etype_id = @actor.equip_slots[@slot_id]

      return YEA::EQUIP::TYPES[etype_id][1]

    end

    return true if item.nil?

    return false unless item.is_a?(RPG::EquipItem)

    return false if @slot_id < 0

    return false if item.etype_id != @actor.equip_slots[@slot_id]

    return @actor.equippable?(item)

  end

  

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

  # overwrite method: enable?

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

  def enable?(item)

    if item.nil? && !@actor.nil?

      etype_id = @actor.equip_slots[@slot_id]

      return YEA::EQUIP::TYPES[etype_id][1]

    end

    return @actor.equippable?(item)

  end

  

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

  # new method: show

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

  def show

    @last_item = 0

    update_help

    super

  end

  

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

  # overwrite method: update_help

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

  def update_help

    super

    return if @actor.nil?

    return if @status_window.nil?

    return if @last_item == item

    @last_item = item

    temp_actor = Marshal.load(Marshal.dump(@actor))

    temp_actor.force_change_equip(@slot_id, item)

    @status_window.set_temp_actor(temp_actor)

  end

  

end # Window_EquipItem

 

#==============================================================================

# ■ Window_EquipActor

#==============================================================================

 

class Window_EquipActor < Window_Base

  

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

  # initialize

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

  def initialize(dx, dy)

    super(dx, dy, window_width, fitting_height(4))

    @actor = nil

  end

  

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

  # window_width

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

  def window_width; return Graphics.width - 160; end

  

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

  # actor=

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

  def actor=(actor)

    return if @actor == actor

    @actor = actor

    refresh

  end

  

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

  # refresh

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

  def refresh

    contents.clear

    return unless @actor

    draw_actor_face(@actor, 0, 0)

    draw_actor_simple_status(@actor, 108, line_height / 2)

  end

  

end # Window_EquipActor

 

#==============================================================================

# ■ Scene_Equip

#==============================================================================

 

class Scene_Equip < Scene_MenuBase

  

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

  # overwrite method: create_status_window

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

  def create_status_window

    wx = Graphics.width - (Graphics.width * 2 / 5)

    wy = @help_window.height + 120

    @status_window = Window_EquipStatus.new(wx, wy)

    @status_window.viewport = @viewport

    @status_window.actor = @actor

  end

  

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

  # overwrite method: create_command_window

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

  def create_command_window

    wx = 0

    wy = @help_window.height

    ww = 160

    @command_window = Window_EquipCommand.new(wx, wy, ww)

    @command_window.viewport = @viewport

    @command_window.help_window = @help_window

    if !$game_temp.scene_equip_index.nil?

      @command_window.select($game_temp.scene_equip_index)

      @command_window.oy = $game_temp.scene_equip_oy

    end

    $game_temp.scene_equip_index = nil

    $game_temp.scene_equip_oy = nil

    @command_window.set_handler:)equip,    method:)command_equip))

    @command_window.set_handler:)optimize, method:)command_optimize))

    @command_window.set_handler:)clear,    method:)command_clear))

    @command_window.set_handler:)cancel,   method:)return_scene))

    @command_window.set_handler:)pagedown, method:)next_actor))

    @command_window.set_handler:)pageup,   method:)prev_actor))

    process_custom_equip_commands

    create_actor_window

  end

  

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

  # new method: create_actor_window

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

  def create_actor_window

    wy = @help_window.height

    @actor_window = Window_EquipActor.new(@command_window.width, wy)

    @actor_window.viewport = @viewport

    @actor_window.actor = @actor

  end

  

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

  # new method: process_custom_equip_commands

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

  def process_custom_equip_commands

    for command in YEA::EQUIP::COMMAND_LIST

      next unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)

      called_method = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][3]

      @command_window.set_handler(command, method(called_method))

    end

  end

  

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

  # overwrite method: create_slot_window

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

  def create_slot_window

    wx = 0

    wy = @command_window.y + @command_window.height

    ww = Graphics.width - @status_window.width

    @slot_window = Window_EquipSlot.new(wx, wy, ww)

    @slot_window.viewport = @viewport

    @slot_window.help_window = @help_window

    @slot_window.status_window = @status_window

    @slot_window.actor = @actor

    @slot_window.set_handler:)ok,       method:)on_slot_ok))

    @slot_window.set_handler:)cancel,   method:)on_slot_cancel))

  end

  

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

  # overwrite method: create_item_window

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

  def create_item_window

    wx = @slot_window.x

    wy = @slot_window.y

    ww = @slot_window.width

    wh = @slot_window.height

    @item_window = Window_EquipItem.new(wx, wy, ww, wh)

    @item_window.viewport = @viewport

    @item_window.help_window = @help_window

    @item_window.status_window = @status_window

    @item_window.actor = @actor

    @item_window.set_handler:)ok,     method:)on_item_ok))

    @item_window.set_handler:)cancel, method:)on_item_cancel))

    @slot_window.item_window = @item_window

    @item_window.hide

  end

  

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

  # alias method: command_optimize

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

  alias scene_equip_command_optimize_aee command_optimize

  def command_optimize

    scene_equip_command_optimize_aee

    @actor_window.refresh

  end

  

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

  # alias method: command_clear

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

  alias scene_equip_command_clear_aee command_clear

  def command_clear

    scene_equip_command_clear_aee

    @actor_window.refresh

  end

  

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

  # alias method: on_slot_ok

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

  alias scene_equip_on_slot_ok_aee on_slot_ok

  def on_slot_ok

    scene_equip_on_slot_ok_aee

    @slot_window.hide

    @item_window.refresh

    @item_window.show

  end

  

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

  # alias method: on_item_ok

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

  alias scene_equip_on_item_ok_aee on_item_ok

  def on_item_ok

    scene_equip_on_item_ok_aee

    @actor_window.refresh

    @slot_window.show

    @item_window.hide

  end

  

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

  # alias method: on_item_cancel

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

  alias scene_equip_on_item_cancel_aee on_item_cancel

  def on_item_cancel

    scene_equip_on_item_cancel_aee

    @slot_window.show

    @item_window.hide

  end

  

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

  # alias method: on_actor_change

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

  alias scene_equip_on_actor_change_aee on_actor_change

  def on_actor_change

    scene_equip_on_actor_change_aee

    @actor_window.actor = @actor

  end

  

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

  # new method: command_name1

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

  def command_name1

    # Do nothing.

  end

  

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

  # new method: command_name2

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

  def command_name2

    # Do nothing.

  end

  

end # Scene_Equip

 

#==============================================================================



# ▼ End of File



#==============================================================================

Here is the N.A.S.T.Y. Extra Stats Script.

 

#===============================================================================

#                                               N.A.S.T.Y. Extra Stats

#                                 Nelderson's Awesome Scripts To You

# By: Nelderson

# Made On: 12/19/2011

# Last Updated : 3/27/2012

#===============================================================================

# Update History:

# - Version 1.1  - Cleaned up some ****, and added enemies xstats for Enemies!

# - Version 1.0  - Initial release, made for the **** of it 
tongue.png


#===============================================================================

# *Notes:

# - This script can be used to make all sorts of stats that can derive from

#   an actor's level, and base stats.

#

# - This thing can be a pain to set up, but once it's done, it can be a very

#   powerful way to include new stats into your game!

#

# - Made a quick edit to the status screen to show up to 6 stats!

#

# *Usage

#

# -First is the STATS section.  This is an array that holds all the new

#  stats that everything else gets info from.

#

# - Next fill out the Default Level formula(Use Example Below as a guide)

#   *ANYTHING that an actor has, you can base it off of (Except other XSTATS!)

#          (level, hp, mp, atk, spi, agi, maxhp, etc.)

#

# -You can use the ACTOR and ENEMY NOTETAGS to customize

#  the formulas for each actor.

#

#  Examples:

#   Place the following in an actor's notebox(You must make one for each stat):

#                <xstat>

#                :str => '(level/3.5) + 16',

#                :con => '(level/5.6) + 12',

#                :dex => '(level/5.25) + 15 + agi',

#                :int => '(level/10.5) + 10',

#                :wis => '(level/10.5) + 10',

#                :cha => '(level/10.5) + 10',

#                <xstat_end>

#

#   Or you can place this in an actor's/enemy's notebox

#                <xstat>

#                :str => 15,

#                :con => 14,

#                :dex => 13,

#                :int => 12,

#                :wis => 11,

#                :cha => 0,

#                <xstat_end>

#

# - This script also uses notetags for weapons and armors to increase xstats

#   if you want.  Just place in a notebox:

#

#                <weapon_xstat: STAT x> , where STAT is th name of the new stat

#

#          Ex. <weapon_xstat: str 5> , would raise the actor's str +5

#

#  *For Scripters

#

#  -If you want to access the stats, just use:

#               actor.xstat.STAT - Where STAT is the name of the new stat

#         

#          Ex. $game_actors[1].xstat.str , will return actor 1's str

#  

#===============================================================================

# Credits:

# -Nelderson and Zetu

#  Original Script was made by Zetu, and I spiced the **** out of it!

#===============================================================================

 

module Z26

 

  STATS = [:wis,:cha]

 

  #Default xstat formulas for ACTORS

  DEFAULT_LEVEL_FORMULA =

                {

                  :cha => '25',

                  :wis => '25',

                }

 

  #Default xstat formulas for ENEMIES     

  DEFAULT_FOR_ENEMIES =

                {

                  :cha => 25, # attack

                  :wis => 25, # speed

                }

 

   def self.actor_level_formulas(actor_id)

          jhh = ""

          strin = $data_actors[actor_id].get_start_end_cache

          strin.each do |i|

                jhh += i

          end

          return DEFAULT_LEVEL_FORMULA if strin == "" or strin == []

          return eval("{#{jhh}}")

        end

 

        def self.enemy_stats(enemy_id)

          jhh = ""

          strin = $data_enemies[enemy_id].get_start_end_cache

          strin.each do |i|

                jhh += i

          end

          return DEFAULT_FOR_ENEMIES if strin == "" or strin == []

          return eval("{#{jhh}}")

        end

 

  #=============================================================================

  SYMBOLS = []

  for stat in STATS

        SYMBOLS.push(stat)

  end

  Xstats = Struct.new(*SYMBOLS)

end

 

class Game_Enemy < Game_Battler

  attr_accessor :xstat

 

  alias z26_enemy_set initialize unless $@

  def initialize(*args)

        z26_enemy_set(*args)

        @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))

        for stat in Z26::STATS

          z26variate_stats(stat)

        end

  end

 

  def z26variate_stats(stat)

        return if Z26.enemy_stats(@enemy_id)[stat].nil?

        if Z26.enemy_stats(@enemy_id)[stat].is_a?(String)

          set_in = eval(Z26.enemy_stats(@enemy_id)[stat]).to_i

          eval("@xstat.#{stat} += #{set_in}")

        else

          set_in = Z26.enemy_stats(@enemy_id)[stat]

          @xstat[stat] += set_in

        end

  end

end

 

class Game_Actor < Game_Battler

  attr_accessor :xstat

 

  alias z26_s setup unless $@

  def setup(actor_id)

        z26_s(actor_id)

        @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))

        for item in equips.compact

          z26variate_equip(item)

        end

        for stat in Z26::STATS

          z26variate_stats(stat, @level)

        end

  end

 

  alias z26_change_equip change_equip

  def change_equip(equip_type, item, test = false)

        last_item = equips[equip_type]

        z26_change_equip(equip_type, item)

        z26variate_equip(item)

        z26variate_equip(last_item, false)

  end

 

  #=====================#

  ##EDITED BY NELDERSON##

  #=====================#

  def z26variate_equip(item, adding = true)

        return if item.nil?

        for line in item.note.split(/[\r\n]+/).each{ |a|

          case a

          when /<weapon_xstat:[ ](.*)[ ](\d+)>/i

                  if Z26::STATS.include?(eval(":" + $1))

                        if adding

                          eval("@xstat.#{$1} += #{$2}")

                        else

                        eval("@xstat.#{$1} -= #{$2}")

                  end

                end

          end

          }

        end

  end

 

  def z26variate_stats(stat, level, adding = true)

        return if Z26.actor_level_formulas(@actor_id)[stat].nil?

        if Z26.actor_level_formulas(@actor_id)[stat].is_a?(String)

          amount = eval(Z26.actor_level_formulas(@actor_id)[stat]).to_i

        else

          amount = Z26.actor_level_formulas(@actor_id)[stat]

        end

        if adding

          eval("@xstat.#{stat} += #{amount}")

        else

          eval("@xstat.#{stat} -= #{amount}")

        end

  end

 

  alias z26level_up level_up unless $@

  def level_up

        for stat in Z26::STATS

          z26variate_stats(stat, @level, false)

        end

        z26level_up

        for stat in Z26::STATS

          z26variate_stats(stat, @level)

        end

  end

end

 

class Window_Status < Window_Selectable

  def draw_block3(y)

        draw_parameters(0, y)

        draw_equipments(344, y)#288

        draw_xstat_parameters(172, y)

  end

 

  def draw_xstat_parameters(x, y)

        @actor.xstat.size.times {|i|

        draw_actor_xstat_param(@actor, x, y + line_height * i, i) }

  end

end

 

class Window_Base < Window

  def draw_actor_xstat_param(actor, x, y, param_id)

        id = Z26::STATS[param_id]

        change_color(system_color)

        draw_text(x, y, 120, line_height, id.capitalize)

        change_color(normal_color)

        draw_text(x + 120, y, 36, line_height, actor.xstat[id], 2)

  end

end

 

class RPG::BaseItem

  def get_start_end_cache

        record = false

        temp = []

        self.note.split(/[\r\n]+/).each do |line|

          if line =~ /<xstat>/i

                record = true

          elsif line =~ /<xstat_end>/i

                record = false

          end

          if record

                temp << line

          end

        end

        return nil if temp == ""

        temp.delete_at(0)

        temp

  end

end
 
Last edited by a moderator:

TheDrifter

Veteran
Veteran
Joined
Apr 18, 2012
Messages
124
Reaction score
7
First Language
English
Primarily Uses
EDIT: Also, by "Popup window", all I mean is just something that looks similar to this... Popup.png
 
Last edited by a moderator:

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,006
First Language
Tagalog
Primarily Uses
RMVXA
You need to create a new window that draws your stat, add that window to the scene
 

TheDrifter

Veteran
Veteran
Joined
Apr 18, 2012
Messages
124
Reaction score
7
First Language
English
Primarily Uses
You need to create a new window that draws your stat, add that window to the scene
Fair enough, but how do I do that? I have no scripting knowledge whatsoever.

And then I wouldn't know how to make the color of text change, and how to draw the actual stat for each character.

The script says to use this:

actor.xstat.STAT - Where STAT is the name of the new stat

     Ex. $game_actors[1].xstat.cha , will return actor 1's cha (the stat I use for Attack)

but then that's just the xstat of Actor 1. I gotta make sure it draws the stat of the current actor

with events it would sound like a conditional branch, If actor 1, draw $game_actors[1].xstat.cha, if actor 2, draw $game_actors[2].xstat.cha, etc...

I'm so clueless when it comes to RGSS3.

Please help. And thank you very much if you do.
 

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,006
First Language
Tagalog
Primarily Uses
RMVXA
the actor id is normally saved into a variable during the scene for stats... or you can pick the actor directly too...

anyway, you can look at how yanfly draws the stats and do things from there...
 

Latest Threads

Latest Posts

Latest Profile Posts

Finnuval wrote on ShuBun-Kin's profile.
Loving the avatar :D
Introducing the premium bagel
I have a micro economics midterm tomorrow. I'm not worried.
Should be a...small exam :kaojoy:
While was working on one of the monsters that will appear in my horor game I may have made harold a Lovecraftian monster. (I used his head to keep things aligned.)
Finally got my website fixed and the security sorted so it's been a productive day. Can I go to sleep now? I mean... I don't need to work right?

Forum statistics

Threads
115,924
Messages
1,094,085
Members
151,182
Latest member
ricansuave
Top