Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP/VX/ACE] Menú con comandos dinámicos

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP/VX/ACE] Menú con comandos dinámicos

Mensaje por Wecoc el 2014-07-10, 16:50

He hecho una pequeña y muy rápida modificación del menú default de modo que sus comandos se puedan cambiar in-game (algo que ya hice para alguno de los CMS pero no de forma aislada).
Podéis pegarlo encima de main o substituir el actual Scene_Menu por éste excepto con el de ACE, ese solo puede ir encima de main.

Funciona de la siguiente manera;
Hay los siguientes comandos; ITEM, SKILL, EQUIP, STATUS, SAVE, QUIT
(y en el de Ace también FORMATION)
Tienes que llamarlos con esos nombres, al principio del script asignas con qué nombre se muestra cada uno.

Para cambiar el orden o los que aparecen lo haces así desde llamar script:

$game_system.menu_commands = [(comandos)]

Por ejemplo

$game_system.menu_commands = [ITEM, QUIT]

Y ya está, lo demás sigue funcionando igual.

Versión para XP

Código:
#==============================================================================
# [XP] Menú con comandos dinámicos
#==============================================================================
# Autor: Wecoc
# ( No pido créditos )
#==============================================================================

module Menu_Vocab 
  ITEM =  "Objetos"
  SKILL =  "Habilidades"
  EQUIP =  "Equipo"
  STATUS = "Estado"
  SAVE =  "Guardar"
  QUIT =  "Salir"
end

class Game_System
  include Menu_Vocab
  attr_accessor :menu_commands
  alias din_commands_menu initialize
  def initialize
    din_commands_menu
    @menu_commands = [ITEM, SKILL, EQUIP, STATUS, SAVE, QUIT]
  end
end

class Game_Temp
  attr_accessor :menu_index
  alias din_commands_menu initialize
  def initialize
    din_commands_menu
    @menu_index = 0
  end
end

class Interpreter
  include Menu_Vocab
end

# Modificación del Menú

class Scene_Menu
 
  include Menu_Vocab
 
  def initialize(menu_index = 0)
    @menu_index = $game_temp.menu_index
    @disabled = []
  end

  def disable(item)
    for i in 0...@command_window.size
      command = @command_window[i]
      if command == item
        @command_window.disable_item(i)
        @disabled.push(i)
      end
    end
  end
 
  def main
    @command_window = Window_Command.new(160, $game_system.menu_commands)
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      disable(ITEM)
      disable(SKILL)
      disable(EQUIP)
      disable(STATUS)
    end
    if $game_system.save_disabled
      disable(SAVE)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end

  def update
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    if @command_window.active
      update_command
      return
    end
    if @status_window.active
      update_status
      return
    end
  end

  def update_command
    $game_temp.menu_index = @command_window.index
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      $game_temp.menu_index = 0
      return
    end
    if Input.trigger?(Input::C)
      if @disabled.include?(@command_window.index)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case $game_system.menu_commands[@command_window.index]
      when ITEM
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Item.new
      when SKILL
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when EQUIP
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when STATUS
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when SAVE
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when QUIT
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end

  def update_status
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    if Input.trigger?(Input::C)
      case $game_system.menu_commands[@command_window.index]
      when SKILL
        if $game_party.actors[@status_window.index].restriction >= 2
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Skill.new(@status_window.index)
      when EQUIP
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Equip.new(@status_window.index)
      when STATUS
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end
end



Versión para VX

Código:
#==============================================================================
# [VX] Menú con comandos dinámicos
#==============================================================================
# Autor: Wecoc
# ( No pido créditos )
#==============================================================================

module Menu_Vocab 
  ITEM =  "Objetos"
  SKILL =  "Habilidades"
  EQUIP =  "Equipo"
  STATUS = "Estado"
  SAVE =  "Guardar"
  QUIT =  "Salir"
end

class Game_System
  include Menu_Vocab
  attr_accessor :menu_commands
  alias din_commands_menu initialize
  def initialize
    din_commands_menu
    @menu_commands = [ITEM, SKILL, EQUIP, STATUS, SAVE, QUIT]
  end
end

class Game_Temp
  attr_accessor :menu_index
  alias din_commands_menu initialize
  def initialize
    din_commands_menu
    @menu_index = 0
  end
end

class Game_Interpreter
  include Menu_Vocab
end

