omnikeith

Veteran
Veteran
Joined
Jan 7, 2015
Messages
34
Reaction score
1
First Language
English
Primarily Uses
I am looking for a menu or item activated crafting system that uses a grid to place items in to craft them like minecrafts 3x3 crafting grid. it needs to be at lease 3x3 and it would be nice to have a storage system and inventory also grid based with icons and names. I have looked everywhere for this and as far as I know it doesn't exist.
 

Idril

Widdershins Games
Veteran
Joined
Dec 1, 2014
Messages
230
Reaction score
170
First Language
English
Could you provide a link to a picture of what you mean? I haven't played Minecraft so I don't really know what you're looking for.
 

omnikeith

Veteran
Veteran
Joined
Jan 7, 2015
Messages
34
Reaction score
1
First Language
English
Primarily Uses
someone made a video with the system I am looking for but didn't post the script.
 

Idril

Widdershins Games
Veteran
Joined
Dec 1, 2014
Messages
230
Reaction score
170
First Language
English
That script wouldn't work anyway, it says in the video that it's a VX script, which is RGSS2, not the RGSS3 that VXAce uses.


I can find a ton of crafting scripts but nothing that looks like this. You will probably have to have someone make it for you. Unfortunately I can't help there because it's too advanced for my scripting knowledge, but good luck :)
 

omnikeith

Veteran
Veteran
Joined
Jan 7, 2015
Messages
34
Reaction score
1
First Language
English
Primarily Uses
#==============================================================================#
#                              • CRAFTING SYSTEM •                             #
#==============================================================================#
# Autor: Sidhenidon                                                            #
# Versão: 1.1                                                                  #
#==============================================================================#
module Craft
  
  Vocab = {}
  Vocab['remove'] = '< Remover >' #texto que aparece na opção de remover.
  Vocab['result'] = 'Resultado'
  
  Results = []  #Não altere nem apague.
  Comb = []     #Não altere nem apague.
  
  ShowResult = true #Mostrar o que a combinação atual gera antes de confirmar?
    Smoothness = 10 #Suavidade do movimento do grid ao formar um item
  
  StackX = 29 #Quando mais de um item for criado, qual distância X entre cada ícone
  StackY = 0 #                                                   Y
  
#==============================================================================#
#                        LISTA DE COMBINAÇõES                                  #
#==============================================================================#
  # Machado #
  altura  = 3              #altura do item. modifique à vontade.
  largura = 2              #largura do item. modifique à vontade.
  combinacao = ['i2','i2', #forme um retângulo ou quadrado com a
                 nil,'i8', #altura e largura acima.
                 nil,'i8'] 
  Results.push(['w1'])     #itens que são recebidos. Separe por vírgulas.
  Comb.push([largura,altura,combinacao]) #não altere nem apague.
  
  # VARETA #
  altura  = 2              #altura do item. modifique à vontade.
  largura = 1              #largura do item. modifique à vontade.
  combinacao = ['i1',      #forme um retângulo ou quadrado com a
                'i1']      #altura e largura acima.
  Results.push(['i8','i8'])
  Comb.push([largura,altura,combinacao]) #não altere nem apague.
  
  # CORTAR ALOE #
  altura  = 1              
  largura = 2              
  combinacao = ['i10','w2'] 
  Results.push(['w2','i11','i12'])
  Comb.push([largura,altura,combinacao])
  
  # CORTAR ALOE INVERTIDO #
  altura  = 1              
  largura = 2              
  combinacao = ['w2','i10'] 
  Results.push(['w2','i11','i12'])
  Comb.push([largura,altura,combinacao])
  
  # POÇÃO COM RAIZ DE ALOE #
  altura  = 2              
  largura = 1              
  combinacao = ['i11','i14'] 
  Results.push(['i15'])
  Comb.push([largura,altura,combinacao])
  
  # POÇÃO ERRADA #
  altura  = 2              
  largura = 1              
  combinacao = ['i12','i14'] 
  Results.push(['i16'])
  Comb.push([largura,altura,combinacao])
  
  # VARA #
  altura  = 3              
  largura = 3              
  combinacao = ['i8', nil,nil ,
                'i5','i8',nil ,
                'i5',nil ,'i8',
  ] 
  Results.push(['w3'])
  Comb.push([largura,altura,combinacao])
  
  # DECOMPOSIÇÃO DE ROUPA #
  altura  = 1              
  largura = 1              
  combinacao = ['a14'] 
  Results.push(['i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5','i5'])
  Comb.push([largura,altura,combinacao])
  
  # POÇÃO ERRADA #
  altura  = 2              
  largura = 1              
  combinacao = ['i17','i14'] 
  Results.push(['i16'])
  Comb.push([largura,altura,combinacao])
  
  # PÃO #
  altura  = 2              
  largura = 1              
  combinacao = ['i18','i14'] 
  Results.push(['i19'])
  Comb.push([largura,altura,combinacao])
  
  # POÇÃO ERRADA #
  altura  = 2              
  largura = 1              
  combinacao = ['i19','i14'] 
  Results.push(['i16'])
  Comb.push([largura,altura,combinacao])
  
  
#==============================================================================#
#                       FIM DA LISTA DE COMBINAÇõES                            #
#==============================================================================#
end


class Scene_Crafting < Scene_Base
  
  def initialize(gridsize=3)
    @grid = gridsize
    @in_use = {}
  end
  
  def start
    super
    @item_window = Window_CraftItem.new(0, 416, 544, 136)
    @item_window.active = false
    @item_window.opacity = 0
    @craft_window = Window_Craft.new(@grid)
    @craft_window.opacity = 0
    @step = 0
    @pop = nil
    @pop_sprite = Sprite.new
    @pop_sprite2 = Sprite.new
    @preview = Sprite.new if Craft::ShowResult
    update_showresult if Craft::ShowResult
    create_menu_background
  end
  
  def refresh_in_use
    @in_use = {}
    @craft_window.craft.each{|item|
    @in_use[item] = 0 if @in_use[item] == nil
    @in_use[item] += 1}
  end
  
  def create_menu_background
    @menuback_sprite = Sprite.new
    @menuback_sprite.bitmap = $game_temp.background_bitmap
    @menuback_sprite.bitmap.blt(0,0,Cache.system('Craft_BG'),Rect.new(0,0,544,416))
    @menuback_sprite.z = @craft_window.z-1
    update_menu_background
  end
  
  def terminate
    super
    dispose_menu_background
    @item_window.dispose
    @craft_window.dispose
    @pop_sprite.dispose
    @pop_sprite2.dispose
    @preview.dispose if Craft::ShowResult
  end


  def create_pop_sprites
    @pop_sprite.bitmap = Bitmap.new(@craft_window.width-32,@craft_window.height-32)
    @pop_sprite.bitmap.blt(0,0,Graphics.snap_to_bitmap,Rect.new(@craft_window.x+16,@craft_window.y+16,@craft_window.width-32,@craft_window.height-32))
    @pop_sprite.ox = (@pop_sprite.width)/2
    @pop_sprite.oy = (@pop_sprite.height)/2
    @pop_sprite.x,@pop_sprite.y = (@craft_window.x+16)+(@craft_window.width-32)/2,(@craft_window.y+16)+(@craft_window.height-32)/2
    @pop_sprite.z = 9998
    
    @pop_sprite2.bitmap = Bitmap.new(29+(@pop.size-1)*Craft::StackX,28+(@pop.size-1)*Craft::StackY)
    idx = 0
    for item in @pop
    @pop_sprite2.bitmap.blt(0+idx*Craft::StackX,0+idx*Craft::StackY,Cache.system('Craft_slot'),Rect.new(0,0,29,28))
    @pop_sprite2.bitmap.blt(2+idx*Craft::StackX,2+idx*Craft::StackY,Cache.system('Iconset'),Rect.new(item.icon_index % 16 * 24, item.icon_index / 16 * 24, 24, 24))
    idx += 1
    end
    @pop_sprite2.ox = @pop_sprite2.width/2
    @pop_sprite2.oy = @pop_sprite2.height/2
    @pop_sprite2.x = @pop_sprite.x
    @pop_sprite2.y = @pop_sprite.y
    @pop_sprite2.z = 9999
    @pop_sprite2.opacity = 0
  end
  
  def update
    super
    update_menu_background
    update_inventory_position
    @craft_window.update
    if @item_window.active
      @item_window.update
      update_item_selection
    elsif @craft_window.active
      update_craft_selection
    elsif @pop != nil
      case @step
      when 0
        shine ? @step = 1 : @step = 0
      when 1
        reduce ? @step = 2 : @step = 1
      when 2
        appear ? @step = 3 : @step = 2
      when 3
        Graphics.wait(60)
        $scene = Scene_Map.new
      end
    end
  end
  
  def update_inventory_position
    if @item_window.active
      @item_window.y = [@item_window.y-[(280-@item_window.x).abs/Craft::Smoothness,1].max,280].max
    else
      @item_window.y = [@item_window.y+[(416-@item_window.y).abs/Craft::Smoothness,1].max,416].min
    end
  end
  
  def shine
     @pop_sprite.tone = Tone.new(@pop_sprite.tone.red+2,@pop_sprite.tone.green+2,@pop_sprite.tone.blue+2)
     @preview.opacity -= 4 if Craft::ShowResult
     @pop_sprite.x = [@pop_sprite.x+[(@pop_sprite.x-272).abs/Craft::Smoothness,1].max,272].min
     @pop_sprite2.x = @pop_sprite.x
     return true if @pop_sprite.tone.red == 255
     return false
   end
   
  def reduce
     sizex = @pop_sprite.zoom_x
     sizey = @pop_sprite.zoom_y
     if @pop_sprite.width*@pop_sprite.zoom_x > @pop_sprite2.width
       @pop_sprite.zoom_x  = (@pop_sprite.zoom_x-0.05)
     end
     if @pop_sprite.width*@pop_sprite.zoom_x < @pop_sprite2.width
       @pop_sprite.zoom_x  = (@pop_sprite.zoom_x+0.05)
     end
     if @pop_sprite.height*@pop_sprite.zoom_y > @pop_sprite2.height
       @pop_sprite.zoom_y  = (@pop_sprite.zoom_y-0.05)
     end
     if @pop_sprite.height*@pop_sprite.zoom_y < @pop_sprite2.height
       @pop_sprite.zoom_y  = (@pop_sprite.zoom_y+0.05)
     end
     return true if sizex == @pop_sprite.zoom_x and sizey == @pop_sprite.zoom_y
     return false
   end
   
  def appear
    @pop_sprite2.opacity += 3
    @pop_sprite.opacity -= 3
    return true if @pop_sprite2.opacity == 255
    return false
  end
  
  def update_craft_selection
    if Input.trigger?(Input::B)
      if compare_crafting(@grid)
        Sound.play_decision
        create_pop_sprites
        @item_window.active = false
        @craft_window.active = false
        @craft_window.visible = false
      else
        Sound.play_cancel
        $scene = Scene_Map.new
      end
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @item_window.active = true
      @craft_window.active = false
    end
  end
  
  def update_item_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @craft_window.active = true
      @item_window.active = false
    elsif Input.trigger?(Input::C)
      refresh_in_use
      @in_use[@item_window.item] = 0 if @in_use[@item_window.item] == nil
      if ($game_party.item_number(@item_window.item)-@in_use[@item_window.item] > 0) or @item_window.item == nil
        Sound.play_decision
        @craft_window.craft[@craft_window.index] = @item_window.item
        @craft_window.refresh
        update_showresult if Craft::ShowResult
      else
        Sound.play_cancel
      end
        @craft_window.active = true
        @item_window.active = false
    end
  end
  
  def update_showresult
    preview = compare_crafting(@grid,true)
    case preview
    when false
      draw_preview(nil)
    when Integer
      draw_preview(preview)
    end
  end
  
  def draw_preview(idx)
    @preview.dispose if !@preview.disposed?
    if idx == nil
      @preview = Sprite.new
      @preview.bitmap = Bitmap.new(29,28)
      @preview.bitmap.blt(0,0,Cache.system('Craft_slot'),Rect.new(0,0,29,28))
      @preview.x = 257+@craft_window.width/2
      @preview.y = (@craft_window.y+@craft_window.height/2)-(@preview.height/2)
      @preview.z = 9999
      return
    end
    itemlist = []
      for item in Craft::Results[idx]
        type = item.scan(/[iwa]/)[0]
        case type
        when 'i'
          itemlist.push($data_items[item.scan(/[0-9]+/)[0].to_i])
        when 'a'
          itemlist.push($data_armors[item.scan(/[0-9]+/)[0].to_i])
        when 'w'
          itemlist.push($data_weapons[item.scan(/[0-9]+/)[0].to_i])
        end
      end
      @preview = Sprite.new
      @preview.bitmap = Bitmap.new(29+(itemlist.size-1)*Craft::StackX,28+(itemlist.size-1)*Craft::StackY)
      index = 0
      for item in itemlist
        @preview.bitmap.blt(0+index*Craft::StackX,0+index*Craft::StackY,Cache.system('Craft_slot'),Rect.new(0,0,29,28))
        @preview.bitmap.blt(2+index*Craft::StackX,2+index*Craft::StackY,Cache.system('Iconset'),Rect.new(item.icon_index % 16 * 24, item.icon_index / 16 * 24, 24, 24))
        index += 1
      end
    @preview.x = 257+@craft_window.width/2
    @preview.y = (@craft_window.y+@craft_window.height/2)-(@preview.height/2)
    @preview.z = 9999
  end
  
  def compare_crafting(gridsize,preview=false)
    @result = Array.new
    @craft_window.craft.each{|item|
    case item
    when RPG::Item
      @result.push("i#{item.id}")
    when RPG::Armor
      @result.push("a#{item.id}")
    when RPG::Weapon
      @result.push("w#{item.id}")
    else
      @result.push(nil)
    end
    }
    for combination in Craft::Comb
      next if combination[0] > @grid or combination[1] > @grid
      table = []
      for x in 0..@grid-1
        array = []
        for y in 0..@grid-1
          array.push(@result[x*@grid+y])
        end
        table.push(array)
      end
      check = []
      for x in 0..combination[1]-1
        array = []
        for y in 0..combination[0]-1
          array.push(combination[2][x*combination[0]+y])
        end
        check.push(array)
      end
      checkline = 0
      checkitem = 0
      for line in 0..table.size-1
        for itam in 0..table[line].size-1
          if table[line][itam] == (check[checkline].is_a?(Array) ? check[checkline][checkitem] : nil)
            next if check[checkline] == nil or table[line] == nil
            next if check.size > table.size-line
            next if check[checkline].size > table[line].size-itam
            successcomb = Array.new
            y = line
            x = itam
            checkline = 0
            checkitem = 0
            loop do
              if (table[y].is_a?(Array) ? table[y][x] : nil) == (check[checkline].is_a?(Array) ? check[checkline][checkitem] : nil)                 
                if x >= @grid-1
                  if y >= @grid-1
                    successcomb.push([y,x])
                    for y1 in 0..@grid-1
                      for x1 in 0..@grid-1
                        if !successcomb.include?([y1,x1])
                          if table[y1][x1] != nil
                            return false
                          end
                        end
                      end
                    end
                    if preview
                      return Craft::Comb.index(combination)
                    else
                      return craftit(Craft::Comb.index(combination))
                    end
                    break
                  else
                    successcomb.push([y,x])# unless (y > check.size-1 or x > check[checkline].size-1)
                    y += 1 ; x = itam
                    checkline += 1 ; checkitem = 0
                  end
                else
                  successcomb.push([y,x])# unless (y > check.size-1 or x > check[checkline].size-1)
                  x += 1 ; checkitem += 1
                end
              else
                break
              end
            end
          end
        end
      end
    end
      return false
  end
  
  def craftit(idx)
    @pop = []
      for item in Craft::Results[idx]
        type = item.scan(/[iwa]/)[0]
        case type
        when 'i'
          $game_party.gain_item($data_items[item.scan(/[0-9]+/)[0].to_i],1)
          @pop.push($data_items[item.scan(/[0-9]+/)[0].to_i])
        when 'a'
          $game_party.gain_item($data_armors[item.scan(/[0-9]+/)[0].to_i],1)
          @pop.push($data_armors[item.scan(/[0-9]+/)[0].to_i])
        when 'w'
          $game_party.gain_item($data_weapons[item.scan(/[0-9]+/)[0].to_i],1)
          @pop.push($data_weapons[item.scan(/[0-9]+/)[0].to_i])
        end
      end
      for item in @craft_window.craft
        $game_party.lose_item(item,1)  
      end
      return true
  end
end


class Window_Craft < Window_Selectable
  attr_accessor :craft


  def initialize(gridsize)
    super(272-(gridsize*29+32)/2-(Craft::ShowResult ? (gridsize*29+32)/2 : 0), 203-(gridsize*29*3/4), gridsize*29+32, gridsize*29+32)
    @column_max = gridsize
    self.index = 0
    @craft = Array.new
    for i in 1..(gridsize*gridsize)
      @craft.push(nil)
    end
    refresh
  end


  def item
    return @data[self.index]
  end


  def refresh
    @data = []
    for item in @craft
      @data.push(item)
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
  
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = 29
    rect.height = 28
    rect.x = index % @column_max * (rect.width)
    rect.y = index / @column_max * 28
    return rect
  end


  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    self.contents.blt(rect.x,rect.y,Cache.system('Craft_slot'),Rect.new(0,0,29,28))
    if item != nil
      rect.width -= 4
      draw_icon(item.icon_index, rect.x+2, rect.y+2, true)
    end
  end
end


class Window_CraftItem < Window_Selectable
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @column_max = 2
    self.index = 0
    refresh
  end
  def item
    return @data[self.index]
  end
  def include?(item)
    return false if item == nil
    if $game_temp.in_battle
      return false unless item.is_a?(RPG::Item)
    end
    return true
  end
  def enable?(item)
    return true
  end
  def refresh
    self.contents.fill_rect(0,0,self.width,self.height, Color.new(0,0,0,130))
    @data = []
    @data.push(nil)
    for item in $game_party.items
      @data.push(item)
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      number = $game_party.item_number(item)
      enabled = enable?(item)
      rect.width -= 4
      #self.contents.fill_rect(rect.x+2,rect.y+2,rect.width-4,rect.height-4, Color.new(0,0,0,180))
      draw_item_name(item, rect.x, rect.y, enabled)
      self.contents.draw_text(rect, sprintf(":%2d", number), 2)
    else
      #self.contents.fill_rect(rect.x+2,rect.y+2,rect.width-4,rect.height-4, Color.new(0,0,0,180))
      self.contents.draw_text(rect, Craft::Vocab['remove'], 1)
    end
  end
  def update_help
    @help_window.set_text(item == nil ? "" : item.description)
  end
