[XP] Blacksmith System (New Configuration Program!)

Started by ForeverZer0, April 21, 2010, 04:50:15 pm

Previous topic - Next topic

PhoenixFire

@f0 - I think he might have an issue of stuff, with some things.. Yanno, using some scripts and stuff :V: lmao...
Quote from: Subsonic_Noise on July 01, 2011, 02:42:19 amNext off, how to create a first person shooter using microsoft excel.

Quote from: Zeriab on September 09, 2011, 02:58:58 pm<Remember when computers had turbo buttons?

ForeverZer0

I just think being a little more descriptive might help.

What error?
What does the error say?
When does it occur, precisely?
What other scripts do you use?
Have you tried changing the script order around?

I can't help anybody when all I have to go by is "there is error".
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Jragyn

How could an item creation system not work with Blizz-ABS?
Well, the only thing I could fathom is the part where it creates new items in the database... which can't really be pre-defined as far as range/type etc.
A bright light can either illuminate or blind, but how will you know which until you open your eyes?

Shalaren

May 04, 2011, 09:47:16 am #83 Last Edit: May 04, 2011, 10:43:40 am by Shalaren
My mistake, I figured whats wrong,

Edit:
QuoteScript 'Window_Help' line 26: Type error occurred
cannot convert nil into string

thats what i get when i call the scene
Edit: I also found out that it only happens when using Blizzard's mouse controller

Cal RPG MGS

This System is brilliant, its just what i needed for my game, keep up the good work.

But if i may make 2 suggestions, which are to do with the weapon enhance ments
(Which with out are would make my game imbalanced due to over powered Weapons)

1. Weapon specific enhancements

E.g Handgun 2 upgrade will enhance only handgun 2

2. And Enhancement limits

This is the best way i can put this one

This is a Enhancement slot: []
Handgun : [] [] [] [] ; this weapon can only have 4 enhancements
Shotgun : [] [] ;  ; this weapon can only have 2 enhancements

If this i possible i would love even more this system.

ForeverZer0

Currently, only one enchantment can be applied to each item, so basically everything has only one slot.
I would like to add a way to do something very much like what you suggested, as well as allow the user to rename newly created/enchanted items.

I'll have to find some spare time and see what I can do.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Cal RPG MGS

:) Ok cool, how about the weapon specific enhancement is it a possibility ?

ForeverZer0

We'll see.
I'll have to add a parameter or two to RPG::Weapon. The fact that enchanted weapons are actually created in the database makes it slightly tricky, since they cannot be configured by the user ahead of time.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Kirye

Alright, i'm getting a really weird effect when I enchant armors.

Say I have 1 Iron Armor in my inventory and I enchant it with an Earth Orb (+earth resistance). I'll end up having 2-3 Iron Armors all with the Earth resistance. If I equip them, save the game and then Save progress on RMXP, then load the game again.. the armors are completely gone.

Here are the Scripts i'm running:

Blacksmith
BABS 1
BABS 2
BABS 3
Winkio Party HUD
Littledrago's Info Display
Littledrago's Boss meter
Qubid's MP3 Loop
Stormtronics CMS

I'm guessing the armors disappear because i'm saving over the modified data on RMXP, but don't know why I get multiple armors from the enchant.

Spoiler: ShowHide
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# Blacksmith Shop
# Author: ForeverZer0
# Type: Custom Shop System
# Date: 4.23.2011
# Version: v.2.0
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#
# Explanation:
#   Will allow you to create a complete blacksmithing system. The player will be
#   able to forge equipment/items by using combinations of weapons, armors, and
#   items in their possession. Also includes a "Enchantment" feature that will
#   allow the player to use special items to add stats, elemental efficiencies,
#   and state altering to weapons and armor. The extraction feature allows for
#   the breaking down of current equipment and items into other ones.
#
# Features:
#   - Completely configurable item requirements for every item.
#   - Configurable blacksmith 'fees' for every weapon/armor
#   - Can use as many different items, with different quantities for each piece
#     of equipment.
#   - Variable "skill" levels for Blacksmith shops, which lets you decide
#     which features the Blacksmith can do.
#   - Only have to use a single script call to for the Blacksmith's shop.
#   - Can recycle old equipment by extracting items from weapons/armors/items.
#
# Instructions:
#   - Place script below debug and above main
#   - Configuration and instructions for each are below
#   - To call blacksmith shop, this script call:
#
#         w = [ WEAPON_IDS ]    (Use as many as needed, separate with commas)
#         a = [ ARMOR_IDS ]
#         i = [ ITEM_IDS ]
#         $scene = Scene_BlackSmith.new(w, a, i)
#
#   - All IDs that you included in the script call for items will be be
#     available for forging in that shop.
#   - You can also include a fourth argument to the call to set the Blacksmith's
#     "skill level". Just make an array of true/false elements, set up like
#     this:
#
#             [CAN_FORGE?, CAN_EXTRACT?, CAN_ENCHANT?]
#
#     If you are not using the Enchant feature, omit the last option. Just make
#     sure that if you do include this argument that the array has a value for
#     each skill.
#
# Credits/Thanks:
#   - ForeverZer0, for the script.
#   - RoseSkye, huge thanks for beta-testing and demo map.
#
# Author's Notes:
#   Please report any bugs/issues at www.chaos-project.com
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:

module Blacksmith

