Item Crafting System Version: 1.01
By: arev
Introduction
Simple and effective crafting system.
Features
Screenshots
http://img148.imageshack.us/img148/5505/screnh.png
Demo (version 1.00)
http://www.megaupload.com/?d=CFL41HEH
Script
Instructions
Copy this tab and paste it above 'Main' in your project.
In the script you'll find an array called RECIPES. New recipes are added with new arrays like the following:
['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
i stands for items, w for weapons and a for armors.
Acording to this recipe - to make an item of ID 99 you need one item with ID 12, one item with ID 78, one weapon with ID 3, two armors with ID 45. There is a maximum number of six components. If you want to make a recipe consisting of smaller number of components just fill the remaining fields with 'z'. The last ithem in the array is the recipe result. The first character works just like before, then there's a dash required, followed by ID of an item.
To enter the crafting scene call a script like this: $scene = Scene_Craft.new
During the crafting the order of items in the component window is not important - they are sorted within the script.
Compatibility
The system is compatible with default RMXP system. It doesn't override any methods, so it's probably compatible with lots of other things.
Credits and Thanks
arev of rmxp.pl :]
Terms and Conditions
You are free to use this script in your non-commercial project. You can redistribute this script (free of charge) only if you provide information about its original author. If you want to use this script in a commercial project please contact me via http://www.rmxp.pl or http://www.arpgmaker.com private message system.
By: arev
Introduction
Simple and effective crafting system.
Features
- Mix up to six components.
- Use items, weapons and armors.
- Automatic sorting of the components.
Screenshots

