O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Lune Item Grid

Iniciado por Raizen, 02/03/2015 às 13:38

02/03/2015 às 13:38 Última edição: 03/03/2015 às 23:36 por Raizen
Lune Item Grid

Compativel com: RMVXAce
Compatibilidade :bom
Facilidade de uso: fácil
Lag gerado: nulo
[box class=titlebg]
Condições de Uso
[/box]
  Pode ser modificado, e divulgado, mas mantenha os créditos a mim obrigado.

[box class=titlebg]
Para que serve o script
[/box]
  O script adiciona a função de item grid para os itens, essa é a mesma função de menu que jogos como Diablo, Resident Evil entre outros tem. Basicamente cada item tem um tamanho configurável no script e ele é posicionado na tela de grid do jogador.

O script permite:
- Mover os itens
- Descartar os itens
- Impossibilitar o descarte de itens chave
- Impossibilidade de desequipar itens caso não tenha espaço no grid
- Shop opcional com o grid
- Verificar se há espaço no grid para certo item
- Pode ser usado com ou sem imagens adicionais
- tamanho do grid e dos itens totalmente configurável
- todos os comandos de evento em relação aos items(receber, perder) continuam 100% funcionais

Para os equipamentos uma dica é usar o meu outro script: Lune Shadow Equips

[box class=titlebg]
Script.
[/box]

Script do Grid
http://pastebin.com/raw.php?i=wE7uVVxV

Script do Shop(opcional)
Spoiler
#=======================================================
# Autor: Raizen
#         Lune Item Grid Shop
# Comunidade : www.centrorpg.com
# Adiciona a função do grid nas lojas também, requer o Lune Item Grid
#=======================================================
$imported ||= {}
$imported[:Lune_Item_Grid_Shop] = true


module Lune_Item_Grid
  
# Mostrar janelas no shop?
Show_Windows = false

# A imagem deve estar na pasta Graphics/Item_Grid
Image_Buy = ""

# Correção da posição do grid do shop, caso utilize uma imagem
Shop_Position_X = - 6
Shop_Position_Y = - 8
end


#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da tela de loja.
#==============================================================================

class Scene_Shop < Scene_MenuBase
alias :lune_item_grid_start :start
alias :lune_item_grid_on_sell_ok :on_sell_ok
alias :lune_item_grid_on_sell_cancel :on_sell_cancel
alias :lune_item_grid_command_sell :command_sell
alias :lune_item_grid_update :update
alias :lune_item_grid_do_buy :do_buy
alias :lune_item_grid_do_sell :do_sell
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def start
    msgbox("Missing Lune Item Grid Script!!!") unless $imported[:Lune_Item_Grid]
    lune_item_grid_start
    create_back_sprite
    @category_window.contents_opacity = 0
    @category_window.opacity = 0
    unless Lune_Item_Grid::Show_Windows 
      @gold_window.opacity = 0
      @command_window.opacity = 0
      @dummy_window.opacity = 0
      @number_window.opacity = 0
      @status_window.opacity = 0
      @buy_window.opacity = 0
      @help_window.opacity = 0
      @dummy_sell_window.opacity = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Criação de Imagens
  #--------------------------------------------------------------------------
  def create_back_sprite
    @back_sprite_grid = Sprite.new
    @back_sprite_grid.bitmap = Cache.item_grid(Lune_Item_Grid::Image)
    @back_sprite_buy = Sprite.new
    @back_sprite_buy.bitmap = Cache.item_grid(Lune_Item_Grid::Image_Buy)
  end
  #--------------------------------------------------------------------------
  # * Criação da janela de venda
  #--------------------------------------------------------------------------
  def create_sell_window
    wy = @category_window.y
    wh = Graphics.height - wy
    @dummy_sell_window = Window_Base.new(0, wy, Graphics.width, wh)
    @dummy_sell_window.hide
    wy = @category_window.y
    wh = Graphics.height - wy
    @sell_window = Window_Grid_ItemList.new(0, wy, Graphics.width, wh + 20)
    @sell_window.viewport = @viewport
    @sell_window.help_window = @help_window
    @sell_window.hide
    @sell_window.set_handler(:ok,     method(:on_sell_ok))
    @sell_window.set_handler(:cancel, method(:on_sell_cancel))
    @sell_window.x += Lune_Item_Grid::Grid_Position_X  
    @sell_window.y += Lune_Item_Grid::Grid_Position_Y
    @category_window.item_window = @sell_window
    @sell_window.opacity = 0
  end
  #--------------------------------------------------------------------------
  # * Atualização da tela
  #--------------------------------------------------------------------------
  def update(*args, &block)
    lune_item_grid_update(*args, &block)
    if @sell_window.visible && !@dummy_sell_window.visible
      @dummy_sell_window.show
      @back_sprite_grid.opacity = 255
      @back_sprite_buy.opacity = 0
    end
    if !@sell_window.visible && @dummy_sell_window.visible && !@command_window.active
      @dummy_sell_window.hide
      @back_sprite_grid.opacity = 0
      @back_sprite_buy.opacity = 255
    end
  end
  #--------------------------------------------------------------------------
  # * Comando [Vender]
  #--------------------------------------------------------------------------
  def command_sell
    @dummy_window.hide
    @sell_window.show
    @sell_window.activate
    @sell_window.refresh
    @sell_window.index = 0
  end
  #--------------------------------------------------------------------------
  # * Venda [Cancelamento]
  #--------------------------------------------------------------------------
  def on_sell_cancel
    @sell_window.hide
    @command_window.activate
    @status_window.item = nil
    @help_window.clear
  end
  #--------------------------------------------------------------------------
  # * Ativação da janela de venda
  #--------------------------------------------------------------------------
  def on_sell_ok
    unless @sell_window.item
      Sound.play_buzzer
      activate_sell_window
      return
    end
    lune_item_grid_on_sell_ok
  end
  #--------------------------------------------------------------------------
  # * Aquisição do número máximo disponível para compra
  #--------------------------------------------------------------------------
  def max_buy
    max = 1
    buying_price == 0 ? max : [max, money / buying_price].min
  end
  #--------------------------------------------------------------------------
  # * Aquisição do número máximo disponível para compra
  #--------------------------------------------------------------------------
  def max_buy
    1
  end
  #--------------------------------------------------------------------------
  # * Execução da compra
  #     number : número de itens
  #--------------------------------------------------------------------------
  def do_buy(number)
    lune_item_grid_do_buy(number)
    @sell_window.dispose
    create_sell_window
  end
  #--------------------------------------------------------------------------
  # * Execução da compra
  #     number : número de itens
  #--------------------------------------------------------------------------
  def do_sell(number)
    lune_item_grid_do_sell(number)
    @sell_window.dispose
    create_sell_window
  end
  
end



#==============================================================================
# ** Window_ShopNumber
#------------------------------------------------------------------------------
#  Esta janela é para entrada da quantia de itens que será comprada ou
# vendida na tela de loja.
#==============================================================================

class Window_ShopNumber < Window_Selectable
  #--------------------------------------------------------------------------
  # * Variáveis públicas
  #--------------------------------------------------------------------------
  attr_reader   :number                   # Número digitado
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #     x      : coordenada X
  #     y      : coordenada Y
  #     height : altura
  #--------------------------------------------------------------------------
  def initialize(x, y, height)
    super(x, y, window_width, height)
    @item = nil
    @max = 1
    @price = 0
    @number = 1
    @currency_unit = Vocab::currency_unit
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #--------------------------------------------------------------------------
  def window_width
    return 304
  end
  #--------------------------------------------------------------------------
  # * Definição de itens, quantia máxima, preço e unidade monetária
  #     item          : item
  #     max           : quantia máxima
  #     price         : preço
  #     currency_unit : unidade mo
  #--------------------------------------------------------------------------
  def set(item, max, price, currency_unit = nil)
    @item = item
    @max = max
    @price = price
    @currency_unit = currency_unit if currency_unit
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # * Renovação
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_item_name(@item, 0, item_y)
    draw_number
    draw_total_price
  end
  #--------------------------------------------------------------------------
  # * Desenho do número de itens
  #--------------------------------------------------------------------------
  def draw_number
    change_color(normal_color)
    #draw_text(cursor_x, item_y, cursor_width - 4, line_height, @number, 2)
    draw_item(cursor_x, item_y, @item)
  end
  #--------------------------------------------------------------------------
  # * Desenho do preço total
  #--------------------------------------------------------------------------
  def draw_total_price
    width = contents_width - 8
    draw_currency_value(@price * @number, @currency_unit, 4, cursor_height+ price_y - 30, width)
  end
  #--------------------------------------------------------------------------
  # * Desenho de um item
  #     index : índice do item
  #--------------------------------------------------------------------------
  def draw_item(x, y, item)
    if item
      if item.note.include?("<grid_pic")
        for count in 0..item.note.size
          if item.note[count...count + 9] == "<grid_pic"
            count2 = 0
            count2 += 1 until item.note[count2 + count + 10] == ">"
            draw_grid_item(item.note[(count + 10)..(count + count2 + 9)], x, y)
          end
        end
      else
        draw_icon(item.icon_index, x, y, true)
      end
      #draw_item_number(rect, item)
    end
  end
  #--------------------------------------------------------------------------
  # * Desenho de ícones
  #     icon_index : índice do ícone
  #     x          : coordenada X
  #     y          : coordenada Y
  #     enabled    : habilitar flag, translucido quando false
  #--------------------------------------------------------------------------
  def draw_grid_item(item_name, x, y)
    bitmap = Cache.item_grid(item_name)
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(x, y, bitmap, rect,  255)
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura do cursor
  #--------------------------------------------------------------------------
  def cursor_width
    item_size = $game_party.get_item_size(@item)
    return item_size[0] * Lune_Item_Grid::Item_Size[0]
  end
  def cursor_height
     item_size = $game_party.get_item_size(@item)
    return item_size[1] * Lune_Item_Grid::Item_Size[1]  
  end
  #--------------------------------------------------------------------------
  # * Desenho do nome de itens
  #     item    : objeto
  #     x       : coordenada X
  #     y       : coordenada Y
  #     enabled : habilitar flag, translucido quando false
  #     width   : largura
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true, width = 172)
    return unless item
    change_color(normal_color, enabled)
    draw_text(x, y, width, line_height, item.name)
  end
  #--------------------------------------------------------------------------
  # * Coordenada X de exibição do cursor
  #--------------------------------------------------------------------------
  def cursor_x
    contents_width - cursor_width - 24
  end
  #--------------------------------------------------------------------------
  # * Atualização do número de itens
  #--------------------------------------------------------------------------
  def update_number
  end
  #--------------------------------------------------------------------------
  # * Atualização do cursor
  #--------------------------------------------------------------------------
  def update_cursor
    cursor_rect.set(cursor_x, item_y, cursor_width, cursor_height)
  end
end

[close]

[box class=titlebg]
Imagens
[/box]

Spoiler
[close]
Spoiler
[close]
Spoiler
[close]

[box class=titlebg]
Download
[/box]

Se desejar
https://www.mediafire.com/?nysbgd1jv7sa2ro

[box class=titlebg]
Créditos e Avisos
[/box]

Raizen

OLHA ISSO! Tava admirando isso desde que postou uma imagem em outro tópico.
Com certeza muito bom, parabéns! Com certeza devo usar em algum dos meus projetinhos!


02/03/2015 às 14:16 #2 Última edição: 03/03/2015 às 19:56 por hategum rpg
 :*-*: Show!

Spoiler
Eu baixei a demo e testei tem um bug na hora de mover o item, eu movimente ele varias vezes, ai a "seleção do item" o quadrado transparente, aparece lá no meio do grid, tipo cortado....

Spoiler
[close]
[close]

