Arena RPG Maker
Olá, visitante!
Seja bem-vindo ao fórum Arena RPG Maker, caso queira aprender sobre criação de jogos, está no fórum certo. Esperamos que possa aprender tanto quanto possa nos ensinar aqui.

Atenciosamente,
Equipe Arena RPG Maker.
Arena RPG Maker

Estamos de volta o/ ... Ou não.Eu amo a -Dark
Doações para o fórum abertas, clique aqui e saiba mais.
Últimos assuntos
» Tileset Converter to MV
Sex 12 Maio 2017, 13:07 por Douggi

» [Dúvida] Como tirar a porcentagem de esquiva
Ter 09 Maio 2017, 22:15 por Neil Flame Runner

» Pack Resources, Sprites e etc
Qua 23 Dez 2015, 09:30 por raydengv

» Download RPG Maker 2003 + RTP em português
Ter 22 Dez 2015, 08:14 por ::KimMax::

» Fantasy Art Online
Dom 18 Out 2015, 16:42 por daviih123

» Você vai ter medo do Nerve gear?
Sab 25 Jul 2015, 16:02 por Kirito-kun

» O Barato é louco
Sab 27 Jun 2015, 15:26 por Halt

» Download RPG Maker 2000 + RTP em português
Qui 21 Maio 2015, 19:28 por Wismael

» Divulgando meu grupo e página do Facebook
Ter 19 Maio 2015, 13:06 por Halt

» Craftage Engine (Eclipse Origins totalmente modificado e sem bugs)
Seg 27 Abr 2015, 18:24 por pigot98


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Seleção de Classes em Sab 22 Set 2012, 02:50

Carlos

avatar
Administrador
Administrador
Introdução
Com este script, o seu jogo terá um menu de seleção, de classes que o deixará mais parecido com os clássicos RPG's, além de dar um ar mais profissional.
- O script é de fácil customização
- As pictures podem ser trocadas facilmente,
- O plano de fundo pode obter a opção de movimento ( Como um fog ), e também pode ser trocado com pouco trabalho.
- Todos os personagens do Banco de Dados podem ter suas classes trocadas pelo script.

Instruções

Para chamar o script:
Evento > Adicionar Comando > 3ª Aba > Chamar Script
E então digite: select_class(actor)
Sendo ator o id do personagem do banco de dados que terá
sua classe alterada.
Exemplo: select_class(1)

Afim de tentar prevenir bugs por mal configuração. Um método foi adicionado para tentar avisa-lo de que a configuração atual possui algo de errado.
Caso o maker que vier a utilizar o script, e por acidente, nas configurações, informar o nome ou ID de uma classe que não existe no banco de dados, 2 avisos serão dados:

Spoiler:


O primeiro, será um aviso na própria tela do jogo, que a classe informada não foi encontrada, podemos visualizar isto na imagem acima.
Já o segundo aviso, é um Pop-up:

Spoiler:


A mensagem de erro lhe dará 3 opções.

Anular - O jogo será fechado
Repetir - O método de verificação de classe será processado novamente
Ignorar - O jogo continuará, e a classe selecionada para o personagem será a classe de ID 1.

Script :
Código:
#=========================================================================
# Seleção de classe
# Versão: 1.1
# Compativel com RMVXAce
# Autor: JohnBolton
#-------------------------------------------------------------------------
# Acesse: www.centrorpgmaker.com
# É permitido postar em outros lugares contanto que não seja mudado
# as linhas dos créditos.
#-------------------------------------------------------------------------
# Introdução: Com este script, o seu jogo terá um menu de seleção
# de classes, que deixará o jogo mais bonito e com um ar mais profissional
#-------------------------------------------------------------------------
# Instruções: Modifique a seu gosto as constantes
# no módulo de configuração abaixo.
# Para chamar o script:
# Evento > Adicionar Comando > 3ª Aba > Chamar Script
# E então digite: select_class(actor)
# Sendo actor o id do personagem do banco de dados que terá
# sua classe alterada/mudada.
# Exemplo: select_class(1)
#=========================================================================
module JohnBolton
  module SelectClass
  #--------------------------------------------------------------------------
  # * Configurações
  #--------------------------------------------------------------------------
=begin
 In_Title - Permite que após a opção "Novo Jogo" na tela de título
 ser selecionada, haja um redirecionamente para o menu de seleção de classes.
 Esta opção, se ativada, pode causa incompatibilidade com outros scripts
 que alterem a class Scene_Title. Então, para uma maior prevenção
 de incompatibilidade. É recomendável que este seja o último script entre
 os 'Scripts Adicionais' e o 'Main'. Caso mesmo assim, uma incompatibilidade
 gerada, desative esta opção imediatamente, ou contate o criador do script,
 ou alguém que entenda do mesmo, para dar-lhe suporte.
 Legenda: true  : ativado
          false : desativado
=end
 In_Title = true
=begin
 Cabeçalho - Mudar a frase do cabeçalho do menu de seleção
=end
 Cabecalho = "Escolha uma classe"
=begin
 Classes - Definir as classes que poderão ser selecionadas no menu. As classes
 poderão ser apontadas tanto pelo seu ID, tanto quanto pelos seus Nomes. Caso
 o nome ou o ID não correspondam a nenhuma classe do Bando de Dados, uma
 janela Pop-up aparecerá para aviso do erro, e na mesma, haverá alternativas
 para erro.
=end
 Classes = ['Guerreiro',6,9,'Cavaleiro']
=begin
 Pictures - Nesta constante, deverá ser apontado os nomes da imagens que
 aparecem respectivamente nesta ordem no menu de seleção de classes.
 Todas as imagens devem estar obrigatoriamente no diretório 'Graphics/Battlers'
=end
 Pictures = ['Grappler_m','Delf_m','Cleric_m','Fanatic']
=begin
 Background - Definir o nome da imagem que aparecerá como plano de fundo do
 menu de seleção de classes. Por obrigatoriedade esta imagem
 deverá estar no diretório 'Graphics/Parallax'
 Caso deseje que o plano de fundo seja uma window, determine o valor como sendo 0
=end
 Background = 'StarlitSky'
=begin
 Move_Background - Define se haverá um movimento como os do 'Fog', no
 plano de fundo do menu citado.
 Legenda: true  - ativado
          false - desativado
=end
 Move_Background = true
=begin         
  Movimentacao_Horizontal - Define a velocidade do movimento do plano de fundo
  horizontal, levando em conta as condições do mundo real.
  Valores: 0 - Sem movimento
          1 - Movimento regular
          2 - Movimento rápido
          3 - Movimento exageradamente rápido ( Não recomendado )
=end         
 Movimentacao_Horizontal = 1
=begin
  Movimentacao_Vertical - Define a velocidade do movimento do plano de fundo
  vertical, levando em conta as condições do mundo real.
  Valores: 0 - Sem movimento
          1 - Movimento regular
          2 - Movimento rápido
          3 - Movimento exageradamente rápido ( Não recomendado )
=end
 Movimentacao_Vertical = 0
=begin
  BGM - Define respectivamente o nome do arquivo a ser tocado
  e o volume do mesmo. Por obrigatoriedade, o arquivo deve-se encontrar
  no diretório ' Audio/BGM ' 
=end
 BGM = ["Battle5",80]
  #--------------------------------------------------------------------------
  # * Fim das Configurações
  #--------------------------------------------------------------------------
  end
end
  #--------------------------------------------------------------------------
  # * MessageBox - Object
  #--------------------------------------------------------------------------
def p(message='',title='',type=2)
  p = Win32API.new('user32','MessageBox',['L','P','P','L'],'I')
  p.call(0,message,title,type)
end
#==============================================================================
# ** Window_NameClasses
#------------------------------------------------------------------------------
#  Esta janela contém os nomes das classes a serem mostradas na Seleção de Classes
#==============================================================================
class Window_NameClasses < Window_Base
  include JohnBolton::SelectClass
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize(x,y,width,height)
    super(x,y,width,height)
    #Chama o método de Renovação
    refresh
  end
  #--------------------------------------------------------------------------
  # * Renovação
  #--------------------------------------------------------------------------
  def refresh
    #Criação dos contextos
    names = []
    #Para todos os valores da constante Classes
    for i in 0..3
      case Classes[i]
      #Quando i, tiver valor String
      when String
        names << Classes[i]   
      #Quando i, tiver valor String
      when Integer
        #Verifica se o ID apontado existe no Bando de Dados
        unless Classes[i] > $data_classes.size - 1 || Classes[i] <= 0
          #Caso existe, recupera o nome da classe pelo id
          #e adiciona o valor na array 'names'
          names << ($data_classes[Classes[i]].name)
          #Caso não exista a classe apontada pelo id
        else
          #Adiciona mensagem de erro na array 'names'
          names << "Não encontrado"
        end
      #Quando não Integer e nem String
      else
        #Adiciona mensagem de erro na array 'names'
        names << "Não encontrado"
      end
    end
    #Criação dos contextos
    draw_text(- 15,285,136,32,names[0],1)
    draw_text(544/4 - 15,285,136,32,names[1],1)
    draw_text(544/2 - 15,285,136,32,names[2],1)
    draw_text(544/2 + 544/4 - 15,285,136,32,names[3],1)
  end
end

#==============================================================================
# ** Window_SelectClass
#------------------------------------------------------------------------------
#  Esta janela serve para a seleção de classe
#==============================================================================
class Window_SelectClass < Window_HorzCommand
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize(x,y,width,height)
    #Cria uma instancia para o argumento width
    @window_width = width
    #Cria uma instancia para o argumento height
    @window_height = height
    super(x, y)
  end
  #--------------------------------------------------------------------------
  # * Aquisição da largura da janela
  #-------------------------------------------------------------------------- 
  def window_width
    @window_width
  end
  #--------------------------------------------------------------------------
  # * Aquisição da altura da janela
  #--------------------------------------------------------------------------
  def window_height
    @window_height
  end 
  #--------------------------------------------------------------------------
  # * Aquisição do número de colunas
  #--------------------------------------------------------------------------
  def col_max
    return 4
  end
  #--------------------------------------------------------------------------
  # * Cálculo da altura do conteúdo da janela
  #--------------------------------------------------------------------------
  def contents_height
    return 336
  end
  #--------------------------------------------------------------------------
  # * Criação da lista de comandos
  #--------------------------------------------------------------------------
  def make_command_list
    add_command('',      :first_class)
    add_command('',      :second_class)
    add_command('',      :third_class)
    add_command('',      :fourth_class)
  end 
  #--------------------------------------------------------------------------
  # * Aquisição do retangulo para desenhar o item
  #    index : índice do item
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = super
    rect.x = index * (item_width + spacing)
    rect.y = 0
    rect.height = 336
    rect
  end
end

#==============================================================================
# ** Scene_SelectClass
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da Seleção de Classe
#==============================================================================
class Scene_SelectClass < Scene_Base
  include JohnBolton::SelectClass
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def initialize
    @actor = $game_system.actor_select_classes
  end 
  #--------------------------------------------------------------------------
  # * Inicialização do processo²
  #--------------------------------------------------------------------------
  def start
    #Variável necessária para correção do bug da MessageBox
    @bug_test = true
    #Chama o método para criação da window de seleção
    create_command_window
    #Chama o método para a criação do cabeçalho da Scene
    create_help_window
    #Chama o método para criação das pictures dos Battlers
    create_battlers
    #Criação do Plano de fundo da Scene
    create_background
  end
  #--------------------------------------------------------------------------
  # * Aquisição da velocidade de transição
  #--------------------------------------------------------------------------
  def transition_speed
    return 40
  end
  #--------------------------------------------------------------------------
  # * Criação do plano de fundo
  #--------------------------------------------------------------------------
  def create_background
    #Declaração da variável
    @sprite_background = Plane.new
    #Se a constante para seleção do plano de fundo não tiver o valor para
    #o fundo da window ser um plano de fundo
    unless Background == 0
      #Criação bitmap
      @sprite_background.bitmap = Cache.parallax(Background)     
    end
  end
  #--------------------------------------------------------------------------
  # * Atualização da Tela
  #--------------------------------------------------------------------------
  def update
    super
    #Caso a constante permita o movimento do plano de fundo e a imagem exista
    if Move_Background
      unless Background == 0
        #Ocorre o movimentohorizontal e vertical
        @sprite_background.ox += Movimentacao_Horizontal
        @sprite_background.oy += Movimentacao_Vertical
      end
    end
    if Input.trigger?(:B) && @actor != 1
      Sound.play_cancel
      terminate
    end
  end
  #--------------------------------------------------------------------------
  # * Criação dos Bitmaps
  #--------------------------------------------------------------------------
  def create_battlers
    #Declaração das instancias
    @first_class = Sprite.new
    @second_class = Sprite.new
    @third_class = Sprite.new
    @fourth_class = Sprite.new
    #Criação dos bitmaps
    @first_class.bitmap = Cache.battler(Pictures[0],0)
    @second_class.bitmap = Cache.battler(Pictures[1],0)
    @third_class.bitmap = Cache.battler(Pictures[2],0)
    @fourth_class.bitmap = Cache.battler(Pictures[3],0)
    #Aquisição da coordenada X das pictures
    @first_class.x = (136 - @first_class.width)/2
    @second_class.x = ((136 - @second_class.width)/2) + (544/4)
    @third_class.x = ((136 - @third_class.width)/2) + (544/2)
    @fourth_class.x = ((136 - @third_class.width)/2) + (544/2 + 544/4)
    #Aquisição da coordenada Y das pictures
    @first_class.y = ((365 - @first_class.height)/2) + 51
    @second_class.y = ((365 - @second_class.height)/2) + 51
    @third_class.y = ((365 - @third_class.height)/2) + 51
    @fourth_class.y = ((365 - @third_class.height)/2) + 51
    #Aquisição da profundidade das pictures
    @first_class.z = 9999
    @second_class.z = 9999
    @third_class.z = 9999
    @fourth_class.z = 9999
  end
  #--------------------------------------------------------------------------
  # * Criação da janela de comando
  #--------------------------------------------------------------------------
  def create_command_window
    #Declaração da instancia para com a Window que contém os nomes das classes
    @window = Window_NameClasses.new(0,51,544,365)
    #Aquisição da profundidade da window
    @window.z = 99999
    #Aquisição da opacidade do fundo da window
    @window.back_opacity = 0
    #Declaração da window de seleção de classe
    @command_window = Window_SelectClass.new(0,51,544,365)
    #Aquisição da profundidade da window
    @command_window.z = 9999
    #Aquisição da opacidade do fundo da window caso a constante do plano de fundo não seja 0
    @command_window.back_opacity = 0 unless Background == 0
    @command_window.set_handler(:first_class,  method(:command_first_class))
    @command_window.set_handler(:second_class, method(:command_second_class))
    @command_window.set_handler(:third_class,  method(:command_third_class))
    @command_window.set_handler(:fourth_class, method(:command_fourth_class))
  end
  #--------------------------------------------------------------------------
  # * Criação da janela de ajuda.
  #--------------------------------------------------------------------------
  def create_help_window
    @help_window = Window_Help.new(1)
    @help_window.height = 51
    @help_window.back_opacity = 0 unless Background == 0
    @help_window.set_text(Cabecalho.rjust(34))
  end
  #--------------------------------------------------------------------------
  # * Checa se a classe existe quando o valor é String
  #    index : índice
  #--------------------------------------------------------------------------
  def check_name_classes(index)
    for i in 1...$data_classes.size
      #Caso exista
      if Classes[index] == $data_classes[i].name
        #O Personagem principal adquire a classe selecionada
        $game_actors[@actor].change_class(i)
        #Recupera todos os status
        $game_actors[@actor].recover_all
        #Termina o processo
        terminate
        return
      end
    end
    #Método de erro é chamado
    error_no_one(index,1) if @bug_test
  end
  #--------------------------------------------------------------------------
  # * Checa se a classe existe quando o valor é Integer
  #    index : índice
  #--------------------------------------------------------------------------
  def check_id_classes(index)
    unless Classes[index] > $data_classes.size - 1 || Classes[index] <= 0
      $game_actors[@actor].change_class(Classes[index])
      #Recupera todos os status
      $game_actors[@actor].recover_all
      terminate
    else
      error_no_one(index,2) if @bug_test
    end
  end
  #--------------------------------------------------------------------------
  # * Processamento de alternativas para o erro
  #    index : índice
  #    type  : ID do erro
  #-------------------------------------------------------------------------- 
  def error_no_one(index, type)
    case type
    when 0
      #Adquire a opção selecionada pelo maker/jogador
      clicked = p("'#{Classes[index]}' nao esta relacionado a nenhum ID ou Nome de classe","Scene_SelectClasses", 2)
    when 1
      #Adquire a opção selecionada pelo maker/jogador
      clicked = p("Classe '#{Classes[index]}' nao encontrada no Banco de Dados","Scene_SelectClasses", 2)
    when 2
      #Adquire a opção selecionada pelo maker/jogador
      clicked = p("Classe de ID '#{Classes[index]}' nao encontrada no Banco de Dados","Scene_SelectClasses", 2)     
    end
    #Caso a opção selecionada tenha sido:
    case clicked
      #Abortar
      when 3
        #O jogo é fechado
        exit
      #Tentar novamente
      when 4
        #Chama o método para checar se a classe apontada na constante existe
        case index
        when 0
          command_first_class
        when 1
          command_second_class
        when 2
          command_third_class
        when 3
          command_fourth_class
        end
      #Ignorar
      when 5
        #Mudança de valor para solucionar o bug da MessageBox
        @bug_test = false
        #Reproduz efeitos sonoros e BGM do mapa
        $game_map.autoplay
        #Muda para a Scene_Map
        SceneManager.goto(Scene_Map)
        #Congela os gráficos
        Graphics.freeze
        #Termina o processo
        terminate
        #Classe de ID 1 é selecionada
        $game_actors[@actor].change_class(1)
        return
      end
  end
 
  #--------------------------------------------------------------------------
  # * Primeira classe selecionada
  #--------------------------------------------------------------------------
  def command_first_class
    check_name_id_classes(0)
  end
  #--------------------------------------------------------------------------
  # * Segunda classe selecionada
  #--------------------------------------------------------------------------
  def command_second_class
    check_name_id_classes(1)
  end
  #--------------------------------------------------------------------------
  # * Terceira classe selecionada
  #--------------------------------------------------------------------------
  def command_third_class
    check_name_id_classes(2)
  end
  #--------------------------------------------------------------------------
  # * Quarta classe selecionada
  #--------------------------------------------------------------------------
  def command_fourth_class
    check_name_id_classes(3)
  end
  #--------------------------------------------------------------------------
  # * Checa os valores dados na constante
  #    index : índice
  #--------------------------------------------------------------------------
  def check_name_id_classes(index)
    #Checa se a classe apontada na constante de configuração existe
    case Classes[index]
    #Quando é dado o nome da classe
    when String
      check_name_classes(index)
    #Quando é dado o ID da classe
    when Integer
      check_id_classes(index)
    #Quando o valor é diferente dos citados acima
    else
      #Método de erro é chamado
      error_no_one(index,0) if @bug_test
    end
  end
  #--------------------------------------------------------------------------
  # * Finalização do processo
  #--------------------------------------------------------------------------
  def terminate
    #Finaliza as windows declaradas na classe
    Graphics.fadeout(40)
    $game_system.actor_select_classes = 1
    @command_window.dispose
    @help_window.hide
    @window.dispose
    #Finaliza as imagens declaradas na classe
    @first_class.dispose
    @second_class.dispose
    @third_class.dispose
    @fourth_class.dispose
    #Reproduz efeitos sonoros e BGM do mapa
    $game_map.autoplay
    #Muda para Scene_Map
    SceneManager.goto(Scene_Map)
  end
end

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  Esta classe executa o processamento da tela de título.
#==============================================================================
if JohnBolton::SelectClass::In_Title
  class Scene_Title
    #--------------------------------------------------------------------------
    # * Recriação do método command_new_game
    #--------------------------------------------------------------------------
    def command_new_game
      DataManager.setup_new_game
      close_command_window
      fadeout_all
      #Se a constante relacionada a música não tiver valor 0:
      unless JohnBolton::SelectClass::BGM[0] == 0
        #A BGM apontada na constante é reproduzida.
        Audio.bgm_play('Audio/BGM/' + JohnBolton::SelectClass::BGM[0], JohnBolton::SelectClass::BGM[1])
      end
      $game_system.actor_select_classes = $game_party.members[0].id
      SceneManager.call(Scene_SelectClass)
    end
  end
end


#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  Um interpretador para executar os comandos de evento. Esta classe é usada
# internamente pelas classes Game_Map, Game_Troop e Game_Event.
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Chama o menu de seleção de classes pelo "Chamar Script"
  #    actor : ID do actor
  #--------------------------------------------------------------------------
  def select_class(actor)
    $game_system.actor_select_classes = actor
    SceneManager.call(Scene_SelectClass)
  end
end

#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  Esta classe gerencia os dados relacionados ao sistema. Também gerencia
# veículos, BGM, etc.
# A instância desta classe é referenciada por $game_system.
#==============================================================================
class Game_System
  #--------------------------------------------------------------------------
  # * Variáveis Públicas
  #--------------------------------------------------------------------------
  attr_accessor :actor_select_classes
  #--------------------------------------------------------------------------
  # * Modificação do método initialize
  #--------------------------------------------------------------------------
  alias johnbolton_selectclasses_initialize initialize
  def initialize
    johnbolton_selectclasses_initialize
    @actor_select_classes = 1
  end
end

Screen :
Spoiler:

Créditos:
Spoiler:
JohnBolton


__________________________________________





Ver perfil do usuário http://arenarpgmaker.eclipserpg.com

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum