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

ACerola Engine - Visual Shop

Iniciado por anticasper, 16/01/2013 às 01:55

16/01/2013 às 01:55 Última edição: 16/01/2013 às 09:03 por King Gerar

Introdução

ACerola Engine é uma engine desenvolvida por AntiCasper que tem por objetivo criar suporte a diversos tipos de game. Dentro de sua proposta é previsto a criação de atalhos para desenvolver batalhas, sistemas diversos e complementos aos scripts já existentes.

Visual Shop é o primeiro de uma série de scripts que visam ampliar as capacidades do RPG Maker VX Ace.

Como Instalar

O Script é Plug n Play, basta colar o módulo numa nova área acima de main. É compatível com qualquer script lançado. Para demais recomendações veja o mapa presente na Demo.

Código

Spoiler
#==============================================================================
# ACerola Visual Shop
#
#   Criado por Diovanni AntiCasper
#   diovanni@anticasper.com
#   www.projetorpgmaker.com
#
#   Compatibilidade: RPG Maker VX Ace
#------------------------------------------------------------------------------
#  Cria uma loja que pode ser gerenciada por eventos, ideal para action
#  games e para jogos estilo Harvest Moon.
#==============================================================================
module AC
  
  TeclaPaginacao = :R               # Tecla necessária para páginação
  Vocab_Lista = "Lista de Compras " # Vocabulário do título das listas
  Vocab_Possui = "Possui"           # Legenda de dinheiro total
  Vocab_Custo = "Custo"             # Legenda do custo total
  Vocab_Resto = "Resto"             # Legenda da sobra
  Vocab_Rodape = "Página {ATUAL} de {TOTAL} | [w] para próxima" # Frase exibida na ultima linha da lista
  LimitePagina = 7 # Limite de itens por página
  Cor = Color.new(200,200,200) # Cor do título e do rodapé
  
end
#==============================================================================
# ** AC_loja
#==============================================================================
class AC_Loja
  
  attr_accessor   :carrinho
  attr_accessor   :att
  attr_accessor   :valor_total
  attr_accessor   :comprando
  #--------------------------------------------------------------------------
  # * Inicialização de Objetos
  #--------------------------------------------------------------------------
  def initialize
    @carrinho = []
    @valor_total = 0
    @comprando = false
    @att = false
  end
  #--------------------------------------------------------------------------
  # * Calcula total do carrinho
  #--------------------------------------------------------------------------
  def calculaTotal
    # Zera a variavel de valor
    @valor_total = 0
    # Faz o Loop pelo carrinho
    @carrinho.each do |i|
      # Checa o tipo de item no carrinho para proceder
      case i[1]
        when 'item';     p = $data_items[i[0]].price
        when 'armadura'; p = $data_armors[i[0]].price
        when 'arma';     p = $data_weapons[i[0]].price
      end
      @valor_total +=  i[2] * p
    end    
  end
  #--------------------------------------------------------------------------
  # * Compra o item
  #--------------------------------------------------------------------------
  def compra(id, tipo, limite)
    # Checa se existe o item no carrinho, se tiver adiciona quantidade
    c = checaCarrinho(id, tipo) 
    if(c)      
      if(limite > 0)
        if (limite < @carrinho[c][2])
          # Soma mais um a quantidade
          @carrinho[c][2] += 1
        end
      else
        # Soma mais um a quantidade
        @carrinho[c][2] += 1
      end
    else
      # Cria o item e já adiciona 1
      @carrinho.push [id, tipo, 1]
    end
    calculaTotal
  end
  #--------------------------------------------------------------------------
  # * Checa o carrinho
  #--------------------------------------------------------------------------
  def checaCarrinho(id, tipo)
    # Contador
    ct = 0
    # Faz o Loop pelo carrinho
    @carrinho.each do |i|  
      # Checa o tipo de item no carrinho para proceder
        if (id == i[0] && tipo == i[1]) 
          return ct 
        end
      # Soma o contador
      ct += 1
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Finalizar Compra
  #--------------------------------------------------------------------------
  def finalizaCompra
    # Calcula final da compra
    calculaTotal
    # Checa 
    if $game_party.gold >= @valor_total && @carrinho.size > 0
      # Toca o som
      Sound.play_shop
      # Faz uma contagem
      ct = 0
      # Loop da alegria
      @carrinho.each do |i|
        case i[1]
          when 'item';     it = $data_items[i[0]]
          when 'armadura'; it = $data_armors[i[0]]
          when 'arma';     it = $data_weapons[i[0]]
        end
        # Adiciona item
        $game_party.gain_item(it, i[2])
        # Atualiza a contagem
        ct += 1
      end
      # Tira a grana
      $game_party.lose_gold(@valor_total)
      zeraCarrinho
      # Zera o carrinho de compras
      @att = true      
      return true
    else
      # Dá um retorno pro velho
      return false
    end   
  end
  #--------------------------------------------------------------------------
  # * Limpa Carrinho de Compras
  #--------------------------------------------------------------------------
  def zeraCarrinho
    @carrinho = []
    @valor_total = 0
  end
  #--------------------------------------------------------------------------
end


#==============================================================================
#  Alterações nos scripts originais
#==============================================================================

#==============================================================================
# ** Scene_Map
#==============================================================================
class Game_Map
  
  attr_accessor :ac_loja             # Loja do AC
  #--------------------------------------------------------------------------
  # * Inicialização de objetos
  #--------------------------------------------------------------------------
  alias old_ini initialize
  def initialize
    @ac_loja = AC_Loja.new
    old_ini
  end
  #--------------------------------------------------------------------------
  # * Comprar Item
  #--------------------------------------------------------------------------
  def acl_compra_item(id, limite = 0)
   $game_map.ac_loja.att = true
   @ac_loja.compra(id, 'item', limite)
 end
   #--------------------------------------------------------------------------
  # * Comprar Arma
  #--------------------------------------------------------------------------
  def acl_compra_arma(id, limite = 0)
   $game_map.ac_loja.att = true
   @ac_loja.compra(id, 'arma', limite)
 end
   #--------------------------------------------------------------------------
  # * Comprar Armadura
  #--------------------------------------------------------------------------
  def acl_compra_armadura(id, limite = 0)
   $game_map.ac_loja.att = true
   @ac_loja.compra(id, 'armadura', limite)
  end
  #--------------------------------------------------------------------------
  # * Entre e Sai da Loja
  #-------------------------------------------------------------------------- 
  def lojaAC
    # Checa status
    return @ac_loja.comprando    
  end
  #--------------------------------------------------------------------------
  # * Entre e Sai da Loja
  #-------------------------------------------------------------------------- 
  def entraLojaAC
    @ac_loja.comprando = true
  end
  #--------------------------------------------------------------------------
  # * Entre e Sai da Loja
  #-------------------------------------------------------------------------- 
  def saiLojaAC    
    @ac_loja.comprando = false
  end  
  #--------------------------------------------------------------------------
  # * Termina compra
  #-------------------------------------------------------------------------- 
  def pagaLojaAC    
    return @ac_loja.finalizaCompra
  end
  #--------------------------------------------------------------------------
  # * Checa se um item existe no carrinho
  #--------------------------------------------------------------------------  
  def checaItemCarrinho(id, tipo)
    if @ac_loja.checaCarrinho(id, tipo)
      return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # * Checa se o Carrinho tem item
  #--------------------------------------------------------------------------   
  def checaCarrinhoVazio
    return @ac_loja.carrinho.empty?      
  end  
  #--------------------------------------------------------------------------
  # * Zera o Carrinho
  #-------------------------------------------------------------------------- 
  def zeraCarrinho
    @ac_loja.zeraCarrinho
    @ac_loja.att = true 
  end
  #--------------------------------------------------------------------------
end

#==============================================================================
# ** Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # * Criar todas as janelas
  #--------------------------------------------------------------------------
  # Cria um nick pro método antigo
  alias ac_caw create_all_windows 
  # Refaz o método antigo
  def create_all_windows
    # Chama o método antigo
    ac_caw
    # Cria Janelas
    @acl1 = Window_Loja_1.new
    @acl2 = Window_Loja_2.new
  end
  #--------------------------------------------------------------------------
  # * Atualização das coisas
  #--------------------------------------------------------------------------
  # Cria um nick pro método antigo
  alias ac_update update
  # Refaz o método antigo
  def update
    # Chama o método antigo
    ac_update
    # Atualiza Janela de custos
    @acl1.custo($game_map.ac_loja.valor_total)
    # Checa se estamos em uma loja
    if $game_map.ac_loja.comprando
        # Permite atualizar a página
        if Input.trigger?(AC::TeclaPaginacao)
          @acl2.movePagina          
        end
        # Exibe Janelas de Compra
        @acl1.visible = true
        @acl2.visible = true
        @acl1.update         
        @acl2.update
    else
        @acl1.visible = false
        @acl2.visible = false
     end
   end
  #--------------------------------------------------------------------------
  # * Acaba com a linguiçada
  #--------------------------------------------------------------------------
  alias ac_terminate terminate
  def terminate
    # Chama o método antigo
    @acl1.dispose
    @acl2.dispose
    ac_terminate
  end
  #--------------------------------------------------------------------------
end
#==============================================================================
#   Window_Loja_1 # Referente ao valor total da compra
#==============================================================================

class Window_Loja_1 < Window_Base
  #--------------------------------------------------------------------------
  # * Inicialização dos BEJETOS
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 100)
    self.visible = false
    @custo = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Desenhas as paradas e escreve ae e tal
  #-------------------------------------------------------------------------- 
  def refresh
    self.contents.clear 
      draw_currency_value(AC::Vocab_Possui + ": " + $game_party.gold.to_s, Vocab::currency_unit, 4, 0, contents.width - 8)
      draw_currency_value(AC::Vocab_Custo + ": " + @custo.to_s, Vocab::currency_unit, 4, 22, contents.width - 8)      
      dif = $game_party.gold - @custo
      draw_currency_value(AC::Vocab_Resto + ": " + dif.to_s, Vocab::currency_unit, 4, 44, contents.width - 8)      
  end
  #--------------------------------------------------------------------------
  # * Atualiza tudo
  #--------------------------------------------------------------------------
  def update
    refresh
  end
  #--------------------------------------------------------------------------
  # * Atualiza valor de custo
  #--------------------------------------------------------------------------
  def custo(valor)
    @custo = valor
  end 
  #--------------------------------------------------------------------------
end

#==============================================================================
#   Window_Loja_1 # Referente ao valor total da compra
#==============================================================================

class Window_Loja_2 < Window_Base 
  #--------------------------------------------------------------------------
  # * Inicialização dos BEJETOS
  #--------------------------------------------------------------------------
  def initialize
    super(314, 0, 230, 500)
    self.height = 0
    self.z = 50
    self.visible = false
    @index = 0
    update
  end
  #--------------------------------------------------------------------------
  # * Atualiza tudo
  #--------------------------------------------------------------------------
  def update
    # Checa se precisa atualizar
    if($game_map.ac_loja.att == true)
      # Redesenha
      refresh
      # Proíbe atualização
      $game_map.ac_loja.att = false
    end
  end  
  #--------------------------------------------------------------------------
  # * Desenhas as paradas e escreve ae e tal
  #-------------------------------------------------------------------------- 
  def refresh
    # Limpa a porra toda
    self.contents.clear
    # Zera o tamanho vertical
    self.height = 0
    # Pega o array
    c = $game_map.ac_loja.carrinho
    # Muda a cor
    change_color(AC::Cor)
     # Muda o tamanho da font
    self.contents.font.size = 16
    # Exibe um texto
    self.contents.draw_text(0, 0 , 200, 22, AC::Vocab_Lista, 1)
    # Muda a cor
    change_color(normal_color)
    # Muda o tamanho da font
    self.contents.font.size = 22
    # Faz uma contagem
    ct = 1
    # Loop da alegria
    cm = @index * AC::LimitePagina
    cf = (@index + 1) * AC::LimitePagina
    for i in cm..cf
      if(c[i])
        # Faz um case para o tipo de material
        case c[i][1]
          when 'item';     it = $data_items[c[i][0]]
          when 'armadura'; it = $data_armors[c[i][0]]
          when 'arma';     it = $data_weapons[c[i][0]]
        end
          # Escreve o item
        self.contents.draw_text(0, ct * 24, 200, 22, c[i][2].to_s + "x " + it.name , 2)      
        # Atualiza a contagem
        ct += 1
        # Aumenta tamanho da janela
        self.height = (ct * 24) + 48  
      end        
    end
    # Define página máxima
    t = ($game_map.ac_loja.carrinho.size / AC::LimitePagina) + 1
    # Define página atual
    ind = @index + 1
    # Muda a cor
    change_color(AC::Cor)
     # Muda o tamanho da font 
     #"Página " + ind.to_s + " de " + t.to_s + " | [w] para próxima"
    self.contents.font.size = 16
    # Converte frase
    fr = AC::Vocab_Rodape
    fr = fr.gsub(/{ATUAL}/) { ind.to_s } 
    fr = fr.gsub(/{TOTAL}/) { t.to_s} 
    # Exibe um texto
    self.contents.draw_text(0, ct * 24, 200, 22, fr, 2)      
  end
  #--------------------------------------------------------------------------
  # * Move a página
  #-------------------------------------------------------------------------- 
  def movePagina
    if ($game_map.ac_loja.carrinho.size / AC::LimitePagina) > @index
      @index += 1
    else
      @index = 0
    end
    refresh
  end
  #--------------------------------------------------------------------------  
end
[close]

Screens

Spoiler



[close]

Demo

Link direto na Projeto RPG Maker
Link MediaFire


Créditos

Diovanni AntiCasper - diovanni@anticasper.com


Uia, que sistema lindo.  :rainbow:
Bem gostei muito e iria fazer um desse via Eventos para RPG Maker XP.
Bem só acho que você postou na área errada casper.  :o:
A área certa séria a de RGSS3.

Bem mais parabéns pelo ótimo script.
Aquele abraço amigo.

~ Faalco

Citação de: Faalco online 16/01/2013 às 02:00
Uia, que sistema lindo.  :rainbow:
Bem gostei muito e iria fazer um desse via Eventos para RPG Maker XP.
Bem só acho que você postou na área errada casper.  :o:
A área certa séria a de RGSS3.

Bem mais parabéns pelo ótimo script.
Aquele abraço amigo.

~ Faalco


Aham, eu percebi que tava na área errada depois que postei, já mandei mp pros moderadores trocarem xD

Mas vlw, o script é bem simples btw


Ah legal achei interessante o visual shop, é uma função que muitos fazem por evento justamente por não terem um script para isso, bom e pelo script eu estive vendo aqui, você parece mandar bem já nisso, legal ^^, espero os próximos scripts :)

Bom dia, pode ser utilizado comercialmente? Obrigado!
JeSuS está voltando! Volte para ele antes!

Bom dia!

Sinta se livre para utilização comercial. Apenas peço pelo crédito de criação.

ABS.


03/07/2015 às 12:36 #6 Última edição: 03/07/2015 às 12:43 por kholyphoenix1
Parabéns pelo script sensacional!

É o mínimo que eu poderia fazer dá os devidos créditos.
Muito obrigado!! :D
JeSuS está voltando! Volte para ele antes!