Jump to content
Rpg²S Forum
  • 0

Ring Menu e Memorizzazione di posizione


Draxis
 Share

Question

Salve,avrei un dubbio sul Ring Menu di cui riporto il codice qui sotto:

 

 

#------------------------------------------------------------------------------
#  Ring_Menu
#------------------------------------------------------------------------------
#  By:  XRXS, Dubealex, and Hypershadow180
#------------------------------------------------------------------------------
# INIZIO CONFIGURAZIONE RING MENU MOD by giver
#
# Nomi dei font delle varie pozioni del Menù
RING_MENU_FONT_NAME = "Calibri"
LOCATION_WIN_FONT_NAME = "Calibri"
GOLD_WIN_FONT_NAME = "Calibri"
CHARA_SELECT_FONT_NAME = "Calibri"
# Nome che appare quando è selezionata la voce che sostituisce il Save
RM_SAVE_LABEL = "Sviluppo"
# Icona che appare per l'opzione che sostituisce il Save
RM_SAVE_ICON = "038-Item07"
# ID dell'Evento Comune chiamato quando si sceglie la voce che sostituisce il Save
RM_SAVE_CEVENT_ID = 6
#
# FINE CONFIGURAZIONE RING MENU MOD by giver

class Scene_Menu
#------------------------------------------------------------------------------
#  Initialize
#------------------------------------------------------------------------------
 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]=LOCATION_WIN_FONT_NAME # 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]="Location:" # Text
$gold_text[0]=GOLD_WIN_FONT_NAME # Font Type
$gold_text[1]=20 # Font Size
$gold_text[2]=0 # Gold Title Color
$gold_text[3]=0 # Gold Color
$gold_text[4]="Gold" # 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]=RING_MENU_FONT_NAME # Font Type
$ring_menu_text[7]=0 # Font Color
$ring_menu_text[8]=20 # Font Size
$ring_menu_text[1]="Items"
$ring_menu_text[2]="Skills"
$ring_menu_text[3]="Equip"
$ring_menu_text[4]="Stats"
$ring_menu_text[5]=RM_SAVE_LABEL
$ring_menu_text[6]="Quit"
@chara_select[0]=408 # X Axis Position
@chara_select[1]=0 # Y Axis Position
$chara_select[0]=CHARA_SELECT_FONT_NAME # 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
#------------------------------------------------------------------------------
#  Main
#------------------------------------------------------------------------------
 def main
@window_location = Window_Location.new
@window_location.x = @window_position[0]
@window_location.y = @window_position[1]
@window_location.opacity = @window_opacity[0]
@window_location.back_opacity = @window_opacity[1]
@window_gold = Window_MenuGold.new
@window_gold.x = @window_position[0]
@window_gold.y = @window_position[2]
@window_gold.opacity = @window_opacity[0]
@window_gold.back_opacity = @window_opacity[1]
@spriteset = Spriteset_Map.new
px = $game_player.screen_x - 15
py = $game_player.screen_y - 24
@command_window = Window_RingMenu.new(px,py)
@command_window.index = @menu_index
if $game_party.actors.size == 0
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
@command_window.z = 100
@status_window = Window_RingMenuStatus.new
@status_window.x = @chara_select[0]
@status_window.y = @chara_select[1]
@status_window.z = 200
@status_window.opacity=$chara_select[2]
@status_window.back_opacity=$chara_select[3]
@status_window.visible = false
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
	break
  end
end
Graphics.freeze
@spriteset.dispose
@window_location.dispose
@window_gold.dispose
@command_window.dispose
@status_window.dispose
 end
#------------------------------------------------------------------------------
#  Update
#------------------------------------------------------------------------------
 def update
@window_location.update
@window_gold.update
@command_window.update
@status_window.update
if @command_window.active
  update_command
  return
end
if @status_window.active
  update_status
  return
end
 end
#------------------------------------------------------------------------------
#  Update Comman
#------------------------------------------------------------------------------
 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
  $game_system.se_play($data_system.decision_se)
  $game_temp.common_event_id = RM_SAVE_CEVENT_ID
  $scene = Scene_Map.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