#===============================================================================
#                          BEGIN CONFIGURATION
#===============================================================================

 FORGE_SE = ['157-Skill01', 80, 100]
 # SE played when an item is forged. ['FILENAME', VOLUME, PITCH]
 EXTRACT_SE = ['168-Skill12', 80, 50]
 # SE played when an item extraction is performed. ['FILENAME', VOLUME, PITCH]
 ENCHANT_SE = ['087-Action02', 80, 100]
 # SE played when an item enchantment is performed. ['FILENAME', VOLUME, PITCH]

 USE_ENCHANTMENTS = true
 # Set to true to enable the "Enchant" feature of the system.

 NO_ENCHANT_WEAPONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
 NO_ENCHANT_ARMORS = []
 # Include IDs of any equipment that cannot be enchanted in the respective
 # arrays, separating by commas. Ignore these if not using enchant feature.

 PLUS_COLOR = Color.new(128, 255, 128)
 MINUS_COLOR = Color.new(255, 128, 128)
 # Define the colors used for the text in the Blacksmith shop.

 MAP_BACK = true
 # Set to true if you would like slightly opaque windows with the map showing
 # through.

 #-----------------------------------------------------------------------------
 # FORGE DATABASE
 #-----------------------------------------------------------------------------
 # Define the materials used for each weapon/armor/item that can be forged and
 # extracted. They configuration is slightly different than what it was in the
 # first version of the script. You can separately define materials that are
 # given during extraction if you like, or ignore it and it will simply return
 # the same materials it takes to forge them. It works like this:
 #
 # STEP 1:
 #   Create a new "case" in the appropriate method below for the type of item
 #   you are trying to define. There are three of them, one each for weapons,
 #   armors, and items. Just use this syntax:
 #
 #          when DATABASE_ID then []
 #
 # STEP 2:
 #   Now you can begin to add materials to forge the item. Each material has
 #   an number which defines what type of item is is. Here is the "key":
 #
 #       0 = Weapon
 #       1 = Armor
 #       2 = Item
 #
 #   To define a material for an item, you simply create a three element array
 #   using this format:
 #                       [ITEM_TYPE, DATABASE_ID, QUANTITY]
 #
 #   ...and add it the appropriate empty array in the case statement you made
 #   in Step 1. You can add as many different items as you please to forge an
 #   weapon/armor/item, simply separate the material arrays with commas. See
 #   below for a few examples.
 #-----------------------------------------------------------------------------
 def self.weapon_forges(id)
   return case id
   when 1 then [[2, 35, 2]]  # Templar Sword
   when 2 then [[2, 39, 1], [2, 35, 5], [2, 9, 1]]  # Heavenly Might
   when 3 then [[0, 2, 1], [2, 40, 2], [2, 36, 1]]  # Ragnarok
   when 4 then [[0, 3, 1], [2, 60, 1], [2, 41, 1]]  # Excalibur
   when 5 then [[2, 35, 1]]  # King's Spear
   when 6 then [[2, 36, 5]]  # Imperial Arm
   when 7 then [[0, 6, 1], [2, 37, 2], [2, 4, 1]]  # Longinus
   when 8 then [[0, 7, 1], [2, 62, 1], [2, 39, 10]]  # Bracchio
   when 9 then [[2, 35, 1]]  # Heavy Axe
   when 10 then [[2, 40, 3], [2, 38, 1]]  # Gaia Splitter
   when 11 then [[0, 10, 1], [2, 41, 1]]  # Eruption
   when 12 then [[0, 11, 1], [2, 61, 1], [2, 38, 5]]  # Mjolnir
   when 13 then [[2, 35, 2]]  # Thief Blade
   when 14 then [[2, 37, 2], [2, 36, 2], [2, 39, 1]]  # Kunai Blade
   when 15 then [[0, 14, 1], [2, 38, 3], [2, 40, 1]]  # Dark Butterfly
   when 16 then [[0, 15, 1], [2, 56, 1], [2, 35, 20]]  # Gilgamesh
   when 17 then [[2, 35, 1]]  # Loud Roar
   when 18 then [[2, 39, 3], [2, 36, 2]]  # Longshot
   when 19 then [[0, 18, 1], [2, 37, 3], [2, 38, 2]]  # Valkyrum
   when 20 then [[0, 19, 1], [2, 59, 1], [2, 40, 5]]  # Lunar Dive
   when 21 then [[2, 35, 1]]  # Black Scythe
   when 22 then [[2, 37, 2], [2, 36, 3]]  # Reaper
   when 23 then [[0, 22, 1], [2, 40, 3], [2, 38, 3]]  # Devil's Bullova
   when 24 then [[0, 23, 1], [2, 63, 1], [2, 37, 10]]  # Grim Ascendance
   when 25 then [[2, 35, 1]]  # Air Chain
   when 26 then [[2, 36, 4]]  # Giant Anchor
   when 27 then [[0, 26, 1], [2, 37, 1], [2, 38, 1]]  # Black Pearl
   when 28 then [[0, 27, 1], [2, 57, 1], [2, 38, 5]]  # Maelstrom
   when 29 then [[2, 35, 1]]  # Cleric Staff
   when 30 then [[2, 39, 1], [2, 40, 1]]  # Arloche
   when 31 then [[0, 30, 1], [2, 38, 2], [2, 12, 1]]  # Undine's Wand
   when 32 then [[0, 31, 1], [2, 10, 1], [2, 58, 1]]  # Kerykleon
   end
 end

 def self.armor_forges(id)
   return case id
   when 1 then [[2, 35, 1]]  # Bronze Shield
   when 2 then [[2, 35, 5]]  # Iron Shield
   when 3 then [[2, 38, 1], [2, 39, 1]]  # Steel Shield
   when 4 then [[2, 36, 3], [2, 40, 2]]  # Mythirl Shield
   when 5 then [[2, 35, 1]]  # Bronze Helm
   when 6 then [[2, 35, 1], [2, 37, 1]]  # Iron Helm
   when 7 then [[2, 40, 1], [2, 35, 5]]  # Steel Helm
   when 8 then [[1, 6, 1], [2, 38, 1], [2, 37, 2]]  # Mythril Helm
   when 9 then [[2, 35, 1]]  # Cotton hat
   when 10 then [[2, 39, 1]]  # Felt Hat
   when 11 then [[2, 37, 2], [2, 7, 1]]  # Magic Hat
   when 12 then [[2, 41, 1]]  # Saint Hat
   when 13 then [[2, 35, 1]]  # Bronze Armor
   when 14 then [[2, 36, 1]]  # Iron Armor
   when 15 then [[2, 38, 2], [2, 1, 5]]  # Steel Armor
   when 16 then [[2, 37, 5]]  # Mythril Armor
   when 17 then [[2, 35, 1]]  # Bronze Plate
   when 18 then [[2, 40, 1]]  # Iron Plate
   when 19 then [[2, 39, 4]]  # Steel Plate
   when 20 then [[2, 36, 5], [2, 38, 1]]  # Mythril Plate
   when 21 then [[2, 35, 1]]  # Cotton Robe
   when 22 then [[2, 36, 1], [2, 37, 1]]  # Felt Robe
   when 23 then [[2, 40, 3], [2, 9, 5]]  # Magic Robe
   when 24 then [[2, 41, 1], [2, 38, 1]]  # Saint Robe
   when 25 then [[2, 36, 5]]  # Titan Ring
   when 26 then [[2, 38, 5]]  # Archer Ring
   when 27 then [[2, 39, 5]]  # Flash Ring
   when 28 then [[2, 40, 5]]  # Wisdom Ring
   when 29 then [[2, 49, 1], [2, 40, 2]]  # Flame Ring
   when 30 then [[2, 43, 1], [2, 38, 2]]  # Ice Ring
   when 31 then [[2, 39, 3], [2, 48, 1]]  # Thunder Ring
   when 32 then [[2, 45, 1], [2, 37, 3]]  # Aqua Ring
   when 33 then [[2, 36, 10]] #Shield
   when 34 then [[1, 4, 1], [2, 12, 3], [2, 51, 1]]  # Hero Shield
   when 35 then [[1, 8, 1], [2, 41, 1], [2, 53, 1]]  # Cross Helmet
   when 36 then [[1, 16, 1], [1, 27, 5]]  # Dragoon Armor
   when 37 then [[2, 54, 2], [2, 37, 5]]  # Raven Cloak
   when 38 then [[1, 12, 1], [1, 28, 3], [2, 54, 1]]  # Wizard Hat
   when 39 then [[1, 25, 1], [1, 26, 1], [1, 27, 1], [1, 28, 1], [1, 14, 1]]  # Battle Armor
   when 40 then [[1, 4, 1], [2, 54, 2], [2, 52, 1]]  # Magic Shield
   when 41 then [[1, 10, 1], [2, 41, 1], [2, 53, 1]]  # Boots of Abundance
   when 42 then [[2, 50, 1], [2, 44, 1], [2, 38, 5]]  # Boost Shades
   when 43 then [[2, 46, 1], [2, 47, 1], [2, 37, 5]]  # Valkyrie Shield
   end
 end

 def self.item_forges(id)
   return case id
   when 3 then [[2, 1, 1], [2, 35, 3]]  # Majilixer
   when 4 then [[2, 2, 1], [2, 36, 1]]  # Mana Tree Sap
   when 5 then [[2, 1, 1], [2, 2, 1], [2, 39, 2]]  # Manalixir
   when 6 then [[2, 41, 1], [2, 38, 1], [2, 39, 1], [2, 37, 1]]  # Great Remedy
   when 7 then [[2, 1, 4], [2, 40, 2]]  # Grand Cure
   when 8 then [[2, 2, 4], [2, 38, 2]]  # Mana Fountain
   when 10 then [[2, 53, 1]]  # Yggdrasil Leaf
   when 12 then [[2, 51, 1]]  # Siren Rain
   when 43 then [[2, 35, 10]]  # Ice Orb
   when 44 then [[2, 37, 5]]  # Dark Orb
   when 45 then [[2, 38, 5]]  # Aqua Orb
   when 46 then [[2, 36, 5]]  # Earth Orb
   when 47 then [[2, 39, 2], [2, 38, 2]]  # Wind Orb
   when 48 then [[2, 39, 5]]  # Thunder Orb
   when 49 then [[2, 40, 3]]  # Fire Orb
   when 50 then [[2, 38, 2], [2, 37, 2]]  # Light Orb
   when 51 then [[2, 52, 1]]  # Fortune Cat
   when 52 then [[2, 53, 1]]  # Hammer Charm
   when 53 then [[2, 54, 1]]  # Star Fragment
   when 54 then [[2, 51, 1]]  # Wisdom Stone
   end
 end

 #-----------------------------------------------------------------------------
 # EXTRACT DATABASE
 #-----------------------------------------------------------------------------
 # Here you can define the items received when a specific item is extracted.
 # It can be setup the same as way as above. Items left undefined will return
 # the same items that are required to forge it. You can define an item with an
 # empty array to have it return no items, though it can still return gold.
 #-----------------------------------------------------------------------------
 def self.weapon_extractions(id)
   return self.weapon_forges(id)
 end

 def self.armor_extractions(id)
   return self.armor_forges(id)
 end

 def self.item_extractions(id)
   return self.item_forges(id)
 end

 #-----------------------------------------------------------------------------
 # GOLD DATABASE
 #-----------------------------------------------------------------------------
 # Here you can define the amount of gold that is required to forge an item,
 # and the amount that is given if extracted. There are three methods, one each
 # for weapons, armors, and items. Simply follow this pattern for each
 # category:
 #
 #     when DATABASE_ID then [FORGE_PRICE, EXTRACT_GOLD,]
 #-----------------------------------------------------------------------------
 def self.weapon_gold(id)
   return [0, 0]
 end

 def self.armor_gold(id)
   return [0, 0]
 end

 def self.item_gold(id)
   return [0, 0]
 end

 #-----------------------------------------------------------------------------
 # ENCHANT DATABASE
 #-----------------------------------------------------------------------------

 #-----------------------------------------------------------------------------
 # Here you can define what items will alter stats when used to enchant with.
 # You need to create a two element array, and add it to the respective array
 # below that corresponds with the desired item.
 #
 # ex.
 #     when ITEM_ID then [[KEYWORD, VALUE], [KEYWORD, VALUE]]
 #
 #     KEYWORD: See below for a list of possible keywords. Stat changes that
 #              can affect only weapons will have no effect on armors, and
 #              vice-versa.
 #     VALUE : The amount by which to change the stat. Negative values will
 #             lower the stat.
 #-----------------------------------------------------------------------------
 # KEYWORDS:
 #
 #   'ATK' (Weapon Only)           'DEX'               'PDEF'
 #   'EVA' (Armor Only)            'AGI'               'MDEF'
 #   'STR'                         'INT'    
 #
 #   ** Keywords have to be written EXACTLY as they appear.
 #-----------------------------------------------------------------------------
 def self.enchant_stats(item_id)
   return case item_id
   when 38 then [['DEX', 3]]
   when 39 then [['AGI', 3]]
   when 40 then [['INT', 3]]
   when 51 then [['DEX', 3], ['AGI', 3], ['INT', 3]]
   when 52 then [['DEX', 10]]
   when 53 then [['AGI', 10]]
   when 54 then [['INT', 10]]
   end
 end

 #-----------------------------------------------------------------------------
 # Define state altering enchantments.
 #
 # ex.
 #     when ITEM_ID then [[VALUE, STATE_ID], [VALUE, STATE_ID]]
 #
 #     VALUE: One of three different values to represent states efficiency.
 #              -1 = Minus state (Does nothing on armors)
 #               0 = Neutral
 #               1 = Plus state
 #     STATE_ID: The ID in the database of the state.
 #-----------------------------------------------------------------------------
 def self.enchant_states(item_id)
   return nil  # No configuration defined
 end

 #-----------------------------------------------------------------------------
 # Define element altering enchantments.
 #
 # ex.
 #     when ITEM_ID then [[VALUE, ELEMENT_ID], [VALUE, ELEMENT_ID]]
 #
 #     VALUE: One of two different values to represent element efficiency.
 #              true  = Uses element
 #              false = Doesn't use element (Negates element if present)
 #     ELEMENT_ID: The ID in the database of the element.
 #-----------------------------------------------------------------------------
 def self.enchant_elements(item_id)
   return case item_id
   when 43 then [[1, 2], ]
   when 44 then [[1, 8], ]
   when 45 then [[1, 4], ]
   when 46 then [[1, 5], ]
   when 47 then [[1, 6], ]
   when 48 then [[1, 3], ]
   when 49 then [[1, 1], ]
   when 50 then [[1, 7], ]
   end
 end

 #-----------------------------------------------------------------------------
 # Define the amount of gold it takes to enchant a weapon or armor with the
 # item.
 #-----------------------------------------------------------------------------
 def self.enchant_gold(item_id)
   return 100
 end

