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 |
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 |