 RPG Maker VX/VXAce - La Communauté - v3 Le forum de la communauté francophone de making. News, entraide, ressources, venez nombreux! Spécialisés dans RPG Maker VX et RPG Maker VXAce |
           
 
| | [Résolu]Script de quêtes, bug de sauvegarde ligne 644 | |
| | Auteur | Message |
|---|
Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Sam 19 Juin 2010 - 21:00 | |
| Yop yop all ! J'ai un problème au moment où je veux sauvegarder ma partie, voici ce que ça donne en image :  J'implore votre aide. Voici le script : | Spoiler: | | | =begin ########################## Breadlord's Quets script ############################ Ceci est un script pour quête vous permettant d'avoir une large description des quêtes et de multiples tâches (entend par là plusieurs à truc à faire pour la même quête hein). Tu met les quêtes sous forme d'evenement c'est à dire sous ce format :
$quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2, ...], ['tâche 1 description', 'tâche 2 description',...])
Dans ce format 'nom de la quête' correspond au nom de la quête, 'ligne de description N' est la N ème ligne de la description de la quête et 'tâche N description' est la description de la N eme tâche
Pour completer une tâche dans un evenement utilisez $quests['nom de la quête'].complete_sub('tâche description'), et pour échouer une tâche utilisez $quests['nom de la quête'].fail_sub('tâche description'). Si toutes les tâches sont complétées/échouées alors le status de la quête deviendra complétée/échouée. Pour mettre une quête en complétée utilisez $quests['nom de la quête'].complete_all, et échouée utilisez $quests['nom de la quête'].fail_all
Pour vérifier si une quête est complétée utilisez $quests['nom de la quête'].complete?, et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].failed?. Pour vérifier si une tâche est complétée utilisez $quests['nom de la quête'].sub_complete?('tâche description') et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].sub_failed?('tâche description')
Pour definir une quete secondaire il suffit de rajouter true après les taches : $quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2, ...], ['tâche 1 description', 'tâche 2 description',...], true)
Enfin pour vérifier que la quête existe utilisez $quests['nom de la quête'] != nil Pour appeler le menu de quête utilisez $scene = Scene_Quest.new Et pour lancer le menu quête sur un onglet précis il suffit de $scene = Scene_Quest.new(index de l'onglet) 0<= index de l'onglet <= 3
################################################################################ ################################################################################ =end module QUEST_CONFIG # Ici seront defini les 3 icones correspondant aux tri des quêtes # QUEST_ICONS = [icone des quetes en cours, icone des quetes complétées, icone des quete echouées] QUEST_ICONS = [188, 179, 150, 112] # Ici sera defini l'image apparaissant dans le menu # QUEST_PICTURE = "nom de l'image" QUEST_PICTURE = "Quest" # Ici sera defini la hauteur des fenêtre et par consequence la place laisser à l'image # QUEST_WINDOWHEIGHT = hauteur QUEST_WINDOWHEIGHT = 293 # 293 # Ici sera defini l'image apparaissant lorsqu'une quête est completée # QUEST_COMPLETE = "nom de l'image" QUEST_COMPLETE = "Complete" # Ici sera defini l'image apparaissant lorsqu'une quête est échouée # QUEST_FAILED = "nom de l'image" QUEST_FAILED = "Failed" # Ici sera defini le message apparaissant dans la fenetre de description lors d'une quête secondaire # QUEST_SECOND = "message" QUEST_SECOND = "Quête secondaire" # Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches principales # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATEICONS = [99, 101, 97] # Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches secondaires # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATESECONDICONS = [100, 102, 96] #Ici sera defini le nom apparaissant dans le menu de base # MENUNAME = nom du menu MENUNAME = 'Quêtes' #Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes principales # QUEST_NAMEPRINCIP = nom QUEST_NAMEPRINCIP = "Quêtes Principales" #Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes secondaires # QUEST_NAMESECOND = nom QUEST_NAMESECOND = "Quêtes Secondaires" #Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes réussies # QUEST_NAMECOMP = nom QUEST_NAMECOMP = "Quêtes Réussies"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes échouées # QUEST_NAMEFAIL = nom QUEST_NAMEFAIL = "Quêtes Ratés" # Ici sera defini à titre indicatif le numero du menu quête dans le menu de base (comptez à partir de 0) # cela n'aura aucune influance sur sa position. # MENU_NUMBER = umero du menu quête dans le menu de base MENU_NUMBER = 4 # Ici sera defini l'interrupteur definissant si un tache échoué fais echoué la quête ou non. # FAILSUB_FAILCOMPLETE = true/false FAILSUB_FAILCOMPLETE = true end
#============================================================================== # ** Quest #------------------------------------------------------------------------------ # Cette classe permet de definir des quêtes # Elle est appelée par $quests #============================================================================== class Quest
attr_accessor :desc, :sub, :comp, :sub_text, :pic
#-------------------------------------------------------------------------- # * Quête Initialization # desc : tableau des descriptions # sub : tableau des tâches # pic : window width #-------------------------------------------------------------------------- def initialize(desc = [$$], sub = [$$], second = false) @desc = desc @sub = {} @second = second for i in 0..sub.size - 1 # pour chaque tache @sub[sub[i]] = 'prog' #construit une clef du nom de la tache avec la valeur prog end @comp = 'prog' @sub_text = [] for i in 0..sub.size - 1 @sub_text.push(sub[i]) # pour chaque tache end end #-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def second? return @second end #-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def complete_sub(sub) @sub[sub] = 'comp' test_complete end #-------------------------------------------------------------------------- # * Tester si la Quête est devenue complete # sub : tâche #-------------------------------------------------------------------------- def test_complete @a = true for i in 0..@sub.keys.size - 1 if @sub[@sub.keys[i]] == 'comp' @a = (@a and true) else @a = (@a and false) end end if @a == true complete_all end end #-------------------------------------------------------------------------- # * Echouer une Tâche # sub : tâche #-------------------------------------------------------------------------- def fail_sub(sub) if QUEST_CONFIG::FAILSUB_FAILCOMPLETE fail_all else @sub[sub] = 'fail' end end
#-------------------------------------------------------------------------- # *Compeleter toutes les Tâches #-------------------------------------------------------------------------- def complete_all @comp = 'comp' for i in @sub.keys @sub[i] = 'comp' end end
#-------------------------------------------------------------------------- # *Echouer à toutes les Tâches #-------------------------------------------------------------------------- def fail_all @comp = 'fail' for i in @sub.keys @sub[i] = 'fail' end end
#-------------------------------------------------------------------------- # *Tester si une Tâches est complete #-------------------------------------------------------------------------- def sub_complete?(sub) return @sub[sub] == 'comp'? true : false end
#-------------------------------------------------------------------------- # *Tester si une Quête est complete #-------------------------------------------------------------------------- def complete? return @comp == 'comp'? true : false end
#-------------------------------------------------------------------------- # *Tester si une Tâches est échouée #-------------------------------------------------------------------------- def sub_failed?(sub) return @sub[sub] == 'fail'? true : false end
#-------------------------------------------------------------------------- # *Tester si une Quête est échouée #-------------------------------------------------------------------------- def failed? return @comp == 'fail'? true : false end end
#============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche les differents états des quêtes. #============================================================================== class Window_Quest_Type < Window_Selectable
attr_accessor :active, :index #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0,352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT,160,64) @column_max = 4 @index = 0 @icons = QUEST_CONFIG::QUEST_ICONS @spacing = 14 refresh end
#-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh @item_max = @icons.size create_contents for i in 0...@item_max rect = item_rect(i) rect.x -= 2 icon = @icons[i] draw_icon(icon, rect.x, rect.y) end end end
#============================================================================== # ** Window_Quest_Title #------------------------------------------------------------------------------ # Cette fenetre affiche les descriptions des quêtes. #============================================================================== class Window_Quest_Title < Window_Base
#-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = QUEST_CONFIG::MENUNAME) super( 160, 352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, 64) @pic_title = Sprite.new @pic_title.bitmap = Cache.picture(QUEST_CONFIG::QUEST_PICTURE) self.contents.draw_text(0, 0, self.width - 40, WLH, index, 1) end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @pic_title.dispose end end
#============================================================================== # ** Window_Quest_Desc #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Quest_Desc < Window_Base
#-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = nil) super( 160, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @status = Sprite.new if index != nil if $quests[index].complete? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_COMPLETE) elsif $quests[index].failed? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_FAILED) end @status.z = 201 for i in 0..$quests[index].desc.size - 1 a = $quests[index].desc[i] self.contents.draw_text(0, WLH*i, self.width - 40, WLH, a, 1) end a = $quests[index].sub_text for i in 0..a.size - 1 b = a[i] if $quests[index].sub[b] == 'prog' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[0] else ic = QUEST_CONFIG::VALIDATEICONS[0] end elsif $quests[index].sub[b] == 'comp' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[1] else ic = QUEST_CONFIG::VALIDATEICONS[1] end else if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[2] else ic = QUEST_CONFIG::VALIDATEICONS[2] end end draw_icon(ic, 4, WLH*(i + $quests[index].desc.size + 1)) self.contents.draw_text(0, WLH*(i + $quests[index].desc.size + 1), self.width - 40, WLH, b, 1) end if $quests[index].second? self.contents.draw_text(0, QUEST_CONFIG::QUEST_WINDOWHEIGHT - 3*WLH, self.width - 40, WLH, QUEST_CONFIG::QUEST_SECOND, 1) end end end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @status.dispose end end
#============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Select_Quest < Window_Selectable attr_accessor :c_items
#-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(type = 1) super(0, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 160, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @type = type self.index = 0 self.active = false @items = $quests.keys create_contents a = @items @c_items = [] for it in 0...@items.size if include?(a[it]) @c_items.push(a[it]) end end for it in 0...@c_items.size draw_opt(it) end end #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update super @data = @c_items @item_max = @data.size end #-------------------------------------------------------------------------- # * Include ? # key : nom d'une quête #-------------------------------------------------------------------------- def include?(key) case @type when 1 if !$quests[key].complete? and !$quests[key].failed? and !$quests[key].second? return true end when 2 unless $quests[key].complete? or $quests[key].failed? return $quests[key].second? end when 3 return $quests[key].complete? when 4 return $quests[key].failed? end end
#-------------------------------------------------------------------------- # * Draw Opt # itemm : quête #-------------------------------------------------------------------------- def draw_opt(itemm) a = @c_items rect = item_rect(itemm) self.contents.clear_rect(rect) if $quests[@c_items[itemm]].complete? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[1],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[1],rect.x, rect.y) end elsif $quests[@c_items[itemm]].failed? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[2],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[2],rect.x, rect.y) end else if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[0],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[0],rect.x, rect.y) end end string = @c_items[itemm] rect.width -= 4 self.contents.draw_text(rect.x, rect.y, rect.width, WLH, string, 1) end end
#============================================================================== # ** Scene_Quest #------------------------------------------------------------------------------ # Cette classe fere le menu de quêtes #============================================================================== class Scene_Quest < Scene_Base #-------------------------------------------------------------------------- # * Object Initialization # #-------------------------------------------------------------------------- def initialize(index = 0, menu = false) @menu = menu @index = index end #-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start super create_menu_background @type = Window_Quest_Type.new @type.visible = true @type.active = true @type.index = @index @quests = Window_Select_Quest.new(@index +1) @quests.active = false @quests.index = -1 @desc_window = Window_Quest_Desc.new @title = Window_Quest_Title.new update_desc end #-------------------------------------------------------------------------- # * Return to Original Screen #-------------------------------------------------------------------------- def return_scene if @menu $scene = Scene_Menu.new(QUEST_CONFIG::MENU_NUMBER) else $scene = Scene_Map.new end end #-------------------------------------------------------------------------- # * Terminate #-------------------------------------------------------------------------- def terminate dispose_menu_background @type.dispose @quests.dispose @title.dispose @desc_window.dispose end
#-------------------------------------------------------------------------- # * Update Frame #-------------------------------------------------------------------------- def update super update_menu_background @type.update @quests.update if @type.active update_type_selection elsif @quests.active update_quests_selection else update_desc_selection end if Input.trigger?(Input::A) Sound.play_cancel return_scene end end
#-------------------------------------------------------------------------- # * Update Type Selection #-------------------------------------------------------------------------- def update_type_selection if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) a = @type.index Sound.play_cursor @type.active = false @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.active = true @quests.index = 0 elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT) a = @type.index @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.index = -1 update_desc end end #-------------------------------------------------------------------------- # * Update Quests Decription #-------------------------------------------------------------------------- def update_desc case @type.index when 0 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEPRINCIP) when 1 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMESECOND) when 2 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMECOMP) when 3 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEFAIL) end end #-------------------------------------------------------------------------- # * Update Quests Selection #-------------------------------------------------------------------------- def update_quests_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @type.active = true @quests.active = false @quests.index = -1 update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new elsif Input.trigger?(Input::C) if @quests.c_items[@quests.index] == nil Sound.play_buzzer else Sound.play_decision @desc_window.dispose @desc_window = Window_Quest_Desc.new(@quests.c_items[@quests.index]) @title.dispose @title = Window_Quest_Title.new(@quests.c_items[@quests.index]) @quests.active = false @type.active = false end end end #-------------------------------------------------------------------------- # * Update Desc Selection #-------------------------------------------------------------------------- def update_desc_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @quests.active = true update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new end end end
#============================================================================== # ** Scene_Title #------------------------------------------------------------------------------ # This class performs the title screen processing. #============================================================================== class Scene_Title < Scene_Base alias startupquest command_new_game
#-------------------------------------------------------------------------- # * Command: New Game #-------------------------------------------------------------------------- def command_new_game startupquest $quests = {} end end
#============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This class performs the save and load screen processing. #============================================================================== class Scene_File < Scene_Base alias savequest write_save_data alias loadquest read_save_data
#-------------------------------------------------------------------------- # * Write Save Data # file : write file object (opened) #-------------------------------------------------------------------------- def write_save_data(file) savequest Marshal.dump($quests, file) end #-------------------------------------------------------------------------- # * Read Save Data # file : file object for reading (opened) #-------------------------------------------------------------------------- def read_save_data(file) $quests = Marshal.load(file) loadquest end end |
Merci d'avance pour vos futurs réponses.
Dernière édition par Varkan le Mar 22 Juin 2010 - 13:48, édité 1 fois |
|  | | Naël Garant du Savoir


Nombre de messages: 558 Age: 15 Localisation: n.f. : repérage, dans l'espace ou dans le temps. Capacités: bon Distinction: aucune Date d'inscription: 07/02/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 7:10 | |
| J'utilise ce script et on me l'avais débugé ^^ Je te le file : | Spoiler: | | | =begin ########################## Breadlord's Quets Script Modifié par Skillo ############################ Ceci est un script pour quête vous permettant d'avoir une large description des quêtes et de multiples tâches (entend par là plusieurs à truc à faire pour la même quête hein). Tu met les quêtes sous forme d'evenement c'est à dire sous ce format : $quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2, ...], ['tâche 1 description', 'tâche 2 description',...]) Dans ce format 'nom de la quête' correspond au nom de la quête, 'ligne de description N' est la N ème ligne de la description de la quête et 'tâche N description' est la description de la N eme tâche Pour completer une tâche dans un evenement utilisez $quests['nom de la quête'].complete_sub('tâche description'), et pour échouer une tâche utilisez $quests['nom de la quête'].fail_sub('tâche description'). Si toutes les tâches sont complétées/échouées alors le status de la quête deviendra complétée/échouée. Pour mettre une quête en complétée utilisez $quests['nom de la quête'].complete_all, et échouée utilisez $quests['nom de la quête'].fail_all Pour vérifier si une quête est complétée utilisez $quests['nom de la quête'].complete?, et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].failed?. Pour vérifier si une tâche est complétée utilisez $quests['nom de la quête'].sub_complete?('tâche description') et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].sub_failed?('tâche description') Pour definir une quete secondaire il suffit de rajouter true après les taches : $quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2, ...], ['tâche 1 description', 'tâche 2 description',...], true) Enfin pour vérifier que la quête existe utilisez $quests['nom de la quête'] != nil Pour appeler le menu de quête utilisez $scene = Scene_Quest.new Et pour lancer le menu quête sur un onglet précis il suffit de $scene = Scene_Quest.new(index de l'onglet) 0<= index de l'onglet <= 3
################################################################################ ################################################################################ =end module QUEST_CONFIG
# Ici seront defini les 3 icones correspondant aux tri des quêtes # QUEST_ICONS = [icone des quetes en cours, icone des quetes complétées, icone des quete echouées] QUEST_ICONS = [188, 189, 150, 112]
# Ici sera defini l'image apparaissant dans le menu # QUEST_PICTURE = "nom de l'image" QUEST_PICTURE = "Quest"
# Ici sera defini la hauteur des fenêtre et par consequence la place laisser à l'image # QUEST_WINDOWHEIGHT = hauteur QUEST_WINDOWHEIGHT = 293 # 293
# Ici sera defini l'image apparaissant lorsqu'une quête est completée # QUEST_COMPLETE = "nom de l'image" QUEST_COMPLETE = "Complete"
# Ici sera defini l'image apparaissant lorsqu'une quête est échouée # QUEST_FAILED = "nom de l'image" QUEST_FAILED = "Failed"
# Ici sera defini le message apparaissant dans la fenetre de description lors d'une quête secondaire # QUEST_SECOND = "message" QUEST_SECOND = "Quête secondaire"
# Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches principales # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATEICONS = [96, 101, 99]
# Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches secondaires # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATESECONDICONS = [98, 100, 103]
#Ici sera defini le nom apparaissant dans le menu de base # MENUNAME = nom du menu MENUNAME = 'Quêtes'
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes principales # QUEST_NAMEPRINCIP = nom QUEST_NAMEPRINCIP = "Quêtes Principales"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes secondaires # QUEST_NAMESECOND = nom QUEST_NAMESECOND = "Quêtes Secondaires"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes réussies # QUEST_NAMECOMP = nom QUEST_NAMECOMP = "Quêtes Réussies" #Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes échouées # QUEST_NAMEFAIL = nom QUEST_NAMEFAIL = "Quêtes Echouées"
# Ici sera defini à titre indicatif le numero du menu quête dans le menu de base (comptez à partir de 0) # cela n'aura aucune influance sur sa position. # MENU_NUMBER = umero du menu quête dans le menu de base MENU_NUMBER = 4
# Ici sera defini l'interrupteur definissant si un tache échoué fais echoué la quête ou non. # FAILSUB_FAILCOMPLETE = true/false FAILSUB_FAILCOMPLETE = true
end #============================================================================== # ** Quest #------------------------------------------------------------------------------ # Cette classe permet de definir des quêtes # Elle est appelée par $quests #============================================================================== class Quest attr_accessor :desc, :sub, :comp, :sub_text, :pic #-------------------------------------------------------------------------- # * Quête Initialization # desc : tableau des descriptions # sub : tableau des tâches # pic : window width #-------------------------------------------------------------------------- def initialize(desc = [''], sub = [''], second = false) @desc = desc @sub = {} @second = second for i in 0..sub.size - 1 # pour chaque tache @sub[sub[i]] = 'prog' #construit une clef du nom de la tache avec la valeur prog end @comp = 'prog' @sub_text = [] for i in 0..sub.size - 1 @sub_text.push(sub[i]) # pour chaque tache end end
#-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def second? return @second end #-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def complete_sub(sub) @sub[sub] = 'comp' test_complete end #-------------------------------------------------------------------------- # * Tester si la Quête est devenue complete # sub : tâche #-------------------------------------------------------------------------- def test_complete @a = true for i in 0..@sub.keys.size - 1 if @sub[@sub.keys[i]] == 'comp' @a = (@a and true) else @a = (@a and false) end end if @a == true complete_all end end #-------------------------------------------------------------------------- # * Echouer une Tâche # sub : tâche #-------------------------------------------------------------------------- def fail_sub(sub) if QUEST_CONFIG::FAILSUB_FAILCOMPLETE fail_all else @sub[sub] = 'fail' end end
#-------------------------------------------------------------------------- # *Compeleter toutes les Tâches #-------------------------------------------------------------------------- def complete_all @comp = 'comp' for i in @sub.keys @sub[i] = 'comp' end end #-------------------------------------------------------------------------- # *Echouer à toutes les Tâches #-------------------------------------------------------------------------- def fail_all @comp = 'fail' for i in @sub.keys @sub[i] = 'fail' end end #-------------------------------------------------------------------------- # *Tester si une Tâches est complete #-------------------------------------------------------------------------- def sub_complete?(sub) return @sub[sub] == 'comp'? true : false end #-------------------------------------------------------------------------- # *Tester si une Quête est complete #-------------------------------------------------------------------------- def complete? return @comp == 'comp'? true : false end #-------------------------------------------------------------------------- # *Tester si une Tâches est échouée #-------------------------------------------------------------------------- def sub_failed?(sub) return @sub[sub] == 'fail'? true : false end #-------------------------------------------------------------------------- # *Tester si une Quête est échouée #-------------------------------------------------------------------------- def failed? return @comp == 'fail'? true : false end end
#============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche les differents états des quêtes. #============================================================================== class Window_Quest_Type < Window_Selectable attr_accessor :active, :index #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0,352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT,160,64) @column_max = 4 @index = 0 @icons = QUEST_CONFIG::QUEST_ICONS @spacing = 14 refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh @item_max = @icons.size create_contents for i in 0...@item_max rect = item_rect(i) rect.x -= 2 icon = @icons[i] draw_icon(icon, rect.x, rect.y) end end end #============================================================================== # ** Window_Quest_Title #------------------------------------------------------------------------------ # Cette fenetre affiche les descriptions des quêtes. #============================================================================== class Window_Quest_Title < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = QUEST_CONFIG::MENUNAME) super( 160, 352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, 64) @pic_title = Sprite.new @pic_title.bitmap = Cache.picture(QUEST_CONFIG::QUEST_PICTURE) self.contents.draw_text(0, 0, self.width - 40, WLH, index, 1) end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @pic_title.dispose end end #============================================================================== # ** Window_Quest_Desc #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Quest_Desc < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = nil) super( 160, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @status = Sprite.new if index != nil if $quests[index].complete? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_COMPLETE) elsif $quests[index].failed? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_FAILED) end @status.z = 201 for i in 0..$quests[index].desc.size - 1 a = $quests[index].desc[i] self.contents.draw_text(0, WLH*i, self.width - 40, WLH, a, 1) end a = $quests[index].sub_text for i in 0..a.size - 1 b = a[i] if $quests[index].sub[b] == 'prog' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[0] else ic = QUEST_CONFIG::VALIDATEICONS[0] end elsif $quests[index].sub[b] == 'comp' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[1] else ic = QUEST_CONFIG::VALIDATEICONS[1] end else if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[2] else ic = QUEST_CONFIG::VALIDATEICONS[2] end end draw_icon(ic, 4, WLH*(i + $quests[index].desc.size + 1)) self.contents.draw_text(0, WLH*(i + $quests[index].desc.size + 1), self.width - 40, WLH, b, 1) end if $quests[index].second? self.contents.draw_text(0, QUEST_CONFIG::QUEST_WINDOWHEIGHT - 3*WLH, self.width - 40, WLH, QUEST_CONFIG::QUEST_SECOND, 1) end end end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @status.dispose end end #============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Select_Quest < Window_Selectable
attr_accessor :c_items #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(type = 1) super(0, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 160, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @type = type self.index = 0 self.active = false @items = $quests.keys create_contents a = @items @c_items = [] for it in 0...@items.size if include?(a[it]) @c_items.push(a[it]) end end for it in 0...@c_items.size draw_opt(it) end end
#-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update super @data = @c_items @item_max = @data.size end
#-------------------------------------------------------------------------- # * Include ? # key : nom d'une quête #-------------------------------------------------------------------------- def include?(key) case @type when 1 if !$quests[key].complete? and !$quests[key].failed? and !$quests[key].second? return true end when 2 unless $quests[key].complete? or $quests[key].failed? return $quests[key].second? end when 3 return $quests[key].complete? when 4 return $quests[key].failed? end end #-------------------------------------------------------------------------- # * Draw Opt # itemm : quête #-------------------------------------------------------------------------- def draw_opt(itemm) a = @c_items rect = item_rect(itemm) self.contents.clear_rect(rect) if $quests[@c_items[itemm]].complete? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[1],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[1],rect.x, rect.y) end elsif $quests[@c_items[itemm]].failed? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[2],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[2],rect.x, rect.y) end else if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[0],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[0],rect.x , rect.y) end end string = @c_items[itemm] rect.width -= 4 self.contents.draw_text(rect.x, rect.y, rect.width, WLH, string, 2) end end
#============================================================================== # ** Scene_Quest #------------------------------------------------------------------------------ # Cette classe fere le menu de quêtes #============================================================================== class Scene_Quest < Scene_Base
#-------------------------------------------------------------------------- # * Object Initialization # #-------------------------------------------------------------------------- def initialize(index = 0, menu = false) @menu = menu @index = index end
#-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start super create_menu_background @type = Window_Quest_Type.new @type.visible = true @type.active = true @type.index = @index @quests = Window_Select_Quest.new(@index +1) @quests.active = false @quests.index = -1 @desc_window = Window_Quest_Desc.new @title = Window_Quest_Title.new update_desc end
#-------------------------------------------------------------------------- # * Return to Original Screen #-------------------------------------------------------------------------- def return_scene if @menu $scene = Scene_Menu.new(QUEST_CONFIG::MENU_NUMBER) else $scene = Scene_Map.new end end
#-------------------------------------------------------------------------- # * Terminate #-------------------------------------------------------------------------- def terminate dispose_menu_background @type.dispose @quests.dispose @title.dispose @desc_window.dispose end #-------------------------------------------------------------------------- # * Update Frame #-------------------------------------------------------------------------- def update super update_menu_background @type.update @quests.update if @type.active update_type_selection elsif @quests.active update_quests_selection else update_desc_selection end if Input.trigger?(Input::A) Sound.play_cancel return_scene end end #-------------------------------------------------------------------------- # * Update Type Selection #-------------------------------------------------------------------------- def update_type_selection if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) a = @type.index Sound.play_cursor @type.active = false @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.active = true @quests.index = 0 elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT) a = @type.index @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.index = -1 update_desc end end
#-------------------------------------------------------------------------- # * Update Quests Decription #-------------------------------------------------------------------------- def update_desc case @type.index when 0 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEPRINCIP) when 1 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMESECOND) when 2 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMECOMP) when 3 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEFAIL) end end #-------------------------------------------------------------------------- # * Update Quests Selection #-------------------------------------------------------------------------- def update_quests_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @type.active = true @quests.active = false @quests.index = -1 update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new elsif Input.trigger?(Input::C) if @quests.c_items[@quests.index] == nil Sound.play_buzzer else Sound.play_decision @desc_window.dispose @desc_window = Window_Quest_Desc.new(@quests.c_items[@quests.index]) @title.dispose @title = Window_Quest_Title.new(@quests.c_items[@quests.index]) @quests.active = false @type.active = false end end end
#-------------------------------------------------------------------------- # * Update Desc Selection #-------------------------------------------------------------------------- def update_desc_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @quests.active = true update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new end end end
#============================================================================== # ** Scene_Title #------------------------------------------------------------------------------ # This class performs the title screen processing. #============================================================================== class Scene_Title < Scene_Base
alias startupquest command_new_game #-------------------------------------------------------------------------- # * Command: New Game #-------------------------------------------------------------------------- def command_new_game startupquest $quests = {} end end #============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This class performs the save and load screen processing. #============================================================================== class Scene_File < Scene_Base
alias savequest write_save_data #-------------------------------------------------------------------------- # * Write Save Data # file : write file object (opened) #-------------------------------------------------------------------------- def write_save_data(file) savequest(file) Marshal.dump($quests, file) end
alias loadquest read_save_data #-------------------------------------------------------------------------- # * Read Save Data # file : file object for reading (opened) #-------------------------------------------------------------------------- def read_save_data(file) loadquest(file) $quests = Marshal.load(file) end end
|
Par contre, les sauvegardes faites avant la mise en place du script... tu peux les jeter... Et il y a surement un problème de codage ( quand j'affiche une description, il met un point d'honneur à faire figurer un joli rectangle, du style "je sais pas ce que c'est" ^^ ) |
|  | | Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 19:14 | |
| Alors apparemment j'ai une autre erreur une fois que je met ton script :  script en question : | Spoiler: | | | #=============================================================== # ● [VX] ◦ Neo Save System III ◦ □ #-------------------------------------------------------------- # ◦ by Woratana [woratana@hotmail.com] # ◦ Thaiware RPG Maker Community # ◦ Released on: 15/02/2009 # ◦ Version: 3.0 #-------------------------------------------------------------- # ◦ Log III: # - Change back to draw tilemap as screenshot. Don't need any image. # - For drawing tilemap, the characters won't show on the tilemap. #-------------------------------------------------------------- # ◦ Log II: # - Screenshot DLL is not work with Vista Aero, so I remove it # and use image for each map instead of screenshot. # - Actor's level in last version (V.1) is incorrect. #-------------------------------------------------------------- # ◦ Features: # - Unlimited save slots, you can choose max save slot # - You can use image for scene's background # - Choose your save file's name, and folder to store save files # - Choose to show only information you want # - Editable text for information's title # - Draw tilemap for map that player is currently in. # - Remove text you don't want from map's name (e.g. tags for special script) # - Choose map that you don't want to show its name # - Include save confirmation window before overwrite old save #=================================================================
module Wora_NSS #========================================================================== # * START NEO SAVE SYSTEM - SETUP #-------------------------------------------------------------------------- NSS_WINDOW_OPACITY = 255 # All windows' opacity (Lowest 0 - 255 Highest) # You can change this to 0 in case you want to use image for background NSS_IMAGE_BG = '' # Background image file name, it must be in folder Picture. # use '' for no background NSS_IMAGE_BG_OPACITY = 255 # Opacity for background image MAX_SAVE_SLOT = 20 # Max save slots no. SLOT_NAME = 'SLOT {id}' # Name of the slot (show in save slots list), use {id} for slot ID SAVE_FILE_NAME = 'Saveslot{id}.rvdata' # Save file name, you can also change its file type from .rvdata to other # use {id} for save slot ID SAVE_PATH = '' # Path to store save file, e.g. 'Save/' or '' (for game folder) SAVED_SLOT_ICON = 2319 # Icon Index for saved slot EMPTY_SLOT_ICON = 2318 # Icon Index for empty slot EMPTY_SLOT_TEXT = '-Pas de Sauvegarde-' # Text to show for empty slot's data DRAW_GOLD = true # Draw Gold DRAW_PLAYTIME = true # Draw Playtime DRAW_LOCATION = true # Draw location DRAW_FACE = true # Draw Actor's face DRAW_LEVEL = true # Draw Actor's level DRAW_NAME = true # Draw Actor's name PLAYTIME_TEXT = 'Tps de Jeu : ' GOLD_TEXT = 'Argent : ' LOCATION_TEXT = 'Lieu : ' LV_TEXT = 'Lvl ' MAP_NAME_TEXT_SUB = %w{} # Text that you want to remove from map name, # e.g. %w{[LN] [DA]} will remove text '[LN]' and '[DA]' from map name MAP_NO_NAME_LIST = [] # ID of Map that will not show map name, e.g. [1,2,3] MAP_NO_NAME_NAME = '??????????' # What you will use to call map in no name list MAP_BORDER = Color.new(0,0,0,200) # Map image border color (R,G,B,Opacity) FACE_BORDER = Color.new(0,0,0,200) # Face border color ## SAVE CONFIRMATION WINDOW ## SFC_Text_Confirm = 'Confirmer la sauvegarde' # Text to confirm to save file SFC_Text_Cancel = 'Annuler' # Text to cancel to save SFC_Window_Width = 200 # Width of Confirmation Window SFC_Window_X_Offset = 0 # Move Confirmation Window horizontally SFC_Window_Y_Offset = 0 # Move Confirmation Window vertically #---------------------------------------------------------------------- # END NEO SAVE SYSTEM - SETUP #========================================================================= end class Scene_File < Scene_Base include Wora_NSS attr_reader :window_slotdetail #-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start super create_menu_background if NSS_IMAGE_BG != '' @bg = Sprite.new @bg.bitmap = Cache.picture(NSS_IMAGE_BG) @bg.opacity = NSS_IMAGE_BG_OPACITY end @help_window = Window_Help.new command = [] (1..MAX_SAVE_SLOT).each do |i| command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { i.to_s } end @window_slotdetail = Window_NSS_SlotDetail.new @window_slotlist = Window_SlotList.new(160, command) @window_slotlist.y = @help_window.height @window_slotlist.height = Graphics.height - @help_window.height @help_window.opacity = NSS_WINDOW_OPACITY @window_slotdetail.opacity = @window_slotlist.opacity = NSS_WINDOW_OPACITY # Create Folder for Save file if SAVE_PATH != '' Dir.mkdir(SAVE_PATH) if !FileTest.directory?(SAVE_PATH) end if @saving @index = $game_temp.last_file_index @help_window.set_text(Vocab::SaveMessage) else @index = self.latest_file_index @help_window.set_text(Vocab::LoadMessage) (1..MAX_SAVE_SLOT).each do |i| @window_slotlist.draw_item(i-1, false) if !@window_slotdetail.file_exist?(i) end end @window_slotlist.index = @index # Draw Information @last_slot_index = @window_slotlist.index @window_slotdetail.draw_data(@last_slot_index + 1) end #-------------------------------------------------------------------------- # * Termination Processing #-------------------------------------------------------------------------- def terminate super dispose_menu_background unless @bg.nil? @bg.bitmap.dispose @bg.dispose end @window_slotlist.dispose @window_slotdetail.dispose @help_window.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super if !@confirm_window.nil? @confirm_window.update if Input.trigger?(Input::C) if @confirm_window.index == 0 determine_savefile @confirm_window.dispose @confirm_window = nil else Sound.play_cancel @confirm_window.dispose @confirm_window = nil end elsif Input.trigger?(Input::B) Sound.play_cancel @confirm_window.dispose @confirm_window = nil end else update_menu_background @window_slotlist.update if @window_slotlist.index != @last_slot_index @last_slot_index = @window_slotlist.index @window_slotdetail.draw_data(@last_slot_index + 1) end @help_window.update update_savefile_selection end end #-------------------------------------------------------------------------- # * Update Save File Selection #-------------------------------------------------------------------------- def update_savefile_selection if Input.trigger?(Input::C) if @saving and @window_slotdetail.file_exist?(@last_slot_index + 1) Sound.play_decision text1 = SFC_Text_Confirm text2 = SFC_Text_Cancel @confirm_window = Window_Command.new(SFC_Window_Width,[text1,text2]) @confirm_window.x = ((544 - @confirm_window.width) / 2) + SFC_Window_X_Offset @confirm_window.y = ((416 - @confirm_window.height) / 2) + SFC_Window_Y_Offset else determine_savefile end elsif Input.trigger?(Input::B) Sound.play_cancel return_scene end end #-------------------------------------------------------------------------- # * Execute Save #-------------------------------------------------------------------------- def do_save file = File.open(make_filename(@last_slot_index), "wb") write_save_data(file) file.close $scene = Scene_Map.new end #-------------------------------------------------------------------------- # * Execute Load #-------------------------------------------------------------------------- def do_load file = File.open(make_filename(@last_slot_index), "rb") read_save_data(file) file.close $scene = Scene_Map.new RPG::BGM.fade(1500) Graphics.fadeout(60) Graphics.wait(40) @last_bgm.play @last_bgs.play end #-------------------------------------------------------------------------- # * Confirm Save File #-------------------------------------------------------------------------- def determine_savefile if @saving Sound.play_save do_save else if @window_slotdetail.file_exist?(@last_slot_index + 1) Sound.play_load do_load else Sound.play_buzzer return end end $game_temp.last_file_index = @last_slot_index end #-------------------------------------------------------------------------- # * Create Filename # file_index : save file index (0-3) #-------------------------------------------------------------------------- def make_filename(file_index) return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index + 1).to_s } end #-------------------------------------------------------------------------- # * Select File With Newest Timestamp #-------------------------------------------------------------------------- def latest_file_index latest_index = 0 latest_time = Time.at(0) (1..MAX_SAVE_SLOT).each do |i| file_name = make_filename(i - 1) next if !@window_slotdetail.file_exist?(i) file_time = File.mtime(file_name) if file_time > latest_time latest_time = file_time latest_index = i - 1 end end return latest_index end end
class Window_SlotList < Window_Command #-------------------------------------------------------------------------- # * Draw Item #-------------------------------------------------------------------------- def draw_item(index, enabled = true) rect = item_rect(index) rect.x += 4 rect.width -= 8 icon_index = 0 self.contents.clear_rect(rect) if $scene.window_slotdetail.file_exist?(index + 1) icon_index = Wora_NSS::SAVED_SLOT_ICON else icon_index = Wora_NSS::EMPTY_SLOT_ICON end if !icon_index.nil? rect.x -= 4 draw_icon(icon_index, rect.x, rect.y, enabled) # Draw Icon rect.x += 26 rect.width -= 20 end self.contents.clear_rect(rect) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(rect, @commands[index]) end def cursor_down(wrap = false) if @index < @item_max - 1 or wrap @index = (@index + 1) % @item_max end end
def cursor_up(wrap = false) if @index > 0 or wrap @index = (@index - 1 + @item_max) % @item_max end end end
class Window_NSS_SlotDetail < Window_Base include Wora_NSS def initialize super(160, 56, 384, 360) @data = [] @exist_list = [] @bitmap_list = {} @map_name = [] end def dispose dispose_tilemap super end
def draw_data(slot_id) contents.clear # 352, 328 dispose_tilemap load_save_data(slot_id) if @data[slot_id].nil? if @exist_list[slot_id] save_data = @data[slot_id] # DRAW SCREENSHOT~ contents.fill_rect(0,30,352,160, MAP_BORDER) create_tilemap(save_data['gamemap'].data, save_data['gamemap'].display_x, save_data['gamemap'].display_y) if DRAW_GOLD # DRAW GOLD gold_textsize = contents.text_size(save_data['gamepar'].gold).width goldt_textsize = contents.text_size(GOLD_TEXT).width contents.font.color = system_color contents.draw_text(0, 0, goldt_textsize, WLH, GOLD_TEXT) contents.draw_text(goldt_textsize + gold_textsize,0,200,WLH, Vocab::gold) contents.font.color = normal_color contents.draw_text(goldt_textsize, 0, gold_textsize, WLH, save_data['gamepar'].gold) end if DRAW_PLAYTIME # DRAW PLAYTIME hour = save_data['total_sec'] / 60 / 60 min = save_data['total_sec'] / 60 % 60 sec = save_data['total_sec'] % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) pt_textsize = contents.text_size(PLAYTIME_TEXT).width ts_textsize = contents.text_size(time_string).width contents.font.color = system_color contents.draw_text(contents.width - ts_textsize - pt_textsize, 0, pt_textsize, WLH, PLAYTIME_TEXT) contents.font.color = normal_color contents.draw_text(0, 0, contents.width, WLH, time_string, 2) end if DRAW_LOCATION # DRAW LOCATION lc_textsize = contents.text_size(LOCATION_TEXT).width mn_textsize = contents.text_size(save_data['map_name']).width contents.font.color = system_color contents.draw_text(0, 190, contents.width, WLH, LOCATION_TEXT) contents.font.color = normal_color contents.draw_text(lc_textsize, 190, contents.width, WLH, save_data['map_name']) end # DRAW FACE & Level & Name save_data['gamepar'].members.each_index do |i| actor = save_data['gameactor'][save_data['gamepar'].members[i].id] face_x_base = (i*80) + (i* face_y_base = 216 lvn_y_plus = 10 lv_textsize = contents.text_size(actor.level).width lvt_textsize = contents.text_size(LV_TEXT).width if DRAW_FACE # Draw Face contents.fill_rect(face_x_base, face_y_base, 84, 84, FACE_BORDER) draw_face(actor.face_name, actor.face_index, face_x_base + 2, face_y_base + 2, 80) end if DRAW_LEVEL # Draw Level contents.font.color = system_color contents.draw_text(face_x_base + 2 + 80 - lv_textsize - lvt_textsize, face_y_base + 2 + 80 - WLH + lvn_y_plus, lvt_textsize, WLH, LV_TEXT) contents.font.color = normal_color contents.draw_text(face_x_base + 2 + 80 - lv_textsize, face_y_base + 2 + 80 - WLH + lvn_y_plus, lv_textsize, WLH, actor.level) end if DRAW_NAME # Draw Name contents.draw_text(face_x_base, face_y_base + 2 + 80 + lvn_y_plus - 6, 84, WLH, actor.name, 1) end end else contents.draw_text(0,0, contents.width, contents.height - WLH, EMPTY_SLOT_TEXT, 1) end end def load_save_data(slot_id) file_name = make_filename(slot_id) if file_exist?(slot_id) or FileTest.exist?(file_name) @exist_list[slot_id] = true @data[slot_id] = {} # Start load data file = File.open(file_name, "r") @data[slot_id]['time'] = file.mtime @data[slot_id]['char'] = Marshal.load(file) @data[slot_id]['frame'] = Marshal.load(file) @data[slot_id]['last_bgm'] = Marshal.load(file) @data[slot_id]['last_bgs'] = Marshal.load(file) @data[slot_id]['gamesys'] = Marshal.load(file) @data[slot_id]['gamemes'] = Marshal.load(file) @data[slot_id]['gameswi'] = Marshal.load(file) @data[slot_id]['gamevar'] = Marshal.load(file) @data[slot_id]['gameselfvar'] = Marshal.load(file) @data[slot_id]['gameactor'] = Marshal.load(file) @data[slot_id]['gamepar'] = Marshal.load(file) @data[slot_id]['gametro'] = Marshal.load(file) @data[slot_id]['gamemap'] = Marshal.load(file) @data[slot_id]['total_sec'] = @data[slot_id]['frame'] / Graphics.frame_rate @data[slot_id]['map_name'] = get_mapname(@data[slot_id]['gamemap'].map_id) file.close else @exist_list[slot_id] = false @data[slot_id] = -1 end end
def make_filename(file_index) return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index).to_s } end def file_exist?(slot_id) return @exist_list[slot_id] if !@exist_list[slot_id].nil? @exist_list[slot_id] = FileTest.exist?(make_filename(slot_id)) return @exist_list[slot_id] end
def get_mapname(map_id) if @map_data.nil? @map_data = load_data("Data/MapInfos.rvdata") end if @map_name[map_id].nil? if MAP_NO_NAME_LIST.include?(map_id) @map_name[map_id] = MAP_NO_NAME_NAME else @map_name[map_id] = @map_data[map_id].name MAP_NAME_TEXT_SUB.each_index do |i| @map_name[map_id].sub!(MAP_NAME_TEXT_SUB[i], '') end end end return @map_name[map_id] end def create_tilemap(map_data, ox, oy) @viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348,156) @viewport.z = self.z @tilemap = Tilemap.new(@viewport) @tilemap.bitmaps[0] = Cache.system("TileA1") @tilemap.bitmaps[1] = Cache.system("TileA2") @tilemap.bitmaps[2] = Cache.system("TileA3") @tilemap.bitmaps[3] = Cache.system("TileA4") @tilemap.bitmaps[4] = Cache.system("TileA5") @tilemap.bitmaps[5] = Cache.system("TileB") @tilemap.bitmaps[6] = Cache.system("TileC") @tilemap.bitmaps[7] = Cache.system("TileD") @tilemap.bitmaps[8] = Cache.system("TileE") @tilemap.map_data = map_data @tilemap.ox = ox / 8 + 99 @tilemap.oy = oy / 8 + 90 end def dispose_tilemap unless @tilemap.nil? @tilemap.dispose @tilemap = nil end end end
class Scene_Title < Scene_Base def check_continue file_name = Wora_NSS::SAVE_PATH + Wora_NSS::SAVE_FILE_NAME.gsub(/\{ID\}/i) { '*' } @continue_enabled = (Dir.glob(file_name).size > 0) end end #====================================================================== # END - NEO SAVE SYSTEM by Woratana #====================================================================== |
Ils sont peut être pas compatible ? |
|  | | Zangther Garde du Roi

