Ayene - Pon 23 Sty, 2012 22:39 Temat postu: Własne komendy w menu [XP]
~ Własne komendy w menu [XP] / Custom Menu Commands [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.
Autor:
Ayene [yurika@o2.pl]
Kompatybilność:
RPG Maker XP
Skrypt:
Spoiler:
Kod:
#==============================================================================
# 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.
#==============================================================================
]
# 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
Screeny:
Spoiler:
Dodatkowe informacje:
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.Wachno PL - Sro 11 Lip, 2012 10:16 Nie do końca to ogarniam, być może źle szukam. Przypuśćmy że chcę dodać komendę po której włącza mi się dziennik zadań, jak mam to zrobić? Sory, jestem całkowicie zieloniutki z Ruby, pomocy NyanaPL - Sro 11 Lip, 2012 21:03 Wklejasz ten skrypt nad MAIN, następnie przechodzisz do
w miejsce "scene" wpisujesz scenę po której ci wyskakuje okno dziennika zadań.
U mnie jest to "Scene_QuestLog.new"
Więc u mnie wyglądało by to tak:
["Dziennik Zadań", 'Scene_QuestLog.new', false],
Jeśli chcesz aby w menu było więcej opcji musisz powiększyć liczbę wierszy, w tej linii wiersza,
Kod:
# Maksymalna liczba wierszy
ROW_MAX = 6
to też jest na samym początku skryptu.
Nie możesz zmienić "false" w "true" ponieważ skrypt jest tylko na jedną osobę czyli na głównego bohatera, który dostaje misje.
Mam nadzieje że pomogłem, Nyan ~~Kubissus - Nie 04 Lis, 2012 18:00 A ma ktoś może sposób na to żeby usunąć okienko ze statami postaci po prawej stronie? ;/Nex - Nie 04 Lis, 2012 21:54 po prawej stronie ?
chyba po lewej
usuń
Kod:
["Status", 'Scene_Status', true],
i w
Kod:
ROW_MAX = 6
zmień na
Kod:
ROW_MAX = 5
Kubissus - Wto 06 Lis, 2012 16:53 http://imageshack.us/phot.../407/menil.png/
Wstawiłbym obrazek tutaj ale forum mnie nie lubi i nie chce zadziałać :PNex - Wto 06 Lis, 2012 18:43 w linijkę 103 wpisz
Kod:
@status_window = nil
i dodatkowo usuń linijki
104 105 125
a jak wstawić obrazek to nie wiem Kubissus - Wto 06 Lis, 2012 20:00 Thx, działa :PThe Big Master - Pią 21 Gru, 2012 17:11