Sujet n°3696
Posté par Pαlвσlѕку le 1 Mai - 21:32 (2009)
Titre : Script EDM.
Bonsoir tout le monde.

En me surfant sur le Internet, j'ai trouvé ce formidable script que Krosk a créé.
Malheureusement, il ne veut pas fonctionner avec PSP.

Je voudrais savoir si quelqu'un pourrait le rendre compatible.

Au faite, c'est quoi ce script ?

Le script est un Extracteur de Messages (d'où l'abréviation EDM).
Il sert à pouvoir extraire les dialogues du jeu, pour pouvoir corriger les fautes plus rapidement.

Le script

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

  $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].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].code == 401
                        page.list[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

Il a pas mal de lecture au début du script. Cela explique à quoi il sert plus en détail et comment il fonctionne.

Je précise que j'utilise PSP4G+.

Merci de votre compréhension.

---> Palbolsky <---

Posté par PiVa le 1 Mai - 21:43 (2009)
Ici : http://rpgmakerxp-factory.net/forum/index.php?topic=13257.0 il y a un logiciel qui le fait aussi.

A part ça, je peux pas t'aider.

Posté par Sphinx le 1 Mai - 22:48 (2009)
>> bon, j'ai trouvé, palbol Clin d'œil foireux

1)

Dans le script Loading, cherche :
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
end

(ca sera pas dur à trouver, c'est au début du script)

puis ajoute
Code:
splash.dispose

juste avant le end (de ce bout de code)

2)
Dans le script EDM, cherche :
Code:
EDM_ACTIVATE = true
EDM_MAP = 11

if EDM_ACTIVATE

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


et ajoute :
Code:
Graphics.transition(5)

juste avant :
Code:
$fontface = "Arial"


Ca marchera tout seul. Par contre, et je le dis aussi pour toi puisque tu es sous 4G+, seule la commande "Afficher un message..." est gérée par ce script. Je vais me charger de faire en sorte que les autres commandes disponibles dans 4G+ ('afficher_texte' et 'afficher_message') soient également lues par ce script Imbécile heureux
En l'état, et avec ces deux ptites manips ci dessus, il est fonctionnel pour les messages de la commande d'évent.

Posté par Pαlвσlѕку le 2 Mai - 06:37 (2009)
Merci Sphinx, ça fonctionne.
Ne te fait pas de soucis pour moi. Je n'utilise pas la commande afficher_texte, sauf si je dois afficher le contenu de variables dans un texte.

Pichu65 >> Je ne savais pas que ça existait pour RMXP. Clin d'œil foireux

Posté par Sphinx le 2 Mai - 09:10 (2009)
>> Clin d'œil foireux dans les évents, j'ai utilisé des commandes afficher_message Clin d'œil foireux

pour qu'il soit utile dans 4G+, faut que je réussisse à l'adapter aux commandes afficher_texte & afficher_message sans effacer les autres commandes ^o^"

Posté par PiVa le 2 Mai - 10:43 (2009)
Moi j'utilise 0.7 c'est parfait :mrgreen:

Posté par Bilkev le 2 Mai - 18:25 (2009)
Je n'ai point compris l'utilisation de ce script :mrgreen: .

Posté par Pαlвσlѕку le 2 Mai - 18:43 (2009)
Le script sert à extraire les dialogues (par la commande "Afficher un message...") du jeu. Ce script est très utile pour pouvoir avoir un accès rapide à tout les textes, et ainsi de pouvoir avoir une correction orthographiqe plus efficace, ou même encore un traduction plus rapide.

Bien sûr, le script sait extraire, mais aussi introduire les textes modifiés dans le jeu.

Posté par Bilkev le 2 Mai - 18:45 (2009)
C'est cool je pense que je vais l'utiliser pour ma porchaine démo ^^.

Posté par Pαlвσlѕку le 2 Mai - 18:59 (2009)
En faisant un petit effort, tu comprends mieux ^^.

J'espère que Sphinx va réussir à introduire ses commandes dans le script.

Posté par Bilkev le 2 Mai - 19:00 (2009)
Moi aussi étant donner que je suis passer à la 4G+

Posté par Pαlвσlѕку le 2 Mai - 19:01 (2009)
Si vous avez des questions, n'hésitez pas à les poster.

Posté par Lén le 2 Mai - 19:19 (2009)
Je ne pense pas qu'il marche si tu utilise les fonctions afficher_texte et afficher_message, mais si tu utilise la commande d'event pour afficher un message ça devrait marcher.

Posté par PiVa le 2 Mai - 19:58 (2009)
Lèn est un magneto rouillé  :lol:

Superbe ce script, comme ça Palbolsky pourra corriger mes fautes :mrgreen:

Posté par Pαlвσlѕку le 2 Mai - 20:06 (2009)
Lén a écrit:
Je ne pense pas qu'il marche si tu utilise les fonctions afficher_texte et afficher_message, mais si tu utilise la commande d'event pour afficher un message ça devrait marcher.

On l'a déjà dit Lén. Clin d'œil foireux

Posté par Lén le 2 Mai - 20:07 (2009)
Je ne pense pas qu'il marche si...
oups ça recommence ^^

Bon ben bonne chance.

Posté par Pαlвσlѕку le 2 Mai - 20:09 (2009)
Je souhaite surtout bonne chance à Sphinx, car il y a que lui qui sait comment fonctionne ses commandes. J'espère qu'il va réussir.

Posté par PiVa le 2 Mai - 21:03 (2009)
Bah il a pas déjà dit que ça marche oo'