end



I found this VX script online but i need VX ACE... is there a way to convert it?
 
Last edited by a moderator:

Idril

Widdershins Games
Veteran
Joined
Dec 1, 2014
Messages
230
Reaction score
170
First Language
English
It's possible to convert them but it does involve a bit of rewriting. You might consider editing your first post to convey that you'd like a conversion of that script to VXAce! With a link to where you found it and some other stuff like that. I might take a look at it later but I doubt I will know how to rewrite it.
 

omnikeith

Veteran
Veteran
Joined
Jan 7, 2015
Messages
34
Reaction score
1
First Language
English
Primarily Uses
I just downloaded a trial of VX and I don't like how this script is set up. Still looking for another Script without any luck...
 

MeowFace

Meow
Veteran
Joined
Feb 22, 2015
Messages
1,034
Reaction score
186
First Language
Meowish
Primarily Uses
That seems like part of a script, the crafting part only.


There should be a main script that changes the items to unique id (singular item) and the normal inventory changed to a grid inventory, and from what i see here, a wear and tear script with gauges shown on the item as well.


Not a small project to be sure, you might get better chance putting up a classified request for it.


http://forums.rpgmakerweb.com/index.php?/forum/55-classifieds/
 

omnikeith

Veteran
Veteran
Joined
Jan 7, 2015
Messages
34
Reaction score
1
First Language
English
Primarily Uses
All I really need is the crafting system. I can use another inventory system and damage system.
 

Latest Threads

Latest Posts

Latest Profile Posts

For some reason, I found this is kinda stylist
ready to fall into another development hell...
Mega has been giving me a lot of problems as of late, so I think I'll need to switch to another cloud service. I'm considering Dropbox.
Rough week, but in the end there's light in the darkness.
Mental health is an issue I wish was taken more seriously.
Take care.
1638421271905.jpeg
By the power of timezones! This picture shall still be posted on december 1st!!!
7xI2Gc2.jpg

Forum statistics

Threads
117,126
Messages
1,104,793
Members
153,175
Latest member
SylviaGaming
Top