Sujet n°4500
Posté par Angi-MK le 17 Juil - 02:55 (2009)
Titre : Extracteur de Messages de Krosk
Alors, pour commencer, je connais le script ./4367-Script-Correcteur-orthographique… mais chez moi il est incompatible, a vous de voir.
Je connais aussi ce topic ./3696.html?q=edm
Bon, j'ai pensé que de le mettre à la vue de tout le monde avec les modifications déjà effectué serez le bienvenue, surtout si tout le monde test l'autre, passe 12heures a corriger ses fautes et au moment de les remettre dans son projet, se prend un bug...



En clair, avec ce script, vous récupérez tous les textes des maps de votre choix dans un dossier ou chaque map possède sont .txt
Il vous suffit de le corriger et d'enregistrer ce texte.
Relancez votre projet et lancez le programme.
Tout est mieux expliqué dans le début du script :

Spoiler

Code:


# -----------------------------------------------------
#   EDM - Extracteur de Messages - RmXP
#   Par Krosk - v1.01
# -----------------------------------------------------
# Ce script à placer au dessus de Main vous permet d'extraire
# le texte de vos messages, dans vos events, sous forme de
# fichier texte .txt (codage Unicode/UTF-        8)        , éditable par tout 
# logiciel de traitement de texte, et qui permet de 
# faciliter la correction orthographique entre autre.
#
# Quelques précautions s'imposent tout de même, car ce 
# n'est pas un outil magique ! Ce script est sensible car
# il modifie directement les données de votre jeu !
# Il faut faire attention à ne pas l'utiliser n'importe comment, 
# sous peine de voir vos textes décalés ou supprimés.
#
# -------------------------------------
#   A propos de l'encodage de texte
# -------------------------------------
# Les fichiers textes créés par EDM sont codés sous le format
# UTF-8, le seul format compatible à ma connaissance entre
# les chaînes de caractère sous RMXP et nos accents français.
# Lorsque vous éditez ces fichiers, pensez s'il vous plaît
# à conserver cet encodage, sous peine de perdre vos accents,
# lorsque vous importez vos textes modifiés.
#
# Sous Bloc Note : L'enregistrement devrait se faire sous le format
#                  UTF-8 automatiquement. Vous pouvez quand même vous
#                  en assurer en faisant "Fichier", "Enregistrer sous", 
#                  et en sélectionnant l'encodage UTF-8.
#
# Sous OpenOffice Writer : Après édition, l'enregistrement doit être manuel, 
#                          en faisant "File", "Save As", et dans le champ 
#                         "Type", assurez vous de prendre "Text encoded (.txt)".
#
# Sous les autres éditeurs : Enregistrez sous le format Unicode ou UTF-8.
#                            N'enregistrez pas sous le format ANSI.
#
# -------------------------------------
#   Comment utiliser ce script
# -------------------------------------
# Collez ce script EDM au dessus de main.
#
# EDM ACTIVATE : réglez à true pour lancer EDM. Vous aurez
#                une interface au démarrage de votre projet.
# EDM_MAP : Numéro ID de la map à réécrire.
#
# - Extraire le texte du jeu
#   Le texte du jeu sera extrait dans le dossier EDMString du répertoire
#   de votre jeu.
#   Chaque carte qui contient du texte aura son propre fichier texte
#   associé, avec dedans l'ensemble des évènements messages, dans un
#   certain ordre.
#   EDM fermera automatiquement le projet à la fin de la tâche.
#
# - Ecrire le texte dans le jeu
#   Le texte de vos évènements messages sera réécrit à partir
#   des fichiers textes extraits.
#   
#   Pour plus de contrôle : 
#   Si vous spécifiez EDM_MAP avec un numéro ID, seule cette carte sera corrigée.
#   Si vous spécifiez EDM_MAP avec une liste d'ID, les maps respectives seront 
#           corrigées.
#   Si vous écrivez EDM_MAP = 0, toutes les maps seront corrigées.
#   Si vous écrivez EDM_MAP = -1, la fonction d'écriture sera désactivée
#           pour éviter les écritures non intentionnelles.   
#
#   EDM fermera automatiquement le projet en test à la fin de la tâche.
#   Il vous faudra fermer votre projet sous l'éditeur RMXP pour observer 
#   les changements.
#
# - Créer un Backup
#   Vous pouvez sauvegarder l'état de vos messages.
#   Les textes seront sauvegardés dans EDMBackup.
#   C'est exactement la même fonction que l'extraction de texte.
#
# - Restaurer à partir d'un Backup
#   En cas d'erreur de manipulation, vous pouvez charger le contenu du
#   Backup, pour restaurer l'état de vos messages.
#   C'est la même fonction que "Ecrire le texte dans le jeu", excepté
#   qu'il prend le Backup comme source.
#
# Une fois que vous avez fini, vous pouvez désactiver EDM en écrivant false
# devant EDM_ACTIVATE.
#
# Le script n'est pas intrusif, et ne modifiera pas vos autres scripts.
# N'ayez pas peur en voyant ce script réécrire vos variables $fontface, ...
# il ne les réécrit que lorsque vous utilisez EDM.
#
# --------------------------------------
#   Comment éditer vos fichiers textes
# --------------------------------------
# EDM extrait les lignes de message de vos évènements et les organise
# par fichier qui porte le nom MapXXX.txt, dans le dossier EDMString/.
#
# Chaque fichier texte est une succession de paragraphes, chaque paragraphe est
# un évènement "message".
#
# Les paragraphes sont de cette forme :
#     ____________________#EDMTAG#START#2#1
#     Bienvenue à l'auberge.
#     Voulez-vous prendre une chambre ?
#
# Une ligne d'entête pour signaler le début d'un paragraphe, suivie
# de quelques lignes de texte qui correspondent aux lignes de message
# dans l'éditeur d'évènement RMXP.
#
#
# Pour éditer le texte, il vous suffit de l'ouvrir, de corriger les lignes de 
# texte et d'enregistrer le fichier (voir - A propos de l'encodage de texte -).