#------------------------------------------------------------------------------
#  Update Status
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Window_RingMenu
#------------------------------------------------------------------------------
class Window_RingMenu < Window_Base
 STARTUP_FRAMES = 20
 MOVING_FRAMES = 5  
 RING_R = 64		
 ICON_ITEM   = RPG::Cache.icon("034-Item03")
 ICON_SKILL  = RPG::Cache.icon("044-Skill01")
 ICON_EQUIP  = RPG::Cache.icon("001-Weapon01")
 ICON_STATUS = RPG::Cache.icon("050-Skill07")
 ICON_SAVE   = RPG::Cache.icon(RM_SAVE_ICON)
 ICON_EXIT   = RPG::Cache.icon("046-Skill03")
 ICON_DISABLE= RPG::Cache.icon("")
 SE_STARTUP = "056-Right02"
 MODE_START = 1
 MODE_WAIT  = 2
 MODE_MOVER = 3
 MODE_MOVEL = 4
 attr_accessor :index
#------------------------------------------------------------------------------
#  Initialize
#------------------------------------------------------------------------------
 def initialize( center_x, center_y )
super(0, 0, 640, 480)
self.contents = Bitmap.new(width-32, height-32)
self.contents.font.name = $ring_menu_text[0]
self.contents.font.color = text_color($ring_menu_text[7])
self.contents.font.size = $ring_menu_text[8]
self.opacity = 0
self.back_opacity = 0
s1 = $ring_menu_text[1]
s2 = $ring_menu_text[2]
s3 = $ring_menu_text[3]
s4 = $ring_menu_text[4]
s5 = $ring_menu_text[5]
s6 = $ring_menu_text[6]
@commands = [ s1, s2, s3, s4, s5, s6 ]
@item_max = 6
@index = 0
@items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT ]
@disabled = [ false, false, false, false, false, false ]
@cx = center_x - 16
@cy = center_y - 16
setup_move_start
refresh
 end
#------------------------------------------------------------------------------
#  Update
#------------------------------------------------------------------------------
 def update
super
refresh
 end
#------------------------------------------------------------------------------
#  Refresh
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Refresh Start
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Refresh Wait
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Refresh Move
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Draw Item
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Disable Item
#------------------------------------------------------------------------------
 def disable_item(index)
@disabled[index] = true
 end
#------------------------------------------------------------------------------
#  Setup Move Start
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Setup Move Move
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Animation
#------------------------------------------------------------------------------
 def animation?
return @mode != MODE_WAIT
 end
end
#------------------------------------------------------------------------------
#  Window_RingMenuStatus
#------------------------------------------------------------------------------
class Window_RingMenuStatus < Window_Selectable
#------------------------------------------------------------------------------
#  Initialize
#------------------------------------------------------------------------------
 def initialize
super(204, 64, 232, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = $chara_select[5]
refresh
self.active = false
self.index = -1
 end
#------------------------------------------------------------------------------
#  Refresh
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Update Cursor Rect
#------------------------------------------------------------------------------
 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
#------------------------------------------------------------------------------
#  Game_Map
#------------------------------------------------------------------------------
class Game_Map
#------------------------------------------------------------------------------
#  Name
#------------------------------------------------------------------------------
 def name
$map_infos[@map_id]
 end
end
#------------------------------------------------------------------------------
#  Scene_Title
#------------------------------------------------------------------------------
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
#------------------------------------------------------------------------------
#  Window_Location
#------------------------------------------------------------------------------
class Window_Location < Window_Base
#------------------------------------------------------------------------------
#  Initialize
#------------------------------------------------------------------------------
 def initialize
super(0, 0, $window_size[0], $window_size[1])
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $location_text[0]
self.contents.font.size = $location_text[1]
refresh
 end
#------------------------------------------------------------------------------
#  Refresh
#------------------------------------------------------------------------------
 def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_location_skin)
self.contents.font.color = text_color($location_text[2])
self.contents.draw_text(4, 0, 120, 32, $location_text[3])
self.contents.font.color = text_color($location_text[4])
self.contents.draw_text(4, 32, 120, 32, $game_map.name, 2)
 end
end
#------------------------------------------------------------------------------
#  Window_MenuGold
#------------------------------------------------------------------------------
class Window_MenuGold < Window_Base
#------------------------------------------------------------------------------
#  Initialize
#------------------------------------------------------------------------------
 def initialize
super(0, 0, $window_size[0], $window_size[1])
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $gold_text[0]
self.contents.font.size = $gold_text[1]
refresh
 end
#------------------------------------------------------------------------------
#  Refresh
#------------------------------------------------------------------------------
 def refresh
self.contents.clear
self.windowskin = RPG::Cache.windowskin($window_gold_skin)
self.contents.font.color = text_color($gold_text[2])
self.contents.draw_text(4, 0, 120, 32, $gold_text[4])
self.contents.font.color = text_color($gold_text[3])
self.contents.draw_text(4, 32, 120, 32, $game_party.gold.to_s, 2)
 end
