🤔 Para Refletir :
"Chamar o var é coisa do passado. Agora a gente chama o const e o let."
- Dr.XGB

RPG Maker VX Ace [RM VX Ace] Resque-Reload - Editando os scripts sem sair do game

Resque Masculino

Coração Valente
Membro
Membro
Juntou-se
03 de Agosto de 2016
Postagens
1.234
Bravecoins
293
[RPG Maker VX] Editando os scripts sem sair do game


Olá pessoal! Tudo bem com vocês?

Hoje estou trazendo um Script chamado Scene_ResqueReload que criei para utilização nos meus projetos que estão no RPG Maker VX Ace.

O Motivo

Ao contrário de muitos Scripts que agregam novas funcionalidade ao jogo, esse script é usado como ferramenta que facilita o teste em tempo real da edição de código no RPG Maker VX Ace.

Muitas vezes é preciso ter uma resposta rápida se o código alterado está funcionando. Fica cada vez mais desgastante quando um erro acontece no script e você precisa de vários cliques na ferramenta para abrir o editor, editar o código, salvar as alterações e reiniciar o game.

Sempre achei limitante a utilização do editor de texto integrado que o RPG Maker disponibiliza para a alteração de código, pois existe uma grande variedade de editores de texto que proporcionam diversas ferramentas para nos ajudar nesses momento.

Eu gosto bastante de utilizar o Sublime Text para programar, ele tem diversos atalhos, mecanismos de busca e inúmeras ferramentas para edição de texto.

Outros editores de texto podem ser facilmente encontrados na Web, sejam eles pagos, gratuitos e até de código aberto. Utilizando esse Script, será possível que você utilize o editor de texto de sua preferência, seja ele Sublime, VIM, Atom, Notepad++, Visual Studio Code, etc...

A teoria

Basicamente, quando o game é iniciado, o script faz a leitura de um diretório dentro do seu projeto RPG Maker e faz o carregamento dos arquivos com extinção Ruby (.rb) para dentro do jogo.

Por padrão, o script está definido para ler a pasta "Scripts" do diretório raiz do seu projeto, essa pasta não existe por padrão, então você precisa criar manualmente e colocar os seus arquivos .rb dentro dela.

Já que estamos fazendo a leitura de um arquivo externo, é possível fazer um reload no código sem fechar o jogo, basta apertar a tecla "F5" do seu teclado quando estiver com o jogo aberto.

Isso permite que você altere o código no seu editor e veja a alteração no seu jogo sem precisar fechar o game!

A Prática

Para utilizar o script, basta criar a pasta "Scripts" dentro do diretório raiz do seu projeto Maker e criar os seus arquivos de script custom (.rb).


v9ufw75.png



QGZ1O59.png

Após realizar o passo acima, você precisa abrir abrir o Editor de Texto padrão do RPG Maker e adicionar o Script Resque_Reload na ultima linha.

Agedkzi.png

Pronto! Na próxima vez que você abrir o jogo, todos os arquivos .rb do diretório "Scripts" serão lidos automaticamente.

Os benefícios

Além da utilização de qualquer editor, o script permite que você utilize ferramentas de controle de versão como (Git, CVS, Subversion, Mercurial, etc...), para caso o seu computador exploda ou o seu jogo corrompa, você terá todo o seu código em um local seguro.

Além disso, sempre que você receber um erro de código, o seu jogo não vai mais ser fechado após aparecer essa mensagem:

HkNCaCh.png

Agora a mensagem de erro irá aparecer na tela de Debug, com muito mais informações sobre o erro, e o seu jogo irá automaticamente para a tela inicial (vocês poderão ver isso no vídeo abaixo)

MSDm384.png

O Código

O script permite algumas configurações sejam alteradas nas suas primeiras linhas:

- Nome da Pasta de leitura:
  O nome padrão é "Scripts" mas pode ser mudado para qualquer outro (desde que a pasta esteja com o mesmo nome.)

- Tecla de Reload:
  Por padrão o botão F5 faz o reload do jogo em tempo real, mas essa tecla pode ser mudada para outra de sua preferência.

Abaixo está o código fonte do script e a sua ultima versão no Github, além de um vídeo demonstrando o funcionamento do script, onde eu faço várias alterações em um script, mudando o nome exibido, o posicionamento e causando erros:

Em caso de dúvidas, estarei sempre por aqui, até mais pessoal!

https://github.com/rogesson/RGSSScripts/tree/ba0b7ef4fdfa8611645bdce2b419dc1d5e5565a2/Scene_ResqueReload


[youtube]https://youtu.be/0U8TE9uoQ1k[/youtube]

Código:
# Name: Resque Reload
# Autor: Resque
# Email: rogessonb@gmail.com
# Engine: RPG Maker VX
# Created At: 13/08/2019

class Scene_Base
  RELOAD_BUTTON = :F5
  SCRIPT_PATH = "Scripts"
  FULL_PATH = "#{File.expand_path(Dir.pwd)}/#{SCRIPT_PATH}/*.rb"

  DEBUG_MODE = true

  def main
    start
    post_start
    update until scene_changing?
    pre_terminate
    terminate

  rescue Exception => e
    reload_with_error(e)
  end
  
  def update
    update_basic
    
    reload if Input.trigger?(RELOAD_BUTTON)
  end

  def reload
    puts "Reload Button [#{RELOAD_BUTTON}] was pressed"
    puts "Reloading the Code..."
    Scene_Base.load_files
    
    call_current_scene
    
    nil
  end

  def self.load_files
    puts "Loading Files..."
    dirs = Dir[Scene_Base::FULL_PATH]
    failed = []

    dirs.each do |dir| 
      Dir[dir].each do |file|
        begin
          class_name = file.split("/").last[0..-4]

          autoload class_name, file
          load(file)
          puts "#{class_name} Loaded" if Scene_Base::DEBUG_MODE 
        rescue NameError => e 
          failed << { class_name: class_name, file: file }
          next
        end
      end
    end

    self.retry_failed_files(failed)
    puts "Load completed"
  end

  def reload_with_error(e)
    error_message(e)
    SceneManager.call(Scene_Title)
  end

  private

    def self.retry_failed_files(failed_files)
      failed_files.each do |f|
        autoload f[:class_name], f[:file]
        load(f[:file])
        puts "#{f[:class_name]} Loaded" if Scene_Base::DEBUG_MODE 
      end
    end

    def error_message(e)
      puts "-----------------------\nERROR: #{e} \n-> #{e.backtrace}\n-----------------------"
    end

    def call_current_scene
      puts "#{self.class} Reloaded"
      SceneManager.call(self.class)
    end
end

Scene_Base.load_files

 
Com certeza vai dar uma baita ajuda na hora de depurar os projetos! Obrigado pelo script, grande [member=770]Resque[/member] ! _b
 
Que script incrível! * - *

Eu certamente usaria se estivesse usando a engine em questão e se soubesse programar no maker (ainda preciso estudar muuuuuito o maker pra conseguir programar nele, pois até então só programei unica e exclusivamente na Unity, em Javascript e C#).

Dentre os editores de texto supracitados, gosto bastante do Atom.

Parabéns pelo ótimo trabalho!
 
Obrigado pessoal!


[member=2745]Eliyud[/member] Nunca usei o Atom, mas já vi amigos usando, a interface gráfica dele parece muito com o Sublime.

Ainda esse ano eu vou tentar aprender a usar o VIM, sempre achei legal.
 
Esse é um recurso muito útil, principalmente para quem usa scripts com diversas possibilidades de customização, dessa forma não precisa ficar reiniciando o projeto toda vez que realizar alguma modificação. Quem já tentou editar sistemas de batalhas e menus sabe bem do que estou falando...
Boa Resque, o cara quando manja do assunto é outro nível!
 
Voltar
Topo Inferior