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