outlandish
Member
Hi, I've been using this great RMXP crafting script by Arev in my game I'm working on and I'd like to use it in a commercial game but I need his permission to do so according to his license. I haven't been able to get in touch. It's a cool script and what I like about it is that you don't have to possess a recipe to make something. You simply add items into item slots and if they match up to make a new item the game will tell you. The reason I like this free-form method is that I want to use it in puzzles to allow the player the ability to combine items to make new items that will allow him to use on something to solve the puzzle.
E.g. take a long metal rod or pole and combine it with a coat hanger and you can make a pole-hook, a pole with a hook on the end. This new item you can then use on an object that's high up or that's out of reach to get it. Well, I got it working and it's really cool but does anyone know if Arev is still around so I can get permission to use his script in a commercial game or maybe even port it to Ace. I've PM'd him but haven't been able to get a hold of him. Anyway, here's the script so that you can see it for anyone who'd like to use it. Credit goes to Arev.
E.g. take a long metal rod or pole and combine it with a coat hanger and you can make a pole-hook, a pole with a hook on the end. This new item you can then use on an object that's high up or that's out of reach to get it. Well, I got it working and it's really cool but does anyone know if Arev is still around so I can get permission to use his script in a commercial game or maybe even port it to Ace. I've PM'd him but haven't been able to get a hold of him. Anyway, here's the script so that you can see it for anyone who'd like to use it. Credit goes to Arev.
Code:
#==============================================================================
# ** Item Crafting System
# version 1.00
# created by arev (rmxp.pl)
# released 28-12-2009
#==============================================================================
# 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 = [
["i1", "i1", "i2", "z", "z", "z", "i-3"],
["i3", "i3", "i3", "3", "i1", "i2", "i-5"],
]
#------------------------------------------------------------------------------
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("-")
@item = (temp[0] == "i" ? $data_items : "w" ? $data_weapons : $data_armors)[temp[1].to_i]
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[6] = nil
if things_in_the_pot.size == 6
things_in_the_pot << nil
else
things_in_the_pot[6] = nil
end
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