# Vous pouvez ajouter ou supprimer des lignes de texte au sein d'un paragraphe.
# Par exemple :
#
#     ____________________#EDMTAG#START#2#1
#     Bienvenue à l'auberge.
#     Voulez-vous prendre une chambre ?
#     ____________________#EDMTAG#START#2#1
#     Nous avons plusieurs tarifs.
#     C'est pour combien de personnes ?
#
# Après modification :
#
#     ____________________#EDMTAG#START#2#1
#     Bienvenue à l'auberge.
#     Nous avons actuellement des chambres de libre.
#     Voulez-vous prendre une chambre ?
#     ____________________#EDMTAG#START#2#1
#     C'est pour combien de personnes ?
#
# EDM se charge de recréer correctement vos évènements de message.
#
# *****
# ATTENTION ! Une précaution est à prendre quand même, veuillez éviter d'ajouter
# plus de 4 lignes à un paragraphe. Je ne les prend pas en compte.
# Si vous voulez créer un paragraphe supplémentaire, faites le dans l'éditeur
# d'évènement RMXP et re-exportez vos textes.
#
# *****
# ATTENTION ! EDM n'est pas capable d'insérer un nouvel évènement message, 
# et de créer un nouveau paragraphe ! Il n'est capable que de modifier
# les paragraphes existants et les redimensionner !
#
# Il s'agit avant tout d'un outil pour faciliter la correction orthographique
# et éventuellement la traduction, mais en aucun cas il ne remplace l'éditeur
# de texte !
#
# --------------------------------------------------------------------------

EDM_ACTIVATE = true
EDM_MAP = -1

if EDM_ACTIVATE

Graphics.transition(5)  
  $fontface = "Arial"
  $fontsize = 22
  $data_system        = load_data("Data/System.rxdata")
  $game_system = Game_System.new

  loop do
    edt_read = false
    edt_write = false
    backup = false
    dummy= Window_Command.new(440, ["EDM - Extracteur de Messages - Par Krosk"])
    dummy.x = 100
    dummy.y = 112
    dummy.active = false
    dummy.index = -1
    window = Window_Command.new(320, ["Fermer EDM", 
      "Extraire le texte du jeu", "Insérer le texte après extraction",
      "Créer un Backup", "Restaurer à partir d'un Backup"])
    window.x = 160
    window.y = 176
    loop do
      Graphics.update
      Input.update
      window.update
      if Input.trigger?(Input::B)
        exit
        return
      end
      if Input.trigger?(Input::C)
        case window.index
        when 0
          exit
        when 1
          edt_read = true
          backup = false
        when 2
          edt_write = true
          backup = false
        when 3
          edt_read = true
          backup = true
        when 4
          edt_write = true
          backup = true
        end
        break
      end
    end
    window.dispose
    dummy.dispose
    
    if edt_read
      if not backup
        dummy = Window_Command.new(440, [
          "Extraire le texte du jeu dans ./EDMString/"])
      else
        dummy = Window_Command.new(440, [
          "Création d'une sauvegarde dans ./EDMBackup/"])
      end
      dummy.x = 100
      dummy.y = 112
      dummy.active = false
      dummy.index = -1
      window = Window_Command.new(320, ["Annuler", 
        "Confirmer l'extraction du texte"])
      window.x = 160
      window.y = 176
      window.index = 1 if backup
      utf_tag = ["EF", "BB", "BF"].pack("H2H2H2")
      
      loop do
        Graphics.update
        Input.update
        window.update
        if Input.trigger?(Input::C) or backup
          case window.index
          when 0
            break
          when 1
            map_infos = load_data("Data/MapInfos.rxdata")
            for map_id in map_infos.keys
              map_data = load_data(sprintf("Data/Map%03d.rxdata", map_id))
              dir_string = backup ? "EDMBackup" : "EDMString" 
              string = sprintf(dir_string + "/Map%03d.txt", map_id)
              Graphics.update
              file = nil
              for event in map_data.events
                for i in 0...event[1].pages.size
                  for command in event[1].pages[i][/i].list
                    if command.code == 101
                      if file == nil
                        if not File.exist?(dir_string)
                          Dir.mkdir(dir_string)
                        end
                        file = File.open(string, "w")
                        file.write(utf_tag + string+"\n")
                      end
                      file.write(
                        "____________________#EDMTAG#START##{event[0]}##{i}\n")
                      file.write(command.parameters[0]+"\n")
                    end
                    if command.code == 401
                      file.write(command.parameters[0]+"\n")
                    end
                  end
                end
              end
              file.close if file != nil
              file = nil
            end
            
            dummy2 = Window_Command.new(500, ["Extraction terminée."])
            dummy2.x = 70
            dummy2.y = 272
            dummy2.active = false
            dummy2.index = -1
            loop do
              Graphics.update
              Input.update
              if Input.trigger?(Input::C)
                exit
              end
            end
            
            
            exit
          end
        end
        if Input.trigger?(Input::B)
          break
        end
      end
      window.dispose
      dummy.dispose
    end
    
    if edt_write
      if not backup
        case EDM_MAP
        when 0
          dummy = Window_Command.new(400, [
            "Ecrire les textes de toutes les cartes."])
          window = Window_Command.new(320, ["Annuler", 
            "Confirmer l'écriture du texte"])
        when -1
          dummy = Window_Command.new(400, ["Désactivé. Modifiez EDM_MAP."])
          window = Window_Command.new(320, ["Retour"])
        else
          if EDM_MAP.type == Array
            dummy = Window_Command.new(400, [
              "Ecrire les textes des cartes d'ID:#{EDM_MAP.inspect}."])
          else
            dummy = Window_Command.new(400, [
              "Ecrire les textes de la carte ID:#{EDM_MAP}."])
          end
          window = Window_Command.new(320, ["Annuler", 
            "Confirmer l'écriture du texte"])
        end
      else
        dummy = Window_Command.new(400, ["Restauration du Backup."])
        window = Window_Command.new(320, ["Restauration...", "... en cours"])
      end
      dummy.x = 120
      dummy.y = 112
      dummy.active = false
      dummy.index = -1
      
      window.x = 160
      window.y = 176
      window.index = 1 if backup
      
      loop do
        Graphics.update
        Input.update
        window.update
        if Input.trigger?(Input::C) or backup
          case window.index
          when 0
            break
          when 1
            map_infos = load_data("Data/MapInfos.rxdata")
            for map_id in map_infos.keys
              map_string = sprintf("Data/Map%03d.rxdata", map_id)
              map_data = load_data(map_string)
              string = sprintf("EDMString/Map%03d.txt", map_id)
              string = sprintf("EDMBackup/Map%03d.txt", map_id) if backup
              if not File.exist?(string)
                next
              end
              
              if (EDM_MAP.type == Fixnum and map_id == EDM_MAP) or 
                  (EDM_MAP.type == Array and EDM_MAP.include?(map_id)) or
                  (EDM_MAP.type == Fixnum and EDM_MAP == 0) or backup
                file = File.open(string, "r")
                # Suppression des tags
                file.readline
                # Buffer
                buffer = []
                ib = -1
                file.readlines.each { |line| 
                    if line.include?("EDMTAG")
                      ib += 1
                      buffer[ib] = []
                    else
                      buffer[ib].push(line.chomp)
                    end
                }
                ib101 = -1
                for event in map_data.events
                  for page in event[1].pages
                    for i in 0...page.list.size
                      # Nettoyage préliminaire des paragraphes
                      if page.list[i][/i].code == 401
                        page.list[i][/i] = nil
                      end
                    end
                    page.list.compact!
                    for command in page.list
                      # Début de message
                      if command.code == 101
                        ib101 += 1
                        command.parameters[0] = buffer[ib101].shift
                        # Construction du reste du paragraphe
                        while not buffer[ib101].empty?
                          page.list.insert(page.list.index(command) + 1, 
                            RPG::EventCommand.new(401, 0, [buffer[ib101].pop]))
                        end
                      end
                    end
                  end
                end
                file.close
                
                map_file = File.open(map_string, "wb")
                Marshal.dump(map_data, map_file)
                map_file.close
              end
            end
            
            dummy2 = Window_Command.new(500, [
              "Écriture terminée. Fermez votre projet sous RMXP."])
            dummy2.x = 70
            dummy2.y = 272
            dummy2.active = false
            dummy2.index = -1
            loop do
              Graphics.update
              Input.update
              if Input.trigger?(Input::C)
                exit
              end
            end
            
          end
        end
        if Input.trigger?(Input::B)
          break
        end
      end
      window.dispose
      dummy.dispose
    end
    
  end
end 








Ensuite, remplacez le contenue du script Loading (le premier de la liste) par celui-ci
 
Spoiler
Code:

#==============================================================================
# ■ Loading
# Pokemon Script Project - Krosk 
# 28/08/08
#-----------------------------------------------------------------------------
# Ecran de chargement
#-----------------------------------------------------------------------------
# Ne pas y toucher... ou avec modération, ce sont mes crédits
#-----------------------------------------------------------------------------

begin
  Graphics.freeze
  splash = Sprite.new
  splash.bitmap = RPG::Cache.title("pkssplash.png")
  Graphics.transition(5)
  Graphics.freeze
  splash.dispose  
end

























#==============================================================================
# ■ Cimetière
# Pokemon Script Project - Krosk 
# 28/08/08
#-----------------------------------------------------------------------------
# N'y touchez pas
#-----------------------------------------------------------------------------
if false
  data_pokemon = Array.new(494)
  
  for i in 1..493
    data_pokemon[i] = []
    data_pokemon[i][1] = i
    data_pokemon[i][2] = []
    data_pokemon[i][4] = []
    data_pokemon[i][5] = []
    data_pokemon[i][7] = []
    data_pokemon[i][9] = []
    data_pokemon[i][9][4] = []
  end
  
  begin
    # data_pokemon[id][0]
    i = 0
    file = File.open("database/noms.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      data_pokemon[i][0] = line.sub("\r\n", "")
      }
    file.close
    
    # data_pokemon[id][2][jd]
    j = 0
    for filename in ["base_hp.txt", "base_atk.txt", "base_dfe.txt", "base_spd.txt", "base_ats.txt", "base_dfs.txt"]
      i = 0
      file = File.open("database/#{filename}", "rb")
      file.readchar
      file.readchar
      file.readchar
      file.each {|line| 
        i += 1
        data_pokemon[i][2][j] = line.sub("\r\n", "").to_i
        }
      file.close
      j += 1
    end
    
    # data_pokemon[id][3]
    i = 0
    file = File.open("database/skill_list.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub('\r\n', "")
      data_pokemon[i][3] = eval("[#{clean_line}]")
      }
    file.close
    
    # data_pokemon[id][4]
    i = 0
    file = File.open("database/tech_list.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub('\r\n', "")
      for j in 0..clean_line.length/2-1
        tech = clean_line[2*j..2*j+1]
        if tech.include?("H")
          tech.sub!("H", "")
          data_pokemon[i][4].push( eval("[#{tech.to_i}]") )
        else
          data_pokemon[i][4].push( tech.to_i ) if tech.to_i != 0
        end
      end
      }
    file.close
    
    # data_pokemon[id][5][0]
    i = 0
    file = File.open("database/exp.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub('\r\n', "")
      data_pokemon[i][5][0] = clean_line.to_i
      }
    file.close
    
    # data_pokemon[id][5][1+]
    i = 0
    file = File.open("database/evolve.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub('\r\n', "")
      array = clean_line.split(';')
      for evo in array
        data_pokemon[i][5].push(eval("[#{evo}]"))
      end
      }
    file.close
    
    # data_pokemon[id][6]
    i = 0
    file = File.open("database/type.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub('\r\n', "")
      data_pokemon[i][6] = eval("[#{clean_line}]")
      }
    file.close
    
    # data_pokemon[id][7][jd]
    j = 0
    for filename in ["rarete.txt", "taux_femelle.txt", "loyaute.txt", 
        "capa_spe.txt", "breed_group.txt", "breed_move.txt", "hatch_step.txt"]
      i = 0
      file = File.open("database/#{filename}", "rb")
      file.readchar
      file.readchar
      file.readchar
      file.each {|line| 
        i += 1
        clean_line = line.sub("\r\n", "")
        next if i >= 494
        clean_line.upcase! if j == 3
        if j == 3
          data_pokemon[i][7][3] = clean_line.split(',')
        elsif j == 4 or j == 5
          data_pokemon[i][7][j] = eval("[#{clean_line}].uniq")
        else
          data_pokemon[i][7][j] = clean_line.to_i
        end
        }
      file.close
      j += 1
    end
    
    # data_pokemon[id][8]
    i = 0
    file = File.open("database/battle_list.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub("\r\n", "")
      data_pokemon[i][8] = eval("[#{clean_line}]")
      }
    file.close
    
    # data_pokemon[id][8][6]
    i = 0
    file = File.open("database/base_exp.txt", "rb")
    file.readchar
    file.readchar
    file.readchar
    file.each {|line| 
      i += 1
      clean_line = line.sub("\r\n", "")
      data_pokemon[i][8].push(clean_line.to_i)
      }
    file.close
    
    # data_pokemon[id][9][jd]
    j = 0
    for filename in ["description.txt", "espece.txt", "taille.txt", "poids.txt"]
      i = 0
      file = File.open("database/#{filename}", "rb")
      file.readchar
      file.readchar
      file.readchar
      file.each {|line| 
        i += 1
        if j == 2 or j == 3
          clean_line = line.sub("\r\n", "")
          data_pokemon[i][9][j] = clean_line.sub(/ \(.*\)/, "")
        else
          data_pokemon[i][9][j] = line.sub("\r\n", "")
        end
        }
      file.close
      j += 1
    end
      
    $data_pokemon = data_pokemon
  rescue Exception => exception
    EXC::error_handler(exception, file)
  end
    
  file = File.open("data.txt", "w")
  for i in 1..493
    file.write("$data_pokemon[#{i}] = #{$data_pokemon[i].inspect}\n")
  end
  file.close
end 






Tout est assez clair dans le premier script donc je ne vois pas ce que je pourrais dire d'autre... En tout cas, si vous avez des questions, posez-les, c'est bien Krosk qui l'a fait donc si vous avez des questions...