#===============================================================================
#                              END CONFIGURATION
#===============================================================================

def self.materials?(type, id)
   # Get the required materials for the item
   materials = case type
   when 0 then [self.weapon_forges(id), self.weapon_gold(id)]
   when 1 then [self.armor_forges(id), self.armor_gold(id)]
   when 2 then [self.item_forges(id), self.item_gold(id)]
   end
   materials[0] = [] if materials[0] == nil
   # Check gold, skipping item check if there is not enough.
   if $game_party.gold >= materials[1][0]
     # Iterate all required materials, making sure enough are in inventory.
     materials[0].each {|item|
       # Branch by the type of the item.
       result = case item[0]
       when 0 then ($game_party.weapon_number(item[1]) >= item[2])
       when 1 then ($game_party.armor_number(item[1]) >= item[2])
       when 2 then ($game_party.item_number(item[1]) >= item[2])
       end
       # End iteration and return false immidiately if missing required item.
       return false unless result
     }
     return true
   end
   return false
 end
 #-----------------------------------------------------------------------------
 def self.update_database(item)
   # Open the Weapons or Armors .rxdata file and add the created item.
   begin
     if item.is_a?(RPG::Weapon)
       file, data = 'Data/Weapons.rxdata', $data_weapons
     elsif item.is_a?(RPG::Armor)
       file, data = 'Data/Armors.rxdata', $data_armors
     else
       return
     end
     data[item.id] = item
     file = File.open(file, 'wb')
     Marshal.dump(data, file)
     file.close
   rescue
     print "Could not add #{item.name} to Database."
   end
 end
 #-----------------------------------------------------------------------------
 def self.create_item(base_item, enchant_item)
   base = base_item.clone
   # Do to clone only making shallow copies, it is necessary to also create
   # seperate clones of the element and state sets, otherwise the original
   # is affected too.
   if base_item.is_a?(RPG::Weapon)
     elem_set = base_item.element_set.clone
     plus_state_set = base_item.plus_state_set.clone
     minus_state_set = base_item.minus_state_set.clone
   else
     guard_elem_set = base_item.guard_element_set.clone
     guard_state_set = base_item.guard_state_set.clone
   end
   # Gather the enchantment data.
   stats = self.enchant_stats(enchant_item.id)
   states = self.enchant_states(enchant_item.id)
   elements = self.enchant_elements(enchant_item.id)
   # Iterate through stats
   if stats != nil
     stats.each {|stat|
       case stat[0]
       when 'ATK'
         if base.is_a?(RPG::Weapon)
           base.atk += stat[1]
         end
       when 'EVA'
         if base.is?(RPG::Armor)
           base.eva += stat[1]
         end
       when 'STR' then base.str_plus += stat[1]
       when 'DEX' then base.dex_plus += stat[1]
       when 'AGI' then base.agi_plus += stat[1]
       when 'INT' then base.int_plus += stat[1]
       when 'PDEF' then base.pdef_plus += stat[1]
       when 'MDEF' then base.mdef_plus += stat[1]
       end
     }
   end
   # Iterate through states
   if states != nil
     states.each {|state|
       id = state[1]
       if base.is_a?(RPG::Weapon)
         case state[0]
         when -1
           minus_state_set.push(id) unless minus_state_set.include?(id)
           plus_state_set -= [id]
         when 0
           minus_state_set -= [id]
           plus_state_set -= [id]
         when 1
           plus_state_set.push(id) unless plus_state_set.include?(id)
           minus_state_set -= [id]
         end
       elsif base.is_a?(RPG::Armor)
         if state[0] == 0
           guard_state_set -= [id]
         elsif state[0] == 1
           guard_state_set.push(id) unless guard_state_set.inlcude?(id)
         end
       end
     }
   end
   # Iterate through elements
   if elements != nil
     elements.each {|element|
       id = element[1]
       if base.is_a?(RPG::Weapon)
         if element[0] && !elem_set.include?(id)
           elem_set.push(id)
         else
           elem_set -= [id]
         end
       elsif base.is_a?(RPG::Armor)
         if element[0] && !guard_elem_set.include?(id)
           guard_elem_set.push(id)
         else
           guard_elem_set -= [id]
         end
       end
     }
   end
   # Give the weapon a new ID, remove the old item, and add the new one.
   if base.is_a?(RPG::Weapon)
     $game_party.lose_weapon(base_item.id, 1)
     base.id = $data_weapons.size
     base.element_set = elem_set
     base.plus_state_set = plus_state_set
     base.minus_state_set = minus_state_set
     $data_weapons[base.id] = base
     $game_party.gain_weapon(base.id, 1)
   elsif base.is_a?(RPG::Armor)
     $game_party.lose_armor(base_item.id, 1)
     base.id = $data_armors.size
     base.guard_element_set = guard_elem_set
     base.guard_state_set = guard_state_set
     $data_armors[base.id] = base
     $game_party.gain_armor(base.id, 1)
   end
   # Add new item to class equipment
   self.update_class_equipment(base_item, base)
   # Save the new item to the database.
   self.update_database(base)
 end
 #-----------------------------------------------------------------------------
 def self.update_class_equipment(old, new)
   # Adds the created item to class equipment that could equip the original
   $data_classes.each_index {|i|
     next if $data_classes == nil
     if old.is_a?(RPG::Weapon) && $data_classes.weapon_set.include?(old.id)
       $data_classes.weapon_set.push(new.id)
     elsif old.is_a?(RPG::Armor) && $data_classes.armor_set.include?(old.id)
       $data_classes.armor_set.push(new.id)
     end
   }
   # Marshal the new data.
   begin
     file = File.open('Data/Classes.rxdata', 'wb')
     Marshal.dump($data_classes, file)
     file.close
   rescue
     print "Could not update RPG::Class database."
   end
 end
