public static void saveAll(Personnage saver) {
    PrintWriter _out = null;
    if (saver != null) _out = saver.get_compte().getGameThread().get_out();

    set_state((short) 2);

    try {
      GameServer.addToLog("Lancement de la sauvegarde du Monde...");
      Ancestra.isSaving = true;
      SQLManager.commitTransacts();
      SQLManager.TIMER(false); // ArrĂȘte le timer d'enregistrement SQL

      Thread.sleep(10000);

      GameServer.addToLog("Sauvegarde des personnages...");
      for (Personnage perso : Persos.values()) {
        if (!perso.isOnline()) continue;
        Thread.sleep(100); // 0.1 sec. pour 1 objets
        SQLManager.SAVE_PERSONNAGE(perso, true); // sauvegarde des persos et de leurs items
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des guildes...");
      for (Guild guilde : Guildes.values()) {
        Thread.sleep(100); // 0.1 sec. pour 1 guilde
        SQLManager.UPDATE_GUILD(guilde);
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des percepteurs...");
      for (Percepteur perco : Percepteurs.values()) {
        if (perco.get_inFight() > 0) continue;
        Thread.sleep(100); // 0.1 sec. pour 1 percepteur
        SQLManager.UPDATE_PERCO(perco);
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des maisons...");
      for (House house : Houses.values()) {
        if (house.get_owner_id() > 0) {
          Thread.sleep(100); // 0.1 sec. pour 1 maison
          SQLManager.UPDATE_HOUSE(house);
        }
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des coffres...");
      for (Trunk t : Trunks.values()) {
        if (t.get_owner_id() > 0) {
          Thread.sleep(100); // 0.1 sec. pour 1 coffre
          SQLManager.UPDATE_TRUNK(t);
        }
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des enclos...");
      for (Carte.MountPark mp : MountPark.values()) {
        if (mp.get_owner() > 0 || mp.get_owner() == -1) {
          Thread.sleep(100); // 0.1 sec. pour 1 enclo
          SQLManager.UPDATE_MOUNTPARK(mp);
        }
      }

      Thread.sleep(2500);

      GameServer.addToLog("Sauvegarde des Hdvs...");
      ArrayList<HdvEntry> toSave = new ArrayList<HdvEntry>();
      for (HDV curHdv : Hdvs.values()) {
        toSave.addAll(curHdv.getAllEntry());
      }
      SQLManager.SAVE_HDVS_ITEMS(toSave);

      Thread.sleep(10000);

      GameServer.addToLog("Sauvegarde effectuee !");

      set_state((short) 1);
      // TODO : Rafraichir

    } catch (ConcurrentModificationException e) {
      if (saveTry < 10) {
        GameServer.addToLog("Nouvelle tentative de sauvegarde");
        if (saver != null && _out != null)
          SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(
              _out, "Erreur. Nouvelle tentative de sauvegarde");
        saveTry++;
        saveAll(saver);
      } else {
        set_state((short) 1);
        // TODO : Rafraichir
        String mess = "Echec de la sauvegarde apres " + saveTry + " tentatives";
        if (saver != null && _out != null)
          SocketManager.GAME_SEND_CONSOLE_MESSAGE_PACKET(_out, mess);
        GameServer.addToLog(mess);
      }

    } catch (Exception e) {
      GameServer.addToLog("Erreur lors de la sauvegarde : " + e.getMessage());
      e.printStackTrace();
    } finally {
      SQLManager.commitTransacts();
      SQLManager.TIMER(true); // Redémarre le timer d'enregistrement SQL
      Ancestra.isSaving = false;
      saveTry = 1;
    }
  }
 public static void addTrunk(Trunk trunk) {
   Trunks.put(trunk.get_id(), trunk);
 }