1 ACerola Engine - Visual Shop 17/1/2013, 23:56
SameKage
Membro Honorário III
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Criado por Diovanni AntiCasper
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:
- Código:
#==============================================================================
# ACerola Visual Shop
#
# Criado por Diovanni AntiCasper
# [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
# 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 droga 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
Screens
- Spoiler:
- [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Demo
Link direto na Projeto RPG Maker
Link MediaFire
Créditos
Diovanni AntiCasper - [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]