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

Participe do fórum, é rápido e fácil

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
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Life RPG Maker 2.0

2ª versão do forum life rpg maker

Os membros mais ativos do mês
Nenhum usuário

Últimos assuntos
» Kingdon 1.6
Sistema de Crafting EmptyTer Jun 09, 2015 3:02 pm por MasterKill

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

» Sistema de Natação
Sistema de Crafting EmptySáb Dez 07, 2013 5:14 pm por jonathas

» Classificar Inventario
Sistema de Crafting EmptySáb Dez 07, 2013 12:07 pm por Samuka_Adm

» VOLTEI ALELUIA :D
Sistema de Crafting EmptySáb Dez 07, 2013 10:35 am por Samuka_Adm

» Netplay Master v4.0.7
Sistema de Crafting EmptyQua Jun 26, 2013 1:32 pm por xdario

» The League Of War [Season 1]
Sistema de Crafting EmptySex Jan 18, 2013 6:02 pm por Warrior

» Meu primeiro desenho que posto :D
Sistema de Crafting EmptyQua Jan 09, 2013 1:37 pm por PedroMatoso

» Window Configurações
Sistema de Crafting EmptyQua 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

3 participantes

Ir para baixo  Mensagem [Página 1 de 1]

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

leandroteix

leandroteix
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:

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 [Tens de ter uma conta e sessão iniciada para poderes visualizar 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 =)

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

Warrior

Warrior
Moderador
Moderador

Topico bem feito parabéns bem estruturado gostei


+1

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

Samuka_Adm

Samuka_Adm
Admin
Admin

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

https://liferpgmakerv2.forumeiros.com

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

leandroteix

leandroteix
Moderador G
Moderador G

Vlw =) Oo samuka vc conhece o Jeff!?

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

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