Sistema de Criação de Itens
por Deke
Scripts RGSS, Resources, Tutorials and Translations by Atoa is licensed under a
Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
Permissions beyond the scope of this license may be available at Santuário RPG Maker
Introdução por Deke
Scripts RGSS, Resources, Tutorials and Translations by Atoa is licensed under a
Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
Permissions beyond the scope of this license may be available at Santuário RPG Maker
Este script permite que você crie um sistema de criação de itens.
Para isto você deve descobrir as receitas de cada item e juntar o material necessário.
Características
• Adiciona sistema de criação de itens
• Permite que você personaliza as "Receitas" para se criar cada item
Screenshots
Como usar
O script foi divido em 2 para facilitar o entendimento e configuração
Para instalá-lo, cole os dois scripts acima do main
As configurações estão no segundo Script.
Para abrir a tela de criação use o comando Chama Script e adicione a linha
$scene = Scene_Craft.new
Apenas as receitas conhecidas pelo personagem estarão disponíveis.
Para configurar e criar suas próprias receitas você deve ir no script " Sistema de Criação - Receitas"
As receitas prara novos itens devem ser adicionadas no método "get_recipe_list".
Elas devem seguir o padrão desse exemplo:
- Código:
ingredients = [27,28,29]
ingredient_types = [0,0,0]
quantities = [1,1,1]
result = 26
result_type = 0
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
Onde
- Código:
ingredients = []
- Array que contém as IDs dos itens que servirão de ingredientes, separe cada ID com vígula
[code]ingredient_types = [][;code]
- Array que contém os tipos dos itens que servirão de ingredientes.
0 = item
1 = armadura
2 = arma
[code]quantities = [][/code]
- Array da quantidade de cada ingrediente.
OBSERVAÇÃO IMPORTANTE:
Os
valores dessas 3 Arrays estão ligados entre si. Se você colocar 4
valores na array "ingredients = []" as outras deverão ter a mesma
quantidade de valores.
Ex.:
Código: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]ingredients = [5,12,21,9]
ingredient_types = [0,1,0,2]
quantities = [4,1,1,3]
Isso significa o seguinte:
- Que o 1º material é o item (ingredient_types = 0) de ID 5, e que você precisa de 4 unidades dele.
- Que o 2º material é a armadura (ingredient_types = 1) de ID 12, e que você precisa de 1 unidades dela.
- Que o 3º material é o item (ingredient_types = 0) de ID 21, e que você precisa de 1 unidades dela.
- Que o 4º material é a arma (ingredient_types = 2) de ID 9, e que você precisa de 3 unidades dela.
Os outros dois valores dizem respeito ao resultado.
Código: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]result = X- Onde X = ID do item que será o resultado da criação
Código: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]result_type = Y- Onde Y = o tipo do item criado
0 = item
1 = armadura
2 = arma
Para que o personagem aprenda uma nova receita, use o comando Chamar Script
e adicione nele esta linha:
Código: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]$game_party.learn_recipe([X,Y])Onde:
X = result
Y = result_type
Demo
Sistema de Criação.rar
Script
Esse script foi divido em 2 para facilitar o entendimento e configuração
Sistema de Criação
[code]=begin
#==============================================================================
# ? Sistema de Criação de Itens
# por Deke
# tradução e explicação por Atoa
#==============================================================================
Este script permite que você crie um sistema de criação de itens.
Para isto você deve descobrir as receitas de cada item e juntar
o material necessário.
Basta colar o script acima do main.
Para abrir a tela de criação use o comando Chama Script e adicione a linha
$scene = Scene_Craft.new
Apenas as receitas conhecidas pelo personagem estarão disponíveis.
Para mais detalhes sobre as receitas, veja o script
"Sistema de Criação - Receitas"
=end
#==============================================================================
# ? Game_Party
#==============================================================================
class Game_Party
#----------------------------------------------------------------------
attr_accessor :recipes
#----------------------------------------------------------------------
alias crafting_party_initialize initialize
#----------------------------------------------------------------------
def initialize
crafting_party_initialize
@recipes=[]
end
#----------------------------------------------------------------------
def know?(recipe, version = 1)
unless recipe.is_a?(Game_Recipe)
recipe = get_recipe_from_master_list(recipe, version)
end
return $game_party.recipes.include?(recipe)
end
#----------------------------------------------------------------------
def learn_recipe(recipe , version = 1)
unless recipe.is_a?(Game_Recipe)
recipe = get_recipe_from_master_list(recipe, version)
end
if recipe.is_a?(Game_Recipe)
unless know?(recipe)
@recipes.push(recipe)
end
end
end
#----------------------------------------------------------------------
def forget_recipe(recipe , version = 1)
if !recipe.is_a?(Game_Recipe)
recipe = get_recipe_from_master_list(recipe, version)
end
if recipe.is_a?(Game_Recipe)
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
if recipe == @recipes
index = i
break
end
end
if index != nil
@recipes.delete(@recipes[index])
end
end
end
#----------------------------------------------------------------------
def get_recipe_from_master_list(item, version)
index = nil
for i in 0...$game_temp.recipe_list.size
if item[0] == $game_temp.recipe_list[i].result and item[1] ==$game_temp.recipe_list[i].result_type
version -= 1
if version == 0
index = i
break
end
end
end
if index.is_a?(Integer)
return ($game_temp.recipe_list[index])
else
return false
end
end
end
#==============================================================================
# ? Game_Recipe
#==============================================================================
class Game_Recipe
#----------------------------------------------------------------------
attr_reader :ingredients
attr_reader :quantities
attr_reader :result
attr_reader :result_type
attr_reader :ingredient_types
#----------------------------------------------------------------------
def initialize( ingredients, ingredient_types, quantities, result, result_type)
@ingredients = ingredients
@ingredient_types = ingredient_types
@quantities = quantities
@result = result
@result_type = result_type
end
#----------------------------------------------------------------------
def name
case @result_type
when 0
name = $data_items[@result].name
when 1
name = $data_armors[@result].name
when 2
name = $data_weapons[@result].name
end
return name
end
#----------------------------------------------------------------------
def have
have_all = true
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
case @ingredient_types[i]
when 0
if $game_party.item_number(@ingredients[i]) < @quantities[i]
have_all=false
end
when 1
if $game_party.armor_number(@ingredients[i]) < @quantities[i]
have_all=false
end
when 2
if $game_party.weapon_number(@ingredients[i]) < @quantities[i]
have_all=false
end
end
end
return have_all
end
#----------------------------------------------------------------------
def decrement
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
case @ingredient_types[i]
when 0
$game_party.lose_item(@ingredients[i], @quantities[i])
when 1
$game_party.lose_armor(@ingredients[i], @quantities[i])
when 2
$game_party.lose_weapon(@ingredients[i], @quantities[i])
end
end
end
#----------------------------------------------------------------------
def make
if have
case @result_type
when 0
$game_party.gain_item(@result, 1)
when 1
$game_party.gain_armor(@result, 1)
when 2
$game_party.gain_weapon(@result, 1)
end
decrement
end
end
#----------------------------------------------------------------------
def == (recipe)
if recipe.is_a?(Game_Recipe)
equal = true
if recipe.ingredients != self.ingredients
equal = false
end
if recipe.ingredient_types != self.ingredient_types
equal = false
end
if recipe.quantities != self.quantities
equal = false
end
if recipe.result != self.result
equal=false
end
if recipe.result_type != self.result_type
equal = false
end
else
equal = false
end
return equal
end
end
#==============================================================================
# ? Window_Craft
#==============================================================================
class Window_Craft < Window_Selectable
#--------------------------------------------------------------------------
def initialize
super(0, 64, 240, 416)
@column_max = 1
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def recipe
return @data[self.index]
end
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...$game_party.recipes.size
@data.push($game_party.recipes[i])
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
self.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
def draw_item(index)
recipe = @data[index]
self.contents.font.color = recipe.have ? normal_color : disabled_color
x = 16
y = index * 32
self.contents.draw_text(x , y, self.width-32, 32, recipe.name, 0)
end
#--------------------------------------------------------------------------
def update_help
current_recipe = recipe
if current_recipe.is_a?(Game_Recipe)
case current_recipe.result_type
when 0
description = $data_items[current_recipe.result].description
when 1
description = $data_armors[current_recipe.result].description
when 2
description = $data_weapons[current_recipe.result].description
end
else
description = ""
end
@help_window.set_text(description)
@help_window.update
end
end
#==============================================================================
# ? Window_CraftResult
#==============================================================================
class Window_CraftResult < Window_Base
#--------------------------------------------------------------------------
def initialize
super(240, 64, 400, 184)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
self.contents.font.size = 20
@result = nil
@type = nil
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
case @type
when 0
item = $data_items[@result]
if item.recover_hp_rate > item.recover_hp
hp_string = "% de Cura de HP:"
hp_stat = item.recover_hp_rate
else
hp_string = "Cura de HP:"
hp_stat = item.recover_hp
end
if item.recover_sp_rate > item.recover_sp
sp_string = "% de Cura de SP:"
sp_stat = item.recover_sp_rate
else
sp_string = "Cura de SP:"
sp_stat = item.recover_sp
end
@strings = [hp_string, sp_string]
@stats = [hp_stat, sp_stat, $game_party.item_number(@result)]
@bitmap = RPG::Cache.icon(item.icon_name)
text = item.name
when 1
item = $data_armors[@result]
@strings = [ $data_system.words.pdef + ":", $data_system.words.mdef + ":",
"Evasão:", $data_system.words.str + ":", $data_system.words.dex + ":",
$data_system.words.agi + ":", $data_system.words.int + ":"]
@stats = [item.pdef, item.mdef, item.eva, item.str_plus, item.dex_plus,
item.agi_plus, item.int_plus, $game_party.armor_number(@result) ]
@bitmap = RPG::Cache.icon(item.icon_name)
text = item.name
when 2
item = $data_weapons[@result]
@strings =[ $data_system.words.atk + ":", $data_system.words.pdef + ":", $data_system.words.mdef + ":",
$data_system.words.str + ":", $data_system.words.dex + ":",
$data_system.words.agi + ":", $data_system.words.int + ":"]
@stats = [item.atk, item.pdef, item.mdef, item.str_plus, item.dex_plus,
item.agi_plus, item.int_plus, $game_party.weapon_number(@result) ]
@bitmap = RPG::Cache.icon(item.icon_name)
text = item.name
end
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
x = i%2 * 184
y = i /2 *28 +32
self.contents.font.color = normal_color
self.contents.draw_text(x,y,100, 28,@strings[i])
self.contents.font.color = system_color
self.contents.draw_text(x + 110, y, 45, 28, @stats[i].to_s)
end
self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, 24, 24), 255)
self.contents.font.color= normal_color
self.contents.draw_text(184, 0, 300, 28, "Quantidade:")
self.contents.font.color = system_color
count = @stats[@stats.size - 1].to_s
self.contents.draw_text(294, 0, 45, 28, count )
self.contents.draw_text(32, 0, 300, 28, text)
end
#----------------------------------------------------------------------
def set_result(result , type)
@result = result
@type = type
refresh
end
end
#==============================================================================
# ? Window_CraftIngredients
#==============================================================================
class Window_CraftIngredients < Window_Base
#--------------------------------------------------------------------------
def initialize
super(240, 248, 400, 232)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
self.contents.font.size = 20
@ingredients = []
@types = []
@quantities = []
@item = nil
@count = 0
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
case @types[i]
when 0
@item = $data_items[@ingredients[i]]
@count = $game_party.item_number(@ingredients[i])
when 1
@item = $data_armors[@ingredients[i]]
@count = $game_party.armor_number(@ingredients[i])
when 2
@item = $data_weapons[@ingredients[i]]
@count = $game_party.weapon_number(@ingredients[i])
end
y = i *26
self.contents.blt(0, y, RPG::Cache.icon(@item.icon_name), Rect.new(0, 0, 24, 24), 255)
self.contents.font.color = @count >= @quantities[i] ? normal_color : disabled_color
self.contents.draw_text(30, y, 280, 28, @item.name)
self.contents.draw_text(296, y, 45, 28, @quantities[i].to_s)
self.contents.font.color = normal_color
self.contents.draw_text(274, y, 45, 28, "/" )
self.contents.font.color = system_color
self.contents.draw_text(208, y, 46, 28, @count.to_s, 2)
end
end
#--------------------------------------------------------------------------
def set_ingredients(ingredients , types, quantities)
@ingredients = ingredients
@types = types
@quantities = quantities
refresh
end
end
#==============================================================================
# ? Scene_Craft
#==============================================================================
class Scene_Craft
#--------------------------------------------------------------------------
def initialize(craft_index=0, return_scene = "menu")
@craft_index=craft_index
@return_scene = return_scene
end
#--------------------------------------------------------------------------
def main
@craft_window = Window_Craft.new
@craft_window.index=@craft_index
@confirm_window = Window_Base.new(120, 188, 400, 64)
@confirm_window.contents = Bitmap.new(368, 32)
@confirm_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
@confirm_window.contents.font.size = $fontsize.is_a?(Integer) ? $fontsize : $defaultfontsize
@help_window = Window_Help.new
@craft_window.help_window = @help_window
@result_window=Window_CraftResult.new
@ingredients_window=Window_CraftIngredients.new
@yes_no_window = Window_Command.new(100, ["Sim", "Não"])
@confirm_window.visible = false
@confirm_window.z = 1500
@yes_no_window.visible = false
@yes_no_window.active = false
@yes_no_window.index = 1
@yes_no_window.x = 270
@yes_no_window.y = 252
@yes_no_window.z = 1500
@label_window = Window_Base.new(440,200,200,52)
@label_window.contents=Bitmap.new(@label_window.width - 32,@label_window.height - 32)
@label_window.contents.font.size=20
@label_window.contents.font.color = @label_window.normal_color
@label_window.contents.font.name = $fontface.is_a?(String) ? $fontface : $defaultfonttype
@label_window.contents.draw_text(0, 0, @label_window.contents.width, 20, "Possuido / Necessário", 1)
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@craft_window.dispose
@result_window.dispose
@ingredients_window.dispose
@confirm_window.dispose
@yes_no_window.dispose
@label_window.dispose
end
#--------------------------------------------------------------------------
def update
@craft_window.update
@ingredients_window.update
if $game_party.recipes.size > 0
@result_window.set_result(@craft_window.recipe.result, @craft_window.recipe.result_type)
@ingredients_window.set_ingredients(@craft_window.recipe.ingredients,
@craft_window.recipe.ingredient_types,
@craft_window.recipe.quantities)
end
if @craft_window.active
update_craft
return
end
if @yes_no_window.active
confirm_update
return
end
end
#--------------------------------------------------------------------------
def update_craft
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C) and $game_party.recipes.size != 0
@recipe = @craft_window.recipe
if @recipe.have
@yes_no_window.active = true
@craft_window.active = false
else
$game_system.se_play($data_system.buzzer_se)
return
end
end
end
#--------------------------------------------------------------------------
def confirm_update
@craft_index = @craft_window.index
@confirm_window.visible = true
@confirm_window.z = 1500
@yes_no_window.visible = true
@yes_no_window.active = true
@yes_no_window.z = 1500
@yes_no_window.update
string = "Criar " + @recipe.name + "?"
cw = @confirm_window.contents.text_size(string).width
center = @confirm_window.contents.width/2 - cw /2
unless @drawn
@confirm_window.contents.draw_text(center, 0, cw, 30, string)
@drawn = true
end
if Input.trigger?(Input::C)
if @yes_no_window.index == 0
$game_system.se_play($data_system.decision_se)
@recipe.make
$game_system.se_play($data_system.save_se)
$scene=Scene_Craft.new(@craft_index)
else
$game_system.se_play($data_system.cancel_se)
$scene=Scene_Craft.new(@craft_index)
end
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene=Scene_Craft.new(@craft_index)
end
end
end [/code]
Sistema de Criação - Receitas
[code]=begin
#==============================================================================
# ? Sistema de Criação de Itens - Receitas
# por Deke
# tradução e explicação por Atoa
#==============================================================================
Este é o espaço reservado para configuração das receitas.
As receitas prara novos itens devem ser adicionadas
no método "get_recipe_list".
Elas devem seguir o padrão desse exemplo:
ingredients = [27,28,29]
ingredient_types = [0,0,0]
quantities = [1,1,1]
result = 26
result_type = 0
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
Onde
ingredients = []
- Array que contém as IDs dos itens que servirão de ingredientes, separe cada ID
com vígula
ingredient_types = []
- Array que contém os tipos dos itens que servirão de ingredientes.
0 = item
1 = armadura
2 = arma
quantities = []
- Array da quantidade de cada ingrediente.
OBSERVAÇÃO IMPORTANTE:
Os valores dessas 3 Arrays estão ligados entre si. Se você colocar 4 valores
na array "ingredients = []" as outras deverão ter a mesma quantidade de valores.
Ex.:
ingredients = [5,12,21,9]
ingredient_types = [0,1,0,2]
quantities = [4,1,1,3]
Isso significa o seguinte:
- Que o 1º material é o item (ingredient_types = 0) de ID 5, e que você
precisa de 4 unidades dele.
- Que o 2º material é a armadura (ingredient_types = 1) de ID 12, e que você
precisa de 1 unidades dela.
- Que o 3º material é o item (ingredient_types = 0) de ID 21, e que você
precisa de 1 unidades dela.
- Que o 4º material é a arma (ingredient_types = 2) de ID 9, e que você
precisa de 3 unidades dela.
Os outros dois valores dizem respeito ao resultado.
result = X
- Onde X = ID do item que será o resultado da criação
result_type = Y
- Onde Y = o tipo do item criado
0 = item
1 = armadura
2 = arma
Para que o personagem aprenda uma nova receita, use o comando Chamar Script
e adicione nele esta linha:
$game_party.learn_recipe([X,Y])
Onde:
X = result
Y = result_type
=end
#==============================================================================
# ? Game_Temp
#==============================================================================
class Game_Temp
attr_reader :recipe_list
#--------------------------------------------------------------------------
alias crafting_temp_initialize initialize
#--------------------------------------------------------------------------
def initialize
crafting_temp_initialize
@recipe_list=[]
get_recipe_list
end
#--------------------------------------------------------------------------
# ? ? ? ? Adicione aqui as novas receitas ? ? ? ?
#--------------------------------------------------------------------------
def get_recipe_list
#Receita 1 - Espada de Mythril
ingredients = [20,21,3]
ingredient_types = [0,0,2]
quantities = [1,5,1]
result = 4
result_type = 2
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
#Receita 2 - Armadura de Mythril
ingredients = [20,22,15]
ingredient_types = [0,0,1]
quantities = [1,5,1]
result = 16
result_type = 1
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
#Receita 3 - Semente da Vida
ingredients = [3,13]
ingredient_types = [0,0]
quantities = [10,1]
result = 14
result_type = 0
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
#Receita 4 - Semente Mágica
ingredients = [6,13]
ingredient_types = [0,0]
quantities = [10,1]
result = 15
result_type = 0
@recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
# Você pode adicionar quantas receitas você quiser, basta
# adicionar mais linhas seguindo este padrão:
#--------------------------------------------------------------------------
# ingredients = []
# ingredient_types = []
# quantities = []
# result =
# result_type =
# @recipe_list.push(Game_Recipe.new(ingredients,ingredient_types,quantities,result,result_type))
end
end
[/code]
Perguntas Frequentes
Nenhuma Pergunta Frequente
Créditos e Agradecimentos
•[i]Feito por Deke
•Tradução e Explicação por Atoa