Sujet n°9933
Posté par Warp' le 28 Juin - 13:43 (2011)
Titre : End of file reached
Bonjour à vous.
J'ai récemment installé un script qui permet de courrir.
Dès que je veux sauvegarder (si l'interrupteur qui permet de courrir est à ON), ça plante.

J'aurais besoin d'aide,m car je ne sais pas vraiment quoi faire.
Merci à l'avance.
 PS : Ne me dites pas de supprimer la sauvegarde, c'est ce que je fais à chaque fois...

Code:


 
 ---------- Erreur de script : Scene_Title ----------
 ----- Type
 EOFError
 
 ----- Message
 End of file reached
 
 ----- Position dans Scene_Title
 Ligne 667
 
 ----- Backtrace
 Script : Scene_Title | Ligne : 667 | Méthode : in `load'
 Script : Scene_Title | Ligne : 667 | Méthode : in `read_preview'
 Script : Scene_Title | Ligne : 521 | Méthode : in `refresh_all'
 Script : Scene_Title | Ligne : 495 | Méthode : in `each'
 Script : Scene_Title | Ligne : 495 | Méthode : in `refresh_all'
 Script : Scene_Title | Ligne : 409 | Méthode : in `wachunga_autofontinstall_st_main'
 Script : Autofont_Install* | Ligne : 115 | Méthode : in `main'
 Script : Main | Ligne : 59



Posté par Angi-MK le 28 Juin - 14:40 (2011)
Sûrement une incompatibilité entre tes scripts ou simplement une faute dans ton code. Fais voir ton script si tu veux que je t'aide plus (non, je ne te le volerais pas >>)

Posté par Sphinx le 28 Juin - 15:50 (2011)
Je vais faire simple, et ce que je vais te dire va probablement te déplaire énormément : le problème vient bien de ta sauvegarde. Je vais cependant te faire plaisir en te disant que la solution ne peut pas se limiter à supprimer tes saves ^o^

C'est bien des saves que vient ton soucis, mais il dépasse de loin le cadre de chacun de tes fichiers Clin d'œil foireux

En gros : la structure écrite dans tes saves n'est pas la même que celle que le jeu essaie de lire ; et plus précisément, il cherche à en lire plus qu'il n'en a écrit. Peux tu me montrer tous nouveaux scripts installés depuis la dernière fois que tes sauvegardes marchaient correctement ?

Posté par Warp' le 28 Juin - 16:20 (2011)
J'ai trouvé le bug. C'est dû à un event commun.
Spoiler

Car quand je met cet event commun en Appel, ça ne bug plus...

Posté par Sphinx le 28 Juin - 16:25 (2011)
Euh, je ne vois absolument pas le rapport entre cet évent et tes sauvegardes foireuses :!

Posté par Warp' le 28 Juin - 16:28 (2011)
Moi non plus, mais en mettant cet event en appel au lieu de le mettre en Processus Parallèle, il n'y a plus de bugs...

C'est cette ligne qui bug dans le script Module (ligne 64) : Marshal.dump($game_map, file)

Posté par Angi-MK le 28 Juin - 19:08 (2011)
c'est juste une image qui faisait tout foirer?
Tu es sûr que ton problème est pas juste masqué quand tu n'appelle pas cet event?

Posté par Sphinx le 28 Juin - 22:14 (2011)
Je n'arrive pas à me convaincre que cet évent, qui se contente d'afficher une image, a un lien avec un bug au niveau des sauvegardes.

Posté par Warp' le 29 Juin - 00:33 (2011)
D'après moi, c'est la commande «input press» bla bla bla qui fait buguer

Posté par Nuri Yuri le 29 Juin - 07:53 (2011)
Peut être que Interpreter est sauvé dans $game_map ce qui fait que @button_souliers aussi et donc => No Marshal is defined for Bitmap.
Après la sauvegarde s'arrête, mais le fichier à déjà commencer à être sauvé donc => Moins de données sauvé que d'habitude => EOF avant la fin prévue => Chargement de la fin prévue impossible => Bug.

Posté par Sphinx le 29 Juin - 17:00 (2011)
Warp' a écrit:
D'après moi, c'est la commande «input press» bla bla bla qui fait buguer

Clin d'œil foireux Impossible, le module Input ne gère que les interactions avec certaines touches du clavier (et t'en as plein les scripts de menu, de maps, ...)

Yuri-岼 a écrit:
Peut être que Interpreter est sauvé dans $game_map ce qui fait que @button_souliers aussi et donc => No Marshal is defined for Bitmap.
Après la sauvegarde s'arrête, mais le fichier à déjà commencer à être sauvé donc => Moins de données sauvé que d'habitude => EOF avant la fin prévue => Chargement de la fin prévue impossible => Bug.

Ca ce tient, mais ca me semble bizarre :/ Ca peut coller, sauf que si tu fais un test du style :
Code:
sprite = Sprite.new
sprite.bitmap = RPG::Cache.picture("Picture.png")
save_data(sprite, "test.rxdata") rescue print "Erreur au moment de la sauvegarde du sprite"
sprite.dispose
sprite = load_data("test.rxdata") rescue print "Erreur au moment du chargement du sprite"

il me semble que c'est à la sauvegarde que ce bug se déclenche :/ (erreur ici rattrapée par rescue, ca ne devrait théoriquement pas fermer le jeu)

Donc pourquoi il n'en serait pas ainsi aussi pour les sauvegardes "classiques" ? :!

Posté par Nuri Yuri le 29 Juin - 18:03 (2011)
Warp' a écrit:
Dès que je veux sauvegarder (si l'interrupteur qui permet de courrir est à ON), ça plante.

J'ai interprété ce qu'il a dit.
Le système de sauvegarde de PSP fais ça :
Code:
file=File.open("Save.rxdata","wb") #Ouverture/Creation de "Save.rxdata"
    #=>file.pos=0
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end

    Marshal.dump(characters, file) #Sauvegarde des charas => Même plus utilisé sauf pour PSP 5G peut être et encore ....
    #file.pos=characters._dump.size => 2cris sur le disque <= File.size("Save.rxdata")==file.pos
    Marshal.dump(Graphics.frame_count, file) #Sauvegarde de l'avancement des frammes
   
    $game_system.save_count += 1
    $game_system.magic_number = $data_system.magic_number #Lol :ahde:
   
    Marshal.dump($game_system, file) #$game_system sauvé => file.pos+=$game_system._dump.size
    Marshal.dump($game_switches, file) #pareil
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file) #Apparition du bug actions stopées mais fichier déjà écris => Goto "EXC::error_handler(exception)" (  Graphics.transition(20);rescue Exception => exception )
    Marshal.dump($game_player, file)
    Marshal.dump($read_data, file)
    #Marshal.dump(Player.code, file)
    #Marshal.dump(Player.id, file)
    #Marshal.dump(Player.name, file)
    #Marshal.dump(Player.battler , file)
    Marshal.dump($pokemon_party, file)
    Marshal.dump($random_encounter, file)
    Marshal.dump($data_pokedex, file)
    Marshal.dump($data_storage, file)
    Marshal.dump($battle_var, file)
    Marshal.dump($existing_pokemon, file)
    Marshal.dump($string, file)
    Marshal.dump($config,file)
    Marshal.dump($pc_boxs,file)
    file.close

Code:
  # --------------------------------------------------------
  # error_handler
  # --------------------------------------------------------

module EXC #Renomé comme ça dans PSP v2.
  def self.error_handler(exception, file_arg = nil)
    if exception.type == SystemExit
      return
    end
   
    if exception.message == "" # Reset
      raise
    end
    script = $RGSS_SCRIPTS#load_data("Data/Scripts.rxdata") pas besoins de recharger ...
   
    source = script[exception.backtrace[0].split(":")[0].sub("Section", "").to_i][1]
    source_line = exception.backtrace[0].split(":")[1]
   
    if file_arg != nil
      file = file_arg
      source = file.path
    end
    if source == "Interpreter Bis" and source_line == "444"
      source = "évènement"
    end
     
    print("Erreur dans le script #{source}, inspectez le rapport Log.html.")
   
    logfile = File.open("Log.html", "w")
    # Entete
    logfile.write("<center><b><big>.:Erreur de script : #{source}:.</big><br>\n")
   
    # Type
    logfile.write("Type</b></center><br>\n")
    logfile.write(exception.type.to_s + "<br><br>\n\n")
   
    # Message
    logfile.write("<center><b>Message</b></center><br>\n")
    if exception.type == NoMethodError
      logfile.write("- ARGS - #{exception.args.inspect}<br>\n")
    end
    logfile.write(exception.message + "<br><br>\n\n")
   
    # Position en fichier
    if file_arg != nil
      logfile.write("<center><b>Position dans #{file.path}</b></center><br>\n")
      logfile.write("Ligne #{file.lineno}<br>\n")
      logfile.write(IO.readlines(file.path)[file.lineno-1] + "<br>\n")
    elsif source == "évènement"
      logfile.write("<center><b>Position de l'évènement</b></center><br>\n")
      logfile.write($running_script + "<br><br>\n\n")
    else
      logfile.write("<center><b>Position dans #{source}</b></center><br>\n")
      logfile.write("Ligne #{source_line}<br><br>\n\n")
    end
   
    # Backtrace
    logfile.write("<center><b>Backtrace</b></center><br>\n")   
    for trace in exception.backtrace
      location = trace.split(":")
      script_name = script[location[0].sub("Section", "").to_i][1]
      logfile.write("Script : #{script_name} | Ligne : #{location[1]}")
      if location[2] != nil
        logfile.write(" | Méthode : #{location[2]}")
      end
      logfile.write("<br>\n")
    end
    logfile.close
   
    raise #Affichae du bug => Fin de l'éxecution.
  end
end

Après, le RGSS Player va faire l'équivalent de ça :
Code:
Graphics._reset
file.close #Avec le pointeur de l'objet en question
exit(-1073741510)

Ce qui veux dire que c'est déjà trop tard et que le bitmap à tenté d'être sauvé.
Et comme ce qui à été sauvé n'allais pas plus loin que $game_map, lorsque le script arrivera à ça : $game_map = Marshal.load(file) dans la classe File ça sera un EOF et là ça va planter.
Comme aucune exception n'est prévue, le script bug... (contrairement à ton code où tu as plus ou moins prévue cette exception.)

Posté par Sphinx le 29 Juin - 18:20 (2011)
ah oui pardon ^^"

Alors ouaip ce que tu as évoqué comme cause possible de bug se tient ^o^