end

 $blacksmith = 2.0

#===============================================================================
# ** Window_BlacksmithCommand
#===============================================================================

class Window_BlacksmithCommand < Window_Selectable
 
 def initialize(level)
   super(0, 64, 480, 64)
   @level = level
   if Blacksmith::USE_ENCHANTMENTS
     @item_max = @column_max = 4
     @commands = ['Forge', 'Extract', 'Enchant', 'Exit']
   else
     @item_max = @column_max = 3
     @commands = ['Forge', 'Extract', 'Exit']
   end
   self.contents = Bitmap.new(self.width - 32, self.height - 32)
   refresh
   self.index = 0
 end
 #-----------------------------------------------------------------------------
 def refresh
   self.contents.clear
   (0...@item_max).each {|i| draw_item(i) }
 end
 #-----------------------------------------------------------------------------
 def draw_item(index)
   w = self.width / @item_max
   self.contents.font.color = @level[index] ? normal_color : disabled_color
   self.contents.draw_text(4 + (w * index), 0, w, 32, @commands[index])
 end
end

#===============================================================================
# ** Window_BlacksmithForge
#===============================================================================

class Window_BlacksmithForge < Window_Selectable

 def initialize(shop_goods)
   super(0, 128, 368, 352)
   # Initialize window and create instance variable to store available goods.
   @shop_goods = shop_goods
   self.active = self.visible = false
   refresh
   self.index = 0
 end
 #-----------------------------------------------------------------------------
 def item
   return @data[self.index]
 end
 #-----------------------------------------------------------------------------
 def refresh(enchanting = false)
   # Dispose bitmap and set to nil if not already.
   if self.contents != nil
     self.contents = self.contents.dispose
   end
   # Set flag for enchanting
   @enchanting = enchanting
   # Create array of equipment, depending on flag
   if @enchanting
     @data = []
     # Add weapons
     ($data_weapons - [nil]).each {|weapon|
       if $game_party.weapon_number(weapon.id) > 0 &&
           !Blacksmith::NO_ENCHANT_WEAPONS.include?(weapon.id)
         @data.push(weapon)
       end
     }
     # Add Armor
     ($data_armors - [nil]).each {|armor|
       if $game_party.armor_number(armor.id) > 0 &&
           !Blacksmith::NO_ENCHANT_ARMORS.include?(armor.id)
         @data.push(armor)
       end
     }
   else
     @data = @shop_goods
   end
   # Create a new bitmap, sized for available items
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     (0...@item_max).each {|i| draw_item(i) }
   end
 end
 #-----------------------------------------------------------------------------
 def draw_item(index)
   item = @data[index]
   # Set a few local variables depending on the type of item.
   case item
   when RPG::Weapon
     quantity = $game_party.weapon_number(item.id)
     price, type = Blacksmith.weapon_gold(item.id)[0], 0
   when RPG::Armor
     quantity = $game_party.armor_number(item.id)
     price, type = Blacksmith.armor_gold(item.id)[0], 1
   when RPG::Item
     quantity = $game_party.item_number(item.id)
     price, type = Blacksmith.item_gold(item.id)[0], 2
   end
   # Don't check material requirments for forging wjen enchanting
   result = @enchanting ? true : Blacksmith.materials?(type, item.id)
   # Determine the color to use for drawing the item name.
   if quantity < 99 && result
     self.contents.font.color = normal_color
   else
     self.contents.font.color = disabled_color
   end
   # Draw the item name, icon, and price.
   x, y = 4, index * 32
   rect = Rect.new(x, y, self.width - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(item.icon_name)
   opacity = self.contents.font.color == normal_color ? 255 : 128
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
   if !@enchanting
     self.contents.draw_text(x + 240, y, 88, 32, price.to_s, 2)
   end
 end
 #-----------------------------------------------------------------------------
 def update_help
   @help_window.set_text(self.item == nil ? '' : self.item.description)
 end
end

#===============================================================================
# ** Window_BlacksmithExtract
#===============================================================================

class Window_BlacksmithExtract < Window_Selectable

 def initialize
   super(0, 128, 368, 352)
   self.active = self.visible = false
   refresh
   self.index = 0
 end
 #-----------------------------------------------------------------------------
 def item
   return @data[self.index]
 end
 #-----------------------------------------------------------------------------
 def refresh
   # Dispose current bitmap if defined.
   if self.contents != nil
     self.contents = self.contents.dispose
   end
   # Create list of items in inventory
   @data = []
   (1...$data_weapons.size).each {|i|
     result = (Blacksmith.weapon_extractions(i) != nil ||
       Blacksmith.weapon_gold(i)[1] != 0)
     if $game_party.weapon_number(i) > 0 && result
       @data.push($data_weapons)  
     end
   }
   (1...$data_armors.size).each {|i|
     result = (Blacksmith.armor_extractions(i) != nil ||
       Blacksmith.armor_gold(i)[1] != 0)
     if $game_party.armor_number(i) > 0 && result
       @data.push($data_armors)  
     end
   }
   (1...$data_items.size).each {|i|
     result = (Blacksmith.item_extractions(i) != nil ||
       Blacksmith.item_gold(i)[1] != 0)
     if $game_party.item_number(i) > 0 && result
       @data.push($data_items)
     end
   }
   @item_max = @data.size
   # Create a new bitmap that will contain the listed items
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     (0...@item_max).each {|i| draw_item(i) }
   end
 end
 #-----------------------------------------------------------------------------
 def draw_item(index)
   item = @data[index]
   # Set a few local variables depending on the type of item.
   quantity = case item
   when RPG::Weapon then $game_party.weapon_number(item.id)
   when RPG::Armor then $game_party.armor_number(item.id)
   when RPG::Item then $game_party.item_number(item.id)
   end
   # Draw the name, icon, and quantity of the item.
   x, y = 4, index * 32
   rect = Rect.new(x, y, self.width / @column_max - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(item.icon_name)
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
 end
 #-----------------------------------------------------------------------------
 def update_help
   @help_window.set_text(self.item == nil ? '' : self.item.description)
 end
end

#===============================================================================
# ** Window_BlacksmithMaterials
#===============================================================================

class Window_BlacksmithMaterials < Window_Base
 
 attr_accessor :active
 
 def initialize
   # Initialize window size and coordinates.
   super(0, 128, 368, 352)
   self.visible = @active = false
 end
 #-----------------------------------------------------------------------------
 def refresh(item, type = 0)
   # Clear the bitmap and set the new materials.
   if self.contents != nil
     self.contents = self.contents.dispose
   end
   set_materials(item, type)
   # Create a new bitmap, based off the amount of materials
   if @materials != nil && @materials.size > 0
     self.contents = Bitmap.new(self.width - 32, 64 + (@materials.size * 32))
     # Draw each material and quantity required.
     self.contents.font.color = system_color
     word = type == 0 ? 'Cost' : ($data_system.words.gold + ':')
     self.contents.draw_text(4, 0, 212, 32, word, 0)
     text = type == 0 ? 'Required Materials:' : 'Extractable Materials:'
     self.contents.draw_text(4, 32, 368, 32, text, 0)
     self.contents.font.color = normal_color
     self.contents.draw_text(244, 0, 88, 32, @price.to_s, 2)
     # Enumerate through each material.
     @materials.each_index {|i|
       # Set local variable to current item, depending on type.
       case @materials

  •        when 0
             item = $data_weapons[@materials[1]]
             enough = $game_party.weapon_number(item.id) >= @materials[2]
           when 1
             item = $data_armors[@materials[1]]
             enough = $game_party.armor_number(item.id) >= @materials[2]
           when 2
             item = $data_items[@materials[1]]
             enough = $game_party.item_number(item.id) >= @materials[2]
           end
           next if item == nil
           # Set local variable to store required amount of this item.
           required = @materials[2]
           # Set color of text, draw grayed if out if forging and not enough.
           self.contents.font.color = normal_color
           if type == 0 && !enough
             self.contents.font.color = disabled_color
           end
           # Set coordinates of current line.
           x, y = 4, 64 + (i * 32)
           # Draw item name, icon, and required amount.
           rect = Rect.new(x, y, self.width - 32, 32)
           self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
           bitmap = RPG::Cache.icon(item.icon_name)
           opacity = self.contents.font.color == normal_color ? 255 : 128
           self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
           self.contents.draw_text(x + 28, y, 212, 32, item.name)
           self.contents.draw_text(x + 272, y, 48, 32, 'x', 0)
           self.contents.draw_text(x + 272, y, 48, 32, required.to_s, 2)
         }
       elsif @price > 0
         self.contents = Bitmap.new(self.width - 32, 64)
         self.contents.font.color = system_color
         self.contents.draw_text(4, 0, 212, 32, $data_system.words.gold + ':')
         self.contents.font.color = normal_color
         self.contents.draw_text(244, 0, 88, 32, @price.to_s, 2)
         self.contents.draw_text(4, 32, 368, 32, 'No Materials')
       end
     end
     #-----------------------------------------------------------------------------
     def set_materials(item, type)
       # Sets the required/extractable items for the passed item.
       id = item.id
       if item.is_a?(RPG::Weapon)
         @materials = type == 0 ? Blacksmith.weapon_forges(id) :
           Blacksmith.weapon_extractions(id)
         @price = Blacksmith.weapon_gold(id)[type]
       elsif item.is_a?(RPG::Armor)
         @materials = type == 0 ? Blacksmith.armor_forges(id) :
           Blacksmith.armor_extractions(id)
         @price = Blacksmith.armor_gold(id)[type]
       else
         if @materials != 2
           @materials = type == 0 ? Blacksmith.item_forges(id) :
             Blacksmith.item_extractions(id)
           @price = Blacksmith.item_gold(id)[type]
         end
       end
     end
     #-----------------------------------------------------------------------------
     def update
       # Allow scrolling of bitmap if materials don't fit in window.
       if @active && self.contents != nil && self.contents.height > 320
         if Input.trigger?(Input::UP)
           if self.oy > 0
             self.oy -= 32
             $game_system.se_play($data_system.cursor_se)
           end
         elsif Input.trigger?(Input::DOWN)
           if (self.oy + 320) < self.contents.height
             self.oy += 32
             $game_system.se_play($data_system.cursor_se)
           end
         end
       end
     end
    end

    #===============================================================================
    # ** Window_BlacksmithStatus
    #===============================================================================

    class Window_BlacksmithStatus < Window_Base
     
     def initialize
       super(368, 128, 272, 352)
       self.contents = Bitmap.new(width - 32, height - 32)
       # Create array of sprites same size as party
       @sprites = [Sprite.new, Sprite.new, Sprite.new, Sprite.new]
       #@sprites = Array.new($game_party.actors.size, Sprite.new)
       # Set coordinates of each sprite
       @sprites.each_index {|i|
         @sprites.x, @sprites.y = 380, 194 + (i * 64)#(i * 34)
         @sprites.z = self.z + 10
       }
       self.visible = false
       # Array of flags for walking
       @walk = Array.new($game_party.actors.size, false)
       @count, @item = 0, nil
       refresh
     end
     #-----------------------------------------------------------------------------
     def refresh
       # Clear bitmap and turn off visiblity of each sprite.
       self.contents.clear
       @sprites.each {|sprite| sprite.visible = false }
       # Return if selected item index is undefined.
       return if @item == nil
       self.contents.font.size = Font.default_size + 2
       quantity = case @item
       when RPG::Item then $game_party.item_number(@item.id)
       when RPG::Weapon then $game_party.weapon_number(@item.id)
       when RPG::Armor then $game_party.armor_number(@item.id)
       end
       self.contents.font.color = system_color
       self.contents.draw_text(4, 0, 200, 32, 'Possessed:')
       self.contents.font.color = normal_color
       self.contents.draw_text(204, 0, 32, 32, quantity.to_s, 2)
       # Disable walking animation and end method if selected item is a normal item
       if @item.is_a?(RPG::Item)
         @walk.collect! {|value| false }
         return
       end
       # Change the font size.
       self.contents.font.size = Font.default_size - 1
       # Iterate each actor...
       $game_party.actors.each_index {|i|
         chr = $game_party.actors
         # Set local variable to highlighted piece of equipment.
         if @item.is_a?(RPG::Weapon)
           eqp = $data_weapons[chr.weapon_id]
         else
           armors = [chr.armor1_id, chr.armor2_id, chr.armor3_id, chr.armor4_id]
           eqp = $data_armors[armors[@item.kind]]
         end
         # Draw the actor sprite.
         draw_actor_graphic(i, chr.equippable?(@item))
         # Draw message and return if unequippable.
         unless chr.equippable?(@item)
           self.contents.font.color = normal_color
           self.contents.draw_text(32, 54 + (i * 64), 150, 32, 'Cannot Equip')
           next
         else
           # Create array of stat changes.
           # [str, dex, agi, int, pdef, mdef, (atk || eva)]
           stats = [
             (@item == nil ? 0 : @item.str_plus) - (eqp == nil ? 0 : eqp.str_plus),
             (@item == nil ? 0 : @item.dex_plus) - (eqp == nil ? 0 : eqp.dex_plus),
             (@item == nil ? 0 : @item.agi_plus) - (eqp == nil ? 0 : eqp.agi_plus),
             (@item == nil ? 0 : @item.int_plus) - (eqp == nil ? 0 : eqp.int_plus),
             (@item == nil ? 0 : @item.pdef) - (eqp == nil ? 0 : eqp.pdef),
             (@item == nil ? 0 : @item.mdef) - (eqp == nil ? 0 : eqp.mdef)
           ]
           if @item.is_a?(RPG::Weapon)
             stats.push(
               (@item == nil ? 0 : @item.atk) - (eqp == nil ? 0 : eqp.atk))
           elsif @item.is_a?(RPG::Armor)
             stats.push(
               (@item == nil ? 0 : @item.eva) - (eqp == nil ? 0 : eqp.eva))
           end
           # Set local variable to each piece of equipments' name
           current_name = eqp == nil ? '' : eqp.name
           new_name = @item == nil ? '' : @item.name
           # If stats are all equal, show message and end method.
           if stats.all? {|stat| stat == 0 }
             self.contents.font.color = normal_color
             if current_name != new_name
               self.contents.draw_text(32, 54 + (i * 64), 150, 32, 'No Change')
             else
               self.contents.draw_text(32, 54 + (i * 64), 150, 32, 'Equipped')
             end
             next
           end
           # Draw any stat changes, using colors to show plus/minus changes
           self.contents.font.size = (Font.default_size - 1)
           self.contents.font.color = normal_color
           self.contents.draw_text(104, 42 + (64*i), 32, 32, 'STR ') if stats[0] != 0
           self.contents.draw_text(104, 58 + (64*i), 32, 32, 'DEX ') if stats[1] != 0
           self.contents.draw_text(104, 74 + (64*i), 32, 32, 'AGI ') if stats[2] != 0
           self.contents.draw_text(176, 42 + (64*i), 32, 32, 'INT ') if stats[3] != 0
           self.contents.draw_text(32, 58 + (64*i), 32, 32, 'PDF ') if stats[4] != 0
           self.contents.draw_text(32, 74 + (64*i), 32, 32, 'MDF ') if stats[5] != 0
           if stats[-1] != 0
             # Show stats changes for atk/eva, depending on the equipment type
             stat = @item.is_a?(RPG::Weapon) ? 'ATK ' : 'EVA '
             self.contents.draw_text(32, 42 + (64 * i), 32, 32, stat) if stat != 0
           end
           # Show any stat changes
           stats.each_index {|j|
             next if stats[j] == 0
             xy = case j
             when 0 then [132, 42 + (64 * i)]
             when 1 then [132, 58 + (64 * i)]
             when 2 then [132, 74 + (64 * i)]
             when 3 then [198, 42 + (64 * i)]
             when 4 then [60, 58 + (64 * i)]
             when 5 then [60, 74 + (64 * i)]
             when 6 then [60, 42 + (64 * i)]
             end
             # Set color and operator depending on value
             if stats[j] < 0
               self.contents.font.color, sign = Blacksmith::MINUS_COLOR, '-'
             else
               self.contents.font.color, sign = Blacksmith::PLUS_COLOR, '+'
             end
             self.contents.draw_text(xy[0], xy[1], 8, 32, sign, 1)
             self.contents.draw_text(xy[0] + 10, xy[1], 24, 32, stats[j].abs.to_s)
           }
         end
       }
     end
     #-----------------------------------------------------------------------------
     def item=(item)
       if @item != item
         # Change the item variable and refresh.
         @item = item
         refresh
       end
     end
     #-----------------------------------------------------------------------------
     def draw_actor_graphic(id, equipable)
       # Draws the actor graphic
       actor = $game_party.actors[id]
       @sprites[id].bitmap = RPG::Cache.character(actor.character_name,
         actor.character_hue)
       @sprites[id].src_rect.set(0, 0, @sprites[id].bitmap.width / 4,
       @sprites[id].bitmap.height / 4)
       # Set walking animation if item is equippable.
       @walk[id] = equipable
       @sprites[id].tone = Tone.new(0, 0, 0, equipable ? 0 : 255)
       @sprites[id].visible = true
     end
     #-----------------------------------------------------------------------------
     def update
       super
       # Update the walking animation.
       @count = (@count + 1) % 40
       $game_party.actors.each_index {|i|
         next unless @walk
         if @sprites.bitmap != nil
           w = @sprites.bitmap.width / 4
           h = @sprites.bitmap.height / 4
           x = (@count / 10) * w
           @sprites.src_rect.set(x, 0, w, h)
         end
       }
     end
     #-----------------------------------------------------------------------------
     def visible=(bool)
       super
       # Set visible to the actor sprites as well.
       @sprites.each {|sprite| sprite.visible = bool }
     end
     #-----------------------------------------------------------------------------
     def dispose
       super
       # Dispose the actor sprites as well.
       @sprites.each {|sprite| sprite.dispose }
     end
    end


    #===============================================================================
    # ** Window_BlacksmithExtract
    #===============================================================================

    class Window_BlacksmithEnchant < Window_Selectable

     def initialize
       super(0, 128, 368, 352)
       self.active = self.visible = false
       refresh
       self.index = 0
     end
     #-----------------------------------------------------------------------------
     def item
       return @data[self.index]
     end
     #-----------------------------------------------------------------------------
     def refresh
       # Dispose current bitmap if defined.
       if self.contents != nil
         self.contents = self.contents.dispose
       end
       # Create list of items in inventory
       @data = []
       ($data_items - [nil]).each {|item|
         result = false
         result = true if Blacksmith.enchant_stats(item.id) != nil
         result = true if Blacksmith.enchant_states(item.id) != nil
         result = true if Blacksmith.enchant_elements(item.id) != nil
         @data.push(item) if result
       }
       @item_max = @data.size
       # Create a new bitmap that will contain the listed items
       if @item_max > 0
         self.contents = Bitmap.new(width - 32, row_max * 32)
         (0...@item_max).each {|i| draw_item(i) }
       end
     end
     #-----------------------------------------------------------------------------
     def draw_item(index)
       item = @data[index]
       # Set a few local variables depending on the type of item.
       quantity = $game_party.item_number(item.id)
       # Draw the name, icon, and quantity of the item.
       x, y = 4, index * 32
       rect = Rect.new(x, y, self.width / @column_max - 32, 32)
       self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
       bitmap = RPG::Cache.icon(item.icon_name)
       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
       self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
       self.contents.draw_text(x + 240, y, 16, 32, ':', 1)
       self.contents.draw_text(x + 256, y, 24, 32, quantity.to_s, 2)
     end
     #-----------------------------------------------------------------------------
     def update_help
       @help_window.set_text(self.item == nil ? '' : self.item.description)
     end
    end

    #===============================================================================
    # ** Scene_Blacksmith
    #===============================================================================

    class Scene_Blacksmith
     
     def initialize(weapons = [], armors = [], items = [], level = nil)
       # Set available goods for this shop based off passed argument.
       @goods = []
       @goods += weapons.collect {|id| $data_weapons[id] }
       @goods += armors.collect {|id| $data_armors[id] }
       @goods += items.collect {|id| $data_items[id] }
       @goods.uniq!
       # Configure the level variable
       @level = (level == nil) ? Array.new(4, true) : (level + [true])
       @enchants = Blacksmith::USE_ENCHANTMENTS
     end
     #-----------------------------------------------------------------------------
     def main
       # Create a Proc to handle confirmation of choices
       @confirm_proc = Proc.new {
         @help_window.set_text('Are you sure?')
         window = Window_Command.new(160, ['Confirm', 'Cancel'])
         window.x, window.y, window.z = 224, 192, 9999
         loop { Graphics.update; Input.update; window.update
           if Input.trigger?(Input::C) || Input.trigger?(Input::B)
             result = (Input.trigger?(Input::C) && window.index == 0)
             $game_system.se_play($data_system.cancel_se) unless result
             window.dispose
             break(result)
           end
         }
       }
       # Initialize

Spoiler: ShowHide

ForeverZer0

I will check it out right now.
I do see one error, likely with the config program. I thought I had fixed it version 1.1, but I may be wrong. See this:
  def self.enchant_elements(item_id)
    return case item_id
    when 43 then [[1, 2], ]
    when 44 then [[1, 8], ]
    when 45 then [[1, 4], ]
    when 46 then [[1, 5], ]
    when 47 then [[1, 6], ]
    when 48 then [[1, 3], ]
    when 49 then [[1, 1], ]
    when 50 then [[1, 7], ]
    end
  end


The ", " should not be at the end of each array.  I will do some testing and get back to you. I doubt that the error with the commas is causing your problem. It sounds like the .rxdata file is not being saved appropriately.

Just as a check real quick, are you using the version 1.1 of the config program?
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Kirye

Yeah, i'm using the 1.1 version. I fixed the commas anyway.

Spoiler: ShowHide

ForeverZer0

Yeah, it is still an error in the program.
I just fixed it, though I haven't re-uploaded it yet. I want to check the actual script for the problem you were having first, so tht the embedded version doesn't have the same bug.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Kirye

Alright, thanks alot for the help! This script is bad ass and I enjoy using it.

Spoiler: ShowHide

ForeverZer0

I just noticed a second problem as well. If you enchant a piece of equipment that is equipped and only have one of them, the game will not automatically change the actors equipment.

I'll see what I can do with these. It might not be till tomorrow before I get a chance to fix them and debug it all.
I also wanted to add the option to rename new equipment, so I MAY see what that is going to require and include it with the update.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

PhoenixFire

Any progress with the new patch? I'll probably download it, mess around a bit with it, and add it to T.E.P. if I can figure it all out..
Quote from: Subsonic_Noise on July 01, 2011, 02:42:19 amNext off, how to create a first person shooter using microsoft excel.

Quote from: Zeriab on September 09, 2011, 02:58:58 pm<Remember when computers had turbo buttons?

rayquaza1000

Hey! I keep on getting this error when i talk to my blacksmith! :facepalm: :???: :O.o: :P :uhm: :facepalm:

Syntax error occured while running script[/size][/b][/i][/u]

Help!!!!!!!!!!!!!
Meow

ForeverZer0

That means the script call is not set up right.  Post a screen of your blacksmith's event page, and I'll tell you where the error is.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

Magus

Okay... I'm going to try out this system. You better not fail me D:::::
LEVEL ME DOWN. THE ANTI-BLIZZ GROUP IS AMONG YOU... Do it for the chick below...She watches..<br />

hyakkivn

A wonderful tool for RMXP noob user like me  :^_^':
Very easy to use and config.
ForeverZero, you and these guys in this 4rum really amazing.

Shining Riku

This script is incredible, and I've found it to be a fun addition to one of my games but I noticed an issue with the Enchantments option:

When you go into the menu and select an item to use to enchant an item, even if the item is completely run out and at 0, you can still use it to enchant a weapon or armor piece, and this can be done endlessly.

It also doesn't acknowledge the cost of using said upgrade. No money is spent even if it's configured D:

I'd edit the script and fix this myself but I don't have the knowledge for this yet.
If you could fix this, that'd be really appreciated :D
I hope I explained it well enough without seeming pretentious  :negative: