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

Comando do Menu (Checkpoint)

Iniciado por Darkiino, 19/12/2017 às 17:16

Estou usando o RMVX Ace e estou usando um script de checkpoint, em que ao morrer você volta onde o checkpoint foi salvo pela ultima vez dãh, com isso gostaria de adicionar no menu uma opção de voltar ao ultimo check point, em outras palavras, chamar o game over, eu consegui criar o comando, mas não consigo chamar a Scene_Gameover, não sou muito experiente com RGSS3, se alguem puder ajudar ficarei muito agradecido!!  :ok:

Segue o código que usei na Window_MenuCommand:
  #--------------------------------------------------------------------------
  # * Adição de comandos próprios
  #--------------------------------------------------------------------------
  def add_original_commands
    add_command("Checkpoint", :gameover)
    end


Esse código apenas cria o comando, para ele fazer algo você precisa associá-lo à um método:

Spoiler
#--------------------------------------------------------------------------
# * Adição de comandos próprios
#--------------------------------------------------------------------------
  def add_original_commands
    add_command("Checkpoint", :gameover)
    set_handler(:gameover, method(:checkpoint))
  end

  def checkpoint
    SceneManager.call(Scene_Gameover)
  end
Acho que é isso!
[close]
Obs.: Não testei.

04/01/2018 às 17:27 #2 Última edição: 04/01/2018 às 17:31 por Revali
OBS: Não vou colocar em spoilers porque eles diminuem o tamanho da caixa de códigos.

Vou levar em consideração que você entenda o básico de programação e de que não ficará perdido se eu for um pouco mais direto:

Precisamos trabalhar em duas classes para fazer tudo funcionar corretamente. Primeiro vamos ter em mente quais são essas classes que iremos utilizar. Se a ideia é adicionar a opção no menu principal, teremos que trabalhar com a janela de comandos do menu principal e na própria cena do menu principal. Respectivamente estas são: Scene_Menu e Window_MenuCommand.

Vamos então começar o trabalho alterando e incrementando a classe da janela de comandos do menu (Window_MenuCommand) para criamos o comando dentro dela.

Criaremos então um código limpo onde iniciaremos primeiramente dentro da classe Window_MenuCommand adicionando um alias para incrementar(sem modificar o que já existe) o método make_command_list. Dentro desse método, chamaremos um novo método onde iremos criar a opção dentro da janela.
class Window_MenuCommand < Window_Command
  
  alias new_command make_command_list 
  def make_command_list
    new_command
    add_checkpoint_command
  end
  
end


Agora, criaremos o comando:
class Window_MenuCommand < Window_Command
  
  alias new_command make_command_list 
  def make_command_list
    new_command
    add_checkpoint_command
  end
  
  def add_checkpoint_command
    add_command("Carregar",   :checkpoint)
  end
  
end

Explicação rápida:
add_command("nome", :symbol, condition)
#"nome" = Nome do comando no menu
#:symbol = Simbolo que usaremos pra identificador o comando futuramente
#condition = não é obrigatório, mas usá-se caso deseje adicionar alguma condição para que o comando seja ativável ou não.


A parte na classe da janela está pronta. Agora iremos trabalhar com a classe da cena do menu. Dentro dela, adicionaremos um alias no método create_command_window. Neste método, associaremos o comando que criamos na janela com um método que criaremos dentro dessa classe (cena) e nele iremos finalmente criar a ação que desejamos que o comando realize.
class Scene_Menu < Scene_MenuBase
  
  alias new_command create_command_window 
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
  
end

Explicação rápida:
@command_window.set_handler(:symbol, method(:method))
#:symbol = O mesmo de antes, lembra? É com ele que iremos associar o comando da janela com o método a seguir
#:method = O método onde realizaremos a ação que ocorrerá quando o comando for ativado


Vamos então terminar tudo criando o último método, que já foi referenciado pelo nome na etapa anterior.
class Scene_Menu < Scene_MenuBase
  
  alias new_command create_command_window 
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
  
  def command_checkpoint
    #adicione a ação que você deseja
  end
  
end

Você mencionou que gostaria de chamar o game over, mas te pergunto, esse sistema de checkpoint não cria um save? Se criar, não seria mais fácil em vez de chamar o game over, chamar um load do save?

Mas enfim, eis aqui o resultado final seguindo o seu pedido do comando chamar a cena de game over:
class Window_MenuCommand < Window_Command
  
  alias new_command make_command_list 
  def make_command_list
    new_command
    add_checkpoint_command
  end
  
  def add_checkpoint_command
    add_command("Carregar",   :checkpoint)
  end
  
end

class Scene_Menu < Scene_MenuBase
  
  alias new_command create_command_window 
  def create_command_window
    new_command
    @command_window.set_handler(:checkpoint, method(:command_checkpoint))
  end
  
  def command_checkpoint
    SceneManager.call(Scene_Gameover)
  end
  
end

Talvez o código sirva de exemplo para você fazer o que achar melhor com o comando.

Qualquer dúvida basta dizer.  :ok: