Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Pon 23 Sty, 2012 22:39
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.
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
Pomógł: 6 razy Dołączył: 19 Gru 2012 Posty: 81 Skąd: Masz taki nr. IQ ?
Wysłany: Pią 21 Gru, 2012 17:11
Witam, ja mam Ring Menu, i ma pytanie
Co muszę zrobić aby w tym kółku pojawiły się te nowe "Ikonki" Które otworzą te Nowe części menu?
Oto i skrypt z którego korzystam:
def initialize(menu_index = 0)
@menu_index = menu_index
$location_text=[]
$gold_text=[]
$window_size=[]
$ring_menu_text=[]
$chara_select=[]
@window_opacity=[]
@chara_select=[]
@window_position=[]
$location_text[0]="Comic Sans MS" # Font Type
$location_text[1]=24 # Font Size
$location_text[2]=0 # Location Title Color
$location_text[4]=0 # Map Name Color
$location_text[3]="Lokacja:" # Text
$gold_text[0]="Comic Sans MS" # Font Type
$gold_text[1]=24 # Font Size
$gold_text[2]=0 # Gold Title Color
$gold_text[6]=0 # Gold Color
$gold_text[4]="Złoto:" # Text
@window_opacity[0]=255 # Border Opacity
@window_opacity[1]=130 # Background Opacity
$window_location_skin="001-Blue01" # Location Windowskin
$window_gold_skin="001-Blue01" # Gold Windowskin
@window_position[0]=0 # X Axis Position
@window_position[1]=0 # Location Y Axis Position
@window_position[2]=384 # Gold Y Axis Position
$window_size[0]=160 # Length
$window_size[1]=96 # Height
$ring_menu_text[0]="Comic Sans MS" # Font Type
$ring_menu_text[7]=0 # Font Color
$ring_menu_text[8]=24 # Font Size
$ring_menu_text[1]="Przedmioty"
$ring_menu_text[2]="Czary"
$ring_menu_text[3]="Ekwipunek"
$ring_menu_text[4]="Stan"
$ring_menu_text[5]="Zapisz grę"
$ring_menu_text[6]="Wyjdź z gry"
@chara_select[0]=408 # X Axis Position
@chara_select[1]=0 # Y Axis Position
$chara_select[0]="Comic Sans MS" # Font Type
$chara_select[1]=0 # Font Color
$chara_select[5]=24 # Font Size
$chara_select[2]=255 # Border Opacity
$chara_select[3]=130 # Background Opacity
$chara_select[4]="001-Blue01" # Windowskin
end
if @command_window.active
update_command
return
end
if @status_window.active
update_status
return
end
end
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)
if $game_party.actors.size == 0 and @command_window.index < 4
$game_system.se_play($data_system.buzzer_se)
return
end
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
$scene = Scene_Item.new
when 1
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 2
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 3
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 4
if $game_system.save_disabled
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$scene = Scene_Save.new
when 5
$game_system.se_play($data_system.decision_se)
$scene = Scene_End.new
end
return
end
return if @command_window.animation?
if Input.press?(Input::UP) or Input.press?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
return
end
if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
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.visible = false
@status_window.index = -1
return
end
if Input.trigger?(Input::C)
case @command_window.index
when 1
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 2
$game_system.se_play($data_system.decision_se)
$scene = Scene_Equip.new(@status_window.index)
when 3
$game_system.se_play($data_system.decision_se)
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
def refresh
self.contents.clear
case @mode
when MODE_START
refresh_start
when MODE_WAIT
refresh_wait
when MODE_MOVER
refresh_move(1)
when MODE_MOVEL
refresh_move(0)
end
rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
self.contents.draw_text(rect, @commands[@index],1)
end
def refresh_start
d1 = 2.0 * Math::PI / @item_max
d2 = 1.0 * Math::PI / STARTUP_FRAMES
r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
def refresh_wait
d = 2.0 * Math::PI / @item_max
for i in 0...@item_max
j = i - @index
x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
def refresh_move( mode )
d1 = 2.0 * Math::PI / @item_max
d2 = d1 / MOVING_FRAMES
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( RING_R * Math.sin( d ) ).to_i
y = @cy - ( RING_R * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
def draw_item(x, y, i)
rect = Rect.new(0, 0, @items[i].width, @items[i].height)
if @index == i
self.contents.blt( x, y, @items[i], rect )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect )
end
else
self.contents.blt( x, y, @items[i], rect, 128 )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
end
end
end
def disable_item(index)
@disabled[index] = true
end
def setup_move_start
@mode = MODE_START
@steps = STARTUP_FRAMES
if SE_STARTUP != nil and SE_STARTUP != ""
Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
end
end
def setup_move_move(mode)
if mode == MODE_MOVER
@index -= 1
@index = @items.size - 1 if @index < 0
elsif mode == MODE_MOVEL
@index += 1
@index = 0 if @index >= @items.size
else
return
end
@mode = mode
@steps = MOVING_FRAMES
end
def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($chara_select[4])
self.contents.font.name = $chara_select[0]
self.contents.font.color = text_color($chara_select[1])
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 80
y = 80 * i
actor = $game_party.actors[i]
draw_actor_graphic(actor, x - 60, y + 65)
draw_actor_name(actor, x, y + 2)
draw_actor_hp(actor, x - 40, y + 26)
draw_actor_sp(actor, x - 40, y + 50)
end
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
end
end
class Game_Map
def name
$map_infos[@map_id]
end
end
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end
[ Komentarz dodany przez: Avara: Pią 21 Gru, 2012 18:06 ] GuGuś, "hide" pozwala ukryć zawartość przed osobami niezalogowanymi. "spoiler" ukrywa w spoilerze
Kod:
[spoiler]zawartość
spoilera[/spoiler]
________________________
Siema
Gość, Jeżeli ci Pomogłem, możesz mi dać .
_______________________________________________________________
Niestety, padł mi komp z Projektami, więc przez pewien czas niestety nici z Projektów :C
Ostatnio zmieniony przez Avara Pią 21 Gru, 2012 18:03, w całości zmieniany 1 raz
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum