Salve a tutti, volevo chiedervi aiuto per un errore che mi lancia rpg maker quando esco e rientro dal menù (quello con oggetti, abilità etc.) molto velocemente, ossia "RGSS3 Player ha smesso di funzionare". La causa dell'errore è a me conosciuta, infatti ultimamente per il mio gioco, considerando che sfrutta un sistema di alternanza giorno/notte, ho sviluppato un orologio che è visibile su mappa che mostra l'ora all'interno del gioco, però inevitabilmente quando "spammo" esc il gioco crasha(MI SEMBRA quando la lancetta dei minuti si sposta di 6 gradi, ma non ne sono sicuro).
Inizialmente lo script veniva elaborato all'interno di Scene_Map, vedendo l'errore ho provato a spostarlo in Spriteset_Map, ma niente, l'errore rimane, se qualcuno avesse la soluzione al mio problema sarebbe grandioso!
In ogni caso questo è lo script (scusate per lo "stile" alquanto confusionario del codice, non avrei mai pensato di farlo mai leggere a qualcuno, se avete bisogno di delucidazioni chiedete pure)
#============================================================================== # Titolo Script: Time System # Autore: Sora Keyblade # Versione: 2.1 # First Release: Dimenticata # Ultima Modifica: 28/07/2016 #============================================================================== # #============================================================================== # Termini di Utilizzo: # Script creato per "Elysian Quest". Vietato l'utilizzo sia per giochi free # che commerciali #============================================================================== module SK Minuto_per_frame=60 Tempo=[0,270,300,330,360,390,420,450,480,1050,1080,1110,1140,1170,1200,1230,1260,1290,1320,1350,1380,1410] Tinta=[Tone.new(-125,-125,0,125),Tone.new(-115,-115,0,115),Tone.new(-100,-100,0,100),Tone.new(-75,-75,0,75),Tone.new(-50,-50,0,50),Tone.new(-25,-25,0,25),Tone.new(-10,-10,0,10),Tone.new(-5,-5,0,-5),Tone.new(0,0,0,0),Tone.new(40,15,0,-25),Tone.new(40,15,0,-25),Tone.new(45,15,0,-25),Tone.new(50,15,0,-25),Tone.new(-55,-15,0,25),Tone.new(-58,-48,0,58),Tone.new(-63,-63,0,63),Tone.new(-68,-68,0,68),Tone.new(-78,-78,0,78),Tone.new(-88,-88,0,88),Tone.new(-98,-98,0,98),Tone.new(-108,-108,0,108),Tone.new(-116,-116,0,116)] ID_Mappe_no_Tinta=[38,39,40,58,122,152] Orario_cambio_giorno_notte=1200 Orario_cambio_notte_giorno=480 Orario_inizio_gioco=481 Icon_index=662 Giorno_di_inizio=15 Mese_di_inizio=1 Anno_di_inizio=1 Nome_Lancetta_Minuti="TimeHUD_B" Nome_Lancetta_Ore="TimeHUD_C" Nome_File_Quadrante="TimeHUD_A" Posizione_Lancette_X=478 Posizione_Lancette_Y=55 Posizione_Quadrante_X=544-55-40 Posizione_Quadrante_Y=55+30 Scatto_Lancetta_Ore=5 #ogni 5 minuti la lancetta delle ore si sposta Grandezza_Pirulo=2 Nome_File_Numeri="NumberClock" Posizione_Giorni_X=497 Posizione_Giorni_y=118 Posizione_Mesi_X=441 Posizione_Mesi_y=120 end class Game_System attr_accessor :time_in_game attr_accessor :sequenza_animata attr_accessor :giorni_in_game attr_accessor :mesi_in_game attr_accessor :anno_in_game attr_accessor :angolo_lancetta_minuti # attr_accessor :angolo_lancetta_ore # alias sk_initialize initialize def initialize sk_initialize @time_in_game=SK::Orario_inizio_gioco @sequenza_animata=false @giorni_in_game=SK::Giorno_di_inizio @mesi_in_game=SK::Mese_di_inizio @anno_in_game=SK::Anno_di_inizio @angolo_lancetta_minuti=minuti_inizio_gioco @angolo_lancetta_ore=ore_inizio_gioco end def minuti_inizio_gioco minuti= @time_in_game%60 return minuti*6*-1 # 6 sono l'angolo di rotazione di un minuto end def ore_inizio_gioco ore=@time_in_game/60 return ore*30*-1 end end class Spriteset_Map #Scene_Map < Scene_Base # alias sk_start start alias sk_initialize_spriteset_map initialize def initialize #========================================================================== # Orologio #========================================================================== @sprite_quadrante=Sprite.new @sprite_quadrante.bitmap=Cache.picture(SK::Nome_File_Quadrante) @sprite_quadrante.x=SK::Posizione_Quadrante_X @sprite_quadrante.y=SK::Posizione_Quadrante_Y @sprite_quadrante.ox=@sprite_quadrante.width/2 @sprite_quadrante.oy=@sprite_quadrante.height/2 @sprite_lancetta_minuti=Sprite.new # @sprite_lancetta_minuti.bitmap=Cache.picture(SK::Nome_Lancetta_Minuti)# @sprite_lancetta_minuti.x=SK::Posizione_Lancette_X# @sprite_lancetta_minuti.y=SK::Posizione_Lancette_Y# @sprite_lancetta_minuti.ox=@sprite_lancetta_minuti.width/2# @sprite_lancetta_minuti.oy=@sprite_lancetta_minuti.height-SK::Grandezza_Pirulo/2# @sprite_lancetta_minuti.z=@sprite_quadrante.z+1 @sprite_lancetta_minuti.angle=$game_system.angolo_lancetta_minuti# @sprite_lancetta_ore=Sprite.new @sprite_lancetta_ore.bitmap=Cache.picture(SK::Nome_Lancetta_Ore) @sprite_lancetta_ore.x=SK::Posizione_Lancette_X# @sprite_lancetta_ore.y=SK::Posizione_Lancette_Y# @sprite_lancetta_ore.ox=@sprite_lancetta_ore.width/2# @sprite_lancetta_ore.oy=@sprite_lancetta_ore.height-SK::Grandezza_Pirulo/2# @sprite_lancetta_ore.z=@sprite_lancetta_minuti.z+1 @sprite_lancetta_ore.angle=$game_system.angolo_lancetta_ore @orologio_visibile=true #=========================================================================== # Data #=========================================================================== #=========================================================================== # Giorni #=========================================================================== @sprite_numbers_giorni_decine=Sprite.new @sprite_numbers_giorni_decine.bitmap=Cache.picture(SK::Nome_File_Numeri) @viewport_giorni_decine=Viewport.new(SK::Posizione_Giorni_X,SK::Posizione_Giorni_y,@sprite_numbers_giorni_decine.width/10,@sprite_numbers_giorni_decine.height) @viewport_giorni_decine.z=@sprite_quadrante.z+1 @sprite_numbers_giorni_decine.viewport=@viewport_giorni_decine @sprite_numbers_giorni_unita=Sprite.new @sprite_numbers_giorni_unita.bitmap=Cache.picture(SK::Nome_File_Numeri) @viewport_giorni_unita=Viewport.new(@viewport_giorni_decine.rect.x+(@sprite_numbers_giorni_decine.width/10.0), @viewport_giorni_decine.rect.y,@sprite_numbers_giorni_unita.width/10,@sprite_numbers_giorni_unita.height) @viewport_giorni_unita.z=@sprite_quadrante.z+1 @sprite_numbers_giorni_unita.viewport=@viewport_giorni_unita print_data_giorni #=========================================================================== # Mesi #=========================================================================== @sprite_numbers_mesi_decine=Sprite.new @sprite_numbers_mesi_decine.bitmap=Cache.picture(SK::Nome_File_Numeri) @viewport_mesi_decine=Viewport.new(SK::Posizione_Mesi_X,SK::Posizione_Mesi_y,@sprite_numbers_mesi_decine.width/10,@sprite_numbers_mesi_decine.height) @viewport_mesi_decine.z=@sprite_quadrante.z+1 @sprite_numbers_mesi_decine.viewport=@viewport_mesi_decine @sprite_numbers_mesi_unita=Sprite.new @sprite_numbers_mesi_unita.bitmap=Cache.picture(SK::Nome_File_Numeri) @viewport_mesi_unita=Viewport.new(@viewport_mesi_decine.rect.x+(@sprite_numbers_mesi_decine.width/10.0), @viewport_mesi_decine.rect.y,@sprite_numbers_mesi_unita.width/10,@sprite_numbers_mesi_unita.height) @viewport_mesi_unita.z=@sprite_quadrante.z+1 @sprite_numbers_mesi_unita.viewport=@viewport_mesi_unita print_data_mesi #=========================================================================== # Prova #=========================================================================== @tempo_attuale=$game_system.time_in_game sk_initialize_spriteset_map end # alias sk_orologio_terminate terminate alias sk_orologio_terminate dispose def dispose sk_orologio_terminate @sprite_lancetta_minuti.dispose @sprite_lancetta_ore.dispose @sprite_quadrante.dispose @viewport_giorni_decine.dispose @viewport_giorni_unita.dispose @viewport_mesi_decine.dispose @viewport_mesi_unita.dispose end def print_data_giorni decina_giorno=$game_system.giorni_in_game/10 @sprite_numbers_giorni_decine.x=-(@sprite_numbers_giorni_decine.width/10 * decina_giorno) @unita_giorno=$game_system.giorni_in_game%10 @sprite_numbers_giorni_unita.x=-(@sprite_numbers_giorni_unita.width/10 * @unita_giorno) end def print_data_mesi decina_mese=$game_system.mesi_in_game/10 @sprite_numbers_mesi_decine.x=-(@sprite_numbers_mesi_decine.width/10 * decina_mese) @unita_mese=$game_system.mesi_in_game%10 @sprite_numbers_mesi_unita.x=-(@sprite_numbers_mesi_unita.width/10 * @unita_mese) end def save_save_giorni_in_game if $game_system.giorni_in_game==nil $game_system.giorni_in_game=SK::Giorni_di_inizio end return true end def save_mesi_in_game if $game_system.mesi_in_game==nil $game_system.mesi_in_game=SK::Mese_di_inizio end return true end def save_anno_in_game if $game_system.anno_in_game==nil $game_system.anno_in_game=SK::Anno_di_inizio end return true end def aggiorna_visibilita_orologio if @orologio_visibile==false @sprite_lancetta_minuti.visible=false @sprite_lancetta_ore.visible=false @sprite_quadrante.visible=false @sprite_numbers_giorni_decine.visible=false @sprite_numbers_giorni_unita.visible=false @sprite_numbers_mesi_decine.visible=false @sprite_numbers_mesi_unita.visible=false else @sprite_lancetta_minuti.visible=true @sprite_lancetta_ore.visible=true @sprite_quadrante.visible=true @sprite_numbers_giorni_decine.visible=true @sprite_numbers_giorni_unita.visible=true @sprite_numbers_mesi_decine.visible=true @sprite_numbers_mesi_unita.visible=true end end alias sk_update update def update sk_update if Input.trigger?(:Z) if @orologio_visibile==true @orologio_visibile=false else @orologio_visibile=true end aggiorna_visibilita_orologio end if @tempo_attuale!=$game_system.time_in_game differenza_tempo=$game_system.time_in_game-@tempo_attuale $game_system.angolo_lancetta_minuti-=6*differenza_tempo $game_system.angolo_lancetta_ore-=30.0/(60/SK::Scatto_Lancetta_Ore)*(differenza_tempo/SK::Scatto_Lancetta_Ore) @tempo_attuale=$game_system.time_in_game end if $game_message.visible==false &&Graphics.frame_count%SK::Minuto_per_frame==0&&$game_system.sequenza_animata==false $game_system.time_in_game+=1 @tempo_attuale+=1 $game_system.angolo_lancetta_minuti-=6 # if $game_system.angolo_lancetta_minuti<=-360 scarto_minuti=$game_system.angolo_lancetta_minuti+360 $game_system.angolo_lancetta_minuti=scarto_minuti end @sprite_lancetta_minuti.angle=$game_system.angolo_lancetta_minuti if $game_system.angolo_lancetta_minuti% (SK::Scatto_Lancetta_Ore*6)==0 $game_system.angolo_lancetta_ore-=30.0/(60/SK::Scatto_Lancetta_Ore) end if $game_system.angolo_lancetta_ore<=-360 scarto_ore=$game_system.angolo_lancetta_ore+360 $game_system.angolo_lancetta_ore=scarto_ore end @sprite_lancetta_ore.angle=$game_system.angolo_lancetta_ore end if $game_system.time_in_game>=(60*24) scarto=$game_system.time_in_game-(60*24) $game_system.time_in_game=scarto $game_system.giorni_in_game+=1 if save_save_giorni_in_game end if @unita_giorno!=$game_system.giorni_in_game%10 print_data_giorni end if $game_system.giorni_in_game==29 # I mesi sono formati da 35 giorni $game_system.mesi_in_game+=1 if save_mesi_in_game $game_system.giorni_in_game=1 end if @unita_mese!=$game_system.mesi_in_game%10 print_data_mesi end if $game_system.mesi_in_game==13 # Un anno è formato da 10 mesi $game_system.anno_in_game+=1 if save_anno_in_game $game_system.mesi_in_game=1 end for i in SK::ID_Mappe_no_Tinta if $game_map.map_id==i tingi = false break else tingi=true end end if tingi == true for i in 0..SK::Tempo.size-1 if i!=SK::Tempo.size-1 if $game_system.time_in_game>=SK::Tempo[i] && $game_system.time_in_game<=SK::Tempo[i+1] $game_map.screen.start_tone_change(SK::Tinta[i], 0) end elsif $game_system.time_in_game>SK::Tempo[i] $game_map.screen.start_tone_change(SK::Tinta[i], 0) end end else $game_map.screen.start_tone_change(Tone.new, -1) end if $game_system.time_in_game==SK::Orario_cambio_giorno_notte-1 unless $game_system.sequenza_animata @notte=Sprite.new Graphics.fadeout(50) @notte.bitmap=Cache.picture("day.jpg") Graphics.fadein(0) Graphics.wait(180) Graphics.fadeout(50) @notte.dispose Graphics.fadein(50) $game_system.time_in_game+=1 else $game_system.time_in_game-=1 end elsif $game_system.time_in_game==SK::Orario_cambio_notte_giorno-1 unless $game_system.sequenza_animata @giorno=Sprite.new Graphics.fadeout(50) @giorno.bitmap=Cache.picture("night.jpg") Graphics.fadein(0) Graphics.wait(180) Graphics.fadeout(50) @giorno.dispose Graphics.fadein(50) $game_system.time_in_game+=1 else $game_system.time_in_game-=1 end end end end
P.s. All'interno del codice è presente anche tutto il ciclo di tinte per il ciclo d/n
P.p.s. Consigliate di lasciare il codice in Spriteset_Map oppure di ritrasportarlo su Scene_Map?
Modificato da Sora Keyblade, 28 July 2016 - 16:15 PM.