http://img148.imageshack.us/img148/5505/screnh.png
Demo (version 1.00)
http://www.megaupload.com/?d=CFL41HEH
Script
Code:
#==============================================================================
# ** Item Crafting System
# version 1.01
# created by arev (rmxp.pl)
# released 28-12-2009, updated: 25-07-2010
#==============================================================================
# Installation & Compatibility:
#
# Copy this tab and paste it above 'Main' in your project.
# The system is compatible with default RMXP system.
# It doesn't override any methods, so it's probably compatible
# with lots of other things.
#
#
#
# Usage:
#
# Below this introduction you'll find an array called RECIPES.
# New recipes are added with new arrays like the following:
# ['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
# i stands for items, w for weapons and a for armors.
# Acording to this recipe - to make an item of ID 99 you need
# one item with ID 12, one item with ID 78, one weapon with ID 3,
# two armors with ID 45. There is a maximum number of six components.
# If you want to make a recipe consisting of smaller number of
# components just fill the remaining fields with 'z'.
# The last ithem in the array is the recipe result. The first character
# works just like before, then there's a dash required, followed by ID
# of an item.
#
# To enter the crafting scene call a script like this:
# $scene = Scene_Craft.new
#
# During the crafting the order of items in the component window
# is not important - they are sorted within the script.
#
#
#
# License:
#
# You are free to use this script in your non-commercial project.
# You can redistribute this script (free of charge) only if you provide
# information about its original author.
# If you want to use this script in a commercial project please contact me
# via [url=http://www.rmxp.pl]http://www.rmxp.pl[/url] or [url=http://www.arpgmaker.com]http://www.arpgmaker.com[/url] private message system.
#==============================================================================
RECIPES = [
["i5", "i39", "i41", "z", "z", "z", "w-1"],
["w5", "w23", "w14", "i5", "a5", "z", "w-15"],
["a5", "a5", "z", "z", "z", "z", "a-8"]
]
#------------------------------------------------------------------------------
class Window_Craft_Components < Window_Selectable
attr_accessor :data
def initialize
super(0, 64, 320, 224)
self.contents = Bitmap.new(width - 32, height - 32)
self.index = 0
self.active = true
@data = [nil, nil, nil, nil, nil, nil]
@item_max = 6
refresh
end
def item
return @data[self.index]
end
def refresh
self.contents.clear
for i in 0..5
x = 0
y = i * 32
if @data[i] != nil
item = @data[i]
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(4 + x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 160, 32, item.name, 0)
else
self.contents.font.color = disabled_color
self.contents.draw_text(4 + x, y, 160, 32, "EMPTY", 0)
end
end
end
def update_cursor_rect
self.cursor_rect.set(0, self.index * 32, 288, 32)
end
def nullify
@data = [nil, nil, nil, nil, nil, nil]
end
def transmutation
temp = []
for i in 0..5
if @data[i] == nil
temp << "0"
else
case @data[i]
when RPG::Item
temp << "i" + @data[i].id
when RPG::Weapon
temp << "w" + @data[i].id
when RPG::Armor
temp << "a" + @data[i].id
end
end
end
temp = temp.sort
return temp
end
end
#------------------------------------------------------------------------------
class Window_Craft_Result < Window_Base
attr_accessor :item
def initialize
super(320,64,320,224)
self.contents = Bitmap.new(width - 32, height - 32)
@item = nil
@item_code = ""
refresh
end
def refresh
self.contents.clear
if @item == nil
self.contents.font.color = normal_color
self.contents.draw_text(4,0,288,32, "Select ingredients.", 0)
else
bitmap = RPG::Cache.icon(@item.icon_name)
self.contents.font.color = text_color(3)
self.contents.draw_text(4,0,288,32, "Spectacular success!", 0)
self.contents.blt(4, 65, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(32, 65, 288, 32, @item.name, 0)
self.contents.font.color = disabled_color
self.contents.draw_text(4,128,288,32, "Press the 'Z' button to finalize", 0)
self.contents.draw_text(4,160,288,32, "the crafting process!", 0)
end
end
def make_item(text="")
@item_code = text
if @item_code.include?("-")
temp = @item_code.split("-")
if text.include?("a")
@item = $data_armors[temp[1].to_i]
elsif text.include?("i")
@item = $data_items[temp[1].to_i]
elsif text.include?("w")
@item = $data_weapons[temp[1].to_i]
end
refresh
end
end
def nullify
@item = nil
refresh
end
end
#------------------------------------------------------------------------------
class Window_Craft_Item < Window_Selectable
def initialize
super(0, 288, 640, 192)
@column_max = 2
refresh
self.active = false
self.index = -1
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
@data.push(nil)
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max-1
draw_item(i)
end
end
def draw_item(index)
item = @data[index]
x = 4 + index % @column_max * 320
y = index / @column_max * 32
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
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, number.to_s, 2)
end
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
x = index % @column_max * 320
y = index / @column_max * 32 - self.oy
self.cursor_rect.set(x, y, 288, 32)
end
end
#------------------------------------------------------------------------------
class Scene_Craft
def main
@components = Window_Craft_Components.new
@result = Window_Craft_Result.new
@item_window = Window_Craft_Item.new
@help_window = Window_Help.new
@help_window.set_text("Item Crafting System", 1)
Graphics.transition
loop do
Input.update
Graphics.update
update
if $scene != self
break
end
end
Graphics.freeze
@components.dispose
@result.dispose
@item_window.dispose
@help_window.dispose
end
def update
@item_window.update
@components.update
if @components.active
update_comp
return
end
if @item_window.active
update_item
return
end
end
def update_comp
if Input.trigger?(Input::A)
rock_baby
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@components.active = false
@item_window.active = true
@item_window.index = 0
end
if Input.trigger?(Input::B)
for i in 0..5
item = @components.data[i]
if item != nil
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
end
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
end
end
def update_item
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
component = @components.data[@components.index]
if component != nil
case component
when RPG::Item
$game_party.gain_item(component.id, 1)
when RPG::Weapon
$game_party.gain_weapon(component.id, 1)
when RPG::Armor
$game_party.gain_armor(component.id, 1)
end
end
item = @item_window.item
@components.data[@components.index] = item
case item
when RPG::Item
$game_party.lose_item(item.id, 1)
when RPG::Weapon
$game_party.lose_weapon(item.id, 1)
when RPG::Armor
$game_party.lose_armor(item.id, 1)
end
@item_window.refresh
@components.refresh
check_recipes
@item_window.active = false
@item_window.index = -1
@components.active = true
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@item_window.active = false
@item_window.index = -1
@components.active = true
end
end
def check_recipes
things_in_the_pot = []
for i in 0..5
case @components.data[i]
when nil
things_in_the_pot << "z"
when RPG::Item
things_in_the_pot << "i#{@components.data[i].id}"
when RPG::Weapon
things_in_the_pot << "w#{@components.data[i].id}"
when RPG::Armor
things_in_the_pot << "a#{@components.data[i].id}"
end
end
things_in_the_pot = things_in_the_pot.sort
for j in 0...RECIPES.size
temp = RECIPES[j].dup
temp.pop
temp = temp.sort
if things_in_the_pot == temp
@result.make_item(RECIPES[j][6])
return
else
@result.nullify
end
end
end
def rock_baby
case @result.item
when nil
$game_system.se_play($data_system.buzzer_se)
when RPG::Item
$game_party.gain_item(@result.item.id, 1)
finalize_crafting
when RPG::Weapon
$game_party.gain_weapon(@result.item.id, 1)
finalize_crafting
when RPG::Armor
$game_party.gain_armor(@result.item.id, 1)
finalize_crafting
end
end
def finalize_crafting
$game_system.se_play($data_system.save_se)
@components.nullify
@components.refresh
@item_window.refresh
@result.nullify
end
end
Instructions
Copy this tab and paste it above 'Main' in your project.
In the script you'll find an array called RECIPES. New recipes are added with new arrays like the following:
['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
i stands for items, w for weapons and a for armors.
Acording to this recipe - to make an item of ID 99 you need one item with ID 12, one item with ID 78, one weapon with ID 3, two armors with ID 45. There is a maximum number of six components. If you want to make a recipe consisting of smaller number of components just fill the remaining fields with 'z'. The last ithem in the array is the recipe result. The first character works just like before, then there's a dash required, followed by ID of an item.
To enter the crafting scene call a script like this: $scene = Scene_Craft.new
During the crafting the order of items in the component window is not important - they are sorted within the script.
Compatibility
The system is compatible with default RMXP system. It doesn't override any methods, so it's probably compatible with lots of other things.
Credits and Thanks
arev of rmxp.pl :]
Terms and Conditions
You are free to use this script in your non-commercial project. You can redistribute this script (free of charge) only if you provide information about its original author. If you want to use this script in a commercial project please contact me via http://www.rmxp.pl or http://www.arpgmaker.com private message system.