Citação de: hategum rpg online 02/03/2015 às 14:16
Eu baixei a demo e testei tem um bug na hora de mover o item, eu movimente ele varias vezes, ai a "seleção do item" o quadrado transparente, aparece lá no meio do grid, tipo cortado....
Vish tentei várias vezes não consegui reproduzir isso kkk, e eu testei antes de postar também e agora D:

Não sei como chegar nesse bug ae shuAHS, lembra exatamente dos passos que fez para ocorrer isso xD?


Citação de: Skyloftian online 02/03/2015 às 13:48
OLHA ISSO! Tava admirando isso desde que postou uma imagem em outro tópico.
Com certeza muito bom, parabéns! Com certeza devo usar em algum dos meus projetinhos!

Vlws maninho, esse deu um trampo bem maior do que eu esperava kk, bom qualquer coisa só chamar xD.

Aeee, terminou!  :wow:
Bom, não testei esse, mas tu parece ter sido bem cauteloso, faz um monte de coisa.
Mas o que achei mais legal foi não bugar as coisas que já exibem os ícones, juro
que pensei que esse seria bem incompatível, mas que ótimo que não.
Muito daora, deu trabalho, mas acho que compensou, haha.
Daora mesmo é usar um machado daédrico na colheita
  :lol:

Seu PLUTO, cade a versão XP?  :grr:

Brincadeira à parte, ficou excelente. Eu adoro inventário em grid e me facilita muito a produção de games estilo Resident Evil.

Gostei muito.



02/03/2015 às 14:53 #6 Última edição: 03/03/2015 às 19:57 por hategum rpg
Spoiler
Fiz um vídeo.

[close]

02/03/2015 às 14:55 #7 Última edição: 02/03/2015 às 22:28 por Raizen
Citação de: King Gerar online 02/03/2015 às 14:45
Aeee, terminou!  :wow:
Bom, não testei esse, mas tu parece ter sido bem cauteloso, faz um monte de coisa.
Mas o que achei mais legal foi não bugar as coisas que já exibem os ícones, juro
que pensei que esse seria bem incompatível, mas que ótimo que não.
Muito daora, deu trabalho, mas acho que compensou, haha.
Daora mesmo é usar um machado daédrico na colheita
  :lol:
Foi o primeiro que achei que dava para usar no grid shuASHUaUH xD
Ah fiz o máximo para não bugar as coisas kk, espero que consegui uma parte deles pelo menos, bom vlws manolo x).

Citação de: Cezar online 02/03/2015 às 14:48
Seu PLUTO, cade a versão XP?  :grr:

Brincadeira à parte, ficou excelente. Eu adoro inventário em grid e me facilita muito a produção de games estilo Resident Evil.

Gostei muito.

Tem um pra XP kk :P, mas vlws manolo xD deu um trampinho aqui.

@hategum rpg: Vish aqui não pega vídeo kk, em casa eu dou uma olhada, vlws mesmo pelo suporte xD.

Edit: Arrumado, era apenas uma linha :P, vlws manolo.

Pois bem, fui testar, mas acabei encontrando um pequeno bug. Não sei bem o motivo, mas quando se remove todo o equipamento do herói, fica impossível se equipar com qualquer equipamento novamente. Qual seria o problema deste ocorrido?


Citação de: Skyloftian online 03/03/2015 às 19:48
Pois bem, fui testar, mas acabei encontrando um pequeno bug. Não sei bem o motivo, mas quando se remove todo o equipamento do herói, fica impossível se equipar com qualquer equipamento novamente. Qual seria o problema deste ocorrido?
Vish, vlws mesmo cara, acho que subi uma versão errada do script na hora de corrigir o erro que o hategum reportou, isso é fods, corrijo um, ferro um monte kk.

Mas vlws ai por testar e tudo mais, como o sistema é novo talvez ainda tenha mais coisas além disso xD

Aleluiaaaaaaaaaa! Achei algo como isso, essa parada azul fica horrível em um rpg +ouro pra vc  :clap: :clap:


Um bom lugar se constrói
com humildade é bom lembrar