class Scene_Menu < Scene_Base
 
  include Menu_Vocab
 
  def initialize(menu_index = 0)
    @menu_index = $game_temp.menu_index
    @disabled = []
  end

  def start
    super
    create_menu_background
    create_command_window
    @gold_window = Window_Gold.new(0, 360)
    @status_window = Window_MenuStatus.new(160, 0)
  end

  def terminate
    super
    dispose_menu_background
    @command_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end

  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end

  def disable(item)
    for i in 0...@command_window.size
      command = @command_window[i]
      if command == item
        @command_window.draw_item(i, false)
        @disabled.push(i)
      end
    end
  end

  def create_command_window
    @command_window = Window_Command.new(160, $game_system.menu_commands)
    @command_window.index = @menu_index
    if $game_party.members.size == 0
      disable(ITEM)
      disable(SKILL)
      disable(EQUIP)
      disable(STATUS)
    end
    if $game_system.save_disabled
      disable(SAVE)
    end
  end

  def update_command_selection
    $game_temp.menu_index = @command_window.index
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
      $game_temp.menu_index = 0
    elsif Input.trigger?(Input::C)
      if @disabled.include?(@command_window.index)
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case $game_system.menu_commands[@command_window.index]
      when ITEM
        $scene = Scene_Item.new
      when SKILL
        start_actor_selection
      when EQUIP
        start_actor_selection
      when STATUS
        start_actor_selection
      when SAVE
        $scene = Scene_File.new(true, false, false)
      when QUIT
        $scene = Scene_End.new
      end
    end
  end

  def start_actor_selection
    @command_window.active = false
    @status_window.active = true
    if $game_party.last_actor_index < @status_window.item_max
      @status_window.index = $game_party.last_actor_index
    else
      @status_window.index = 0
    end
  end

  def end_actor_selection
    @command_window.active = true
    @status_window.active = false
    @status_window.index = -1
  end

  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_actor_selection
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case $game_system.menu_commands[@command_window.index]
      when SKILL
        $scene = Scene_Skill.new(@status_window.index)
      when EQUIP
        $scene = Scene_Equip.new(@status_window.index)
      when STATUS
        $scene = Scene_Status.new(@status_window.index)
      end
    end
  end
end



Versión para ACE

Código:
#==============================================================================
# [ACE] Menú con comandos dinámicos
#==============================================================================
# Autor: Wecoc
# ( No pido créditos )
#==============================================================================

module Menu_Vocab 
  ITEM =  "Objetos"
  SKILL =  "Habilidades"
  EQUIP =  "Equipo"
  STATUS = "Estado"
  FORMATION = "Formación"
  SAVE =  "Guardar"
  QUIT =  "Salir"
end

class Game_System
  include Menu_Vocab
  attr_accessor :menu_commands
  alias din_commands_menu initialize
  def initialize
    din_commands_menu
    @menu_commands = [ITEM, SKILL, EQUIP, STATUS, FORMATION, SAVE, QUIT]
  end
end

class Game_Interpreter
  include Menu_Vocab
end

# Modificación del Menú

class Window_MenuCommand < Window_Command
  def make_command_list
    for i in 0...$game_system.menu_commands.size
      command = $game_system.menu_commands[i]
      case command
      when Menu_Vocab::ITEM
        add_command(Menu_Vocab::ITEM, :item, main_commands_enabled)
      when Menu_Vocab::SKILL
        add_command(Menu_Vocab::SKILL, :skill, main_commands_enabled)
      when Menu_Vocab::EQUIP
        add_command(Menu_Vocab::EQUIP, :equip, main_commands_enabled)
      when Menu_Vocab::STATUS
        add_command(Menu_Vocab::STATUS, :status, main_commands_enabled)
      when Menu_Vocab::FORMATION
        add_command(Menu_Vocab::FORMATION, :formation, formation_enabled)
      when Menu_Vocab::SAVE
        add_command(Menu_Vocab::SAVE, :save, save_enabled)
      when Menu_Vocab::QUIT
        add_command(Menu_Vocab::QUIT, :game_end)
      end
    end
  end
end

class Scene_Menu < Scene_MenuBase
  def create_command_window
    @command_window = Window_MenuCommand.new
    for i in 0...$game_system.menu_commands.size
      command = $game_system.menu_commands[i]
      case command
      when Menu_Vocab::ITEM
        @command_window.set_handler(:item,      method(:command_item))
      when Menu_Vocab::SKILL
        @command_window.set_handler(:skill,    method(:command_personal))
      when Menu_Vocab::EQUIP
        @command_window.set_handler(:equip,    method(:command_personal))
      when Menu_Vocab::STATUS
        @command_window.set_handler(:status,    method(:command_personal))
      when Menu_Vocab::FORMATION
        @command_window.set_handler(:formation, method(:command_formation))
      when Menu_Vocab::SAVE
        @command_window.set_handler(:save,      method(:command_save))
      when Menu_Vocab::QUIT
        @command_window.set_handler(:game_end,  method(:command_game_end))
      end
    end
    @command_window.set_handler(:cancel,    method(:return_scene))
  end
end


Ojojo, en 20 minutos hice los tres xD
avatar
Wecoc
Administrador
Administrador



Créditos 12208

Gracias : 632

Volver arriba Ir abajo

Re: [XP/VX/ACE] Menú con comandos dinámicos

Mensaje por Usuario Oculto el 2014-07-11, 06:09

Joder Wecoc, cuando tendremos una clase magistral o por lo menos unos tutoriales -mejor aUn en video- de creaciOn de scripts. Estoy comenzando a creer que tienes una compusliOn o manIa por hacer scripts. Y espero nunca abandones tal obsesiOn.
avatar
Usuario Oculto
Soñador
Soñador

0/3

Créditos 630

Gracias : 14

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.