Nombre de messages: 1709 Capacités: moyen Avertissements: aucun Distinction: C 1 BAD Date d'inscription: 07/08/2009
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 19:31 | |
| Incompatible, la sauvegarde est modifiée, ce qui fait que ca pose problème. Essayez de mettre le script de Skillo après celui de la save pour voir. Ca pourrait marcher. |
|  | | Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 19:43 | |
| C'est déjà le cas... J'ai essayé de le mettre avant, après, toujours la même erreur |
|  | | Zangther Garde du Roi

Nombre de messages: 1709 Capacités: moyen Avertissements: aucun Distinction: C 1 BAD Date d'inscription: 07/08/2009
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 19:47 | |
| Bah faut voir avec Skillo s'il ne peut pas faire une modif de son script pour l'adapter à celui la. |
|  | | Yoshi-Dragon Apprenti Gladiateur


Nombre de messages: 696 Age: 16 Localisation: Dans Minecraft Capacités: bon Distinction: aucune Date d'inscription: 19/06/2009
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 20:04 | |
| Tien Zang' sa te rapelle rien ?  J'ai eu exactement le meme problème mais si le script de neo save deconne y'a toujours celui de berka qui est tout aussi bien |
|  | | Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 20:09 | |
| Celui de berka ? tu pourrais me donner le lien Yosh ? |
|  | | Yoshi-Dragon Apprenti Gladiateur


