Diario di Viaggio
Descrizione
Ho pensato di postare lo script che ho realizzato per Raldon il quale me lo aveva chiesto espressamente, così magari sarà utile anche a qualcun'altro.
In parole semplici non è altro che una finestra che visualizza tutto quello che c'è scritto alcuni file,che sono appunto le sue pagine, però è dotato di certe funzioni, che lo rendono adatto per essere un diario delle avventure.
E' possibile impostare che certe righe possano essere visibili solo quando certe switch sono attive, ad esempio.
Autore
Io
Allegati
Screen:
Script
#=begin #-------------------------------------------------------------------------- #Scipt Diario #-------------------------------------------------------------------------- #Instruzioni: #Per prima cosa bisogna modificare il menu in modo che visualizzi il diario: #1)Aprire il Scene_Menu e trovare una serie sN = "Qualche cosa" es. #s6 = "Esci dal Gioco" e mettere sotto questi elementi un'altro elemento #con scritto s e accanto il numero successivo all'ultimo visulizzato es. #nel mio caso sarà s7 = "Diario". #2)Modificare la linea sottostante vale dire: #@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6]) #con questa: #@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s7, s6]) #Cioè mettere il Diario al penultimo posto del menu. #3)In fondo al Scene_Menu c'è il def update con una serie di when #l'ultimo dovrebbe essere when 5, di solito è così, va sostituito con when 6 #sotto a questo mettete: #when 5 #$game_system.se_play($data_system.decision_se) #$scene = Scene_Diary.new #e sotto a questo dovrebbe esserci un end. #E' inoltre possibile impostare il gioco in modo che il diario sia chiamato da #un evento comune basta inserire questo nel call script: #$scene = Scene_Diary.new(true) #In questo modo è possibile richiamare il diario anche da oggetto. #-------------------------------------------------------------------------- #Ora veniamo a come funziona: #In breve nel diario viene scritto tutto quello che si trova nei file delle #pagine presenti nella cartella di gioco DataDiary. Questo significa che #per funzionare il diario ha bisogno della cartella. Quindi creala. #Per qunato riguarda le pagine basta specificare il numero di pagine #che si vuole qui: #=end #NUM_DIARY_PAGES = 5 #=begin #Ora avvia il gioco una volta e richiama il diario. Si può notare che è vuoto #ma ha esattamente le pagine indicate(Per cambiare pagina i tasti sono #ovviamente le frecce direzionali sinistra e destra). #Adesso nella cartella Diary su Data ci saranno un numero di file pari al #numero di pagine indicate. #E' sufficente aprire questi file con un editor di testo e modificare il #contenuto per osservare i risultati. #IMPORTANTE: #Se volete che nelle pagine siano visualizzate le lettere accentate #o altri caratteri particolari dovete salvare il file con codifica UTF-8. #Per fare questo dovete solo salvare il file con nome e dal pannello #scegliere la codifica UTF-8. #Sul diario viene mostrato ciò che è scritto in questi file, lettera per #lettara, tuttavia le lettere accentate non vengono riconosciute. #-------------------------------------------------------------------------- #Ci sono poi una serie di funzioni che è possibile utilizzare. #Funzioni del testo: #1)/[N] Se inserite questo nel testo del Diary con N il numero di una switch #la righa a cui è asseggnata non verrà visualizzata se la switch è impostata #su off, IMPORTANTE: la / va PER FORZA messa come primo carattere della riga. #2)/K[N] Come sopra solo che se mettete il valore K ad un numero maggiore di 1 #la condizione di visualizzazzione verrà estesa alle K-1 righe succssive. #3)Se inserite [t] oppure [T] si inserirà nel testo una tabulazione " ". #-------------------------------------------------------------------------- #Si può specificare il font e la grandezza di esso con queste righe: #=end #DIARY_FONT = "Monotype Corsiva" #DIARY_FONT_SIZE = 16 #=begin #Alcune funzioni sono le stesse dei messaggi: #- c[N] Imposta il colore della linea ud uno degli 8 colori #predefiniti(1-7). #- v[N] Mostra il valore della variabile N nel punto in cui è inserita. #- n[N] Mostra il nome dell'eroe N. #Se volete commentare qualcosa tutto quello dopo il carattere # non verrà #visualizzato, almeno per quella linea. #Infine se si esce e si rientra dalla finestra del diario le pagine visualizzate #sono le stesse, cioè viene memorizzata la posizione nel diario. #Questo è tutto. Spero che vi piaccia. #=end # --------------------------------- # Little_Arrow class # --------------------------------- class Little_Arrow < Sprite def initialize(viewport,mirror = false) super(viewport) self.bitmap = RPG::Cache.picture("arrow") self.ox = 0 self.oy = 0 self.z = 250 self.mirror = mirror end end # --------------------------------- # Window_DiaryPage class # --------------------------------- class Window_DiaryPage < Window_Base def initialize(page) @page = page if @page % 2 == 1 super(64,32,320-64,480-64) else super(320+16,32,320-64,480-64) end self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 self.contents.font.name = DIARY_FONT self.contents.font.size = DIARY_FONT_SIZE self.contents.font.color = Color.new(0,0,0) refresh unless @page == 0 end def refresh file = File.open("Data/Diary/Page" + @page.to_s + ".rxdata","a") file.close file = File.open("Data/Diary/Page" + @page.to_s + ".rxdata") str = file.readlines y = 0 k_lines = 0 k_switch = 0 pace = self.contents.font.size for i in 0..str.size-1 color = 8 str[i].gsub!(/[Cc][([0-9]+)]/,"") do color = $1.to_i end str[i].gsub!(/[[Tt]]/) { " " } str[i].gsub!(/[Vv][([0-9]+)]/) { $game_variables[$1.to_i] } str[i].gsub!(/#/) do str[i].gsub!(/./m,"") end str[i].gsub!(/[Nn][([0-9]+)]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end if k_lines > 1 if $game_switches[k_switch] set_text(y,str[i],color) y+=pace end k_lines -=1 elsif str[i].index("/")==0 if str[i].index(/[0-9]/)==1 str[i].sub!(/([0-9]+)/, "") k_lines = $1.to_i end str[i].sub!(/[([0-9]+)]/, "") str[i].slice!(0) switch = $1.to_i k_switch = switch if k_lines > 0 if $game_switches[switch] set_text(y,str[i],color) y+=pace end else set_text(y,str[i],color) y+=pace end end file.close if @page % 2 == 1 self.contents.draw_text(0,320+32, self.width-32, 32, @page.to_s,2) else self.contents.draw_text(0,320+32, self.width-32, 32, @page.to_s) end end def set_text(y,text,color) if color == 8 self.contents.font.color = Color.new(0,0,0) else self.contents.font.color = text_color(color) end x = 0 while ((c = text.slice!(/./m)) != nil) if c == 97 p "ciao" end self.contents.draw_text(4 + x, y, 40, 32, c) x += self.contents.text_size( c ).width end end end # --------------------------------- # Game_Temp class # --------------------------------- class Game_Temp attr_accessor :diary_current_page alias sylaer_diary_temp_initialize initialize def initialize @diary_current_page = 1 sylaer_diary_temp_initialize end end # --------------------------------- # Scene_Diary class # --------------------------------- class Scene_Diary def initialize(no_menu_call = false) @no_menu_call = no_menu_call @current_page = $game_temp.diary_current_page end def main create_arrow @pages = [] @pages[0] = Window_DiaryPage.new(@current_page) if @current_page + 1 > NUM_DIARY_PAGES @pages[1] = Window_DiaryPage.new(0) else @pages[1] = Window_DiaryPage.new(@current_page + 1) end Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @pages[0].dispose @pages[1].dispose @left_arrow.dispose @right_arrow.dispose @back_drop.dispose end def create_arrow viewport = Viewport.new(0, 0, 640, 480) viewport.z = 3000 @left_arrow = Little_Arrow.new(viewport) @left_arrow.x = 64 @left_arrow.y = 424 @left_arrow.visible = false @right_arrow = Little_Arrow.new(viewport,true) @right_arrow.x = 640 - 100 @right_arrow.y = 424 @right_arrow.visible = false back_drop_viewport = Viewport.new(0, 0, 640, 480) back_drop_viewport.z = 1 @back_drop = Sprite.new(back_drop_viewport) @back_drop.bitmap = RPG::Cache.picture("Backdrop") end def update $game_temp.diary_current_page = @current_page if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) if @no_menu_call == false $scene = Scene_Menu.new(6) else $scene = Scene_Map.new end end if @current_page + 1 < NUM_DIARY_PAGES if Input.trigger?(Input::RIGHT) Audio.se_play("Audio/SE/046-Book01") @current_page += 2 @pages[0].dispose @pages[1].dispose @pages[0] = Window_DiaryPage.new(@current_page) if @current_page + 1 > NUM_DIARY_PAGES @pages[1] = Window_DiaryPage.new(0) else @pages[1] = Window_DiaryPage.new(@current_page + 1) end end @right_arrow.visible = true else @right_arrow.visible = false end if @current_page > 1 if Input.trigger?(Input::LEFT) Audio.se_play("Audio/SE/046-Book01") @current_page -= 2 @pages[0].dispose @pages[1].dispose @pages[0] = Window_DiaryPage.new(@current_page) @pages[1] = Window_DiaryPage.new(@current_page + 1) end @left_arrow.visible = true else @left_arrow.visible = false end end end
Istruzioni per l'uso
Sono scritte all'interno dello script
Se ci sono problemi, ditemi qui sotto.
Modificato da Flame, 25 March 2013 - 02:17 AM.
applicato tag code e script corretto