Life RPG Maker 2.0
Bem vindo a LRM, forum de ajuda Maker
Registre-se em nosso forum e aproveite Very Happy
esperamos que você seja ajudado e esperamos que nos ajude Very Happy
Life RPG Maker 2.0

2ª versão do forum life rpg maker

Os membros mais ativos do mês

Últimos assuntos
» Kingdon 1.6
Ter Jun 09, 2015 3:02 pm por MasterKill

» Tempo dinâmico e Hora do Sistema
Seg Dez 09, 2013 5:42 pm por jonathas

» Sistema de Natação
Sab Dez 07, 2013 5:14 pm por jonathas

» Classificar Inventario
Sab Dez 07, 2013 12:07 pm por Samuka_Adm

» VOLTEI ALELUIA :D
Sab Dez 07, 2013 10:35 am por Samuka_Adm

» Netplay Master v4.0.7
Qua Jun 26, 2013 1:32 pm por xdario

» The League Of War [Season 1]
Sex Jan 18, 2013 6:02 pm por Warrior

» Meu primeiro desenho que posto :D
Qua Jan 09, 2013 1:37 pm por PedroMatoso

» Window Configurações
Qua Jan 09, 2013 1:36 pm por PedroMatoso

Parceiros
Fórum grátis

Fórum grátis


Mundo RPG Maker
MMORPG BRASIL

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

Sistema de Crafting

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

1 Sistema de Crafting em Qua Nov 21, 2012 9:37 pm

leandroteix

avatar
Moderador G
Moderador G
Para usá-lo, basta adicionar o script acima do Main.
A forma como o script funciona é que contém um módulo (no topo do script) em que você declare cada receita, e criar um item no banco de dados para a receita. O formato para cada receita é a seguinte:
Código:
RECIPE[index] = [recipe_id, [product_type, product_id], [material_1_type, material_1_id, material_1_qty], ...]
recipe_id - este é o número de ID em "itens" guia de banco de dados
product_type - este é o número de ID correspondente em "tipo" guia de banco de dados para produto acabado.
material_1_type - primeira necessitavam de um material "tipo"; 0 = item; 1 = arma =, 2 = armadura.
material_1_id - este é o número de ID correspondente em "tipo" guia de banco de dados para material de primeira.
material_1_qty - a quantidade necessária de material em primeiro lugar a criação de produtos.

Este script suporta qualquer número de materiais necessários para cada receita, simplesmente
escrever em materiais extras, seguindo o mesmo formato EX.:
Código:
RECIPE[4] = [37, [2, 32], [2, 26, 1], [2, 30, 1], [2, 29, 1], [0, 14, 1]]

o primeiro elemento a ser item_id banco de dados correspondente, o segundo elemento sendo os dados de produtos acabados, e cada um dos elementos a seguir corresponde com os materiais necessários para criar tal receita.

Eu também incluiu uma opção RESIZE_MENU no módulo, quando true os menus de crafting irá redimensionar-se de acordo para ajustar o número de itens e desenhar o mapa atrás deles (isso funcionaria bem se você já está usando um menu que exibe o mapa como fundo )

Screenshots:
Spoiler:



criação Prompt

Script:
Código:
=begin
-----------------------------------------------------------------------------
*** RECIPE CONFIGURATION ****************************************************
-----------------------------------------------------------------------------
INSTRUÇÕES:
Este módulo contém as variáveis ??constantes usados ??para cada receita
formato:
RECIPE[index] = [recipe_id, [product_type, product_id],
                                [material_1_type, material_1_id, material_1_qty], ...]
recipe_id          : este é o número de ID em "itens" guia de banco de dados
product_type    : este é o número de ID correspondente em "tipo" guia de banco de dados para produto acabado.
                                :  0 = item; 1 = arma =, 2 = armadura.
product_id        : este é o número de ID correspondente em "tipo" guia de banco de dados
                                : para o produto acabado
material_1_type : primeira necessitavam de um material "tipo"
                                : 0 = item; 1 = arma =, 2 = armadura.
material_1_id  : este é o número de ID correspondente em "tipo" guia de banco de dados
                                : por primeiro material
