Fórum iBlue
Sistema de Criação de Itens Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Fórum iBlue
Sistema de Criação de Itens Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Somos ÚNICOS, somos o SEU fórum


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

T-Lord

1Sistema de Criação de Itens Empty Sistema de Criação de Itens Dom 13 Jan 2013 - 16:35

T-Lord
Administrador
Sistema de Criação de Itens
por Deke

Sistema de Criação de Itens 88x31

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

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

Sistema de Criação de Itens Th_Img4-7

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

http://www.zonetoony.net/

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos