miércoles, 14 de agosto de 2013

Leccion 4: Comandos de un Menú

 Quien no quizo sacar del menu la opcion "save" jajaja, bueno, hoy aprenderemos a colocar y sacar comandos de la ventana de menú, puede que sea un poco complejo así que pongan atención, aparte les dejo el video explicativo en ingles de diamondandplatinum:






 Antes de partir, les sugiero NO borrar este script, pues se utilizará mucho de aqui en adelante, comencemos

  Lo que haremos es agregar un comando nuevo al menu de opciones del juego, para esto necesitamos llamar a la ventana que hace esto, que seria Scene_menu, si no damos cuenta, que en ese lado sale, skill, item, etc (de color anaranjado o algo asi), esto lo que hace es ponerle el nombre a la opcion y luego llamar al metodo, para que haga que se meta en la opcion. En nuestro nuevo script pondremos, class Scene_Menu < Scene_MenuBase , luego de esto, copiaremos justo ese metodo donde salen esas opciones, quedaria algo asi:

class Scene_menu < Scene_Menubase
  def create_command_window
    @command_window = Window_MenuCommand.new
    @command_window.set_handler(:item,      method(:command_item))
    @command_window.set_handler(:skill,     method(:command_personal))
    @command_window.set_handler(:equip,     method(:command_personal))
    @command_window.set_handler(:status,    method(:command_personal))
    @command_window.set_handler(:formation, method(:command_formation))
    @command_window.set_handler(:save,      method(:command_save))
    @command_window.set_handler(:game_end,  method(:command_game_end))
    @command_window.set_handler(:cancel,    method(:return_scene))
  end
end

 Luego de esto, crearemos un alias, que hara que queden todas las funciones originales, para luego colocar la nuestra, esto quiere decir, que no modificaremos las originales, aca pueden usar cualquier nombre, yo le puse alias mono_scenemenu_ccw_nuevocomando y al lado el metodo.

 Luego de esto, como siempre, borramos todo lo que tiene adentro y colocamos nuestro alias, sin el metodo al lado, Dejaremos o veremos si ya lo borraron, uno de los que tenia antes, para que nos sirva de ejemplo.

 En el que dejamos, veremos que tiene las siguientes cosas:

@command_window.set_handler(:equip,     method(:command_personal))

 Donde :equip es el nombre de la opcion y method(:command_personal) es el metodo que llamará la opcion, entonces cambiaremos el nombre y le pondremos lo que queramos, yo le pondre Nuevo y el metodo, lo llamremos :command_Nuevo , si queremos saber porque es que lleva el nombre y el metodo, tendremos que buscar el porque dentro de los scripts, para esto apretamos, click derecho y buscamos "set_handler"
si nos damos cuenta, el primero que sale es una definicion del set_handler, y al lado sale (symbol, method), si pensamos bien es exactamente lo que estamos haciendo ahora, colocandole una palabra y luego un metodo, es solamente porque asi esta definido.

 Una vez hecho esto buscaremos el que pondra nuestra opcion en el juego, para esto nos vamos a Window_MenuCommand y copiaremos y pegaremos en nuestro script la siguiente linea, que hace que se agreguen nuevos comandos:

def add_original_commands
 end

Y tambien la clase heredada, o sea:

class Window_MenuCommand < Window_Command

Una vez pegado, le pondremos dentro de este metodo, esto de aca que se encuentra tambien en el window_menucommand:

add_command(Vocab::item,   :item,   main_commands_enabled)

 Esto loq eu hace es agregar al menu nuestra opcion, con el nombre, lo que hace y si se puede seleccionar o no desde el menu.

 entonces colocaremos un nombre que queramos, le pondre igual que el metodo "Nuevo" (entre comillas) y le colocaremos el nombre que llevaba la opcion :Nuevo , luego le colocaremos true, porque queremos seleccionarla, de otra manera si le ponemos false, no podremos entrar en ella.

 Luego de esto, tendremos que ponerle un alias a nuestro comando, para no modificar el original, yo le pondre mono_windmenucomm_addorcomm_nuevopalabra, luego de esto le pondremos, dentro del metodo, pero sin borrar lo que hicimos, quedaria algo asi hasta ahora

class Window_MenuCommand < Window_Command

  alias mono_windmenucomm_addorcomm_nuevopalabra  add_original_commands
  def add_original_commands
    mono_windmenucomm_addorcomm_nuevopalabra
    add_command("Nuevo",   :Nuevo,   true) # Crea solo la palabra el menu
  end

end

class Scene_Menu < Scene_MenuBase
  alias mono_scenemenu_ccw_nuevocomando create_command_window
  def create_command_window
    mono_scenemenu_ccw_nuevocomando
    @command_window.set_handler(:Nuevo,      method(:command_Nuevo))
  end
end

 Por último nos queda es colocar, que hacer cuando se selecciona la opcion, ya que si hasta ahora nos metemos en el juego, nos tirara error, porque no esta definido el metodo :command_Nuevo, es por esto, que lo haremos debajo de este, pondremos un def con el nombre del metodo llamado en el set_handler, y lo cerraremos, de esta manera

  def command_Nuevo                                        
  end

Ahora si nuestra opcion esta lista para ser seleccionada, aunque no hará absolutamente nada jajaja, porque no hay nada dentro de ella, pero no se preocupen, porque este script no queda, hasta alli, luego haremos que haga por lo menos algo.

 Por ahora les dejare el script completo y ordenado, para que se ubiquen y con algunas reseñas para que entiendan como va:

#=============================================================================
#                                WINDOW
#=============================================================================


class Window_MenuCommand < Window_Command

  alias mono_windmenucomm_addorcomm_nuevopalabra  add_original_commands
  def add_original_commands
    mono_windmenucomm_addorcomm_nuevopalabra
    add_command("Nuevo",   :Nuevo,   true) # Crea solo la palabra el menu
  end

end

#=============================================================================
#                                SCENE
#=============================================================================

class Scene_Menu < Scene_MenuBase
  alias mono_scenemenu_ccw_nuevocomando create_command_window
  def create_command_window
    mono_scenemenu_ccw_nuevocomando
    @command_window.set_handler(:Nuevo,      method(:command_Nuevo))
  end

  def command_Nuevo       #~Que pasa si aprieto en la opcion                                      
  end

end

#=============================================================================

 Bueno es todo por ahora, nos veremos mas adelante, para seguir arreglando este script y se viene cada vez mas pesado, asi que recuerden como hacer cada cosa... por ahora les digo...





No hay comentarios:

Publicar un comentario