Sujet n°4367
Posté par Ewan34 le 6 Juil - 17:46 (2009)
Titre : [Script] Correcteur orthographique
Script correcteur :

Bonjour ! Ce script n’est pas de moi, il est de Zeus81 (sur Oniromancie), et a été testé sur PSP. Son but : corriger les messages.
Tout d’abord, créer un script :
Spoiler
#=================================
# Correcteur d'orthographe
# Script créé par Zeus81
#=================================

class Window_Scan2 < Window_Selectable


def initialize
super(0, 0, 640, 480)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Comic Sans MS"
@item_max = 5
@index = 0
refresh
end

def refresh
self.contents.clear
self.contents.fill_rect(0, 48, 608, 1, normal_color)
self.contents.fill_rect(0, 400, 608, 1, normal_color)
self.contents.fill_rect(304, 64, 1, 320, normal_color)
self.contents.fill_rect(404-50, 240, 200, 1, normal_color)

self.contents.font.size = 28
self.contents.font.color = knockout_color
self.contents.draw_text(0, 0, 608, 48, "Correcteur d'orthographe", 1)

self.contents.font.size = 20
self.contents.font.color = normal_color
self.contents.draw_text(0, 64, 300, 24, "Pas à pas", 1)
self.contents.draw_text(432-50, 128, 176, 32, "Evènements des maps")
self.contents.draw_text(432-50, 160, 176, 32, "Evènements communs")
self.contents.draw_text(432-50, 192, 176, 32, "Evènements des combats")
self.contents.draw_text(400-50, 256, 208, 32, "Analyser les messages", 1)
self.contents.draw_text(400-50, 288, 208, 32, "Corriger les messages", 1)

self.contents.font.size = 18
self.contents.draw_text(0, 88, 300, 24, "- Sélectionner les évènements à analyser")
self.contents.draw_text(0, 112, 300, 24, "- Faire analyser les messages")
self.contents.draw_text(0, 136, 300, 24, "- Corriger les fautes d'orthographe")
self.contents.draw_text(0, 160, 300, 24, " à l'aide d'un logiciel de traitement de texte")
self.contents.draw_text(0, 184, 300, 24, "- Enregistrer le fichier corrigé au format unicode")
self.contents.draw_text(0, 208, 300, 24, " 'UTF-8' en le renommant 'Messages OK.txt'.")
self.contents.draw_text(0, 232, 300, 24, " Pour enregistrer au bon format faire")
self.contents.draw_text(0, 256, 300, 24, " 'Enregistrer sous' 'Format *.txt' 'Codage UTF-8'")
self.contents.draw_text(0, 280, 300, 24, " (Ca y est même dans le bloc note)")
self.contents.draw_text(0, 304, 300, 24, "- Fermer RPG Maker puis lancer le jeu avec le 'Game.exe'")
self.contents.draw_text(0, 328, 300, 24, "- Faire corriger les messages")
self.contents.draw_text(0, 352, 300, 24, "- Et c'est fini")

draw_states
end

def draw_states
draw_state(408-50, 128, $scene.map_events_scan)
draw_state(408-50, 160, $scene.common_events_scan)
draw_state(408-50, 192, $scene.battle_events_scan)
end

def draw_state(x, y, state)
if state == true
color = Color.new(255, 0, 0)
else
color = Color.new(128, 128, 128)
end
self.contents.fill_rect(x+3, y+11, 10, 10, Color.new(29, 82, 129))
self.contents.fill_rect(x+4, y+12, 8, 8, Color.new(255, 255, 255))
self.contents.fill_rect(x+5, y+13, 6, 6, color)
end

def update_cursor_rect
y = @index*32 + 128
y += 32 if @index > 2
self.cursor_rect.set(400-50, y, 208, 32)
end

end


class Scene_Scan2


attr_reader:map_events_scan
attr_reader:common_events_scan
attr_reader:battle_events_scan


def initialize
GC.disable
Thread.new do
loop do
Graphics.update
sleep(1)
end
end
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@map_events_scan = true
@common_events_scan = true
@battle_events_scan = true
end


def main
@scan_window = Window_Scan2.new
Graphics.transition
loop do
update
Graphics.update
Input.update
end
end


def update
@scan_window.update
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @scan_window.index
when 0
@map_events_scan = !@map_events_scan
when 1
@common_events_scan = !@common_events_scan
when 2
@battle_events_scan = !@battle_events_scan
when 3
start_scan
when 4
start_correction
end
@scan_window.draw_states
end
end


def read_data
@data_common_events = load_data("Data/CommonEvents.rxdata")
@data_troops = load_data("Data/Troops.rxdata")
@data_maps = []
for map_id in 1..999
filename = sprintf("Data/Map%03d.rxdata", map_id)
next if FileTest.exist?(filename) == false
@data_maps[map_id] = load_data(filename)
end
end


def save_corrected_data
for map_id in 1..999
next if @data_maps[map_id] == nil
save_data(@data_maps[map_id], sprintf("Data/Map%03d.rxdata", map_id))
end
save_data(@data_common_events, "Data/CommonEvents.rxdata")
save_data(@data_troops, "Data/Troops.rxdata")
end


def start_scan
read_data
@messages = []
@messages[0] = "\357\273\277Ce fichier a été enregistré avec un codage Unicode UTF-8.\n"
@messages[1] = "Si vous voyez des caractères bizarres à la place des accents, c'est que votre logiciel ne lit pas ce codage.\n"
@messages[2] = "Pour convertir le fichier en codage standard ouvrez le avec le bloc note et faites \"Enregistrer sous\" avec un codage ANSI\n"
@messages[3] = "Le fichier corrigé final devra être enregistré avec un codage Unicode UTF-8.\n"
@messages[4] = "Ce fichier devra impérativement s'appeler \"Messages OK.txt\".\n"
@messages[5] = "Ne modifiez pas le code au début de chaque ligne.\n"
@messages[6] = "Ne rajoutez aucune ligne.\n"
@messages[7] = "Ne supprimez pas ces lignes.\n\n"
check_maps if @map_events_scan == true
check_common_events if @common_events_scan == true
check_battle_events if @battle_events_scan == true
file = File.open("Messages.txt", "w")
file.write(@messages.to_s)
file.close
print(" L'analyse est terminé !\n",
" Le résultat se trouve dans le fichier\n",
"\"Messages.txt\" dans le dossier de votre jeu.")
end

def check_maps
for map_id in 1..999
next if @data_maps[map_id] == nil
for event_id in @data_maps[map_id].events.keys.sort
for page_id in 0... @data_maps[map_id].events[event_id].pages.size
for list_id in 0... @data_maps[map_id].events[event_id].pages[page_id].list.size
name = sprintf("%01d/%03d/%03d/%03d/%03d/", 0, map_id, event_id, page_id, list_id)
check_event_command(@data_maps[map_id].events[event_id].pages[page_id].list[list_id], name)
end
end
end
end
end

def check_common_events
for event_id in 1... @data_common_events.size
for list_id in 0... @data_common_events[event_id].list.size
name = sprintf("%01d/%03d/%03d/%03d/%03d/", 1, 0, event_id, 0, list_id)
check_event_command(@data_common_events[event_id].list[list_id], name)
end
end
end

def check_battle_events
for event_id in 1... @data_troops.size
for page_id in 0...@data_troops[event_id].pages.size
for list_id in 0...@data_troops[event_id].pages[page_id].list.size
name = sprintf("%01d/%03d/%03d/%03d/%03d/", 2, 0, event_id, page_id, list_id)
check_event_command(@data_troops[event_id].pages[page_id].list[list_id], name)
end
end
end
end

def check_event_command(event, name)
if event.code == 101 or event.code == 401
@messages.push(name+"0 : "+event.parameters[0]+"\n")
elsif event.code == 102
for i in 0...event.parameters[0].size
@messages.push(name+(i+1).to_s+" : "+event.parameters[0][i]+"\n")
end
end
end


def start_correction
if FileTest.exist?("Messages OK.txt") == false
print("Le fichier \"Messages OK.txt\" est introuvable !\n",
"La correction n'a donc pas pu s'effectuer !!!")
return
end
if $DEBUG == true
print("Pour corriger votre projet doit être fermé !")
return
end
file = File.open("Messages OK.txt", "r")
@messages = file.readlines
file.close
if @messages[0][0, 3] != "\357\273\277"
print("Le fichier \"Messages OK.txt\" n'a pas été enregistré en codage Unicode \"UTF-8\".")
return
end
read_data
if correction_scan == false
print("La correction automatique a été annulé !")
return
else
save_corrected_data
print("La correction automatique est terminée !")
end
end

def correction_scan
for i in 8...@messages.size
next if @messages[i][0, 1] == "\n"
type = @messages[i][0, 1].to_i
map_id = @messages[i][2, 3].to_i
event_id = @messages[i][6, 3].to_i
page_id = @messages[i][10, 3].to_i
j = 3
6.times do
break if @messages[i][14+j, 1] == " "
j += 1
end
list_id = @messages[i][14, j].to_i
message_type = @messages[i][13+j, 1].to_i
erreur = false
erreur |= (type > 2)
erreur |= (@messages[i][1, 1] != "/")
erreur |= (@messages[i][5, 1] != "/")
erreur |= (@messages[i][9, 1] != "/")
erreur |= (@messages[i][13, 1] != "/")
erreur |= (@messages[i][12+j, 1] != "/")
erreur |= (@messages[i][14+j, 3] != " : ")
if erreur == true
print("Le code d'une ligne a été modifié.")
return false
end
@messages[i][0, 17+j] = ""
@messages[i][-1, 1] = ""
case type
when 0
event = @data_maps[map_id].events[event_id].pages[page_id].list[list_id]
when 1
event = @data_common_events[event_id].list[list_id]
when 2
event = @data_troops[event_id].pages[page_id].list[list_id]
end
if message_type == 0 and (event.code == 101 or event.code == 401)
event.parameters[0] = @messages[i]
elsif message_type > 0 and message_type < 5 and event.code == 102
event.parameters[0][message_type-1] = @messages[i]
else
print("Une ligne a été rajouté.")
return false
end
end
return true
end


end

Comment ça marche ???

Il y a 2 méthode : la manuel ou l’automatique. Je n’expliquerais que l’automatique.
Dans le jeu, créez un évent :
Insérer un script : $scene = Scene_Scan2.new
In-game, parlez a l’évent. Une fenêtre apparaît. Choisissez le type d’évent a analyser (de map, commun…) et choisissez Analyser les messages.
Quand la fenêtre de confirmation est apparu, fermez le jeu et allez dans son dossier. Ouvrez Messages.txt avec Word puis cliquez sur l’icône abc. Corrigez, puis enregistrez le fichier avec le nom « Messages OK.txt » (il doit toujours être codée avec Unicode-8 ). Cliquez sur game.exe puis parlez a l’évent. Choisissez Corriger les messages, et quand la fenêtre de confirmation est la, c’est bon !!!!
Une fois que vous avez corrigez tout vos messages, vous pouvez bien entendu supprimer les fichiers et l’évent.
Seul problème: ça ne couvre pas les "afficher_texte" mais peut-être qu'en bidouillant le script...
Voilà, bonsoir!!! Imbécile heureux

Posté par Newtiteuf le 6 Juil - 18:15 (2009)
... Très bon script mais trop long d'utilisation !

Posté par Ewan34 le 6 Juil - 18:18 (2009)
Oui je reconnais. Je signalerais a Zeus81, qu'il essaye un truc plus court...
Enfin, c'est surtout utile avant une démo ou une version complète, c'est pas un truc à faire tout les 2 messages Petit saligaud mal élevé ...

EDIT:
Aten: Ben, moi a la correction sous Word, quand je veux pas de suppression je fait juste "ignorer" :D .
Je l'ai depuis plusieurs jours, je n'ai pas de problème. A vérifier, donc.

Posté par Aten974 le 6 Juil - 18:20 (2009)
Il me semble aussi qu'il pose certains problèmes, je ne souvient plus desquels, la suppression des nom propres inventés je crois :?

Posté par Mini' le 6 Juil - 18:39 (2009)
Oh My God. Je ne savais pas que ce script était compatible avec PSP. =)
Ca va en aider plus d'un ( pas moi pour ma part, j'en ai pas besoin, en tout cas. ^o^") !