Andre4e Posted September 1, 2009 Share Posted September 1, 2009 (edited) Diario di viaggio modificato DescrizioneCorretto bug colore perchè non funzionavaAggiunta funzione cambia fontAggiunta funzione Faceset Autore Autore originale sylaerModificato da Andre4e Allegati Demo Istruzioni per l'uso Inserite lo script in una nuova classe sopra main..istruzioni x l'uso all'interno dello script!Immagini all'interno della demo! Script: =begin -------------------------------------------------------------------------- Scipt Diario ################################################ ##Creato da Sylaer###### Modificato da Andre4e## ################################################ Per richiamare il diario usare il chiama script tramite evento e inserire questo codice : $scene = Scene_Diary.new(true) -------------------------------------------------------------------------- Instruzioni per inserire il diario nel menu: 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 Data\Diary\. 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 = 10 =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. 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 ad 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. ************************************************* Funzioni aggiunte da Andre4e: ************** - \t[Font] Cambiare Font(Permanente) Se il carattere è formato da più di una parola scriverlo così: es: \t[Times New Roman] e non \t[TimesNewRoman] ************** - \f[Nome grafica] Visualizzare un'immagine della cartella progetto/graphics/pictures La stringa corretta per visualizzare un'immagine è \x[X] \y[Y] \f[Nome grafica] X = coordinata x....se non viene inserito x default è 0 Y = coordinata y....se non viene inserito x default è 0 Nome grafica = nome dell'immagine da visualizzare Il file deve essere .png Le immagini posso avvere una dimensione massima di 96 x 96.. x modificare questo paramentro cercare la riga: self.contents.blt(@x, @y, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96)) e Modificare il due numeri in fondo ************************************************* 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 str[i].sub!(/\\[Cc]olor\[([0-9]+)\]/){ "" } end str[i].gsub!(/#/) do str[i].gsub!(/./m,"") end @x = 0 str[i].gsub!(/\\[xX]\[([0-9]+)\]/)do @x = $1.to_i str[i].sub!(/\\[xX]co\[([0-9]+)\]/){ "" } end @y = 0 str[i].gsub!(/\\[yY]\[([0-9]+)\]/)do @y = $1.to_i str[i].sub!(/\\[yY]co\[([0-9]+)\]/){ "" } end str[i].gsub!(/\\[Ff]\[(.+?)\]/)do @face_file = $1.to_s + ".png" # @x = @face_indent = 128 if FileTest.exist?("Graphics/Pictures/" + $1.to_s + ".png") self.contents.blt(@x, @y, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96)) end # @str[i].gsub!(/\\[Ff]\[(.*?)\]/) { "" } #end #end end str[i].gsub(/\\[Tt]\[(.*?)\]/) do font = $1.to_s self.contents.font.name = font str[i].sub!(/\\[Tt]\[(.*?)\]/) { "" } end str[i].gsub!(/\[[Tt]\]/) { " " } str[i].gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } 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.font.color = Color.new(0,0,0) self.contents.draw_text(0,320+32, self.width-32, 32, @page.to_s,2) else self.contents.font.color = Color.new(0,0,0) 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!(/./)) != nil)#/./m if c == 97 p "ciao" end self.contents.draw_text(4 + x, y, 40, 32, c) x += self.contents.text_size©.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 Bugs e Conflitti Noti N/A Altri Dettagli N/A Edited April 26, 2013 by Dilos Applicato tag code. http://files.nireblog.com/blogs4/narutozorro9kolas/files/firma-naruto-y-yondaime.gif Link to comment Share on other sites More sharing options...
Andre4e Posted September 2, 2009 Author Share Posted September 2, 2009 Nessuno dice niente? http://files.nireblog.com/blogs4/narutozorro9kolas/files/firma-naruto-y-yondaime.gif Link to comment Share on other sites More sharing options...
alvi dandee Posted September 11, 2009 Share Posted September 11, 2009 grazie mille, utilissime le tue modifiche :) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now