Nombre de messages: 696 Age: 16 Localisation: Dans Minecraft Capacités: bon Distinction: aucune Date d'inscription: 19/06/2009
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 20:12 | |
| |
|  | | Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Dim 20 Juin 2010 - 20:50 | |
| Super merci, je vais tester tout ça. |
|  | | Yakzawik Staffeux retraité


Nombre de messages: 1844 Age: 21 Localisation: Dans un trou perdu avec ma copine ! Capacités: bon Avertissements: 6 avertissements Distinction: Yakzawiki, l'encyclopédie libre !
[Elisa']
Force Zinzoline au fond de son coeur
Il est TROPDARKMECHAN
[Coco' ] Date d'inscription: 31/05/2008
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Mar 22 Juin 2010 - 11:25 | |
| |
|  | | Varkan Etudiant


Nombre de messages: 292 Capacités: bon Distinction: aucune Date d'inscription: 27/01/2010
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Mar 22 Juin 2010 - 13:47 | |
| Résolu, désolé de ne pas l'avoir fait. |
|  | | Skillo Staffeux retraité


Nombre de messages: 512 Age: 23 Localisation: Rennes Capacités: très bon Distinction: J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu] Date d'inscription: 19/01/2008
 | Sujet: Re: [Résolu]Script de quêtes, bug de sauvegarde ligne 644 Mer 23 Juin 2010 - 1:41 | |
| C'est résolu je déplace ^^. |
|  | | | | [Résolu]Script de quêtes, bug de sauvegarde ligne 644 | |
|
Sujets similaires |  |
|
| | Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
|
|