Salve, sto utilizzando questo script di Lizzie S per il registro missioni:
Spoiler
#=============================================================================== # * Quest Menu # v. 1.00 # Feb. 2nd, 2013 # Written for: www.gdunlimited.net # Credits: Lizzie S # Thanks to: Moonpearl, for a small pearl of wisdom. # Marked, for keeping GDUnimited alive # RGangsta, for ACE. #------------------------------------------------------------------------------- # Introduction: This script allows a good quest log for your game, allowing # the player to track quests, see how many they've completed, # etc. #------------------------------------------------------------------------------- # Features: # Keeps a tally of all known quests and how many have been completed. # Allows you to add or remove objectives. #------------------------------------------------------------------------------- # Instructions: # • Place the script in the 'Materials' section. # • The script adds the first objective of the first mission automatically. # • You must input all the information of your missions in the module marked: # Missions # There is an example in place. # • To call the script, use: SceneManager.call(Scene_Mission) # • Use the following syntaxes to affect the script: # To add a mission: $game_party.add_mis(mission_id) # To add an objective: $game_party.add_obj(mission_id, objective_id) # To remove an objective: $game_party.rem_obj(mission_id, objective_id) # To mark an objective complete: $game_party.add_comp_obj(mission_id, objective_id) # To mark a mission as complete: $game_party.comp_mis(mission_id) # To remove all missions: $game_party.rem_all_mis #=============================================================================== #=============================================================================== # * Module #=============================================================================== module Missions #----------------------------------------------------------------------------- # Mission_Names = { mission_id => "Mission_Name" #----------------------------------------------------------------------------- Mission_Names = { 0 => "Convocati dal Re", 1 => "tch a Pail of Water", 2 => "Soccorsi a Est", 3 => "Il Primo Ostacolo", 4 => "Il Nulla Rubato", 5 => "La Rivolta", 6 => "Preservare l'Udito", 7 => "Il Sapore Più Raro", 8 => "Un Boss Dietro le Sbarre", 9 => "Torture Esoteriche", } #----------------------------------------------------------------------------- # Mission_Desc = { mission_id => ["Description", ["sprite_sheet", index, "name"]] #----------------------------------------------------------------------------- Mission_Desc = { 0 => ["Re Varian Fortebraccio vi ha convocati al Castello di Beloren. Ha un importante incarico per voi.", ["Dario", 0, "Dungeon Master"]], 1 => ["You have been asked by your mother to fetch a pail of water.", ["Actor2", 1, "Mother"]], 2 => ["È giunta una richiesta di aiuto da parte del Consolato di Rutiar. Viaggiate fino alla città e scoprite di cosa si tratta.", ["People4", 0, "Re Varian Fortebraccio"]], 3 => ["Il cancello del tunnel è chiuso.", ["!Door2", 0, "Cancello"]], 4 => ["Si parla di strane luci che si muovono tra le rovine della città di Itashar. La città è ormai disabitata, quindi temiamo sia diventata un avamposto degli orchi. La vostra è una missione di ricognizione. Tornate il prima possibile e riferiteci cos'avete visto.", ["Actor2", 6, "Brolin Sicamoore"]], 5 => ["Abbiamo delle rogne a causa di una rivolta nelle segrete. Cercate di sedarla e se ci riuscirete potrò perdonare il vostro precedente fallimento.", ["People4", 0, "Re Varian Fortebraccio"]], 6 => ["Le truppe impegnate nel pattugliamento dei Crepacci hanno delle difficoltà a svolgere il loro lavoro a causa degli assordanti stridii degli Uccelli Sonici. Uccidete un Uccello Sonico Alfa e portatemi il suo Berretto con Paraorecchie. Questo ci aiuterà a non perdere l'udito.", ["Actor1", 6, "Ander Germaine"]], 7 => ["'Il Ragù' è un raro libro di cucina le cui copie sono purtroppo andate perdute durante l'ultima guerra. Tuttavia, si dice che a Karazhan ce ne sia ancora una. Trovatela.", ["Actor1", 6, "Ander Germaine"]], 8 => ["Il criminale Randolph Moloch continua a passare gli ordini ai suoi sottoposti nonostante sia stato imprigionato nelle segrete. Non sappiamo come ci riesca, ma se verrà tolto di mezzo il problema sarà risolto.", ["Actor1", 6, "Ander Germaine"]], 9 => ["A sud c'è una grotta nella quale vengono eseguiti orribili esperimenti su un demone di nome Magtheridon. Tutto questo deve finire. Uccidete i suoi aguzzini e avrete una ricompensa.", ["Actor1", 6, "Ander Germaine"]] } #----------------------------------------------------------------------------- # Mission_Objectives = {mission_id => {obj_id => "Objective_text",... } #----------------------------------------------------------------------------- Mission_Objectives = { 0 => {0 => "Parla con il Re" }, 1 => {0 => "a need to go out and find a bucket, wooden is preferable..", 1 => "a a nice sturdy rope. Not something that will decay easily in water. Just something more like nylon.", 2 => "Fetch water from the well." }, 2 => {0 => "Attraversa il Tunnel del Gufo Cieco", 1 => "Parla con Brolin Sicamoore a Rutiar" }, 3 => {0 => "Trova un modo per aprirlo" }, 4 => {0 => "Esplora le rovine di Itashar", 1 => "Scopri cosa sta succedendo nelle Miniere della Morte", 2 => "Torna da Brolin", 3 => "Torna da Re Fortebraccio a Beloren" }, 5 => {0 => "Parla con Virna Jonathan nelle Segrete di Beloren", 1 => "Trova la chiave della cella centrale", 2 => "Seda la rivolta", 3 => "Torna da Re Fortebraccio", 4 => "Paga la cauzione per liberare i compagni, OPPURE trova un modo per distrarre le guardie", 5 => "Recupera l'equipaggiamento del gruppo", 6 => "Libera il gruppo", 7 => "Parla con il Re" }, 6 => {0 => "Ottieni 1 Berretto con Paraorecchie da un Uccello Sonico Alfa ai Crepacci", 1 => "Placeholder" }, 7 => {0 => "Trova 'Il Ragù' nella Biblioteca di Karazhan" }, 8 => {0 => "Uccidi Randolph Moloch nelle Segrete di Beloren" }, 9 => {0 => "Uccidi 6 gruppi di Custodi della Fossa (0/6)", 1 => "Uccidi 6 gruppi di Custodi della Fossa (1/6)", 2 => "Uccidi 6 gruppi di Custodi della Fossa (2/6)", 3 => "Uccidi 6 gruppi di Custodi della Fossa (3/6)", 4 => "Uccidi 6 gruppi di Custodi della Fossa (4/6)", 5 => "Uccidi 6 gruppi di Custodi della Fossa (5/6)", 6 => "Uccidi 6 gruppi di Custodi della Fossa (6/6)" } } end #=============================================================================== # END Module #=============================================================================== #=============================================================================== # * Game_Party #=============================================================================== class Game_Party < Game_Unit attr_accessor :missions attr_accessor :comp_missions attr_accessor :act_obj attr_accessor :comp_obj alias lizzie_missions_gameparty_init initialize def initialize lizzie_missions_gameparty_init # Mission_IDs @missions = [] # Mission_Ids @comp_missions = [] # Mission_Name => [Current_Objectives] @act_obj = {} @comp_obj = {} end def add_mis(id) if @missions.include?(id) return end @missions.push(id) mis = Missions @act_obj[id] = [0] @comp_obj[id] = [] return end def rem_all_mis @missions.clear @act_obj.clear @comp_obj.clear @comp_missions.clear return end def rem_obj(id, obj_n) if @act_obj[id] != nil if @act_obj[id].include?(obj_n) @act_obj[id].delete(obj_n) end end return end def add_obj(id, obj_n) mis = Missions if @act_obj[id].include?(obj_n) return end @act_obj[id].push(obj_n) return end def add_comp_obj(id, obj_n) for i in 0...@act_obj[id].size if @act_obj[id][i] == obj_n @act_obj[id].delete(obj_n) @comp_obj[id].push(obj_n) end end return end def comp_mis(id) if @comp_missions.include?(id) return end @comp_missions.push(id) return end def add_comp_obj(id, obj_n) #CHANGED Added this 'if' to abort if about to encounter error if !@act_obj[id] return end for i in 0...@act_obj[id].size if @act_obj[id][i] == obj_n @act_obj[id].delete(obj_n) @comp_obj[id].push(obj_n) end end return end def comp_mis(id) if @comp_missions.include?(id) return end #CHANGED Added this 'if' to abort if trying to complete non-existent mission if [email protected]?(id) return end @comp_missions.push(id) return end end #=============================================================================== # END Game_Party #=============================================================================== #=============================================================================== # * Window_MissionInfo #=============================================================================== class Window_MissionInfo < Window_Base def initialize super(0, 0, 416, 48) activate refresh end def refresh contents.clear contents.draw_text(0, 0, self.width - 24, 24, "Usa Pag↑ e Pag↓ per scorrere il testo.") end end #=============================================================================== # * Window_MissionInfo #=============================================================================== #=============================================================================== # * Window_MissionComp #=============================================================================== class Window_MissionComp < Window_Base def initialize super(416, 0, 128, 48) self.active = false refresh end def refresh self.contents.clear x = $game_party.missions.size.to_s y = $game_party.comp_missions.size.to_s self.contents.draw_text(0, 0, self.width - 24, 24, y + "/" + x, 2) end end #=============================================================================== # END Window_MissionComp #=============================================================================== #=============================================================================== # * Window_Missions #=============================================================================== class Window_Missions < Window_Selectable def initialize super(0, 48, 256, 368) self.index = 0 activate @data = [] refresh end def item_max $game_party.missions.size end def mission return @data[index] end def index=(index) super @desc_window.refresh(@data[index]) unless @desc_window == nil end def setDescWindow(descWindow) @desc_window = descWindow end # def refresh # self.contents.clear # mis = Missions # for i in 0...$game_party.missions.size # x = $game_party.missions[i] # @data.push(x) # if $game_party.comp_missions.include?(x) # change_color(Color.new(128, 128, 128, 255)) # else # change_color(Color.new(255, 255, 255, 255)) # end # self.contents.draw_text(4, i * 24, self.width - 24, 24, mis::Mission_Names[x]) # end # end def refresh self.contents.clear mis = Missions completed = [] todo = [] i = 0 for j in 0...$game_party.missions.size x = $game_party.missions[j] if $game_party.comp_missions.include?(x) completed.push(x) else todo.push(x) end end for j in 0...todo.size x = todo[j] @data.push(x) change_color(Color.new(255, 255, 255, 255)) self.contents.draw_text(4, i * 24, self.width - 24, 24, mis::Mission_Names[x]) i += 1 end for j in 0...completed.size x = completed[j] @data.push(x) change_color(Color.new(128, 128, 128, 255)) self.contents.draw_text(4, i * 24, self.width - 24, 24, mis::Mission_Names[x]) i += 1 end end end #=============================================================================== # END Window_Missions #=============================================================================== #=============================================================================== # * Window_MissionDesc #=============================================================================== class Window_MissionDesc < Window_Selectable def initialize super(256, 48, 288, 368) self.index = -1 activate end #----------------------------------------------------------------------------- def refresh(id) self.contents.clear if id == nil return end mis = Missions @lines = [] @text_location_y = 0 @comp_lines = [] desc_text = mis::Mission_Desc[id][0] lines_update(desc_text) @lines.push("") for i in 0...$game_party.act_obj[id].size act_obj_text = " • " + mis::Mission_Objectives[id][$game_party.act_obj[id][i]] lines_update(act_obj_text) end if $game_party.act_obj[id].size != 0 @lines.push("") end for i in 0...$game_party.comp_obj[id].size comp_obj_text = " • " + mis::Mission_Objectives[id][$game_party.comp_obj[id][i]] comp_lines_update(comp_obj_text) end set_height self.contents = Bitmap.new(264, @n) draw_character(mis::Mission_Desc[id][1][0], mis::Mission_Desc[id][1][1], 24, 32) draw_text(48, 0, 240, 24, mis::Mission_Desc[id][1][2]) for i in [email protected] draw_text(0, i * 24 + 48, 264, 24, @lines[i]) @text_location_y += 24 end change_color(Color.new(128, 128, 128, 255)) for i in 0...@comp_lines.size draw_text(0, i * 24 + 48 + @text_location_y, 264, 24, @comp_lines[i]) end end #----------------------------------------------------------------------------- def lines_update(text) string = "" for word in text.split word_width = self.text_size(word).width + self.text_size(string).width + self.text_size(" ").width if word_width > (width - 24) @lines.push(string) string = "" end string += word + " " end unless @lines.include?(string) @lines.push(string) string = "" end end #----------------------------------------------------------------------------- def comp_lines_update(text) string = "" for word in text.split word_width = self.text_size(word).width + self.text_size(string).width + self.text_size(" ").width if word_width > (width - 24) @comp_lines.push(string) string = "" end string += word + " " end unless @comp_lines.include?(string) @comp_lines.push(string) string = "" end end #----------------------------------------------------------------------------- def set_height @n = (@lines.size + @comp_lines.size + 2) * 24 end end #=============================================================================== # END Window_MissionDesc #=============================================================================== #=============================================================================== # * Scene_Mission #=============================================================================== class Scene_Mission < Scene_MenuBase alias liz_mission_self_update update_basic def start super create_list_window create_help_window create_comp_window create_desc_window end def create_help_window @help_window = Window_MissionInfo.new end def create_comp_window @comp_window = Window_MissionComp.new end def create_desc_window @desc_window = Window_MissionDesc.new @desc_window.refresh(@list_window.mission) @list_window.setDescWindow(@desc_window) end def create_list_window @list_window = Window_Missions.new @list_window.set_handler(:cancel, method(:return_scene)) @list_window.set_handler(:pagedown, method(:scroll_down)) @list_window.set_handler(:pageup, method(:scroll_up)) end def scroll_down if @desc_window.oy < (@desc_window.contents.height - 344) @desc_window.oy += 24 end @list_window.activate return end def update_basic liz_mission_self_update if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) @desc_window.refresh(@list_window.mission) end end def scroll_up if @desc_window.oy != 0 @desc_window.oy -= 24 end @list_window.activate return end end
Il problema è che non è compatibile con i vecchi salvataggi. Ogni volta che provo ad aprirlo, o che aggiungo altre quest, il gioco crasha con il seguente messaggio:
C'è qualche possibilità di renderlo compatibile coi vecchi salvataggi? Grazie dell'aiuto ^^
Modificato da Vai Jack 8, 15 July 2018 - 10:05 AM.