Własne Komendy w Menu / Custom Menu Commands [XP]

 

screen custom menu commands

 

Autor: Ayene [ Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie obsługi JavaScript. ]

Kompatybilność: RPG Maker XP

Krótki opis:

Skrypt pozwala dodać do menu własne polecenia. Przewidziano również wyłączenie okien ze złotem, czasem i liczbą kroków.

Instrukcja:

By dodać własną komendę w menu w Konfiguracji skryptu znajdź i edytuj sekcję:

# Lista poleceń w menu  
MENU_COMMANDS = [

#["Nazwa" , "Scena", Wybór postaci

["Przedmioty",  'Scene_Item',         false],
["Zdolności",   'Scene_Skill',        true],
["Ekwipunek",   'Scene_Equip',        true],
["Status",      'Scene_Status',       true],
["Rozdaj",      'Scene_Points',       false],
["Bestiariusz", 'Scene_MonsterBook',  false],
["Zapisz",      'Scene_Save',         false],   
["Wyjście",     'Scene_End',          false],

]

Skrypt:

#==============================================================================
# Własne komendy w menu [XP] / Custom Menu Commands [XP]
#==============================================================================
# Autor: Ayene   
#==============================================================================
# Skrypt pozwala dodać do menu własne polecenia. Przewidziano również wyłączenie
# okien ze złotem, czasem i liczbą kroków.
# Instalacja: Umieść skrypt nad Main.
#==============================================================================

module Ayene     
  # Lista poleceń w menu   
 
  MENU_COMMANDS = [
 
  #["Nazwa" , "Scena", Wybór postaci
 
  ["Przedmioty",  'Scene_Item',         false],
  ["Zdolności",   'Scene_Skill',        true],
  ["Ekwipunek",   'Scene_Equip',        true],
  ["Status",      'Scene_Status',       true],
  ["Rozdaj",      'Scene_Points',       false],
  ["Bestiariusz", 'Scene_MonsterBook',  false],
  ["Zapisz",      'Scene_Save',         false],   
  ["Wyjście",     'Scene_End',          false],
 
  ]
  # Wybór postaci, to opcja zaznaczenia okna statusu w menu, jak to ma miejsce
  # w przypadku wyboru Umiejętności czy Ekwipunku - po ich wyborze bowiem można
  # wybrać postać, której właściwości chcemy zobaczyć.
   
  # Maksymalna liczba wierszy
  ROW_MAX = 6
 
  # Indeks poleceń (kolejność w MENU_COMMANDS), które mają być nieaktywne,
  # gdy nie ma bohaterów w drużynie.
  DISABLE_COMMANDS = [0, 1, 2, 3, 4]
 
  # Okno ze złotem (tak - true / nie - false)
  GOLD_WINDOW = true
 
  # Okno z czasem gry (tak - true / nie - false)
  PLAY_TIME_WINDOW = true
 
  # Okno z liczbą kroków (tak - true / nie - false)
  STEP_WINDOW = true     
end

#==============================================================================
# ** Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :menu_command_index
  #--------------------------------------------------------------------------
  # * Object Initialization (alias)
  #--------------------------------------------------------------------------
  alias aye_gametemp_ini initialize
  def initialize
    aye_gametemp_ini
    @menu_command_index = 0
  end
end

#==============================================================================
# ** Scene_Map
#==============================================================================
class Scene_Map
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  alias aye_scmap_main main
  def main
    $game_temp.menu_command_index = 0
    aye_scmap_main
  end
end

#==============================================================================
# ** Scene_Menu
#==============================================================================
class Scene_Menu
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------   
  def main   
    @command_window = Window_Command.new(160, commands[0])
    @command_window.height = [@command_window.height, Ayene::ROW_MAX * 32 + 32].min
    @command_window.index = $game_temp.menu_command_index   
    Ayene::DISABLE_COMMANDS.each{|i| @command_window.disable_item(i) if $game_party.actors.size == 0}
    @windows = []   
    @windows.push(Window_PlayTime.new) if Ayene::PLAY_TIME_WINDOW
    @windows.push(Window_Steps.new) if Ayene::STEP_WINDOW
    @windows.push(Window_Gold.new) if Ayene::GOLD_WINDOW
    y = @command_window.height
    for window in @windows
      window.x = 0
      window.y = y
      y += window.height
    end
    @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
    for window in @windows
      window.dispose
    end
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @command_window.update
    @status_window.update
    for window in @windows
      window.update
    end
    if @command_window.active
      update_command
      return
    end
    if @status_window.active
      update_status
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end           
    if Input.trigger?(Input::C)
      unless command_enabled?(@command_window.index)
        $game_system.se_play($data_system.buzzer_se)
        return
      end   
      $game_temp.menu_command_index = @command_window.index
      $game_system.se_play($data_system.decision_se)     
      if commands[2][@command_window.index]
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      else
        $scene = eval("#{commands[1][@command_window.index]}.new")
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  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)     
      $game_system.se_play($data_system.decision_se)
      $scene = eval("#{commands[1][@command_window.index]}.new(@status_window.index)")
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Check Commands
  #--------------------------------------------------------------------------
  def commands
    commands = []
    next_scene = []
    select_window = []
    for command in Ayene::MENU_COMMANDS
      commands.push(command[0])
      next_scene.push(command[1])
      select_window.push(command[2])
    end   
    return commands, next_scene, select_window
  end
  #--------------------------------------------------------------------------
  # * Check Command Enabled
  #--------------------------------------------------------------------------
  def command_enabled?(index)
    if Ayene::DISABLE_COMMANDS.include?(index) and $game_party.actors.size == 0
      return false
    end
    return true
  end
end

Dodatkowe informacje:

1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.