material_1_qty  : a quantidade necessária de material em primeiro lugar a criação de produtos
*NOTA:*
Este script suporta qualquer número de materiais necessários para cada receita, simplesmente
escrever em materiais extras, seguindo o mesmo formato
EX. RECIPE[0] = [1, [0, 25], [0, 15, 5], [0, 12, 2], [0, 5, 1]]
essa receita seria encontrado como o primeiro item no banco de dados, criaria
item # 25 na base de dados de itens, e requer 5 item#15, 2 item#12 and 1 item#5
=end
module Crafting
  # Estilo de menu, true - desenhar janelas mapa e redimensionar para caber o conteúdo
  # false - desenhar janelas completos
  RESIZE_MENU = false
  # Criar matriz para armazenar dados de receita
  RECIPE = []
  # Criar receitas abaixo
  # High Potion
  RECIPE[0] = [33, [0, 2], [0, 1, 2], [0, 17, 1]]                         
  # Full Potion
  RECIPE[1] = [34, [0, 3], [0, 2, 1], [0, 28, 1]]                         
  # High Perfume
  RECIPE[2] = [35, [0, 5], [0, 4, 2], [0, 18, 1]]                         
  # Iron Sword
  RECIPE[3] = [36, [1, 2], [1, 1, 1], [0, 13, 5], [0, 23, 5]]
  # Ring of Water
  RECIPE[4] = [37, [2, 32], [2, 26, 1], [2, 30, 1], [2, 29, 1], [0, 14, 1]]
end
#============================================================================
# ** Window_Prompt
#----------------------------------------------------------------------------
#  Esta janela pergunta ao usuário se ele gostaria de criar o item
#============================================================================
class Window_Prompt < Window_Command
  #--------------------------------------------------------------------------
  # * Object Initialization
  #      item  : item que será criado
  #--------------------------------------------------------------------------
  def initialize
        super(200, ['Create', 'Cancel'])
        self.x += 16
        self.y += 80
        self.z += 100
  end
end
#============================================================================
# ** Window_Materials
#----------------------------------------------------------------------------
#  Esta janela exibe materiais necessários para sintetizar receita
#============================================================================
class Window_Materials < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(recipe)
        super(320, 64, 320, 416)
        refresh(recipe)
        self.index = -1
        self.active = false
  end
  #--------------------------------------------------------------------------
  # * Current Item
  #--------------------------------------------------------------------------
  def item
        return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh Contents
  #--------------------------------------------------------------------------
  def refresh(recipe)
        @recipe = recipe
        if self.contents != nil
          self.contents.clear
          self.contents = nil
        end
        # Se há receitas são possuídos não desenhar item
        @data = []
        if @recipe == nil
          self.height = 96 if Crafting::RESIZE_MENU
          self.contents = Bitmap.new(self.width - 32, self.height - 32)
          # Memorize o tamanho da fonte
          font_size = self.contents.font.size
          # Desenhe cabeçalho
          self.contents.font.color = system_color
          self.contents.draw_text(4, 0, 212, 32, 'Ingredients')
          self.contents.font.size = 14
          self.contents.draw_text(204, 0, 24, 32, 'need', 2)
          self.contents.draw_text(252, 0, 24, 32, 'held', 2)
          # Restaurar tamanho da fonte
          self.contents.font.size = font_size
          self.contents.draw_text(228, 0, 16, 32, '/', 1)
          return
        end
        @qty_req = []
        # Adicionar itens necessários
        for i in [Você precisa estar registrado e conectado para ver este link.]
          case @recipe[i][0]
          when 0 # Item
                @data.push($data_items[@recipe[i][1]])
          when 1 # Weapon
                @data.push($data_weapons[@recipe[i][1]])
          when 2 # Armor
                @data.push($data_armors[@recipe[i][1]])
          end
          @qty_req.push(@recipe[i][2])
        end
        @item_max = @data.size
        # Redimensionar lista de ingredientes
        if Crafting::RESIZE_MENU
          self.height = @item_max * 32 + 64
          self.height = 416 if self.height > 416
        end
        # Desenhe itens necessários
        self.contents = Bitmap.new(self.width - 32, @item_max * 32 + 32)
        for i in 0...@item_max
          draw_item(i)
        end
        # Memorize o tamanho da fonte
        font_size = self.contents.font.size
        # Desenhe cabeçalho
        self.contents.font.color = system_color
        self.contents.draw_text(4, 0, 212, 32, 'Ingredients')
        self.contents.font.size = 14
        self.contents.draw_text(204, 0, 24, 32, 'need', 2)
        self.contents.draw_text(252, 0, 24, 32, 'held', 2)
        # Restaurar tamanho da fonte
        self.contents.font.size = font_size
        self.contents.draw_text(228, 0, 16, 32, '/', 1)
  end
  #-------------------------------------------------------------------------
  # * Draw Ingredients
  #-------------------------------------------------------------------------
  def draw_item(index)
        item = @data[index]
        x = 4
        y = index * 32 + 32
        # obter o número de pontos que
        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
        self.contents.font.color = number >= @qty_req[index] ?
                                                          normal_color : disabled_color
        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 + 200, y, 24, 32, @qty_req[index].to_s, 2)
        self.contents.draw_text(x + 224, y, 16, 32, '/', 1)
        self.contents.draw_text(x + 248, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rectangle
  #--------------------------------------------------------------------------
  def update_cursor_rect
        # Se a posição do cursor é inferior a 0
        if @index < 0
          self.cursor_rect.empty
          return
        end
        # Obter linha atual
        row = @index
        # Se a linha atual é antes linha superior
        if row < self.top_row
          # Rolar para que a carreira atual torna-se linha superior
          self.top_row = row
        end
        # Se a linha atual é mais para fazer do que fila de trás
        if row > self.top_row + (self.page_row_max - 1)
          # Scroll para que a carreira atual torna-se fileira de trás
          self.top_row = row - (self.page_row_max - 1)
        end
        # Calcular largura do cursor
        cursor_width = self.width - 32
        # Calcular as coordenadas do cursor
        x = 0
        y = @index * 32 - self.oy + 32
        # Atualize retângulo cursor
        self.cursor_rect.set(x, y, cursor_width, 32)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
        @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end


#============================================================================
# ** Window_Recipe
#----------------------------------------------------------------------------
#  Esta janela apresenta receitas atualmente em posse
#============================================================================
class Window_Recipe < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
        super(0, 64, 320, 416)
        refresh
        self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Current Recipe
  #--------------------------------------------------------------------------
  def recipe
        return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh Contents
  #--------------------------------------------------------------------------
  def refresh
        if self.contents != nil
          self.contents.clear
          self.contents = nil
        end
        @data = []
        # Adicionar Receitas em posse
        for i in 0...Crafting::RECIPE.size
          recipe_id = Crafting::RECIPE[i][0]
          if $game_party.item_number(recipe_id) > 0
                @data.push(Crafting::RECIPE[i])
          end
        end
        @item_max = @data.size
        # Redimensionar a janela receita
        if Crafting::RESIZE_MENU
          self.height = @data[0] == nil ? 96 : @item_max * 32 + 64
          self.height = 416 if self.height > 416
        end
        # Se Todas as receitas estão possuídos, atraí-los
        if @item_max > 0
          self.contents = Bitmap.new(width - 32, @item_max * 32 + 32)
          for i in 0...@item_max
                draw_recipes(i)
          end
        else
          self.contents = Bitmap.new(width - 32, height - 32)
        end
        # Desenhe cabeçalho
        self.contents.font.color = system_color
        self.contents.draw_text(4, 0, 268, 32, 'Recipes Held', 1)
  end
  #-------------------------------------------------------------------------
  # * Draw Recipes
  #-------------------------------------------------------------------------
  def draw_recipes(index)
        recipe = @data[index]
        x = 4
        y = index * 32 + 32
        # verificar se a receita é pode ser criado
        self.contents.font.color = recipe_can_create?(recipe) ?
                                                          normal_color : disabled_color
        rect = Rect.new(x, y, self.width - 32, 32)
        self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon($data_items[recipe[0]].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, $data_items[recipe[0]].name)
  end
  #--------------------------------------------------------------------------
  # * Receita pode ser criada
  #      recipe : matriz com os dados de receita
  #--------------------------------------------------------------------------
  def recipe_can_create?(recipe)
        return false unless recipe
        for i in 2...recipe.size
          case recipe[i][0]
          when 0 # Item
                unless $game_party.item_number(recipe[i][1]) >= recipe[i][2]
                  return false
                end
          when 1 # Weapon
                unless $game_party.weapon_number(recipe[i][1]) >= recipe[i][2]
                  return false
                end
          when 2 # Armor
                unless $game_party.armor_number(recipe[i][1]) >= recipe[i][2]
                  return false
                end
          end
        end
        return true
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rectangle
  #--------------------------------------------------------------------------
  def update_cursor_rect
        # Se a posição do cursor é inferior a 0
        if @index < 0
          self.cursor_rect.empty
          return
        end
        # Obter linha atual
        row = @index
        # Se a linha atual é antes linha superior
        if row < self.top_row
          # Rolar para que a carreira atual torna-se linha superior
          self.top_row = row
        end
        # Se a linha atual é mais para fazer do que fila de trás
        if row > self.top_row + (self.page_row_max - 1)
          # Scroll para que a carreira atual torna-se fileira de trás
          self.top_row = row - (self.page_row_max - 1)
        end
        # Calcular largura do cursor
        cursor_width = self.width - 32
        # Calcular as coordenadas do cursor
        x = 0
        y = @index * 32 - self.oy + 32
        # Atualize retângulo cursor
        self.cursor_rect.set(x, y, cursor_width, 32)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
        if self.recipe == nil
          item = nil
          @help_window.set_text('')
        else
          case self.recipe[1][0]
          when 0 # item
                item = $data_items[self.recipe[1][1]]
          when 1 # weapon
                item = $data_weapons[self.recipe[1][1]]
          when 2 # armor
                item = $data_armors[self.recipe[1][1]]
          end
          bitmap = RPG::Cache.icon(item.icon_name)
          @help_window.set_text('Creates          ' + item.name)
          @help_window.contents.blt(78, 4, bitmap, Rect.new(0, 0, 24, 24))
        end
  end
end
#============================================================================
# ** Scene_Crafting
#----------------------------------------------------------------------------
#      Esta cena lida com o menu usado para a elaboração de novos itens
#============================================================================
class Scene_Crafting
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
        # Desenhe mapa no fundo
        map = Spriteset_Map.new if Crafting::RESIZE_MENU
        # criar o Windows
        @recipe_window = Window_Recipe.new
        @index = 0
        @material_index = 0
        @material_window = Window_Materials.new(@recipe_window.recipe)
        @help_window = Window_Help.new
        # Associar janela de ajuda
        @material_window.help_window = @help_window
        @recipe_window.help_window = @help_window
        # executar transição
        Graphics.transition
        # loop principal
        loop do
          # Update Graphics
          Graphics.update
          # Update Input
          Input.update
          # Update Frame
          update
          # If scene has changed
          if $scene != self
                break
          end
        end
        # Dispose windows
        map.dispose if Crafting::RESIZE_MENU
        @recipe_window.dispose
        @material_window.dispose
        @help_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update Frame
  #--------------------------------------------------------------------------
  def update
        # Update current window
        @help_window.update
        if @recipe_window.active
          @recipe_window.update
          @material_window.refresh(@recipe_window.recipe)
          update_recipe
          return
        else
          @material_window.update
          update_material
          return
        end
  end
  #--------------------------------------------------------------------------
  # * Update Recipe Window
  #--------------------------------------------------------------------------
  def update_recipe
        # Se o botão B é pressionado
        if Input.trigger?(Input::B)
          # Jogar cancelar SE
          $game_system.se_play($data_system.cancel_se)
          # Voltar ao menu principal
          $scene = Scene_Menu.new(4)
          return
        end
        # Se o botão C for pressionado
        if Input.trigger?(Input::C)
          # obter receita
          recipe = @recipe_window.recipe
          # verificar se a receita pode ser criada
          if @recipe_window.recipe_can_create?(recipe)
                # Jogar decisão SE
                $game_system.se_play($data_system.decision_se)
                # jogador Prompt
                create_item_prompt(recipe)
                return
          else
                # Jogar campainha SE
                $game_system.se_play($data_system.buzzer_se)
          end
          return
        end
        # se o botão direito é pressionado
        if Input.trigger?(Input::RIGHT)
          # Jogue SE cursor
          $game_system.se_play($data_system.cursor_se)
          # Switch Materiais para janela
          @index = @recipe_window.index
          @recipe_window.index = -1
          @recipe_window.active = false
          @material_window.active = true
          @material_window.index = @material_index
          return
        end
  end
  #--------------------------------------------------------------------------
  # * Update Material Window
  #--------------------------------------------------------------------------
  def update_material
        # Se o botão B é pressionado
        if Input.trigger?(Input::B)
          # Play cancel SE
          $game_system.se_play($data_system.cancel_se)
          # Voltar ao menu principal
          $scene = Scene_Menu.new
          return
        end
        # se o botão esquerdo é pressionado
        if Input.trigger?(Input::LEFT)
          # Play cursor SE
          $game_system.se_play($data_system.cursor_se)
          # Switch a janela de receitas
          @material_index = @material_window.index
          @material_window.index = -1
          @material_window.active = false
          @recipe_window.index = @index
          @recipe_window.active = true
          return
        end
  end
  #--------------------------------------------------------------------------
  # * Create Item Prompt
  #--------------------------------------------------------------------------
  def create_item_prompt(recipe)
        # Criar item Prompt
        command = Window_Prompt.new
        # Desativar janela receita
        @recipe_window.active = false
        # Repetir até que a seleção é feita
        loop do
          # Update Graphics
          Graphics.update
          # Update input
          Input.update
          # Update commands
          command.update
          # Se o botão B é pressionado
          if Input.trigger?(Input::B)
                # Play cancel SE
                $game_system.se_play($data_system.cancel_se)
                # Retornar à janela receita
                break
          end
          # Se o botão C for pressionado
          if Input.trigger?(Input::C)
                case command.index
                when 0 # criar
                  # Play create SE
                  $game_system.se_play($data_system.equip_se)
                  # Adicionar item ao inventário
                  case recipe[1][0]
                  when 0 # item
                        $game_party.gain_item(recipe[1][1], 1)
                  when 1 # weapon
                        $game_party.gain_weapon(recipe[1][1], 1)
                  when 2 # armor
                        $game_party.gain_armor(recipe[1][1], 1)
                  end
                  # Remove ingredients
                  for i in 2...recipe.size
                        case recipe[i][0]
                        when 0 # item
                  # MODIFICAÇÃO BREWMEISTER para consumable/non-consumable items
                          if $data_items[recipe[i][1]].consumable  ##BREW
                                $game_party.lose_item(recipe[i][1], recipe[i][2])
                          end                                                                      ##BREW
                          # FIM DA MODIFICAÇÃO
                        when 1 # weapon
                          $game_party.lose_weapon(recipe[i][1], recipe[i][2])
                        when 2 # armor
                          $game_party.lose_armor(recipe[i][1], recipe[i][2])
                        end
                  end
                  # Refresh recipe window
                  @recipe_window.refresh
                  break
                when 1 # cancelar
                  # Play cancel SE
                  $game_system.se_play($data_system.cancel_se)
                  # Retornar à janela receita
                  break
                end
          end
        end
        command.dispose
        @recipe_window.active = true
  end
end


Créditos:
Leandro(EU) - 50% do Script
Jeff(Amigo Meu) - 50% do Script tbm =)


_________________
"Verdadeiros Heróis Morrem Sorrindo"
Ver perfil do usuário

2 Re: Sistema de Crafting em Qui Nov 22, 2012 9:27 am

Warrior

avatar
Moderador
Moderador
Topico bem feito parabéns bem estruturado gostei


+1


_________________
Ver perfil do usuário

3 Re: Sistema de Crafting em Qui Nov 22, 2012 10:20 am

bem simples, e o jeff n fes 50% do script u.u
+1 cred talves eu use

Ver perfil do usuário http://liferpgmakerv2.forumais.com

4 Re: Sistema de Crafting em Qui Nov 22, 2012 11:21 am

leandroteix

avatar
Moderador G
Moderador G
Vlw =) Oo samuka vc conhece o Jeff!?


_________________
"Verdadeiros Heróis Morrem Sorrindo"
Ver perfil do usuário

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum