Quest System
DescrizioneQuesto script permette di creare e gestire le missioni all'interno del vostro gioco, in particolare si tratta di un registro passivo contenente i dati delle missioni, volendo questo script con qualche piccola accortezza può essere usato come diario di viaggio
Autori (crediti)Versione rilasciata: 3.0
Creatore della versione XP: Samo, the thief
Conversione per VX: Mecha (aka. MechaGS)
Traduzione e Modifiche: Nemius
Rilasciato il 16/07/2008
Copiare lo script sotto Materials e seguire le istruzioni specificate nell'intestazione dello script
Script e AllegatiAllegati
Template.rar 7.07K 346 Numero di downloads
Script
Spoiler
=begin Quest Script v3.0 stabile di Samo, the thief Portato a RPG Maker VX da Mecha (aka. MechaGS) Modificato e tradotto da Nemius Loireag (E' stato completamente convertito per RPG Maker VX pertanto non richiede lo script di compatibilità di XP.) Semplificato l'header dello script per semplificare. La versione diffusa è la 2.2 in inglese di SAMO e convertito da Mecha, premetto di non essere un programmatore esperto ma ho voluto tradurre lo script e aggiungere qualche miglioria (o almeno quelle che lo sono state per me) ~Cosa è cambiato dalle versioni precedenti? -Bug rimossi nel salvataggio e nel caricamento -Metodo più semplice per la creazione delle quest -Rimosse Variabili globali inutilizzate -Maggior Velocità Modifiche di Nemius -Gestita una linea in più -Migliore visualizzazione on screen -Gestione punti reputazione e riepilogo missioni -Aggiunta la visualizzazione delle ricompense ~Come si Installa? (Edited by MechaGS for RPG Maker VX Installation) -Aggiungere questo script sotto Materials Nello script Scene_Title, aggiungi dopo la linea:- $game_player = Game_Player.new la seguente riga di codice #----------------ADD BEGIN------------------------ $quest = {} #-----------------ADD END------------------------- ~Come creare le missioni? All'interno di un qualsiasi evento, per la creazione di una Missione, è necessario aggiungere un Call Script come specificato di seguito. L'unica accortezza e come ID della quest mettere un numero crescente partendo da 0, mettendo un ID già esistente la missione precedente verrebbe sovrascritta. ~Call Script: $quest[x] = Quest.new(nome, immagine, linee, difficoltà, stato, reputazione, oro, exp) x deve essere un numero. Un esempio:- $quest[0] = Quest.new("Nome Missione", "Immagine", "1- Prima riga della missione", "2- Seconda riga della missione", "3- Terza riga della missione", "4- Quarta riga della missione", "5- Quinta riga della missione", 1, 1, 100, 10, 20) Se una delle Linee non è necessaria scrivere semplicemente i doppi apici e non verrà visualizzata. ~Grande! Ma in questo modo le missioni sono sempre uguali Come faccio per aggiornarle? $quest[x].parametro = valore i parametri sono i seguenti: name image state_number difficulty_level line1 line2 line3 line4 line5 reputation gold experience Il valore inserito farà in modo di cambiare il parametro della missione aggiornandola a piacimento. Un esempio potrebbe essere:- $quest[0].state_number = 99 Questo comando farà si che la missione assuma stato 99, cioè COMPLETA e verrà quindi visualizzata come tale. ~Quali risorse mi servono? Solo il template salvato nel pacchetto dello script. ~Salvare / Caricare le Missioni Per gestire il salvataggio e rispettivo caricamento delle missioni effettuate è necessario modificare uno degli script nel seguente modo Nello script Scene_File, aggiungi dopo la linea:- Marshal.dump($game_player, file) la seguente riga di codice #----------------ADD BEGIN------------------------ Marshal.dump($quest, file) #-----------------ADD END------------------------- Nello script Scene_File, aggiungi dopo la linea:- $game_player = Marshal.load(file) la seguente riga di codice #----------------ADD BEGIN------------------------ $quest = Marshal.load(file) #-----------------ADD END------------------------- Ora potrai salvare correttamente anche le missioni! ~C'è qualcos'altro da sapere? -Se trovi bug, avvisa e si provvederà. -Se ti piace la nuova versione, perfavore, dillo. -Se hai suggerimenti, perfavore, scrivimi. Buona Fortuna! Crediti Samo, the thief. <-- Creatore Originale (XP) --> (Creation Asylum) Mecha (aka. MechaGS) <-- Convertito per VX --> (GameSkank) Nemius <-- Traduzione e Modifica =end #Script per la gestione delle missioni di SAMO e modificata e tradotta da Nemius #============================================================================== # ¦ Window_Command_Quest # creato per la gestione dei colori #------------------------------------------------------------------------------ class Window_Command_Quest < Window_Selectable #-------------------------------------------------------------------------- def initialize(width, commands) super(0, 0, width, commands.size * 32 + 32) @item_max = commands.size @commands = commands self.contents = Bitmap.new(width - 32, @item_max * 32) refresh self.index = 0 end #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i, normal_color) end end #-------------------------------------------------------------------------- def draw_item(index, color) self.contents.font.color = color rect = Rect.new(4, 24 * index, self.contents.width - 8, 24) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) self.contents.draw_text(rect, @commands[index]) end #-------------------------------------------------------------------------- def disable_item(index) draw_item(index, text_color(7)) #Colore delle missioni in stato NON INIZIATA end #--------------------------------------------------------------------- def complete_item(index) draw_item(index, text_color(3)) #Colore delle missioni in stato COMPLETA end #--------------------------------------------------------------------- def just_finish_item(index) draw_item(index, text_color(14)) #Colore delle missioni in stato CONCLUSA end end #Command_Quest finisce qui, non modificare nulla di questa classe. #--------------------------------------------------- #=================================================== # - CLASSE Scene_Quest #=================================================== #--------------------------------------------------- class Scene_Quest #--------------------------------------------------------------------------------- #--------------------------------------------------------------------------------- def initialize(quest_index = 0) @quest_index = quest_index $MAP_BACKGROUND = true #Mappa in Background. True o false? imposta come preferisci. @quest_options = [] $quests_reputation = 0 $quests_completed = 0 end #------------------------------------------------ def main if $MAP_BACKGROUND @spriteset = Spriteset_Map.new end @window5 = Window_Quest_Diary.new @window5.z= 300 for i in 0.. $quest.size - 1 name = $quest[i].name @quest_options.push(name) end for i in 0.. $quest.size - 1 if $quest[i].state_number == 99 $quests_reputation += $quest[i].reputation $quests_completed += 1 end end @window6 = Window_Reputation.new @window6.z= 300 @command_window = Window_Command_Quest.new(160, @quest_options) @command_window.index = @quest_index @command_window.z = 255 @command_window.height = 150 for i in 0.. $quest.size - 1 if $quest[i].state_number == 1 @command_window.disable_item(i) elsif $quest[i].state_number == 99 @command_window.complete_item(i) elsif $quest[i].state_number == 98 @command_window.just_finish_item(i) end end Graphics.transition (20) loop do Graphics.update Input.update update if $scene != self break end end Graphics.transition Graphics.freeze @command_window.dispose @quest_options.clear @window5.dispose @window6.dispose if $MAP_BACKGROUND @spriteset.dispose end $quest_seen = false end #--------------------------------------------------------------------------------- #--------------------------------------------------------------------------------- def update @command_window.update if @command_window.active update_command return end if Input.trigger?(Input::B) if @command_window.active == false Sound.play_cancel @command_window.active = true @window1.dispose @window2.dispose @window3.dispose @window4.dispose @window7.dispose else Sound.play_cancel $scene = Scene_Map.new end return end end #--------------------------------------------------------------------------------- def update_command if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new return end if Input.trigger?(Input::C) for i in 0.. $quest.size - 1 case @command_window.index when i if $quest[i].state_number == 1 Sound.play_buzzer return end Sound.play_decision $ACTUAL_QUEST = $quest[i] update_quest end end end end def update_quest @command_window.active = false @window1 = Window1.new @window2 = Window2.new @window3 = Window_Quest_Difficulty.new @window4 = Window_Quest_Status.new @window7 = Window_Rewards.new @window1.z= 220 @window2.z= 200 @window3.z= 230 @window4.z= 230 @window7.z= 230 end end class Window1 < Window_Base #--------------------------------------------------------------------------------- def initialize super(160, 0, 245,60) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 28 self.contents.font.color = text_color(3) #Colore del Nome della Missione self.contents.draw_text(0, 0, 400, 30, $ACTUAL_QUEST.name) end #-------------------------------- #-------------------------------- end class Window2 < Window_Base #--------------------------------------------------------------------------------- def initialize super(160, 60, 385, 357) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 26 self.contents.font.color = text_color(0) # Colore delle righe della Quest src_rect = Rect.new(0, 0, 370, 100) # Dimensione dell'Immagine 350*70 image = Cache.picture($ACTUAL_QUEST.image) self.contents.blt(0, 10, image, src_rect, 255) self.contents.draw_text(0, 100, 500, 33, $ACTUAL_QUEST.line1) self.contents.draw_text(0, 125, 500, 33, $ACTUAL_QUEST.line2) self.contents.draw_text(0, 150, 500, 33, $ACTUAL_QUEST.line3) self.contents.draw_text(0, 175, 500, 33, $ACTUAL_QUEST.line4) self.contents.draw_text(0, 200, 500, 33, $ACTUAL_QUEST.line5) end end #--------------------------------------------------------------------------------- # questa finestra mostra il livello di difficoltà. class Window_Quest_Difficulty < Window_Base def initialize super(0, 230, 160, 80) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 20 self.opacity = 255 self.contents.font.color = text_color(4) self.contents.draw_text(0, 0, 100, 20, "Difficoltà:") self.contents.font.color = text_color($ACTUAL_QUEST.difficulty[0]) self.contents.font.size = 26 self.contents.draw_text(0, 20, 100, 26, $ACTUAL_QUEST.difficulty[1]) end end #--------------------------------------------------- # questa finestra mostra lo stato della missione. class Window_Quest_Status < Window_Base def initialize super(0, 150, 160, 80) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 20 self.opacity = 255 self.contents.font.color = text_color(4) self.contents.draw_text(0, 0, 100, 20, "Stato:") self.contents.font.color = text_color(14) self.contents.font.size = 26 self.contents.draw_text(0, 20, 100, 26, $ACTUAL_QUEST.state) end end #--------------------------------------------------- # questa finestra mostra un riepilogo di reputazione e di missioni completate. class Window_Reputation < Window_Base def initialize super(0, 310, 160, 107) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 16 self.opacity = 255 self.contents.font.color = text_color(4) self.contents.draw_text(0, 0, 140, 16, "Reputazione:") self.contents.font.color = text_color(30) self.contents.font.size = 20 self.contents.draw_text(0, 16, 140, 20, $quests_reputation) self.contents.font.size = 16 self.contents.font.color = text_color(4) self.contents.draw_text(0, 36, 140, 16, "Missioni Complete:") self.contents.font.color = text_color(30) self.contents.font.size = 20 self.contents.draw_text(0, 52, 140, 20, $quests_completed) end end #--------------------------------------------------- #Questa finestra mostra le ricompense della missione selezionata class Window_Rewards < Window_Base def initialize super(160, 337, 385, 80) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 20 self.opacity = 255 self.contents.font.color = text_color(4) self.contents.draw_text(0, 0, 100, 20, "Ricompensa:") self.contents.draw_text(0, 25, 100, 20, "Monete d'Oro:") self.contents.draw_text(160, 25, 90, 20, "Esperienza:") self.contents.font.color = text_color(30) self.contents.font.size = 20 self.contents.draw_text(100, 25, 60, 20, $ACTUAL_QUEST.gold) self.contents.draw_text(250, 25, 100, 20, $ACTUAL_QUEST.experience) end end #--------------------------------------------------- #Questa è la finestra del titolo pagina class Window_Quest_Diary < Window_Base def initialize super(405, 0, 140, 60) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = "Comic Sans MS" self.contents.font.size = 20 self.opacity = 255 self.contents.font.color = text_color(4) self.contents.draw_text(0, 0, 100, 33, "Diario Missioni") end end #______________________________________________________________________________ #______________________________________________________________________________ #================================================================ #================================================================ #================================================================ #CLASSE QUEST DI SAMO MODIFICATA DA NEMIUS #Processo principale, questo crea le missione e restituisce tutti i dati #Solo le Parti con #EDITABILE possono essere modificate, non toccare il resto. #================================================================ #================================================================ #================================================================ #______________________________________________________________________________ #______________________________________________________________________________ class Quest attr_accessor :name attr_accessor :image attr_accessor :line1 attr_accessor :line2 attr_accessor :line3 attr_accessor :line4 attr_accessor :line5 attr_accessor :gold attr_accessor :experience attr_accessor :reputation attr_reader :difficulty_level attr_reader :state_number attr_reader :difficulty attr_reader :state #----------------------------------------------------- def initialize(name, image, line1, line2, line3, line4, line5, difficulty_level, state_number, reputation, gold, experience) @name = name @image = image @line1 = line1 @line2 = line2 @line3 = line3 @line4 = line4 @line5 = line5 @difficulty_level = difficulty_level set_difficulty_name @state_number = state_number set_state_name @reputation = reputation @gold = gold @experience = experience end #----------------------------------------------------- def set_state_name #EDITABILE modifica il case aggiungendo eventuali nuovi stati con valore #compreso tra 3 e 97 inserendo un nuovo when #NON MODIFICARE I VALORI GIA' CONFIGURATI #when statement case @state_number when 0 @state = "------" when 1 @state = "Non Iniziata" #Missione creata ma non ancora disponibile nel menu when 2 @state = "Accettata" #Missione disponibile e in svolgimento when 98 @state = "Conclusa" #es. Missione effettuata ma manca il ritiro della Ricompensa when 99 @state = "Completa" #Missione completata al 100% end end #----------------------------------------------------- def set_difficulty_name case @difficulty_level #EDITABILE modifica il case aggiungendo eventuali nuove difficoltà con valore #qualsiasi (non togliere lo 0) inserendo un nuovo when. #i valori devo essere inseriti nel seguente formato: # [colore, "nome della difficoltà"] when 0 #Nessuno @difficulty = [0, " "] when 1 #MOLTO FACILE @difficulty = [3, "MOLTO FACILE"] when 2 #FACILE @difficulty = [11, "FACILE"] when 3 #NORMALE @difficulty = [16, "NORMALE"] when 4 #MODERATO @difficulty = [14, "MODERATO"] when 5 #DIFFICILE @difficulty = [10, "DIFFICILE"] end end def name if @state_number == 1 return '----' else return @name end end def state_number=(value) @state_number = value set_state_name end def difficulty_level=(value) @difficulty_level = value set_difficulty_name end end #-----FINE------------- class Scene_Save < Scene_File alias samo_new_save write_save_data def write_save_data(file) File.open(Quests, "Missioni") { |f| Marshal.dump(obj, f) } end end class Scene_Load < Scene_File alias samo_new_load read_save_data def read_save_data(file) File.open(Quests, "Missioni") { |f| obj = Marshal.load(f) } end end
Immagini
Spoiler
Spero che vi sia di qualche utilità
Ciao!
Modificato da Holy87, 23 March 2013 - 15:27 PM.