eventtext2csv

5 Replies • 544 Views

Hello,

j'ai découvert il y a quelques jours cette commande que je trouve pratique. Seulement cette dernière créer des fichiers vides, et si on oublie de supprimé le code fichier dans un message, il ne ce mets pas à jours. Alors j'ai chercher le script et j'ai apporté quelques modifications dessus (avec mon faible niveau). Je doute qu'il soit optimisé donc n'hésiter pas à me le dire :)

Quelques précisions:
  • Il ne créer plus de fichier vide
  • Je supprime le fichier CSV pour le garder "propre"
  • J'exclue des maps par argument ou par fichier texte
  • empêche la suppression d'un code fichier différent de la map (permet d'utiliser un fichier fourni par psdk dans ces textes)

Deux petites questions:
  • Je n'ai pas trouvé à quoi correspondait le code commande 401, si quelqu'un peux me renseigné la dessus ? (je l'ai garder dans le doute, mais je ne l'ai pas gérer)
  • J'ouvre mon fichier avec fopen, mais je ne le ferme pas vue que je return directement lorsqu'il match, comment je peux faire ?

Si vous avez des conseils à données à un débutant je suis preneur :)

module EventText2CSV
    module_function
 
    # Start the convertion
    def run
      @offset = (ENV['TEXT_EVENT_OFFSET'] || 1000).to_i
      print("Enter the langs you want to use [#{GameData::Text::Available_Langs.join(',')}]: ")
      langs = STDIN.gets.chomp.split(',').collect(&:strip)
      @langs = langs.empty? ? GameData::Text::Available_Langs : langs
      Dir['Data/Map*.rxdata'].each do |filename|
        map_id = filename.gsub(%r{^Data/Map}i, '').to_i
 
        #J'exclue toutes les map's de  la démo car elle m'intéresse pas + celle ajouter en paramètre à la commande
        next if map_id <= 25 || exclude_map?(map_id.to_s)
 
        process_map(filename, @offset + map_id)
      end
    end
 
    # Process a Map conversion
    # @param filename [String] filename of the map to process
    # @param csv_id [Integer] ID of the CSV file to process
    def process_map(filename, csv_id)
      csv_indexes, csv_header, csv_rows = load_csv(csv_id)
      map = load_data(filename)
      processing_message = nil
      processing_message_command = nil
      map.events.each_value do |event|
        event.pages.each do |page|
          page.list.each do |command|
            processing_message, processing_message_command = process_message(
              command, processing_message, processing_message_command, csv_id, csv_indexes, csv_rows
            )
            process_choice(command, csv_id, csv_indexes, csv_rows) if command.code == 102
          end
        end
      end
      #ON EMPECHE LA CREATION D UN FICHIER VIDE
      if !csv_rows.empty?
        save_csv(csv_id, csv_header, csv_rows)
        save_data(map, filename)
      end
    end
 
      # Function that process a message
      def process_message(command, processing_message, processing_message_command, csv_id, csv_indexes, csv_rows)
        if command.code != 401 && processing_message_command
          #ON SUPPRIME LES CODE DES FICHIERS PRECEDENT POUR LES RENSEIGNE DE NOUVEAU EN SUPPRIMANT LES ESPACES AU DEBUT ET EN FIN DE FICHIER
          processing_message_command.parameters[0] = "#{csv_id}, #{csv_rows.size} #{processing_message_command.parameters[0].gsub(/^([0-9]+),( |)([0-9]+)/, "").strip}"
          push_text_to_csv(csv_indexes, csv_rows, processing_message)
          processing_message = processing_message_command = nil
        end
        if command.code == 101
          text = command.parameters[0].dup.force_encoding(Encoding::UTF_8).gsub(/^#{csv_id},( |)([0-9]+)/, "").strip
          return text, command unless text.match?(/^([0-9]+),( |)([0-9]+)/)
        elsif command.code == 401 && processing_message_command
          processing_message << "\\nl" << command.parameters[0].dup.force_encoding(Encoding::UTF_8).gsub(/^([0-9]+),( |)([0-9]+)/, "").strip
        end
        return processing_message, processing_message_command
      end
 
        # Function that process a choice
    def process_choice(command, csv_id, csv_indexes, csv_rows)
      command.parameters[0].map! do |choice|
        text = choice.dup.force_encoding(Encoding::UTF_8).gsub(/^#{csv_id},( |)([0-9]+)/, "").strip
        next(text) if text.match?(/^([0-9]+),( |)([0-9]+)/)
        push_text_to_csv(csv_indexes, csv_rows, text)
        next("#{csv_id}, #{csv_rows.size - 1} #{text}")
      end
    end
 
    #Eclusion des maps par fichier ou par argument lors de la commande
    def exclude_map?(map_id)
 
      return true if ARGV.include?(map_id)
 
      File.open('Data/Text/Dialogs/excludes.txt', 'r') do |f|
        f.each_line do |line|
          return true if line.gsub(/\n$/, "") == map_id
        end
      end
 
      return false
    end
 
    # Load a CSV file
    #JE SUPPRIMER DIRECTEMENT LE FICHIER POUR GARDE LE FICHIER CSV PROPRE
    # @param csv_id [Integer]
    # @return [Array<Array>]
    def load_csv(csv_id)
      filename = csv_filename(csv_id)
      File.delete(filename) if File.exist?(filename)
 
      return [(0...@langs.size).to_a, @langs, []]
    end

  end

Aerun

Modérateur

Bonjour !

Effectivement j'étais tombé sur quelques soucis, super que quelqu'un ait pu identifier la cause !

Pour la commande 401, c'est la ligne suivante du message.

De manière générales quelques conseils :
  • Si tu écris if !something, utilise unless something à la place.
  • Les commentaires sont à ajouter strictement en anglais.

Si tu connais Git, n'hésite pas à créer une Merge Request ici https://gitlab.com/pokemonsdk/pokemonsdk/-/merge_requests, depuis ton fork, pour qu'on puisse commenter plus simplement :)
On verra également plus facilement les modifications !
Ça marche je vais suivre le tuto et j ai modifier le script (oublier de vérifier si le fichier d exclusion existait donc crash lors de la commande)

Nuri Yuri

HostMaster

Aerun a fait un commentaire sur la MR, pense à le prendre en compte comme ça on peut merge :)
ln(yo) = <3
Normalement c'est bon. La MR ce fais tout seul lors de l'update (première fois que j'utilise git pour collaborer...) ?

Cependant j'ai remarquer un problème sur le script, si on lance la commande avec un certains nombre de langue en paramètre. La prochaine commande detruiras le CSV dans le sens ou toutes les traductions seront à refaire...

Comme c'est un cas que je n'avais pas prévu, je ne sais pas si il est dérangeant. Quoi qu'il en soit, j'ai corrigé le tir en intégrant un système de sauvegarde des langues non renseigné ce qui permet de modifier une seul langue sans que les autres ne soit modifié.

A vous de voir si vous voulez cette dernière ou pas :)

Nuri Yuri

HostMaster

Oui la MR se met à jour si tu fais un nouveau commit sur la branche, d'ailleurs y'a un léger bug à vérifier ;)

Il faudrait que rajouter une langue duplique la première colonne dans les colonnes manquantes, si on retire un langue, aucun changement.
ln(yo) = <3

There was an error while thanking
Thanking...