Experiência No Uso De Armas 2.0
Publicado em 15 de outubro de 2012.O module MC_Setup (Módulo Marcelo Cavaco), é um script para o RPG Maker XP, desenvolvido por Marcelo Cavaco, que, ao usado no seu game ou projeto, adiciona algumas funcionalidades a este, mais especificamente, este script cria um esquema de evolução das armas.
Vamos supor que a classe do herói “Ash” permite que ele use “Espada Longa” e “Machado”. Se Ash usar a “Espada Longa” diversas vezes, ele irá ficar bastante experiente no uso deste tipo de arma. Se ele trocar de arma e passar a usar um “Machado”, então o dano causado deve ser menor que a da Espada Longa (que ele já usou muito mais).
Em outras palavras, quanto mais vezes nosso herói lutar com um tipo de arma, maior será o bonus no dano ao usar este tipo de arma.
Tipos De Armas, Atributos E Características
Os tipos de armas são:
- Espada Curta
- Espada Longa
- Machado
- Maça
- Martelo
- Cajado
- Arco
- Lança
- Adaga
- Clava
- Exótica
- Desarmado
Além do tipo de arma, há também um outro atributo chamado “Longa Distância”, que serve apenas para organizar as informações de uma forma melhor na tela.
Outra novidade é o poder da arma. Cada arma pode ter um ou mais atributos que modificam consideravelmente as propriedades das armas. Eles podem ser usados separadamente ou em conjunto. Tudo depende da configuração das armas no database.
Os atributos de poder são:
- Lâmina Afiada: A arma foi encantada com uma forte magia no momento em que estava sendo “afiada”. Este encantamento dobra a margem de ameaça de uma arma, ou seja, duplica a chance de um ataque crítico.
- Flamejante: Esta arma, quando usada num ataque, irrompe em chamas. O fogo não afeta as mãos do usuário e causa 1d5 pontos de dano adicional, por fogo, a cada nível de usuário. Armas de longa distância também tem sua munição em chamas.
- Congelante: Esta arma, quando usada num ataque, fica coberta de gelo. O frio não afeta as mãos do usuário e causa 1d4 pontos de dano adicional por frio, a cada nível de usuário. Armas de longa distância também são afetadas.
- Elétrica: Esta arma, quando usada em um ataque, fica carregada de eletricidade, que causa 1d6 pontos de dano adicional
por energia elétrica a cada nível de usuário. Armas de longa distância imbuem sua munição com a eletricidade. - Toque Espectral: Um poderoso encantamento etéreo foi adiconado à arma, que aumenta em 50% o dano causado por esta arma. Armas de longa distância também são afetadas.
- Rompimento: Um encantamento mortal foi adicionado nesta arma e o toque da morte está presente nela. A maioria das criaturas não suportam o dano multiplicado por “10” vezes que esta causa e acabam morrendo imediatamente. Armas de longa distância imbuem a suamunição com este impressionante poder.
- Sangramento: Um poderoso encantamento etéreo foi adicionado à arma, que aumenta em 100 % o dano causado pela arma. Armas de longa distância imbuem a sua munição com este poder.
- Sagrada: Um poderoso encantamento sagrado foi adicionado à arma, que aumenta em 50% o dano bonus causado por um determinado tipo de arma. O “dano bônus” é aquele causado pela experiência adquirida no uso das armas (explicado anteriormente).
- Profana: Um poderoso encantamento profano foi adicionado à arma, aumentando em 2 vezes o dano bonus causado por um determinado tipo de arma . Este dano é aquele causado pela experiência adquirida no uso das armas.
- Vorpal: Um poderoso encantamento vorpal foi adicionado à arma, que aumenta em 3 vezes o dano bonus causado por um determinado tipo de arma . Este dano é aquele causado pela experiência adquirida no uso das armas.
Outra novidade é no menu. Agora, uma nova opção chamada “Estatísticas”. Se quiser, aperte ESC e vá no menu Estatísticas que fica logo
abaixo da opção “Status”.
Observe que nesta janela existem diversas informações . Cada uma das experiências adquiridas no uso das armas irá aparecer aqui, desde que o herói escolhido possua alguma experiência. As informações podem ser indicadas com casas decimais ou não. Basta configurar no Modulo de setup.
Caso não deseje usar o menu padrão, desative ele no módulo de Setup. Esta opção é muito útil para quem não quer usar o menu padrão , ou já usa algum outro script de menu.
Para aqueles que gostam do ring menu, existe uma surpresa… Já está incluso tudo neste script. Ring menu também. Basta configurar no módulo de setup.
Você pode chamar a tela de estatística de eventos e é possível treinar com as armas (versão 2.0).
Mudanças Na Versão 2.0
Bugs Corrigidos:
- No def main da classe Scene_NivelArmas existia uma referencia a uma janela de help que não existe. A referencia errônea a esta janela de help foi removida.
- Nos eventos, o tipo de arma poderia ser digitado com erros. Para evitar que a execução do jogo fosse abortada, foi criado um método que efetua uma verificação se o tipo de arma realmente existe. Esta rotina foi desenvolvida inicialmente para a janela de treinamento , mas está sendo utilizado para evitar possíveis erros em toda a rotina.
- Ao apresentar a informação da experiência na evolução do uso de armas, quando era zero (0%), aparecia 0,1% devido a um erro no cálculo de percentual com as casas decimais. O cálculo foi corrigido para mostrar o valor 0% corretamente.
- Algumas alterações na janela “Window_PlayTime” foram feitas para evitar que o tempo informado na tela fosse cortado no meio.
Novas Funcionalidades:
- Adicionada janela para treinamento com armas.
- Adicionado ícones (parametrizáveis) nas janelas.
- Mais de quatro personagens.
- Nomes dos tipos de armas parametrizável.
Outras Alterações
- Movido alguns métodos da janela de nível para a janela base. Esta alteração é necessária para se reaproveitar código na janela de treinamento adicionada na versão 2.0 deste script.
Instalação
Basta adicionar o código abaixo acima do Main:
#==============================================================================
# module MC_Setup (Módulo Marcelo Cavaco)
#------------------------------------------------------------------------------
# Este módulo agrupa alguns atributos para que você possa
# personalizar o script à sua necessidade.
# As instruções estão logo abaixo deste módulo (MC_Setup)
#==============================================================================
module MC_Setup
# Escolha o nome do "Tipo de Arma".
# Lembre-se de alterar no Database para ficar com o nome igual ao que está aqui.
ESPADA_CURTA = "Espada Curta"
ESPADA_LONGA = "Espada Longa"
MACHADO = "Machado"
MACA = "Maça"
MARTELO = "Martelo"
CAJADO = "Cajado"
ARCO = "Arco"
LANCA = "Lança"
ADAGA = "Adaga"
CLAVA = "Clava"
EXOTICA = "Exótica"
DESARMADO = "Desarmado"
# ATENÇÃO! Se você alterar os nomes das linhas acima, altere no Database também!
# Escolha o ícone para cada "Tipo de Arma".
ICON_ESPADA_CURTA = "001-Weapon01"
ICON_ESPADA_LONGA = "001-Weapon01"
ICON_MACHADO = "003-Weapon03"
ICON_MACA = "007-Weapon07"
ICON_MARTELO = "007-Weapon07"
ICON_CAJADO = "008-Weapon08"
ICON_ARCO = "005-Weapon05"
ICON_LANCA = "002-Weapon02"
ICON_ADAGA = "004-Weapon04"
ICON_CLAVA = "007-Weapon07"
ICON_EXOTICA = "006-Weapon06"
ICON_DESARMADO = "050-Skill07"
# Escolha o texto das opções da janela de treinamento
JAN_TREINO_TREINAR = "Treinar com esta arma"
JAN_TREINO_SAIR = "Escolher outra arma"
JAN_TREINO_TITULO = "Treinamento com Armas"
JAN_TREINO_GOLD = "Dinheiro do Grupo: "
JAN_TREINO_CUSTO = "Custo do Treinamento: "
# Escolha o modificador (em percentual) do custo de treinamento.
# Números maiores, maior o custo.
MODCUSTOTREINO = 100
# Escolha o modificador de dano bonus. Números maiores, maior dano.
MODDANO = 10
# Escolha o modificador de evolucao. Números maiores, mais rápido evolui.
MODEVOLUCAO = 1
# defina como true para mostrar casas decimais ou false para números inteiros
DECIMAL = true
# Variáveis usadas apenas internamente.
DANOTOTAL = 1 # Mostra na tela apenas o dano total (soma entre normal e bonus).
DANOSOMADO = 2 # Mostra na tela o valor do dano normal, o sinal de '+' e o dano bonus.
# Escolha o tipo de dano entre DANOTOTAL e DANOSOMADO.
MODELO_DANO = DANOSOMADO
# Variáveis usadas apenas internamente.
ALTERARMENUPADRAO = 1 # Tela de estatísticas no menu padrão.
NAOALTERAMENU = 2 # Não altera menu. Tela de estatísticas aberta apenas por eventos.
USARRINGMENU = 3 # Usar ring menu (e tela de estatisticas).
# Escolha o tipo de menu entre ALTERARMENUPADRAO, NAOALTERAMENU e USARRINGMENU.
MODELO_MENU = USARRINGMENU
def initialize
super
end
end
#==============================================================================
# Instruções
#==============================================================================
=begin
Experiência no uso de Armas VERSÃO 2.2
Este script foi desenvolvido por Marcelo Cavaco
(marcelocavaco@click21.com.br)
Testado por HugoLinux
(hugolinux@hotmail.com)
Adaptações por Hugolinux
(hugolinux@hotmail.com)
1 - Mais de 4 personagens
2 - Nomes parametrizados
Considerações da versão 2.2
BUGS CORRIGIDOS
1 - Corrigido erro de ataque sem armas. Quando um herói está lutendo sem armas, o
element_set dele é nulo, portanto precisa ser verificado nas batalhas se está
sendo usada uma arma ou não.
2 - Ajustado tamanho das font's do texto na tela de estatísticas. Quando um herói
treina com várias armas, então a tela se tornava pequena. Devido a isso agora
a font muda de tamanho. Quanto mais treino, menor a font para caber na tela.
3 - Agora só é permitido treinar caso o herói tenha equipado exatamente a arma na
qual ele está querendo treinar . Se você quer treinar "Ash" com um "Machado",
então equipe ele com um machado, caso contrário não será efetuado o treino.
Considerações da versão 2.1
BUGS CORRIGIDOS
1 - Quando chegava a 100% parava de treinar, mas continuava descontando dinheiro.
Além deste problema ser resolvido , a opção de treino foi desabilitada quando
a experiência chega a 100%.
2 - Ao lutar com experiência acima de 70% ocorria um erro, pois não foi atribuído
valor padrão para a variável de modificador de evolução de exp. Esta variável
agora é iniciada com valor 0.
Considerações da versão 2.0
BUGS CORRIGIDOS
1 - No def main da classe Scene_NivelArmas existia uma referencia a uma janela de
help que não existe. A referencia errônea a esta janela de help foi removida.
2 - Nos eventos, o tipo de arma poderia ser digitado com erros. Para evitar que a
execução do jogo fosse abortada, foi criado um método que efetua uma verifica
se o tipo de arma realmente existe. Esta rotina foi desenvolvida inicialmente
para a janela de treinamento , mas está sendo utilizado para evitar possíveis
erros em toda a rotina.
3 - Ao apresentar a informação da experiência na evolução do uso de armas, quando
era zero (0%), aparecia 0,1% deviso a um erro no cálculo de percentual com as
casas decimais. O cálculo foi corrigido para mostrar o valor 0% corretamente.
4 - Algumas alterações na janela "Window_PlayTime" foram feitas para evitar que o
tempo informado na tela fosse cortado no meio.
NOVAS FUNCIONALIDADES
1 - Adicionada janela para treinamento com armas.
2 - Adicionado ícones (parametrizaveis) nas janelas.
3 - Mais de quatro personagens.
4 - Nomes dos tipos de armas parametrizável.
OUTRAS ALTERAÇÕES
1 - Movido alguns métodos da janela de nível para a janela base. Esta alteração é
necessária para se reaproveitar código na janela de treinamento adicionada na
versão 2.0 deste script.
Para utilizá-lo, basta coipar/colar em cima do main.
***
Ao usar este script, algumas funcionalidades novas serão adicionadas ao seu jogo.
Cada arma pode ser de um determinado tipo (que deve ser indicado no database). Os
tipos de armas são:
Espada Curta
Espada Longa
Machado
Maça
Martelo
Cajado
Arco
Lança
Adaga
Clava
Exótica
Desarmado
Vamos supor que a classe do nosso herói "Ash" permite que ele use "Espada Longa"
e "Machado". Se Ash usar a "Espada Longa" diversas vezes, ele irá ficar bastante
experiente no uso deste tipo de arma. Se ele trocar de arma e passar a usar para
um "Machado", então o dano causado deve ser menor que a da Espada Longa (que ele
já usou muito mais).
Resumindo: Quanto mais vezes nosso herói lutar com um tipo de arma, maior será o
bonus no dano ao usar este tipo de arma.
Além do tipo de arma, há também um outro atributo chamado "Longa Distância", que
serve apenas para organizar as informações de uma forma melhor na tela.
Outra novidade criada é o poder da arma. Cada arma pode ter um ou mais atributos
que modificam considerávelmente as propriedades das armas. Eles podem ser usados
separadamente ou em conjunto. Tudo depende da configuração das armas no database
Os atributos de poder são:
Lâmina Afiada
Flamejante
Congelante
Elétrica
Toque Espectral
Rompimento
Sangramento
Sagrada
Profana
Vorpal
Vejamos o que cada atributo deste faz:
*****************
* Lâmina Afiada *
*****************
A arma foi encantada com uma forte magia no momento em que estava sendo "afiada".
Este encantamento dobra a margem de ameaça de uma arma, ou seja, duplica a chance
de um ataque crítico.
**************
* Flamejante *
**************
Esta arma, quando usada num ataque irrompe em chamas. O fogo não afeta as mãos do
usuário. As armas flamejantes causam 1d5 pontos de dano adicional por fogo a cada
nível de usuário. Armas de longa distância imbuem sua munição com as chamas.
**************
* Congelante *
**************
Esta arma, quando usada num ataque fica coberta de gelo. O frio não afeta as mãos
do usuário. Armas congelantes causam 1d4 pontos de dano adicional por frio a cada
nível de usuário. Armas de longa distância imbuem sua munição com o gelo.
************
* Elétrica *
************
Esta arma, quando usada em um ataque fica carregada de eletricidade. Esta energia
não afeta as mãos do usuário. A "eletricidade" causa 1d6 pontos de dano adicional
por energia elétrica a cada nível de usuário. Armas de longa distância imbuem sua
munição com a eletricidade.
*******************
* Toque Espectral *
*******************
Um poderoso encantamento etéreo foi adiconado à arma. O "poder etéreo" aumenta em
50% o dano causado por esta arma. Armas de longa distância imbuem sua munição com
a eletricidade.
**************
* Rompimento *
**************
Um encantamento mortal foi adiconado nesta arma e o toque da morte está presente
nela. A maioria das criaturam não suportam o dano multiplicado por "10" vezes que
esta causa e acabam morrendo imediatamente. Armas de longa distância imbuem a sua
munição com este impressionante poder.
***************
* Sangramento *
***************
Um poderoso encantamento etéreo foi adiconado à arma. O "poder etéreo" aumenta em
100 % o dano causado pela arma. Armas de longa distância imbuem a sua munição com
este poder.
***********
* Sagrada *
***********
Um poderoso encantamento sagrado foi adiconado à arma. O poder sagrado aumenta em
50% o dano bonus causado por um determinado tipo de arma. O "dano bonus" é aquele
causado pela experiência adquirida no uso das armas (explicado anteriormente).
***********
* Profana *
***********
Um poderoso encantamento profano foi adiconado à arma. O poder profano aumenta em
2 vezes o dano bonus causado por um determinado tipo de arma . Este dano é aquele
causado pela experiência adquirida no uso das armas (explicado anteriormente).
**********
* Vorpal *
**********
Um poderoso encantamento vorpal foi adiconado à arma. O "poder vorpal" aumenta em
3 vezes o dano bonus causado por um determinado tipo de arma . Este dano é aquele
causado pela experiência adquirida no uso das armas (explicado anteriormente).
Acabou ?
Ainda não !!!
Outra novidade é no menu. Agora, uma nova opção chamada "Estatísticas". Se quiser
ver as estatísticas, aperte a tecla [ESC] e vá no menu Estatísticas que fica logo
abaixo da opção "Status".
Observe que nesta janela existem diversas informações . Cada uma das experiências
adquiridas no uso das armas irá aparecer aqui, desde que o herói escolhido possua
alguma experiência. As informações podem ser indicadas com casas decimais ou não.
Basta configurar no Modulo de setup.
Caso não deseje usar o menu padrão, desative ele no módulo de Setup. Esta opção é
muito útil para quem não quer usar o menu padrão , pois já usa algum outro script
de menu.
Para aqueles que gostão do ring menu, existe uma surpresa... Já está incluso tudo
neste script. Ring menu também. Basta configurar no módulo de setup.
Existe ainda mais uma opção. Chamar a tela de estatísticas por eventos. Quem deve
escolher é você.
E ainda é possível treinar com as armas (versão 2.0). Evolua sem precisar lutar!!
Uma última observação. (Finalmente).
Se o herói usar muito um tipo de arma, os outros tipos vão lentamente diminuindo.
Espero que gostem... E mandem um e-mail para marcelocavaco@click21.com.br falando
o que acharam.
=end
#==============================================================================
# Game_Battler (3)
#------------------------------------------------------------------------------
# Esta classe considera os jogadores da batalha.
# Esta classe identifica os Aliados ou Heróis como (Game_Actor) e
# os Inimigos como (Game_Enemy).
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# - Verifica quais os Atributos secundários a Arma possui.
#
# attacker : Atacante
# cAtributo : Nome do Atributo a ser procurado
#--------------------------------------------------------------------------
def possui_atributo(attacker, cAtributo)
lRetorno = false
if attacker.is_a?(Game_Actor) and attacker.weapon_id > 0 then
atribs = $data_weapons[ attacker.weapon_id ].element_set
for nI in atribs
if atribs.include?(nI) then
cNome = $data_system.elements[ nI ]
if cNome == cAtributo then
lRetorno = true
end
end
end
end
return lRetorno
end
#--------------------------------------------------------------------------
# - Retorna o valor atual do atributo de habilidade
#
# actor : Herói Atacante
# atributo : Atributo a ser procurado
#--------------------------------------------------------------------------
def eh_um_tipo_de_arma(actor, atributo)
lretorno = false
cNome = $data_system.elements[ atributo ]
if cNome == MC_Setup::DESARMADO or cNome == MC_Setup::ESPADA_CURTA or cNome == MC_Setup::ESPADA_LONGA or
cNome == MC_Setup::MACHADO or cNome == MC_Setup::MACA or cNome == MC_Setup::MARTELO or
cNome == MC_Setup::CAJADO or cNome == MC_Setup::ARCO or cNome == MC_Setup::LANCA or
cNome == MC_Setup::ADAGA or cNome == MC_Setup::CLAVA or cNome == MC_Setup::EXOTICA then
lRetorno = true
end
return lRetorno
end
#--------------------------------------------------------------------------
# - Retorna o valor atual do atributo de habilidade
#
# actor : Herói Atacante
# atributo : Atributo a ser procurado
#--------------------------------------------------------------------------
def retorna_hab_atributo(actor, atributo)
retorno = 0
cNome = $data_system.elements[ atributo ]
if cNome == MC_Setup::DESARMADO then
retorno = actor.desarmado_n
elsif cNome == MC_Setup::ESPADA_CURTA then
retorno = actor.espada_curta_n
elsif cNome == MC_Setup::ESPADA_LONGA then
retorno = actor.espada_longa_n
elsif cNome == MC_Setup::MACHADO then
retorno = actor.machado_n
elsif cNome == MC_Setup::MACA then
retorno = actor.maca_n
elsif cNome == MC_Setup::MARTELO then
retorno = actor.martelo_n
elsif cNome == MC_Setup::CAJADO then
retorno = actor.cajado_n
elsif cNome == MC_Setup::ARCO then
retorno = actor.arco_n
elsif cNome == MC_Setup::LANCA then
retorno = actor.lanca_n
elsif cNome == MC_Setup::ADAGA then
retorno = actor.adaga_n
elsif cNome == MC_Setup::CLAVA then
retorno = actor.clava_n
elsif cNome == MC_Setup::EXOTICA then
retorno = actor.exotica_n
end
return retorno
end
#--------------------------------------------------------------------------
# - Atualiza o valor do atributo de habilidade
#
# actor : Herói Atacante
# atributo : Atributo a ser procurado
# valor : Valor a ser atualizado
#--------------------------------------------------------------------------
def atualiza_hab_atributo(actor, atributo, valor)
cNome = $data_system.elements[ atributo ]
if cNome == MC_Setup::DESARMADO then
actor.hab_desarmado = valor
elsif cNome == MC_Setup::ESPADA_CURTA then
actor.hab_espada_curta = valor
elsif cNome == MC_Setup::ESPADA_LONGA then
actor.hab_espada_longa = valor
elsif cNome == MC_Setup::MACHADO then
actor.hab_machado = valor
elsif cNome == MC_Setup::MACA then
actor.hab_maca = valor
elsif cNome == MC_Setup::MARTELO then
actor.hab_martelo = valor
elsif cNome == MC_Setup::CAJADO then
actor.hab_cajado = valor
elsif cNome == MC_Setup::ARCO then
actor.hab_arco = valor
elsif cNome == MC_Setup::LANCA then
actor.hab_lanca = valor
elsif cNome == MC_Setup::ADAGA then
actor.hab_adaga = valor
elsif cNome == MC_Setup::CLAVA then
actor.hab_clava = valor
elsif cNome == MC_Setup::EXOTICA then
actor.hab_exotica = valor
end
end
#--------------------------------------------------------------------------
# - Calcula o bonus do dano da habilidade de armas
#
# actor : Herói Atacante
# nValor : Atributo a ser atualizado
#--------------------------------------------------------------------------
def atualiza_atributos_nao_usados(actor, nValor)
if (nValor%100) == 0 then
actor.hab_desarmado = -10
actor.hab_espada_curta = -10
actor.hab_espada_longa = -10
actor.hab_machado = -10
actor.hab_maca = -10
actor.hab_martelo = -10
actor.hab_cajado = -10
actor.hab_arco = -10
actor.hab_lanca = -10
actor.hab_adaga = -10
actor.hab_clava = -10
actor.hab_exotica = -10
end
end
#--------------------------------------------------------------------------
# - Calcula o bonus do dano da habilidade de armas
#
# actor : Herói Atacante
# atributo : Atributo a ser atualizado
#--------------------------------------------------------------------------
def calcula_bonus_dano_hab_atributo(actor, atributo)
if eh_um_tipo_de_arma(actor, atributo) then
nValAtribTemp = retorna_hab_atributo(actor, atributo)
if nValAtribTemp <= 1000 then
nValorAtributo = 20
elsif nValAtribTemp <= 5000 then
nValorAtributo = 12
elsif nValAtribTemp <= 7000 then
nValorAtributo = 6
elsif nValAtribTemp <= 10000 then
nValorAtributo = 4
else
nValorAtributo = 0
end
atualiza_atributos_nao_usados(actor, nValAtribTemp)
nValorAtributo = nValorAtributo + MC_Setup::MODEVOLUCAO
atualiza_hab_atributo(actor, atributo, nValorAtributo)
nValAtribTemp = retorna_hab_atributo(actor, atributo) # BUSCANDO VALOR ATUALIZADO
nBonusDano = ( nValAtribTemp * MC_Setup::MODDANO ) / 100
nBonusDano = nBonusDano + ( rand(3) * actor.level )
else
nBonusDano = 0
end
return nBonusDano
end
#--------------------------------------------------------------------------
# - Calcular o Modificador do Dano
#
# attacker : Atacante
#--------------------------------------------------------------------------
def calc_bonus_dano(attacker)
nBonusDano = 0
if attacker.is_a?(Game_Actor) and attacker.weapon_id > 0 then
actor = $game_party.actors[attacker.index]
atribs = $data_weapons[ actor.weapon_id ].element_set
for nI in atribs
if atribs.include?(nI) then
nBonusTemp = calcula_bonus_dano_hab_atributo(actor, nI)
nBonusDano = nBonusDano + nBonusTemp
end
end
end
return nBonusDano
end
#--------------------------------------------------------------------------
# - Verifica se o actor está usando uma arma de longa distância
#
# attacker : Atacante
#--------------------------------------------------------------------------
def eh_longa_distancia(attacker)
lRetorno = false
if attacker.is_a?(Game_Actor) and attacker.weapon_id > 0 then
atribs = $data_weapons[ attacker.weapon_id ].element_set
for nI in atribs
if atribs.include?(nI) then
cNome = $data_system.elements[ nI ]
if cNome == "Longa Distância" then
lRetorno = true
end
end
end
end
return lRetorno
end
#--------------------------------------------------------------------------
# - Aplicar o Efeito de um Ataque
#
# attacker : Atacante
#--------------------------------------------------------------------------
def attack_effect(attacker)
dano_normal = 0
# Descobrindo se o atacante é um herói ou monstro
if attacker.is_a?(Game_Actor)
actor = $game_party.actors[attacker.index]
eh_heroi = true
else
actor = $game_party.actors[self.index]
eh_heroi = false
end
if possui_atributo(attacker, "Lâmina Afiada") then
nModCritico = 2
else
nModCritico = 4
end
if possui_atributo(attacker, "Flamejante") then
nDanoFogo = rand(5) * actor.level
else
nDanoFogo = 0
end
if possui_atributo(attacker, "Congelante") then
nDanoGelo = rand(4) * actor.level
else
nDanoGelo = 0
end
if possui_atributo(attacker, "Elétrica") then
nDanoRaio = rand(6) * actor.level
else
nDanoRaio = 0
end
if possui_atributo(attacker, "Toque Espectral") then
nDanoEspectro = 3/2
else
nDanoEspectro = 1
end
if possui_atributo(attacker, "Rompimento") then
nDanoRompimento = 10
else
nDanoRompimento = 1
end
if possui_atributo(attacker, "Sangramento") then
nDanoSangramento = 2
else
nDanoSangramento = 1
end
if possui_atributo(attacker, "Sagrada") then
nModSagrado = 3/2
else
nModSagrado = 1
end
if possui_atributo(attacker, "Profana") then
nModProfano = 2
else
nModProfano = 1
end
if possui_atributo(attacker, "Vorpal") then
nModVorpal = 3
else
nModVorpal = 1
end
# Esvaziar a flag de ataque crítico
self.critical = false
# Verificação do primeiro ataque
hit_result = (rand(100) < attacker.hit)
# Em caso de ataque á distância
if hit_result == true
# Cálculo dos danos básicos
atk = [attacker.atk - self.pdef / 2, 0].max
dano_normal = atk * (20 + attacker.str) / 20
# Calcular atributo
dano_normal *= elements_correct(attacker.element_set)
dano_normal /= 100
# Se o dano for positivo
if dano_normal > 0
# Calcular dano crítico
if rand(100) < nModCritico * attacker.dex / self.agi
dano_normal *= 2
self.critical = true
end
# calcular defesa
if self.guarding?
dano_normal /= 2
end
end
# Aplicar dano
if dano_normal.abs > 0
amp = [dano_normal.abs * 15 / 100, 1].max
dano_normal += rand(amp+1) + rand(amp+1) - amp
end
# Se for dano duplicado
eva = 8 * self.agi / attacker.dex + self.eva
hit = dano_normal < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
dano_bonus = calc_bonus_dano(attacker)
dano_bonus = dano_bonus * nModSagrado
dano_bonus = dano_bonus * nModProfano
dano_bonus = dano_bonus * nModVorpal
dano_normal = dano_normal + nDanoFogo + nDanoGelo + nDanoRaio
dano_normal = dano_normal * nDanoEspectro
dano_normal = dano_normal * nDanoRompimento
dano_normal = dano_normal * nDanoSangramento
if MC_Setup::MODELO_DANO == MC_Setup::DANOTOTAL then
dano_total = dano_normal + dano_bonus
dano_total = dano_total.to_s
end
if MC_Setup::MODELO_DANO == MC_Setup::DANOSOMADO then
dano_total = dano_normal.to_s + " + " + dano_bonus.to_s
end
# Atualizando Atributos de Nível
if eh_heroi
self.damage = dano_total
# gravando dano causado
if eh_longa_distancia(actor)
actor.damage_ranged_out = dano_normal + dano_bonus
else
actor.damage_meele_out = dano_normal + dano_bonus
end
else
# Para os monstros, o modelo deve ser sempre este.
dano_total = dano_normal + dano_bonus
self.damage = dano_total.to_s
# gravando dano recebido
if eh_longa_distancia(actor)
actor.damage_ranged_in = dano_normal
else
actor.damage_meele_in = dano_normal
end
end
end
# Caso de acerto
if hit_result == true
# Aplicar dano se for choque
remove_states_shock
# Subtrair dano do HP + bonus do dano
dano_total = dano_normal + dano_bonus
self.hp -= dano_total
# Trocar status
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# Se houver falha
else
# Ao tentar o ataque, exibir a palavra...
self.damage = "Errou!"
# Esvaziar a Flag de ataque crítico
self.critical = false
end
# Fim
return true
end
#--------------------------------------------------------------------------
# - Aplicar o Efeito da Habilidade
#
# user : Jogador que utiliza a Habilidade
# skill : Habilidade
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# Esvaziar a Flag de ataque crítico
self.critical = false
# O alcance da Habilidade é um aliado com 1 de HP
# Ou efeito da Habilidade em um aliado de HP 0.
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# Fim
return false
end
# Esvaziar Flag de efeito
effective = false
# Flag de efeito quanto houver um evento comum
effective |= skill.common_event_id > 0
# Verificar o primeiro ataque
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# Se a Habilidade não for efetiva
effective |= hit < 100
# Se acertar
if hit_result == true
# Cálculo do Dano
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# Calcular amplificação
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# Cálculo do dano básico
self.damage = power * rate / 20
# Correccion de Atributo
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# Quando o dano for positivo
if self.damage > 0
# Calcular defesa
if self.guarding?
self.damage /= 2
end
end
# Aplicação do dano
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# Verificar segundo ataque
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# Se a Habilidade não for efetiva
effective |= hit < 100
# Buscado o Herói que está atacando
if user.is_a?(Game_Actor)
actor = $game_party.actors[user.index]
# gravando dano causado
actor.damage_magic_out = self.damage
else
actor = $game_party.actors[self.index]
# gravando dano causado
actor.damage_magic_in = self.damage
end
end
# Se acertar
if hit_result == true
# Força
if skill.power != 0 and skill.atk_f > 0
# Aplicação do status de choque
remove_states_shock
# Aplicar Flag de efeito
effective = true
end
# Subtrair dano do HP
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# Troca de status
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# Se a Força for 0
if skill.power == 0
# Uma sequencia de caracteres vazios é exibida como dano
self.damage = ""
# Quando o status não é alterado
unless @state_changed
# Ao errar exibir...
self.damage = "Errou!"
end
end
# Em caso de Erro
else
# Ao errar exibir...
self.damage = "Errou!"
end
# Quando não se está em batalha
unless $game_temp.in_battle
# Ao errar não colocar nada
self.damage = nil
end
# Fim
return effective
end
end
#==============================================================================
# Game_Actor
#------------------------------------------------------------------------------
# Esta é a classe que trata dos Heróis na Batalha.
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# - Variáveis de Instância Pública
#--------------------------------------------------------------------------
# Variáveis públicas para nível criadas
attr_reader :damage_meele_in # Dano de ataque normal recebido
attr_reader :damage_meele_out # Dano de ataque normal causado
attr_reader :damage_ranged_in # Dano de ataque de longa distância recebido
attr_reader :damage_ranged_out # Dano de ataque de longa distância causado
attr_reader :damage_magic_in # Dano de ataque mágico recebido
attr_reader :damage_magic_out # Dano de ataque mágico causado
attr_reader :flee_sucess # Número de Fugas efetuadas com sucesso
attr_reader :flee_fail # Número de Fugas falhas
# Variáveis públicas habilidade com armas criadas
attr_reader :desarmado # Habilidade em luta desarmado
attr_reader :espada_curta # Habilidade com Espadas Curtas
attr_reader :espada_longa # Habilidade com Espadas Logas
attr_reader :machado # Habilidade com Machados
attr_reader :maca # Habilidade com Maças
attr_reader :martelo # Habilidade com Martelos
attr_reader :cajado # Habilidade com Cajados/Cetros
attr_reader :arco # Habilidade com Arcos
attr_reader :lanca # Habilidade com Lanças
attr_reader :adaga # Habilidade com Adagas e Facas
attr_reader :clava # Habilidade com Clavas e Porretes
attr_reader :ninja # Habilidade com Armas de Ninja
attr_reader :exotica # Habilidade com Armas Exóticas
attr_reader :maximo # Máximo de Experiênca com Armas
#--------------------------------------------------------------------------
# Inicialização dos Objetos
#
# actor_id : ID do Herói
#--------------------------------------------------------------------------
def initialize(actor_id)
super()
setup(actor_id)
@damage_meele_in = 0
@damage_meele_out = 0
@damage_ranged_in = 0
@damage_ranged_out = 0
@damage_magic_in = 0
@damage_magic_out = 0
@flee_sucess = 0
@flee_fail = 0
@desarmado = 0
@espada_curta = 0
@espada_longa = 0
@machado = 0
@maca = 0
@martelo = 0
@cajado = 0
@arco = 0
@lanca = 0
@adaga = 0
@clava = 0
@exotica = 0
@maximo = 10000
end
#--------------------------------------------------------------------------
# - Retorna a quantidade de habilidades treinadas pelo herói
#--------------------------------------------------------------------------
def quantidade_hab()
quantidade = 0
if desarmado_n > 1
quantidade = quantidade + 1
end
if espada_curta_n > 1
quantidade = quantidade + 1
end
if espada_longa_n > 1
quantidade = quantidade + 1
end
if machado_n > 1
quantidade = quantidade + 1
end
if maca_n > 1
quantidade = quantidade + 1
end
if martelo_n > 1
quantidade = quantidade + 1
end
if desarmado_n > 1
quantidade = quantidade + 1
end
if arco_n > 1
quantidade = quantidade + 1
end
if lanca_n > 1
quantidade = quantidade + 1
end
if adaga_n > 1
quantidade = quantidade + 1
end
if clava_n > 1
quantidade = quantidade + 1
end
if exotica_n > 1
quantidade = quantidade + 1
end
return quantidade
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Desarmado
#--------------------------------------------------------------------------
def hab_desarmado=(hab_desarmado_value)
if (@desarmado + hab_desarmado_value) > @maximo
@desarmado = @maximo
elsif (@desarmado + hab_desarmado_value) < 0
@desarmado = 0
else
@desarmado += hab_desarmado_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Espada Curta
#--------------------------------------------------------------------------
def hab_espada_curta=(hab_espada_curta_value)
if (@espada_curta + hab_espada_curta_value) > @maximo
@espada_curta = @maximo
elsif (@espada_curta + hab_espada_curta_value) < 0
@espada_curta = 0
else
@espada_curta += hab_espada_curta_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Espada Longa
#--------------------------------------------------------------------------
def hab_espada_longa=(hab_espada_longa_value)
if (@espada_longa + hab_espada_longa_value) > @maximo
@espada_longa = @maximo
elsif (@espada_longa + hab_espada_longa_value) < 0
@espada_longa = 0
else
@espada_longa += hab_espada_longa_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Machado
#--------------------------------------------------------------------------
def hab_machado=(hab_machado_value)
if (@machado + hab_machado_value) > @maximo
@machado = @maximo
elsif (@machado + hab_machado_value) < 0
@machado = 0
else
@machado += hab_machado_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Maca
#--------------------------------------------------------------------------
def hab_maca=(hab_maca_value)
if (@maca + hab_maca_value) > @maximo
@maca = @maximo
elsif (@maca + hab_maca_value) < 0
@maca = 0
else
@maca += hab_maca_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Martelo
#--------------------------------------------------------------------------
def hab_martelo=(hab_martelo_value)
if (@martelo + hab_martelo_value) > @maximo
@martelo = @maximo
elsif (@martelo + hab_martelo_value) < 0
@martelo = 0
else
@martelo += hab_martelo_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Cajado
#--------------------------------------------------------------------------
def hab_cajado=(hab_cajado_value)
if (@cajado + hab_cajado_value) > @maximo
@cajado = @maximo
elsif (@cajado + hab_cajado_value) < 0
@cajado = 0
else
@cajado += hab_cajado_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Arco e Flecha
#--------------------------------------------------------------------------
def hab_arco=(hab_arco_value)
if (@arco + hab_arco_value) > @maximo
@arco = @maximo
elsif (@arco + hab_arco_value) < 0
@arco = 0
else
@arco += hab_arco_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Lança
#--------------------------------------------------------------------------
def hab_lanca=(hab_lanca_value)
if (@lanca + hab_lanca_value) > @maximo
@lanca = @maximo
elsif (@lanca + hab_lanca_value) < 0
@lanca = 0
else
@lanca += hab_lanca_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Adaga
#--------------------------------------------------------------------------
def hab_adaga=(hab_adaga_value)
if (@adaga + hab_adaga_value) > @maximo
@adaga = @maximo
elsif (@adaga + hab_adaga_value) < 0
@adaga = 0
else
@adaga += hab_adaga_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Clava
#--------------------------------------------------------------------------
def hab_clava=(hab_clava_value)
if (@clava + hab_clava_value) > @maximo
@clava = @maximo
elsif (@clava + hab_clava_value) < 0
@clava = 0
else
@clava += hab_clava_value
end
end
#--------------------------------------------------------------------------
# - Atualizar Habilidade Exotica
#--------------------------------------------------------------------------
def hab_exotica=(hab_exotica_value)
if (@exotica + hab_exotica_value) > @maximo
@exotica = @maximo
elsif (@exotica + hab_exotica_value) < 0
@exotica = 0
else
@exotica += hab_exotica_value
end
end
#--------------------------------------------------------------------------
# - Atualizar damage_meele_in
#--------------------------------------------------------------------------
def damage_meele_in=(damage_meele_in_value)
@damage_meele_in += damage_meele_in_value
end
#--------------------------------------------------------------------------
# - Atualizar damage_meele_out
#--------------------------------------------------------------------------
def damage_meele_out=(damage_meele_out_value)
@damage_meele_out += damage_meele_out_value
end
#--------------------------------------------------------------------------
# - Atualizar damage_ranged_in
#--------------------------------------------------------------------------
def damage_ranged_in=(damage_ranged_in_value)
@damage_ranged_in += damage_ranged_in_value
end
#--------------------------------------------------------------------------
# - Atualizar damage_ranged_out
#--------------------------------------------------------------------------
def damage_ranged_out=(damage_ranged_out_value)
@damage_ranged_out += damage_ranged_out_value
end
#--------------------------------------------------------------------------
# - Atualizar damage_magic_in
#--------------------------------------------------------------------------
def damage_magic_in=(damage_magic_in_value)
@damage_magic_in += damage_magic_in_value
end
#--------------------------------------------------------------------------
# - Atualizar damage_magic_out
#--------------------------------------------------------------------------
def damage_magic_out=(damage_magic_out_value)
@damage_magic_out += damage_magic_out_value
end
#--------------------------------------------------------------------------
# - Atualizar flee_sucess
#--------------------------------------------------------------------------
def flee_sucess=(flee_sucess_value)
@flee_sucess += flee_sucess_value
end
#--------------------------------------------------------------------------
# - Atualizar flee_fail
#--------------------------------------------------------------------------
def flee_fail=(flee_fail_value)
@flee_fail += flee_fail_value
end
#--------------------------------------------------------------------------
# - Retona valor do damage_meele_in
#--------------------------------------------------------------------------
def damage_meele_in_s
return @damage_meele_in > 0 ? @damage_meele_in.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do damage_meele_out
#--------------------------------------------------------------------------
def damage_meele_out_s
return @damage_meele_out > 0 ? @damage_meele_out.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do damage_ranged_in
#--------------------------------------------------------------------------
def damage_ranged_in_s
return @damage_ranged_in > 0 ? @damage_ranged_in.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do damage_ranged_out
#--------------------------------------------------------------------------
def damage_ranged_out_s
return @damage_ranged_out > 0 ? @damage_ranged_out.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do damage_magic_in_s
#--------------------------------------------------------------------------
def damage_magic_in_s
return @damage_magic_in > 0 ? @damage_magic_in.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do damage_magic_out
#--------------------------------------------------------------------------
def damage_magic_out_s
return @damage_magic_out > 0 ? @damage_magic_out.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do flee_sucess
#--------------------------------------------------------------------------
def flee_sucess_s
return @flee_sucess > 0 ? @flee_sucess.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do flee_fail
#--------------------------------------------------------------------------
def flee_fail_s
return @flee_fail > 0 ? @flee_fail.to_s : "00000"
end
#--------------------------------------------------------------------------
# - Retona valor do desarmado
#--------------------------------------------------------------------------
def desarmado_n
return @desarmado > 0 ? @desarmado : 1
end
#--------------------------------------------------------------------------
# - Retona valor da espada curta
#--------------------------------------------------------------------------
def espada_curta_n
return @espada_curta > 0 ? @espada_curta : 1
end
#--------------------------------------------------------------------------
# - Retona valor da espada longa
#--------------------------------------------------------------------------
def espada_longa_n
return @espada_longa > 0 ? @espada_longa : 1
end
#--------------------------------------------------------------------------
# - Retona valor do machado
#--------------------------------------------------------------------------
def machado_n
return @machado > 0 ? @machado : 1
end
#--------------------------------------------------------------------------
# - Retona valor da maça
#--------------------------------------------------------------------------
def maca_n
return @maca > 0 ? @maca : 1
end
#--------------------------------------------------------------------------
# - Retona valor do martelo
#--------------------------------------------------------------------------
def martelo_n
return @martelo > 0 ? @martelo : 1
end
#--------------------------------------------------------------------------
# - Retona valor do cajado
#--------------------------------------------------------------------------
def cajado_n
return @cajado > 0 ? @cajado : 1
end
#--------------------------------------------------------------------------
# - Retona valor do arco
#--------------------------------------------------------------------------
def arco_n
return @arco > 0 ? @arco : 1
end
#--------------------------------------------------------------------------
# - Retona valor da lança
#--------------------------------------------------------------------------
def lanca_n
return @lanca > 0 ? @lanca : 1
end
#--------------------------------------------------------------------------
# - Retona valor da adaga
#--------------------------------------------------------------------------
def adaga_n
return @adaga > 0 ? @adaga : 1
end
#--------------------------------------------------------------------------
# - Retona valor da clava
#--------------------------------------------------------------------------
def clava_n
return @clava > 0 ? @clava : 1
end
#--------------------------------------------------------------------------
# - Retona valor das armas exóticas
#--------------------------------------------------------------------------
def exotica_n
return @exotica > 0 ? @exotica : 1
end
#--------------------------------------------------------------------------
# - Retona valor maximo da habilidade com armas
#--------------------------------------------------------------------------
def maximo_n
return @maximo > 0 ? @maximo : 10000
end
#--------------------------------------------------------------------------
# - Retona true se o heroi pode treinar ou não.
#--------------------------------------------------------------------------
def pode_treinar( cAtributo )
pode_efetuar_treinamento = false
if self.weapon_id > 0 then
atribs = $data_weapons[ self.weapon_id ].element_set
for nI in atribs
if atribs.include?(nI) then
cNome = $data_system.elements[ nI ]
if cNome == cAtributo then
pode_efetuar_treinamento = true
end
end
end
end
return pode_efetuar_treinamento
end
end
#==============================================================================
# Window_Base
#------------------------------------------------------------------------------
# Esta classe é para todos as janelas do jogo
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# - Verifica se o tipo de arma. Criado para ser usado como garantia de que
# o texto digitado na tela de treinamento é válido.
#
# cTexto : tipo de arma que se deseja verificar
#--------------------------------------------------------------------------
def existe_tipo(cTexto)
lEncontrei = false
if cTexto == MC_Setup::DESARMADO or
cTexto == MC_Setup::ESPADA_CURTA or
cTexto == MC_Setup::ESPADA_LONGA or
cTexto == MC_Setup::MACHADO or
cTexto == MC_Setup::MACA or
cTexto == MC_Setup::MARTELO or
cTexto == MC_Setup::CAJADO or
cTexto == MC_Setup::ARCO or
cTexto == MC_Setup::LANCA or
cTexto == MC_Setup::ADAGA or
cTexto == MC_Setup::CLAVA or
cTexto == MC_Setup::EXOTICA then
lEncontrei = true
end
return lEncontrei
end
#--------------------------------------------------------------------------
# - Busca o Nome do ícone para cada tipo de arma
#
# cTexto : tipo de arma que se deseja buscar o nome do ícone
#--------------------------------------------------------------------------
def buscar_nome_icone(cTexto)
cNome_Icone = ""
if existe_tipo(cTexto)
if cTexto == MC_Setup::DESARMADO then
cNome_Icone = MC_Setup::ICON_DESARMADO
elsif cTexto == MC_Setup::ESPADA_CURTA then
cNome_Icone = MC_Setup::ICON_ESPADA_CURTA
elsif cTexto == MC_Setup::ESPADA_LONGA then
cNome_Icone = MC_Setup::ICON_ESPADA_LONGA
elsif cTexto == MC_Setup::MACHADO then
cNome_Icone = MC_Setup::ICON_MACHADO
elsif cTexto == MC_Setup::MACA then
cNome_Icone = MC_Setup::ICON_MACA
elsif cTexto == MC_Setup::MARTELO then
cNome_Icone = MC_Setup::ICON_MARTELO
elsif cTexto == MC_Setup::CAJADO then
cNome_Icone = MC_Setup::ICON_CAJADO
elsif cTexto == MC_Setup::ARCO then
cNome_Icone = MC_Setup::ICON_ARCO
elsif cTexto == MC_Setup::LANCA then
cNome_Icone = MC_Setup::ICON_LANCA
elsif cTexto == MC_Setup::ADAGA then
cNome_Icone = MC_Setup::ICON_ADAGA
elsif cTexto == MC_Setup::CLAVA then
cNome_Icone = MC_Setup::ICON_CLAVA
elsif cTexto == MC_Setup::EXOTICA then
cNome_Icone = MC_Setup::ICON_EXOTICA
end
end
return cNome_Icone
end
#--------------------------------------------------------------------------
# - Busca o Nome do ícone para cada tipo de arma
#
# cTexto : tipo de arma que se deseja buscar o nome do ícone
#--------------------------------------------------------------------------
def buscar_icone(cTexto)
cNomeDoIcone = self.buscar_nome_icone( cTexto )
if cNomeDoIcone != ""
return RPG::Cache.icon( cNomeDoIcone )
else
return nil
end
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Ataques Desarmados
#
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# bitmap : Bitmap do ícone a ser desenhado
#--------------------------------------------------------------------------
def draw_icones(x, y, bitmap)
self.contents.blt(x, y, bitmap, Rect.new(0, 0, 24, 24), 255)
end
#--------------------------------------------------------------------------
# - Desenhar uma Determinada Picture
#
# picture_name : Nome da Picture a ser desenhada
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
#--------------------------------------------------------------------------
def draw_picture(picture_name, x, y, cw, ch)
if FileTest.exist?("Graphics/Pictures/" + picture_name + ".png")
bitmap = RPG::Cache.picture(picture_name)
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , bitmap, src_rect)
else
print "A figura Graphics/Pictures/" + picture_name + ".png não foi encontrada!\n\nEntre em contato com marcelocavaco@click21.com.br para mais detalhes..."
end
end
#--------------------------------------------------------------------------
# - Desenhar a Barra
#
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
# val_atul : Valor atual para calcular o percentual
# max : Valor máximo para calcular o percentual
#--------------------------------------------------------------------------
def draw_bar(x, y, width, val_atual, max)
w = width * val_atual / max
# White border and black back
border_back(x,y,width)
# Generating the color
blue = 100 + (155 * val_atual/max)
red = blue/2
green = blue/1
color = Color.new(red,green,blue,255)
w_color = Color.new(150,150 ,blue,250)
b_color = Color.new(50 ,50 ,blue,250)
# Making the bar
make_bar(x,y,w,color,w_color,b_color)
end
#--------------------------------------------------------------------------
# - Desenhar Borda das Barras
#
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da borda da barra
#--------------------------------------------------------------------------
def border_back(x, y, width)
white = Color.new(255,255,255,255)
black = Color.new(0,0,0,255)
# White border
self.contents.fill_rect(x+1, y-1 , width-2, 1, white)
self.contents.fill_rect(x , y , width , 1, white)
self.contents.fill_rect(x-1, y+1 , width+2, 9, white)
self.contents.fill_rect(x , y+10, width , 1, white)
self.contents.fill_rect(x+1, y+11, width-2, 1, white)
# Black back
self.contents.fill_rect(x+2, y , width-4, 1, black)
self.contents.fill_rect(x+1, y+1 , width-2, 1, black)
self.contents.fill_rect(x , y+2 , width , 7, black)
self.contents.fill_rect(x+1, y+9 , width-2, 1, black)
self.contents.fill_rect(x+2, y+10, width-4, 1, black)
end
#--------------------------------------------------------------------------
# - Desenhar Barras
#
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# w : Tamanho da barra
# color : Cor principal
# w_color : Cor 'white'
# b_color : Cor 'Black'
#--------------------------------------------------------------------------
def make_bar(x, y, w, color, w_color, b_color)
self.contents.fill_rect(x+2, y , w-4, 1, w_color)
self.contents.fill_rect(x+1, y+1 , w-2, 1, w_color)
self.contents.fill_rect(x , y+2 , w , 7, color )
self.contents.fill_rect(x+1, y+9 , w-2, 1, color )
self.contents.fill_rect(x+2, y+10, w-4, 1, b_color)
end
#--------------------------------------------------------------------------
# - Desenhar a imagem do battler de um herói
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
#--------------------------------------------------------------------------
def draw_battler(actor, x, y)
battler = RPG::Cache.battler( actor.battler_name, actor.battler_hue )
w = battler.width
h = battler.height
self.contents.blt( 0, 0, battler, Rect.new( 0, 0, w, h ) )
end
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#
# nValAtrib : Valor a ser transformado
# nMax : Valor máximo. Usado apenas para efetuar cálculo percentual
#--------------------------------------------------------------------------
def trata_valor(nValAtrib, nMax)
nRetorno = 0
nSemDecimal = ( nValAtrib*100 / nMax )
if MC_Setup::DECIMAL then
if nValAtrib == nMax then
cRetorno = "100"
elsif nValAtrib > 1 then
nComDecimal = ( nValAtrib*10000 / nMax )
cSemDecimal = nSemDecimal.to_s
cComDecimal = nComDecimal.to_s
cDecimais = cComDecimal.sub(cSemDecimal, '')
cRetorno = cSemDecimal + "," + cDecimais
else
cRetorno = "0,00"
end
else
cRetorno = nSemDecimal.to_s
end
return cRetorno
end
#--------------------------------------------------------------------------
# - Desenhar Nível dos Atributos
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_atrib(x, y, width, nVal, nMax, cTexto)
percentual = trata_valor( nVal, nMax )
self.contents.draw_text (x+2 , y - 6, 200-28, 32, cTexto )
draw_bar(x+190, y+4, width-28, nVal, nMax)
self.contents.draw_text(x + width + 200-28, y - 6, 100, 32, percentual + "%" )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Ataques Desarmados
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_desarmado(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_DESARMADO))
draw_actor_atrib(x+24, y, width, actor.desarmado_n, actor.maximo_n, MC_Setup::DESARMADO.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível da Espada Curta
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_espada_curta(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_ESPADA_CURTA))
draw_actor_atrib(x+24, y, width, actor.espada_curta_n, actor.maximo_n, MC_Setup::ESPADA_CURTA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível da Espada Longa
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_espada_longa(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_ESPADA_LONGA))
draw_actor_atrib(x+24, y, width, actor.espada_longa_n, actor.maximo_n, MC_Setup::ESPADA_LONGA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Machado
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_machado(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_MACHADO))
draw_actor_atrib(x+24, y, width, actor.machado_n, actor.maximo_n, MC_Setup::MACHADO.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Maça
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_maca(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_MACA))
draw_actor_atrib(x+24, y, width, actor.maca_n, actor.maximo_n, MC_Setup::MACA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Martelo
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_martelo(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_MARTELO))
draw_actor_atrib(x+24, y, width, actor.martelo_n, actor.maximo_n, MC_Setup::MARTELO.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Cajado
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_cajado(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_CAJADO))
draw_actor_atrib(x+24, y, width, actor.cajado_n, actor.maximo_n, MC_Setup::CAJADO.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Arco
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_arco(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_ARCO))
draw_actor_atrib(x+24, y, width, actor.arco_n, actor.maximo_n, MC_Setup::ARCO.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Lança
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_lanca(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_LANCA))
draw_actor_atrib(x+24, y, width, actor.lanca_n, actor.maximo_n, MC_Setup::LANCA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Adaga/Faca
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_adaga(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_ADAGA))
draw_actor_atrib(x+24, y, width, actor.adaga_n, actor.maximo_n, MC_Setup::ADAGA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Clava
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_clava(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_CLAVA))
draw_actor_atrib(x+24, y, width, actor.clava_n, actor.maximo_n, MC_Setup::CLAVA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar Nível de Armas Exóticas
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# width : Tamanho da Barra a ser Desenhada
#--------------------------------------------------------------------------
def draw_actor_skill_exotica(actor, x, y, width)
self.draw_icones(x, y, RPG::Cache.icon(MC_Setup::ICON_EXOTICA))
draw_actor_atrib(x+24, y, width, actor.exotica_n, actor.maximo_n, MC_Setup::EXOTICA.to_s + ": " )
end
#--------------------------------------------------------------------------
# - Desenhar flee_sucess
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_flee_sucess(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.flee_sucess_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar flee_fail
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_flee_fail(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.flee_fail_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_meele_in
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_meele_in(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_meele_in_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_meele_out
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_meele_out(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_meele_out_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_ranged_in
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_ranged_in(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_ranged_in_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_ranged_out
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_ranged_out(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_ranged_out_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_magic_in
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_magic_in(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_magic_in_s, 2)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# - Desenhar damage_magic_out
#
# actor : Herói
# x : Desenhar a partir da coordenada x
# y : Desenhar a partir da coordenada y
# color : Cor do texto em que o valor será apresentado
#--------------------------------------------------------------------------
def draw_actor_damage_magic_out(actor, x, y, color)
self.contents.font.color = color
self.contents.draw_text(x, y, 84, 32, actor.damage_magic_out_s, 2)
self.contents.font.color = normal_color
end
end
#==============================================================================
# Window_Nivel
#------------------------------------------------------------------------------
# É a janela que mostra o Nível de experiência das Armas
#==============================================================================
class Window_Nivel < Window_Base
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#
# actor : Objeto
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 640, 480)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# - método para alterar o heroi
#
# actor : Objeto
#--------------------------------------------------------------------------
def alterar_heroi(actor)
self.contents.clear
@actor = actor
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
#--------------------------------------------------------------------------
# - Atualizar
#--------------------------------------------------------------------------
def refresh
margem = -8
espaco = 31 - @actor.quantidade_hab
self.contents.clear
self.contents.font.size = $fontsize - 1
draw_battler(@actor, 0, 0)
self.contents.draw_text(120, margem, 70, 32, "Herói:")
draw_actor_name(@actor, 180, margem)
self.contents.draw_text(280, margem, 70, 32, "Classe:")
draw_actor_class(@actor, 350, margem)
self.contents.draw_text(450, margem, 70, 32, "Estado:")
draw_actor_state(@actor, 530, margem)
draw_picture("separador", 120, 25, 400, 8)
draw_picture("separador", 280, 25, 400, 8)
draw_picture("separador", 440, 25, 400, 8)
red = text_color(2)
green = text_color(3)
margem = 10
linha = 0
largura = 500
self.contents.font.size = $fontsize - (@actor.quantidade_hab/4)
if @actor.flee_sucess_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Nº de fugas efetuadas com sucesso:")
draw_actor_flee_sucess(@actor, largura-30, margem+espaco*linha, green)
end
if @actor.flee_fail_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Nº de fugas que falharam:")
draw_actor_flee_fail(@actor, largura-30, margem+espaco*linha, red)
end
if @actor.damage_meele_out_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano causado em ataques normais:")
draw_actor_damage_meele_out(@actor, largura-30, margem+espaco*linha, green)
end
if @actor.damage_ranged_out_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano causado à longa distância:")
draw_actor_damage_ranged_out(@actor, largura-30, margem+espaco*linha, green)
end
if @actor.damage_magic_out_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano causado em ataques mágicos:")
draw_actor_damage_magic_out(@actor, largura-30, margem+espaco*linha, green)
end
if @actor.damage_meele_in_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano recebido em ataques normais:")
draw_actor_damage_meele_in(@actor, largura-30, margem+espaco*linha, red)
end
if @actor.damage_ranged_in_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano recebido de longa distância:")
draw_actor_damage_ranged_in(@actor, largura-30, margem+espaco*linha, red)
end
if @actor.damage_magic_in_s != "00000"
linha = linha + 1
self.contents.draw_text(120, margem+espaco*linha, largura, 32, "Dano recebido em ataques mágicos:")
draw_actor_damage_magic_in(@actor, largura-30, margem+espaco*linha, red)
end
if linha < 1
linha = linha + 1
self.contents.font.color = red
self.contents.draw_text(120, margem+espaco*linha, 600, 32, @actor.name + " ainda não entrou em combate!")
self.contents.font.color = normal_color
self.contents.draw_text(120-1, margem-1+espaco*linha, 600, 32, @actor.name + " ainda não entrou em combate!")
end
margem = margem + 5
draw_picture("separador", 120, margem+espaco*(linha+1), 400, 8)
draw_picture("separador", 280, margem+espaco*(linha+1), 400, 8)
draw_picture("separador", 440, margem+espaco*(linha+1), 400, 8)
espaco = 36 - @actor.quantidade_hab
margem = margem - 5
tam_barra = 220
if @actor.desarmado_n > 1
linha = linha + 1
draw_actor_skill_desarmado (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.espada_curta_n > 1
linha = linha + 1
draw_actor_skill_espada_curta(@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.espada_longa_n > 1
linha = linha + 1
draw_actor_skill_espada_longa(@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.machado_n > 1
linha = linha + 1
draw_actor_skill_machado (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.maca_n > 1
linha = linha + 1
draw_actor_skill_maca (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.martelo_n > 1
linha = linha + 1
draw_actor_skill_martelo (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.desarmado_n > 1
linha = linha + 1
draw_actor_skill_cajado (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.arco_n > 1
linha = linha + 1
draw_actor_skill_arco (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.lanca_n > 1
linha = linha + 1
draw_actor_skill_lanca (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.adaga_n > 1
linha = linha + 1
draw_actor_skill_adaga (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.clava_n > 1
linha = linha + 1
draw_actor_skill_clava (@actor, 120, margem+espaco*linha, tam_barra)
end
if @actor.exotica_n > 1
linha = linha + 1
draw_actor_skill_exotica (@actor, 120, margem+espaco*linha, tam_barra)
end
self.contents.font.size = $fontsize
end
end
#==============================================================================
# Window_SelectActorNivel
#------------------------------------------------------------------------------
# Janela para selecionar herói para exibir estatísticas do nivel da arma
#==============================================================================
class Window_SelectActorNivel < Window_Selectable
#------------------------------------------------------------------------------
# método initialize da janela Window_SelectActorNivel
#------------------------------------------------------------------------------
def initialize
# Cálculos para centralizar a janela
nNumeroHerois = $game_party.actors.size
nTamJanela = 48*(nNumeroHerois+1)-10
nPosY = (480/2)-(nTamJanela/2)
# incializa a classe mãe
super(100, nPosY, 440, nTamJanela)
# configura a área disponível para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# indicando quantos itens queremos na tela de comando
# itens igual ao total de valores no vetor @commands
@item_max = $game_party.actors.size
# indicando quantas colunas queremos na tela de comando
# colunas igual ao número de itens
@column_max = 1
# redesenhando a janela
refresh
self.active = false
# indicando a posição inicial do cursor ao abrir a janela
self.index = 0
# indicando a posição da janela no eixo Z
self.z=50
end # fim do método initialize da classe Window_SelectActorNivel
#------------------------------------------------------------------------------
# método draw_item da janela Window_SelectActorNivel
#------------------------------------------------------------------------------
def draw_item(index, cNome, cClasse, cNivel)
x = 44
y = 10 + (index * 50)
self.contents.font.color = normal_color
draw_actor_graphic($game_party.actors[index], x - 20, y+38 )
self.contents.draw_text(x+20 , y, 120, 32, cNome , 0)
self.contents.draw_text(x+120, y, 120, 32, "[" + cClasse + "]", 0)
self.contents.draw_text(x+280, y, 160, 32, "Nível: " + cNivel , 0)
end
#------------------------------------------------------------------------------
# método refresh da janela Window_SelectActorNivel
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
# desenhandoa listagem de itens
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
draw_item(i, actor.name, actor.class_name, actor.level.to_s)
end
end # fim do método refresh da classe Window_SelectActorNivel
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = self.width / @column_max - 40
x = @index % @column_max * (cursor_width + 50)
y = @index / @column_max * 50 - self.oy
self.cursor_rect.set(x + 50, y, cursor_width - 50, 50)
end
end # fim da classe Window_SelectActorNivel
#------------------------------------------------------------------------------
# Fim da classe Window_SelectActorNivel
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Scene_NivelArmas
#------------------------------------------------------------------------------
# Classe que vai controlar nossas janelas
#------------------------------------------------------------------------------
class Scene_NivelArmas
#------------------------------------------------------------------------------
# método main executado toda vez que iniciamos o objeto
# (Scene_NivelArmas.new)
#------------------------------------------------------------------------------
def main
@spriteset = Spriteset_Map.new
# definindo uma variável para nossa janela de comandos principais
@command_window = Window_SelectActorNivel.new
# informando que queremos a janela de comandos ativada
@command_window.active = true
# informando que queremos a janela de comandos visível
@command_window.visible = true
@nivel = Window_Nivel.new($game_party.actors[0])
@nivel.active = false
@nivel.z = 200
@nivel.visible = false
# executa a transição da tela
Graphics.transition
loop do
# atualiza os gráficos
Graphics.update
# atualiza as entradas
Input.update
# atualiza scene indefinidamente até que a scene seja fechada
update
if $scene != self
# se sair desta scene,
# para de executar este código
break
end # fim do if $scene != self
end # fim do comando loop do
# finaliza os gráficos e imagens
Graphics.freeze
@spriteset.dispose
# fecha todas as janelas que criamos nesta scene
@command_window.dispose
@nivel.dispose
end # fim do método main da classe Scene_NivelArmas
#------------------------------------------------------------------------------
# método update da classe Scene_NivelArmas
#------------------------------------------------------------------------------
def update
# atualiza todas as janelas que criamos nesta scene
@command_window.update
@nivel.update
if @command_window.active
# se a janela @command_window estiver ativa
# atualiza os comandos da janela @command_window
update_command
end # fim do if @command_window.active
if @nivel.active
update_command_nivel
end # fim do if @nivel.active
end # fim do método update da classe Scene_NivelArmas
#------------------------------------------------------------------------------
# método update_command_nivel da classe Scene_NivelArmas
#------------------------------------------------------------------------------
def update_command_nivel
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
@command_window.active = true # desativa a janela @command_window
@command_window.visible = true # torna a janela @command_window invisível
@nivel.active = false # desativa a janela @nivel
@nivel.visible = false # torna a janela @nivel invisível
end # fim do if Input.trigger?
end # fim do método update_command da classe Scene_NivelArmas
#------------------------------------------------------------------------------
# método update_command da classe Scene_NivelArmas
#------------------------------------------------------------------------------
def update_command
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@nivel.active = false # desativa a janela @nivel
@nivel.visible = false # torna a janela @nivel invisível
# e volta para o mapa de jogo
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
# se a tecla digitada por [enter] ou C
# toca som de decisão
$game_system.se_play($data_system.decision_se)
@nivel.alterar_heroi($game_party.actors[@command_window.index])
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@nivel.active = true # ativa a janela @nivel
@nivel.visible = true # torna a janela @nivel visível
end # fim do if Input.trigger?
end # fim do método update_command da classe Scene_NivelArmas
end # fim da classe Scene_NivelArmas
#------------------------------------------------------------------------------
# Fim da classe Scene_NivelArmas
#------------------------------------------------------------------------------
#==============================================================================
# Window_SelectTreinamento
#------------------------------------------------------------------------------
# Janela para selecionar qual o treinamento será efetuado
#==============================================================================
class Window_SelectTreinamento < Window_Selectable
# Variáveis públicas
attr_reader :aTipos # Tipos de Habilidades que podem ser treinados
#------------------------------------------------------------------------------
# método initialize da janela Window_SelectTreinamento
#------------------------------------------------------------------------------
def initialize(aListagemDeTipos, actor)
@aTipos = aListagemDeTipos
@actor = actor
# Cálculos para centralizar a janela
nNumeroOpcoes = aTipos.size
nLarguraJanela = 250
nAlturaJanela = 32*(nNumeroOpcoes+1)
nPosX = (640/2)-(nLarguraJanela/2)
nPosY = (480/2)-(nAlturaJanela/2)
# incializa a classe mãe
super( nPosX, nPosY, nLarguraJanela, nAlturaJanela)
# configura a área disponível para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# indicando quantos itens queremos na tela de comando
# itens igual ao total de valores no vetor @commands
self.index = @item_max = aTipos.size
# indicando quantas colunas queremos na tela de comando
# colunas igual ao número de itens
@column_max = 1
# redesenhando a janela
refresh
self.active = false
# indicando a posição inicial do cursor ao abrir a janela
self.index = 0
# indicando a posição da janela no eixo Z
self.z=50
end # fim do método initialize da classe Window_SelectTreinamento
#--------------------------------------------------------------------------
# - método para alterar o heroi
#
# actor : Objeto
#--------------------------------------------------------------------------
def alterar_heroi(actor)
@actor = actor
end
#--------------------------------------------------------------------------
# - método para atualizar a tela
#--------------------------------------------------------------------------
def atualizar_tela()
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
refresh
end
#------------------------------------------------------------------------------
# método draw_item da janela Window_SelectTreinamento
#------------------------------------------------------------------------------
def draw_item(index, cTexto, cor_do_texto)
self.draw_icones( 4, (index*32)+3, self.buscar_icone(cTexto))
self.contents.font.color = cor_do_texto
self.contents.draw_text(4+32, index*32, 250, 32, cTexto, 0)
end
#------------------------------------------------------------------------------
# método refresh da janela Window_SelectTreinamento
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
# desenhandoa listagem de itens
for i in 0...@aTipos.size
if self.existe_tipo( @aTipos[i] )
if @actor.pode_treinar( @aTipos[i] )
cor = normal_color
else
cor = disabled_color
end
draw_item(i, @aTipos[i], cor)
end
end
end # fim do método refresh da classe Window_SelectTreinamento
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
# If cursor position is less than 0
if @index < 0
self.cursor_rect.empty
return
end
# Get current row
row = @index / @column_max
# If current row is before top row
if row < self.top_row
# Scroll so that current row becomes top row
self.top_row = row
end
# If current row is more to back than back row
if row > self.top_row + (self.page_row_max - 1)
# Scroll so that current row becomes back row
self.top_row = row - (self.page_row_max - 1)
end
# Calculate cursor width
cursor_width = self.width / @column_max - 32
# Calculate cursor coordinates
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
# Update cursor rectangle
self.cursor_rect.set(x, y, cursor_width, 32)
end
end # fim da classe Window_SelectTreinamento
#------------------------------------------------------------------------------
# Fim da classe Window_SelectTreinamento
#------------------------------------------------------------------------------
#==============================================================================
# Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
# Janela para selecionar qual o treinamento será efetuado
#==============================================================================
class Window_SelectEfetuarTreino < Window_Selectable
# Variáveis públicas
attr_reader :cTipo # Tipo de Habilidade a ser treinado(a)
attr_reader :actor # Herói em Treinamento
attr_reader :nAlturaJanela # Altura da Janela
attr_reader :nLarguraJanela # Largura da Janela
attr_reader :nCustoTreino # Custo do Treinamento
#------------------------------------------------------------------------------
# método initialize da janela Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
def initialize(cNomeDoTipo, actor)
@actor = actor
@cTipo = cNomeDoTipo
# Cálculos para centralizar a janela
@nAlturaJanela = 200
@nLarguraJanela = 500
nPosX = (640/2)-(nLarguraJanela/2)
nPosY = (480/2)-(nAlturaJanela/2)
# incializa a classe mãe
super( nPosX, nPosY, nLarguraJanela, nAlturaJanela )
# configura a área disponível para uso da janela
self.contents = Bitmap.new(width - 32, height - 32)
# configura a fonte da janela
self.contents.font.name = $fontface
# configura o tamanho da fonte da janela
self.contents.font.size = $fontsize
# indicando quantos itens queremos na tela de comando
# itens igual ao total de valores no vetor @commands
self.index = @item_max = 2
# indicando quantas colunas queremos na tela de comando
# colunas igual ao número de itens
@column_max = 2
# redesenhando a janela
refresh
self.active = false
# indicando a posição inicial do cursor ao abrir a janela
self.index = 0
# indicando a posição da janela no eixo Z
self.z=50
end # fim do método initialize da classe Window_SelectEfetuarTreino
#--------------------------------------------------------------------------
# - método para alterar o heroi
#
# actor : Objeto
#--------------------------------------------------------------------------
def alterar_heroi(actor)
@actor = actor
end
#--------------------------------------------------------------------------
# - método para alterar o tipo de arma
#
# cNomeDoTipo : tipo de arma
#--------------------------------------------------------------------------
def alterar_tipo_de_arma(cNomeDoTipo)
@cTipo = cNomeDoTipo
end
#--------------------------------------------------------------------------
# - método para atualizar a tela
#--------------------------------------------------------------------------
def atualizar_tela()
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
refresh
end
#--------------------------------------------------------------------------
# - Atualiza o valor do atributo de habilidade
#
# actor : Herói Atacante
# cNomeAtributo : Atributo a ser procurado
# valor : Valor a ser atualizado
#--------------------------------------------------------------------------
def atualizar_atributo(actor, cNomeAtributo, valor)
lAtualizou = false
if cNomeAtributo == MC_Setup::DESARMADO then
if actor.desarmado_n < actor.maximo
lAtualizou = true
actor.hab_desarmado = valor
end
elsif cNomeAtributo == MC_Setup::ESPADA_CURTA then
if actor.espada_curta_n < actor.maximo
lAtualizou = true
actor.hab_espada_curta = valor
end
elsif cNomeAtributo == MC_Setup::ESPADA_LONGA then
if actor.espada_longa_n < actor.maximo
lAtualizou = true
actor.hab_espada_longa = valor
end
elsif cNomeAtributo == MC_Setup::MACHADO then
if actor.machado_n < actor.maximo
lAtualizou = true
actor.hab_machado = valor
end
elsif cNomeAtributo == MC_Setup::MACA then
if actor.maca_n < actor.maximo
lAtualizou = true
actor.hab_maca = valor
end
elsif cNomeAtributo == MC_Setup::MARTELO then
if actor.martelo_n < actor.maximo
lAtualizou = true
actor.hab_martelo = valor
end
elsif cNomeAtributo == MC_Setup::CAJADO then
if actor.cajado_n < actor.maximo
lAtualizou = true
actor.hab_cajado = valor
end
elsif cNomeAtributo == MC_Setup::ARCO then
if actor.arco_n < actor.maximo
lAtualizou = true
actor.hab_arco = valor
end
elsif cNomeAtributo == MC_Setup::LANCA then
if actor.lanca_n < actor.maximo
lAtualizou = true
actor.hab_lanca = valor
end
elsif cNomeAtributo == MC_Setup::ADAGA then
if actor.adaga_n < actor.maximo
lAtualizou = true
actor.hab_adaga = valor
end
elsif cNomeAtributo == MC_Setup::CLAVA then
if actor.clava_n < actor.maximo
lAtualizou = true
actor.hab_clava = valor
end
elsif cNomeAtributo == MC_Setup::EXOTICA then
if actor.exotica_n < actor.maximo
lAtualizou = true
actor.hab_exotica = valor
end
end
return lAtualizou
end
#--------------------------------------------------------------------------
# - método para atualizar a tela
#--------------------------------------------------------------------------
def efetuar_treino( )
if ( $game_party.gold - @nCustoTreino ) >= 1 then
nValorAtributo = 30 + MC_Setup::MODEVOLUCAO
if atualizar_atributo(@actor, @cTipo, nValorAtributo) then
$game_party.lose_gold(@nCustoTreino)
# toca som de decisão
$game_system.se_play( $data_system.decision_se )
else
# toca som de cancelar
$game_system.se_play( $data_system.cancel_se )
end
else
# toca som de cancelar
$game_system.se_play( $data_system.cancel_se )
end
atualizar_tela()
end
#------------------------------------------------------------------------------
# método draw_item da janela Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
def draw_item(index, cTexto)
if index == 0
if not atualizar_atributo(@actor, @cTipo, 0) then
self.contents.font.color = disabled_color
elsif ( $game_party.gold - @nCustoTreino ) >= 1 then
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
end
# Calculate cursor width
cursor_width = self.width / @column_max - 32
# Calculate cursor coordinates
x = (@nLarguraJanela / 2)*index + 8
y = @nAlturaJanela - 60
rect = Rect.new(x, y, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, cTexto)
self.contents.font.color = normal_color
end
#------------------------------------------------------------------------------
# método refresh da janela Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
def refresh
# limpando toda a janela
self.contents.clear
# indicando a skin da janela
self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
self.contents.draw_text(0, 0, 400, 32, MC_Setup::JAN_TREINO_TITULO)
@nCustoTreino = 0
nModCustoTreino = 0
nTamBarra = 200
nPosYBarra = 100
if @cTipo == MC_Setup::DESARMADO
nModCustoTreino = @actor.desarmado_n
draw_actor_skill_desarmado (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::ESPADA_CURTA
nModCustoTreino = @actor.espada_curta_n
draw_actor_skill_espada_curta(@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::ESPADA_LONGA
nModCustoTreino = @actor.espada_longa_n
draw_actor_skill_espada_longa(@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::MACHADO
nModCustoTreino = @actor.machado_n
draw_actor_skill_machado (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::MACA
nModCustoTreino = @actor.maca_n
draw_actor_skill_maca (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::MARTELO
nModCustoTreino = @actor.martelo_n
draw_actor_skill_martelo (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::CAJADO
nModCustoTreino = @actor.cajado_n
draw_actor_skill_cajado (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::ARCO
nModCustoTreino = @actor.arco_n
draw_actor_skill_arco (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::LANCA
nModCustoTreino = @actor.lanca_n
draw_actor_skill_lanca (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::ADAGA
nModCustoTreino = @actor.adaga_n
draw_actor_skill_adaga (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::CLAVA
nModCustoTreino = @actor.clava_n
draw_actor_skill_clava (@actor, 4, nPosYBarra, nTamBarra)
elsif @cTipo == MC_Setup::EXOTICA
nModCustoTreino = @actor.exotica_n
draw_actor_skill_exotica (@actor, 4, nPosYBarra, nTamBarra)
end
@nCustoTreino = 50 + ( (nModCustoTreino*MC_Setup::MODCUSTOTREINO/100) / 3 )
draw_item(0, MC_Setup::JAN_TREINO_TREINAR )
draw_item(1, MC_Setup::JAN_TREINO_SAIR )
self.contents.font.size = $fontsize - 2
cTextoTreino = MC_Setup::JAN_TREINO_GOLD + $game_party.gold.to_s + " " + $data_system.words.gold
self.contents.draw_text(0, 32, 400, 32, cTextoTreino )
cTextoTreino = MC_Setup::JAN_TREINO_CUSTO + nCustoTreino.to_s + " " + $data_system.words.gold
self.contents.draw_text(0, 55, 400, 32, cTextoTreino )
self.contents.font.size = $fontsize
end # fim do método refresh da classe Window_SelectEfetuarTreino
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
# If cursor position is less than 0
if @index < 0
self.cursor_rect.empty
return
end
# Get current row
row = @index / @column_max
# If current row is before top row
if row < self.top_row
# Scroll so that current row becomes top row
self.top_row = row
end
# If current row is more to back than back row
if row > self.top_row + (self.page_row_max - 1)
# Scroll so that current row becomes back row
self.top_row = row - (self.page_row_max - 1)
end
# Calculate cursor width
cursor_width = self.width / @column_max - 32
# Calculate cursor coordinates
x = @index % @column_max * (cursor_width + 32)
#y = @index / @column_max * 32 - self.oy
y = @nAlturaJanela - 60
# Update cursor rectangle
self.cursor_rect.set(x, y, cursor_width, 32)
end
end # fim da classe Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
# Fim da classe Window_SelectEfetuarTreino
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Scene_TreinoArmas
#------------------------------------------------------------------------------
# Classe que vai controlar as janelas de treinamento
#------------------------------------------------------------------------------
class Scene_TreinoArmas
# Variáveis públicas
attr_reader :aTipos # Tipos de Habilidades que podem ser treinados
def initialize(aListagemDeTipos)
@aTipos = aListagemDeTipos
end
#------------------------------------------------------------------------------
# método main executado toda vez que iniciamos o objeto
# (Scene_TreinoArmas.new)
#------------------------------------------------------------------------------
def main()
@spriteset = Spriteset_Map.new
# definindo uma variável para nossa janela de comandos principais
@command_window = Window_SelectActorNivel.new
# informando que queremos a janela de comandos ativada
@command_window.active = true
# informando que queremos a janela de comandos visível
@command_window.visible = true
@treinamento = Window_SelectTreinamento.new(@aTipos, $game_party.actors[0])
@treinamento.active = false
@treinamento.visible = false
@efetuar_treinamento = Window_SelectEfetuarTreino.new("", $game_party.actors[0])
@efetuar_treinamento.active = false
@efetuar_treinamento.visible = false
# executa a transição da tela
Graphics.transition
loop do
# atualiza os gráficos
Graphics.update
# atualiza as entradas
Input.update
# atualiza scene indefinidamente até que a scene seja fechada
update
if $scene != self
# se sair desta scene,
# para de executar este código
break
end # fim do if $scene != self
end # fim do comando loop do
# finaliza os gráficos e imagens
Graphics.freeze
@spriteset.dispose
# fecha todas as janelas que criamos nesta scene
@command_window.dispose
@treinamento.dispose
@efetuar_treinamento.dispose
end # fim do método main da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
# método update da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
def update
# atualiza todas as janelas que criamos nesta scene
@command_window.update
@treinamento.update
@efetuar_treinamento.update
if @command_window.active
update_command
elsif @treinamento.active
update_command_treinamento
elsif @efetuar_treinamento.active
update_command_efetuar_treinamento
end
end # fim do método update da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
# método update_command_treinamento da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
def update_command_efetuar_treinamento
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play( $data_system.cancel_se )
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@treinamento.active = true # ativa a janela @treinamento
@treinamento.visible = true # torna a janela @treinamento visível
@efetuar_treinamento.active = false # desativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = false # torna a janela @efetuar_treinamento invisível
elsif Input.trigger?(Input::C)
# se a tecla digitada por [enter] ou C
if @efetuar_treinamento.index == 0
@efetuar_treinamento.efetuar_treino()
@efetuar_treinamento.atualizar_tela()
elsif @efetuar_treinamento.index == 1
# toca som de cancelar
$game_system.se_play( $data_system.cancel_se )
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@treinamento.active = true # ativa a janela @treinamento
@treinamento.visible = true # torna a janela @treinamento visível
@efetuar_treinamento.active = false # desativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = false # torna a janela @efetuar_treinamento invisível
end
end # fim do if Input.trigger?
end # fim do método update_command_efetuar_treinamento da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
# método update_command_treinamento da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
def update_command_treinamento
#verifica a tecla pressionada
actor = $game_party.actors[@command_window.index]
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
@command_window.active = true # ativa a janela @command_window
@command_window.visible = true # torna a janela @command_window visível
@treinamento.active = false # desativa a janela @treinamento
@treinamento.visible = false # torna a janela @treinamento invisível
@efetuar_treinamento.active = false # desativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = false # torna a janela @efetuar_treinamento invisível
@treinamento.alterar_heroi( actor )
@treinamento.atualizar_tela( )
elsif Input.trigger?(Input::C)
# se a tecla digitada por [enter] ou C
cTipo = @treinamento.aTipos[ @treinamento.index ]
if actor.pode_treinar( cTipo )
# toca som de decisão
$game_system.se_play($data_system.decision_se)
@efetuar_treinamento.alterar_heroi( actor )
@efetuar_treinamento.alterar_tipo_de_arma( cTipo )
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@treinamento.active = false # desativa a janela @treinamento
@treinamento.visible = false # torna a janela @treinamento invisível
@efetuar_treinamento.active = true # ativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = true # torna a janela @efetuar_treinamento visível
@efetuar_treinamento.atualizar_tela( )
else
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
end
end # fim do if Input.trigger?
end # fim do método update_command_treinamento da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
# método update_command da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
def update_command
actor = $game_party.actors[@command_window.index]
#verifica a tecla pressionada
if Input.trigger?(Input::B)
# se a tecla dgitada por [esc] ou X
# toca som de cancelar
$game_system.se_play($data_system.cancel_se)
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@treinamento.active = false # desativa a janela @nivel
@treinamento.visible = false # torna a janela @nivel invisível
@efetuar_treinamento.active = false # desativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = false # torna a janela @efetuar_treinamento invisível
# e volta para o mapa de jogo
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
# se a tecla digitada por [enter] ou C
# toca som de decisão
$game_system.se_play($data_system.decision_se)
@treinamento.alterar_heroi( actor )
@command_window.active = false # desativa a janela @command_window
@command_window.visible = false # torna a janela @command_window invisível
@treinamento.active = true # ativa a janela @treinamento
@treinamento.visible = true # torna a janela @treinamento visível
@efetuar_treinamento.active = false # desativa a janela @efetuar_treinamento
@efetuar_treinamento.visible = false # torna a janela @efetuar_treinamento invisível
@treinamento.atualizar_tela( )
end # fim do if Input.trigger?
end # fim do método update_command da classe Scene_TreinoArmas
end # fim da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
# Fim da classe Scene_TreinoArmas
#------------------------------------------------------------------------------
#==============================================================================
# Scene_Battle Parte 2
#------------------------------------------------------------------------------
# Esta classe processa a tela de Batalha.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# - Atualização do Frame (Fase de Comandos do Grupo de Heróis: Fuga)
#--------------------------------------------------------------------------
def update_phase2_escape
# Calcular a agilidade média dos Inimigos
enemies_agi = 0
enemies_number = 0
for enemy in $game_troop.enemies
if enemy.exist?
enemies_agi += enemy.agi
enemies_number += 1
end
end
if enemies_number > 0
enemies_agi /= enemies_number
end
# Calacular a agilidade média dos Heróis
actors_agi = 0
actors_number = 0
for actor in $game_party.actors
if actor.exist?
actors_agi += actor.agi
actors_number += 1
end
end
if actors_number > 0
actors_agi /= actors_number
end
# Calcular o sucesso da fuga
success = rand(100) < 50 * actors_agi / enemies_agi
# Gravando o valor da fuga
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if success
actor.flee_sucess = 1
else
actor.flee_fail = 1
end
end
# Se a fuga for bem sucedida
if success
# Reproduzir SE de Fuga
$game_system.se_play($data_system.escape_se)
# Retornar para BGM de antes da Batalha ser iniciada
$game_system.bgm_play($game_temp.map_bgm)
# Fim da Batalha
battle_end(1)
# Se a fuga falhou
else
# Limpar todas as ações dos membros do Grupo de Heróis
$game_party.clear_actions
# Iniciar fase Princiapal
start_phase4
end
end
end
if MC_Setup::MODELO_MENU == MC_Setup::ALTERARMENUPADRAO
#==============================================================================
# Window_PlayTime
#------------------------------------------------------------------------------
# Janela que exibe o tempo de jogo
#==============================================================================
class Window_PlayTime < Window_Base
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 80)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
#--------------------------------------------------------------------------
# - Atualização
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 24, "Tempo de Jogo")
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 24, 120, 24, text, 2)
end
end
#==============================================================================
# Window_Steps
#------------------------------------------------------------------------------
# Janela que exibe a quantidade de passos
#==============================================================================
class Window_Steps < Window_Base
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 80)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
refresh
end
#--------------------------------------------------------------------------
# - Atualização
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Passos")
self.contents.font.color = normal_color
self.contents.draw_text(4, 24, 120, 32, $game_party.steps.to_s, 2)
end
end
#==============================================================================
# Scene_Menu
#------------------------------------------------------------------------------
# Esta classe processa a Tela de Menu
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#
# menu_index : posição inicial do cursor de comando
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# - Processamento Principal
#--------------------------------------------------------------------------
def main
# Criar janela de comando
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Status"
s5 = "Estatísticas"
s6 = "Salvar"
s7 = "Fim de Jogo"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
# Se o número de membros do Grupo de Heróis for 0
if $game_party.actors.size == 0
# Desabilar as janelas de Item, Habilidades, Equipamento e Status
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
# Se Salvar for Proibido
if $game_system.save_disabled
# Desabilitar Salvar
@command_window.disable_item(4)
end
# Criar janela de Tempo de Jogo
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 256
# Criar janela de Número Passos
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 336
# Criar janela de Dinheiro
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# Criar janela de Status
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# Criar janela de Nível
@nivel_window = Window_MenuStatus.new
@nivel_window.x = 160
@nivel_window.y = 0
# Executar transição
Graphics.transition
# Loop principal
loop do
# Atualizar a tela de jogo
Graphics.update
# Atualizar a entrada de informações
Input.update
# Atualizar Frame
update
# Abortar loop se a tela for alterada
if $scene != self
break
end
end
# Preparar para transiçõa
Graphics.freeze
# Exibição das janelas
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
@nivel_window.dispose
end
#--------------------------------------------------------------------------
# - Atualização do Frame
#--------------------------------------------------------------------------
def update
# Atualizar janelas
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
@nivel_window.update #
# Se a janela de comandos estiver ativo: chamar update_command
if @command_window.active
update_command
return
end
# Se a janela de Status estiver ativa: call update_status
if @status_window.active or @nivel_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# - Atualização do Frame (Quando a janela de Comandos estiver Ativa)
#--------------------------------------------------------------------------
def update_command
# Se o botão B for pressionado
if Input.trigger?(Input::B)
# Reproduzir SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Alternar para a tela do mapa
$scene = Scene_Map.new
return
end
# Se o botão C for pressionado
if Input.trigger?(Input::C)
# Se o comando for outro senão Salvar, Fim de Jogo e o número de Heróis no
# Grupo for 0
if $game_party.actors.size == 0 and @command_window.index < 4
# Reproduzir SE de erro
$game_system.se_play($data_system.buzzer_se)
return
end
# Ramificação por posição do cursor na janela de comandos
case @command_window.index
when 0 # Itens
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Itens
$scene = Scene_Item.new
when 1 # Habilidades
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # Equipamentos
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # Status
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # Nível
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Ativar o status da janela
@command_window.active = false
@nivel_window.active = true
@nivel_window.index = 0
when 5 # Salvar
# Se Salvar for proibido
if $game_system.save_disabled
# Reproduzir SE de erro
$game_system.se_play($data_system.buzzer_se)
return
end
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de save
$scene = Scene_Save.new
when 6 # Fim de Jogo
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Fim de Jogo
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# - Atualização do Frame (Quando o status da Janela estiver Ativo)
#--------------------------------------------------------------------------
def update_status
# Se o botão B for pressionado
if Input.trigger?(Input::B)
# Reproduzir SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Torna a janela de comandos ativa
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# Se o botão C for pressionado
if Input.trigger?(Input::C)
# Ramificação por posição do cursor na janela de comandos
case @command_window.index
when 1 # Habilidades
# Se o limite de ação deste Herói for de 2 ou mais
if $game_party.actors[@status_window.index].restriction >= 2
# Reproduzir SE de erro
$game_system.se_play($data_system.buzzer_se)
return
end
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Habilidades
$scene = Scene_Skill.new(@status_window.index)
when 2 # Equipamento
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Equipamento
$scene = Scene_Equip.new(@status_window.index)
when 3 # Status
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Status
$scene = Scene_Status.new("STATUS", @status_window.index)
when 4 # Nivel
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela de Nivel
$scene = Scene_Status.new("NIVEL", @nivel_window.index)
end
return
end
end
end
#==============================================================================
# Scene_Status
#------------------------------------------------------------------------------
# Esta janela exibe o Status
#==============================================================================
class Scene_Status
#--------------------------------------------------------------------------
# - Variáveis de Instância Pública
# - Criado
#--------------------------------------------------------------------------
attr_reader :origem # Nome da opção de origem ("STATUS" ou "NIVEL")
#--------------------------------------------------------------------------
# - Inicialização dos Objetos
#
# actor_index : índice do Herói
#--------------------------------------------------------------------------
def initialize(nome_origem, actor_index = 0, equip_index = 0)
@actor_index = actor_index
@origem = nome_origem
end
#--------------------------------------------------------------------------
# - Processamento Principal
#--------------------------------------------------------------------------
def main
# Selecionar Herói
@actor = $game_party.actors[@actor_index]
# Criar a janela de Status ou Nivel
if @origem == "STATUS"
@status_window = Window_Status.new(@actor)
else
@nivel_window = Window_Nivel.new(@actor)
end
# Executar Transição
Graphics.transition
# Loop principal
loop do
# Aqui a tela é atualizada
Graphics.update
# E os dados também
Input.update
# Então os frames são atualizados
update
# Abortar loop se a janela for alterada
if $scene != self
break
end
end
# preparar para transição
Graphics.freeze
# E a janela é destruída
if @origem == "STATUS"
@status_window.dispose
else
@nivel_window.dispose
end
end
#--------------------------------------------------------------------------
# - Atualização do frame
#--------------------------------------------------------------------------
def update
# Caso o botão B seja pressionado
if Input.trigger?(Input::B)
# É tocada a música SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Mudar para a tela do Menu
if @origem == "STATUS"
$scene = Scene_Menu.new(3)
else
$scene = Scene_Menu.new(4)
end
return
end
# Caso o botão R seja pressionado
if Input.trigger?(Input::R)
# Reproduzir Se de seleção
$game_system.se_play($data_system.cursor_se)
# Para o próximo Herói
@actor_index += 1
@actor_index %= $game_party.actors.size
# Mudar para uma tela de Status diferente
$scene = Scene_Status.new(@origem, @actor_index)
end
# Caso o botão L seja pressionado
if Input.trigger?(Input::L)
# Reproduzir SE de seleção
$game_system.se_play($data_system.cursor_se)
# Para o Herói anterior
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
# Mudar para uma tela de Status diferente
$scene = Scene_Status.new(@origem, @actor_index)
return
end
end
end
#==============================================================================
# Scene_Save
#------------------------------------------------------------------------------
# Esta classe processa o Save.
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# - Processamento de Decisão
#--------------------------------------------------------------------------
def on_decision(filename)
# Reproduzir Se de Save
$game_system.se_play($data_system.save_se)
# Graavar
file = File.open(filename, "wb")
write_save_data(file)
file.close
# Caso tenha sido chamdo por um evento...
if $game_temp.save_calling
# Limpar flag de chamado de save
$game_temp.save_calling = false
# Mudar para a tela do Mapa
$scene = Scene_Map.new
return
end
# Mudar para a tela do Menu (Alterado)
$scene = Scene_Menu.new(5)
end
#--------------------------------------------------------------------------
# - Processo de Cancelamento
#--------------------------------------------------------------------------
def on_cancel
# Reproduzir SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Caso tenha sido chamdo por um evento...
if $game_temp.save_calling
# Limpar flag de chamado de save
$game_temp.save_calling = false
# Mudar para a tela do Mapa
$scene = Scene_Map.new
return
end
# Mudar para a tela do Menu (Alterado)
$scene = Scene_Menu.new(5)
end
end
#==============================================================================
# Scene_End
#------------------------------------------------------------------------------
# Esta classe processa a tela de Game Over.
#==============================================================================
class Scene_End
#--------------------------------------------------------------------------
# - Atualização do Frame
#--------------------------------------------------------------------------
def update
# Atualizar janela de comandos
@command_window.update
# Se o botão B for pressionado
if Input.trigger?(Input::B)
# Reproduzir SE de cancelamento
$game_system.se_play($data_system.cancel_se)
# Alternar para a tela de Menu (alterado)
$scene = Scene_Menu.new(6)
return
end
# Se o botão C for pressionado
if Input.trigger?(Input::C)
# Ramificação por posição na janela de comandos
case @command_window.index
when 0 # Ir à tela de título
command_to_title
when 1 # Sair
command_shutdown
when 2 # Cancelar
command_cancel
end
return
end
end
#--------------------------------------------------------------------------
# - Processamento na Escolha do Comando Cancelar
#--------------------------------------------------------------------------
def command_cancel
# Reproduzir SE de OK
$game_system.se_play($data_system.decision_se)
# Alternar para a tela do Menu
$scene = Scene_Menu.new(6)
end
end
elsif MC_Setup::MODELO_MENU == MC_Setup::USARRINGMENU
#===================================================
# ¦ Ring Menu - Show Player Location - Release #1 (Enhanced By Dubealex)
#===================================================
# For more infos and update, visit:
# asylum.dubealex.com
#
# Original Ring Menu by: ?? (From XRXS)
# Original Edit and Fix by: Maki
# Show Player Location Version by: Dubealex
#
# You can customize this script at line #35 - Have fun !!
# If you want to show more stuff, its easy to do, you can
# try to ask in the forum.
#
# alex@dubealex.com
#
# Script editado por Marcelo Cavaco
# marcelocavaco@click21.com.br
#===================================================
#===================================================
# ? CLASS Scene_Menu Begins
#===================================================
class Scene_Menu
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
# menu_index : ƒRƒ}ƒ“ƒh‚̃J[ƒ\ƒ‹‰ŠúˆÊ’u
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
$location_text=[]
$window_size=[]
$ring_menu_text=[]
$chara_select=[]
@window_opacity=[]
@chara_select=[]
@window_position=[]
#--------------------------------------------------------------------------------------------------
# ¦ Ring Menu Customization Section: (By Dubealex)
#--------------------------------------------------------------------------------------------------
# Those variables defines how the script will act.
# Simply change the value by those you want.
# Remember that changing the font size has its limitation due to text space allocation.
#
# ? TEXT SETTINGS FOR SHOW PLAYER LOCATION WINDOW:
$location_text[0] = "Tahoma" # Font Type
$location_text[1] = 22 # Font Size
$location_text[2] = 6 # Location Title Color
$location_text[4] = 0 # Map Name Color
$location_text[3] = "Mapa:" # Customize the "Location" Title Text
# ? SHOW LOCATION WINDOW SETTINS:
@show_location_window = true #Set to false to not use it !
@window_opacity[0] = 255 # Border Opacity
@window_opacity[1] = 130 # Background Opacity
$window_location_skin = "001-Blue01" # Window Skin
@window_position[0] = 20 # X Axis Position
@window_position[1] = 20 # Y Axis Position
$window_size[0] = 160 # Length
$window_size[1] = 96 # Height
# ? TEXT SETTINGS FOR INSIDE THE RING MENU:
$ring_menu_text[0] = "Tahoma" # Font Type
$ring_menu_text[7] = 0 # Font Color
$ring_menu_text[8] = 22 # Font Size
$ring_menu_text[1] = "Items" # Items Menu Text
$ring_menu_text[2] = "Habilidades" # Skills Menu Text
$ring_menu_text[3] = "Equipamentos" # Equip Menu Text
$ring_menu_text[4] = "Status" # Stats Menu Text
$ring_menu_text[5] = "Estatísticas" # Texto do Menu de Estatísticas
$ring_menu_text[6] = "Salvar" # Save Menu Text
$ring_menu_text[7] = "Sair" # Quit Menu Text
# ? CHARACTER SELECTION WINDOW SETTINGS :
@chara_select[0] = 400 # X Axis Position
@chara_select[1] = 0 # Y Axis Position
$chara_select[0] = "Tahoma" # Font Type
$chara_select[1] = 0 # Font Color
$chara_select[5] = 22 # Font Size
$chara_select[2] = 255 # Window Border Opacity
$chara_select[3] = 130 # Window Background Opacity
$chara_select[4] = "001-Blue01" # Window Skin to use
#--------------------------------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
# œ ƒƒCƒ“ˆ—
#--------------------------------------------------------------------------
def main
# Show Player Location Feature:
if @show_location_window == true
@window_location = Window_Location.new
@window_location.x = @window_position[0]
@window_location.y = @window_position[1]
@window_location.opacity = @window_opacity[0]
@window_location.back_opacity = @window_opacity[1]
end
#End of Show Player Location
@spriteset = Spriteset_Map.new
px = $game_player.screen_x - 15
py = $game_player.screen_y - 24
@command_window = Window_RingMenu.new(px,py)
@command_window.index = @menu_index
if $game_party.actors.size == 0
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
@command_window.disable_item(4)
end
@command_window.z = 100
if $game_system.save_disabled
@command_window.disable_item(5)
end
@status_window = Window_RingMenuStatus.new
@status_window.x = @chara_select[0]
@status_window.y = @chara_select[1]
@status_window.z = 200
@status_window.opacity=$chara_select[2]
@status_window.back_opacity=$chara_select[3]
@status_window.visible = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
if @show_location_window==true
@window_location.dispose
end
@command_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
def update
# ƒEƒBƒ“ƒhƒE‚ðXV
if @show_location_window==true
@window_location.update
end
@command_window.update
@status_window.update
# ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ªƒAƒNƒeƒBƒu‚Ìê‡: update_command ‚ðŒÄ‚Ô
if @command_window.active
update_command
return
end
# ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ªƒAƒNƒeƒBƒu‚Ìê‡: update_status ‚ðŒÄ‚Ô
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV (ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ªƒAƒNƒeƒBƒu‚Ìê‡)
#--------------------------------------------------------------------------
def update_command
# B ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.trigger?(Input::B)
# ƒLƒƒƒ“ƒZƒ‹ SE ‚ð‰‰‘t
$game_system.se_play($data_system.cancel_se)
# ƒ}ƒbƒv‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Map.new
return
end
# C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.trigger?(Input::C)
# ƒp[ƒeƒBl”‚ª 0 l‚ÅAƒZ[ƒuAƒQ[ƒ€I—¹ˆÈŠO‚̃Rƒ}ƒ“ƒh‚Ìê‡
if $game_party.actors.size == 0 and @command_window.index < 4
# ƒuƒU[ SE ‚ð‰‰‘t
$game_system.se_play($data_system.buzzer_se)
return
end
# ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚̃J[ƒ\ƒ‹ˆÊ’u‚Å•ªŠò
case @command_window.index
when 0 # ƒAƒCƒeƒ€
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒAƒCƒeƒ€‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Item.new
when 1 # ƒXƒLƒ‹
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðƒAƒNƒeƒBƒu‚É‚·‚é
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 2 # ‘•”õ
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðƒAƒNƒeƒBƒu‚É‚·‚é
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 3 # ƒXƒe[ƒ^ƒX
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðƒAƒNƒeƒBƒu‚É‚·‚é
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 4
$game_system.se_play($data_system.decision_se)
$scene = Scene_NivelArmas.new()
when 5 # ƒZ[ƒu
# ƒZ[ƒu‹ÖŽ~‚Ìê‡
if $game_system.save_disabled
# ƒuƒU[ SE ‚ð‰‰‘t
$game_system.se_play($data_system.buzzer_se)
return
end
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒZ[ƒu‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Save.new
when 6 # ƒQ[ƒ€I—¹
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒQ[ƒ€I—¹‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_End.new
end
return
end
# ƒAƒjƒ[ƒVƒ‡ƒ“’†‚È‚çƒJ[ƒ\ƒ‹‚̈—‚ðs‚í‚È‚¢
return if @command_window.animation?
# ªor© ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.press?(Input::UP) or Input.press?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
return
end
# «or¨ ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
return
end
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV (ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ªƒAƒNƒeƒBƒu‚Ìê‡)
#--------------------------------------------------------------------------
def update_status
# B ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.trigger?(Input::B)
# ƒLƒƒƒ“ƒZƒ‹ SE ‚ð‰‰‘t
$game_system.se_play($data_system.cancel_se)
# ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ðƒAƒNƒeƒBƒu‚É‚·‚é
@command_window.active = true
@status_window.active = false
@status_window.visible = false
@status_window.index = -1
return
end
# C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.trigger?(Input::C)
# ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚̃J[ƒ\ƒ‹ˆÊ’u‚Å•ªŠò
case @command_window.index
when 1 # ƒXƒLƒ‹
# ‚±‚̃AƒNƒ^[‚Ìs“®§ŒÀ‚ª 2 ˆÈã‚Ìê‡
if $game_party.actors[@status_window.index].restriction >= 2
# ƒuƒU[ SE ‚ð‰‰‘t
$game_system.se_play($data_system.buzzer_se)
return
end
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒLƒ‹‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Skill.new(@status_window.index)
when 2 # ‘•”õ
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ‘•”õ‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Equip.new(@status_window.index)
when 3 # ƒXƒe[ƒ^ƒX
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒe[ƒ^ƒX‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Status.new(@status_window.index)
when 4
$game_system.se_play($data_system.decision_se)
$scene = Scene_NivelArmas.new()
end
return
end
end
end
#===================================================
# ? CLASS Scene_Menu Ends
#===================================================
#===================================================
# ? CLASS Window_RingMenu Begins
#===================================================
class Window_RingMenu < Window_Base
#--------------------------------------------------------------------------
# › ƒNƒ‰ƒX’è”
#--------------------------------------------------------------------------
STARTUP_FRAMES = 20
MOVING_FRAMES = 5
RING_R = 64
ICON_ITEM = RPG::Cache.icon("034-Item03")
ICON_SKILL = RPG::Cache.icon("044-Skill01")
ICON_EQUIP = RPG::Cache.icon("001-Weapon01")
ICON_STATUS = RPG::Cache.icon("050-Skill07")
ICON_ESTATISTICAS = RPG::Cache.icon("039-Item08")
ICON_SAVE = RPG::Cache.icon("038-Item07")
ICON_EXIT = RPG::Cache.icon("046-Skill03")
ICON_DISABLE = RPG::Cache.icon("")
SE_STARTUP = "056-Right02"
MODE_START = 1
MODE_WAIT = 2
MODE_MOVER = 3
MODE_MOVEL = 4
#--------------------------------------------------------------------------
# › ƒAƒNƒZƒT
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
#--------------------------------------------------------------------------
def initialize( center_x, center_y )
super(0, 0, 640, 480)
self.contents = Bitmap.new(width-32, height-32)
self.contents.font.name = $ring_menu_text[0]
self.contents.font.color = text_color($ring_menu_text[7])
self.contents.font.size = $ring_menu_text[8]
self.opacity = 0
self.back_opacity = 0
s1 = $ring_menu_text[1]
s2 = $ring_menu_text[2]
s3 = $ring_menu_text[3]
s4 = $ring_menu_text[4]
s5 = $ring_menu_text[5]
s6 = $ring_menu_text[6]
s7 = $ring_menu_text[7]
@commands = [ s1, s2, s3, s4, s5, s6, s7 ]
@item_max = 7
@index = 0
@items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_ESTATISTICAS, ICON_SAVE, ICON_EXIT ]
@disabled = [ false, false, false, false, false, false, false ]
@cx = center_x - 16
@cy = center_y - 16
setup_move_start
refresh
end
#--------------------------------------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#--------------------------------------------------------------------------
def update
super
refresh
end
#--------------------------------------------------------------------------
# œ ‰æ–ÊÄ•`‰æ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# ƒAƒCƒRƒ“‚ð•`‰æ
case @mode
when MODE_START
refresh_start
when MODE_WAIT
refresh_wait
when MODE_MOVER
refresh_move(1)
when MODE_MOVEL
refresh_move(0)
end
# ƒAƒNƒeƒBƒu‚ȃRƒ}ƒ“ƒh–¼•\ަ
rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
self.contents.draw_text(rect, @commands[@index],1)
end
#--------------------------------------------------------------------------
# › ‰æ–ÊÄ•`‰æ(‰Šú‰»Žž)
#--------------------------------------------------------------------------
def refresh_start
d1 = 2.0 * Math::PI / @item_max
d2 = 1.0 * Math::PI / STARTUP_FRAMES
r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#--------------------------------------------------------------------------
# › ‰æ–ÊÄ•`‰æ(‘Ò‹@Žž)
#--------------------------------------------------------------------------
def refresh_wait
d = 2.0 * Math::PI / @item_max
for i in 0...@item_max
j = i - @index
x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
#--------------------------------------------------------------------------
# › ‰æ–ÊÄ•`‰æ(‰ñ“]Žž)
# mode : 0=”½ŽžŒv‰ñ‚è 1=ŽžŒv‰ñ‚è
#--------------------------------------------------------------------------
def refresh_move( mode )
d1 = 2.0 * Math::PI / @item_max
d2 = d1 / MOVING_FRAMES
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( RING_R * Math.sin( d ) ).to_i
y = @cy - ( RING_R * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#--------------------------------------------------------------------------
# œ €–Ú‚Ì•`‰æ
# x :
# y :
# i : €–Ú”Ô†
#--------------------------------------------------------------------------
def draw_item(x, y, i)
#p "x=" + x.to_s + " y=" + y.to_s + " i=" + @items[i].to_s
rect = Rect.new(0, 0, @items[i].width, @items[i].height)
if @index == i
self.contents.blt( x, y, @items[i], rect )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect )
end
else
self.contents.blt( x, y, @items[i], rect, 128 )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
end
end
end
#--------------------------------------------------------------------------
# œ €–ڂ𖳌ø‚É‚·‚é
# index : €–Ú”Ô†
#--------------------------------------------------------------------------
def disable_item(index)
@disabled[index] = true
end
#--------------------------------------------------------------------------
# › ‰Šú‰»ƒAƒjƒ[ƒVƒ‡ƒ“‚Ì€”õ
#--------------------------------------------------------------------------
def setup_move_start
@mode = MODE_START
@steps = STARTUP_FRAMES
if SE_STARTUP != nil and SE_STARTUP != ""
Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
end
end
#--------------------------------------------------------------------------
# › ‰ñ“]ƒAƒjƒ[ƒVƒ‡ƒ“‚Ì€”õ
#--------------------------------------------------------------------------
def setup_move_move(mode)
if mode == MODE_MOVER
@index -= 1
@index = @items.size - 1 if @index < 0
elsif mode == MODE_MOVEL
@index += 1
@index = 0 if @index >= @items.size
else
return
end
@mode = mode
@steps = MOVING_FRAMES
end
#--------------------------------------------------------------------------
# › ƒAƒjƒ[ƒVƒ‡ƒ“’†‚©‚Ç‚¤‚©
#--------------------------------------------------------------------------
def animation?
return @mode != MODE_WAIT
end
end
#===================================================
# ? CLASS Window_RingMenu Ends
#===================================================
#===================================================
# ? CLASS Window_RingMenuStatus Begins
#===================================================
class Window_RingMenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
#--------------------------------------------------------------------------
def initialize
super(204, 64, 232, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = $chara_select[5]
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# œ ƒŠƒtƒŒƒbƒVƒ…
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($chara_select[4])
self.contents.font.name = $chara_select[0]
self.contents.font.color = text_color($chara_select[1])
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 80
y = 80 * i
actor = $game_party.actors[i]
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_name(actor, x, y + 24)
end
end
#--------------------------------------------------------------------------
# œ ƒJ[ƒ\ƒ‹‚Ì‹éŒ`XV
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
end
end
#===================================================
# ? CLASS Window_RingMenuStatus Ends
#===================================================
#===================================================
# ? CLASS Game_Map Additional Code Begins
#===================================================
class Game_Map
#Dubealex Addition (from XRXS) to show Map Name on screen
def name
$map_infos[@map_id]
end
end
#===================================================
# ? CLASS Game_Map Additional Code Ends
#===================================================
#===================================================
# ? CLASS Scene_Title Additional Code Begins
#===================================================
class Scene_Title
#Dubealex Addition (from XRXS) to show Map Name on screen
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
#===================================================
# ? CLASS Scene_Title Additional Code Ends
#===================================================
#===================================================
# ? CLASS Window_Location Begins
#===================================================
class Window_Location < Window_Base
def initialize
super(0, 0, $window_size[0], $window_size[1])
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $location_text[0]
self.contents.font.size = $location_text[1]
refresh
end
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_location_skin)
self.contents.font.color = text_color($location_text[2])
self.contents.draw_text(4, 0, 120, 32, $location_text[3])
self.contents.font.color = text_color($location_text[4])
self.contents.draw_text(4, 32, 120, 32, $game_map.name, 2)
end
end
#===================================================
# ? CLASS Window_Location Ends
#===================================================
#===================================================
# ? Ring Menu - Show Player Location R1 - Ends
#===================================================
elsif MC_Setup::MODELO_MENU == MC_Setup::NAOALTERAMENU
# Não altera nada no menu...
endDownload e ficha técnica
- Download (clique com o botão esquerdo do mouse ou toque no link)
- Desenvolvedor, publisher e/ou distribuidor: Marcelo Cavaco
- Sistema(s): Windows 98/98SE/Me/2000/XP/Vista/7
- Tamanho: 829KB (pacote de instalação e/ou espaço em disco)
- Licença: Grátis
- Categoria: Programação XP
- Tag: RPG Maker XP
- Adicionado por: LichKing
- Acessos: 60
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!