end

 

 

Praticamente,selezionando la voce "Sviluppo" si viene trasportati in un menu su mappa (ciò che accade al suo interno non importa).

Ebbene vorrei che prima di accedervi,lo script si salvasse la posizione dell'eroe,di modo che cliccando su un evento "Esci" apposito all'interno della mappa-menu tornasse nel punto dov'era l'eroe prima di accedervi.

 

E' possibile?

 

Grazie anticipatamente. ^_^

Apprendimento Rpg Maker XP: |||||||||||||||||||

Progetto in corso: CaelestiS: |||||||||||||||||||

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Suppongo che l'evento comune 6 ti trasporti a questo menù . . .

Basta che usi tre Cambia Variabile per prendere i dati ID Mappa, Evento Player Mappa X ed Evento Player Mappa Y, prima di fare il Transfer Player in quell'evento . . .

 


SCRIPT RGSS (RPG Maker XP) VINTAGE LIBRARY [2018+]


Breaking (in ogni senso) News: "Treno deraglia per via del seno di Sakurai Aoi . . ." - Info nello spoiler !!

 


http://afantasymachine.altervista.org/_altervista_ht/NOOOOOOOOOilMIOtreninooooo_500.gif


Non riesco a smettere di essere affascinato da immagini come questa . . .

http://anime.vl-vostok.ru/art/photos2011/17/78049800/wall_VladAnime_WWA_1885-1680x1050.jpg


Alcuni wallpapers che faccio ruotare sul mio vecchio PC . . .


http://afantasymachine.altervista.org/_altervista_ht/gits_window.jpg

http://afantasymachine.altervista.org/_altervista_ht/madoka_group01.jpg
http://afantasymachine.altervista.org/_altervista_ht/arisu_picipici_01.jpg
http://afantasymachine.altervista.org/_altervista_ht/phantom_wp01_einzwei.jpg


La parte più spassosa della mia vita è quando gli altri cercano di spiegarmi i miei pensieri . . .


BBCode Testing


Typeface & Size



Link to comment
Share on other sites

  • 0
Suppongo che l'evento comune 6 ti trasporti a questo menù . . .

Basta che usi tre Cambia Variabile per prendere i dati ID Mappa, Evento Player Mappa X ed Evento Player Mappa Y, prima di fare il Transfer Player in quell'evento . . .

Più facile a dirsi che a farsi. :sisi:

Dunque,si,l'evento comune 6 è il seguente:

 

Change Screen Color Tone (-255, -255, -255, 0), @10

Wait: 10 frame(s)

Change Menu Access: Disable

Change Text Options: Middle, Show

Transfer Player [nomeeroe], (017, 000)

 

Ora ho creato le 3 variabili:

 

IDMap, EroeX, EroeY

 

Sapresti dirmi esattamente come le devo impostare nel suddetto evento in modo che faccia ciò che dici?

Chiedo scusa ma sono abbastanza una frana a variabili. ^_^

Apprendimento Rpg Maker XP: |||||||||||||||||||

Progetto in corso: CaelestiS: |||||||||||||||||||

Link to comment
Share on other sites

  • 0

Usi il cambia variabile tre volte proprio all'inizio dell'evento comune, poi quando devi tornare al gioco usi un tranfer player usando quelle tre variabili . . .

Non posso essere più preciso perchè sono almeno due mesi che non riesco più ad usare l'XP . . .

 


SCRIPT RGSS (RPG Maker XP) VINTAGE LIBRARY [2018+]


Breaking (in ogni senso) News: "Treno deraglia per via del seno di Sakurai Aoi . . ." - Info nello spoiler !!

 


http://afantasymachine.altervista.org/_altervista_ht/NOOOOOOOOOilMIOtreninooooo_500.gif


Non riesco a smettere di essere affascinato da immagini come questa . . .

http://anime.vl-vostok.ru/art/photos2011/17/78049800/wall_VladAnime_WWA_1885-1680x1050.jpg


Alcuni wallpapers che faccio ruotare sul mio vecchio PC . . .


http://afantasymachine.altervista.org/_altervista_ht/gits_window.jpg

http://afantasymachine.altervista.org/_altervista_ht/madoka_group01.jpg
http://afantasymachine.altervista.org/_altervista_ht/arisu_picipici_01.jpg
http://afantasymachine.altervista.org/_altervista_ht/phantom_wp01_einzwei.jpg


La parte più spassosa della mia vita è quando gli altri cercano di spiegarmi i miei pensieri . . .


BBCode Testing


Typeface & Size



Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...