1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| #===================================================================
# RECHERCHE TEXTUELLE version 1.0
# Script par Crystal, 9/11/12
#-------------------------------------------------------------------
# Permet d'effectuer une recherche à travers les événements et leurs
# commandes de script ou un fichier texte pour une chaîne de
# caractères donnée.
#-------------------------------------------------------------------
# MODE D'EMPLOI:
#
# 1 - Insérer dans un événement ou un script de votre choix une
# commande script: t = Text_Searcher.new
#
# 2 - Utiliser une des fonctions suivantes:
#
# t.search_game(texte, scripts) : recherche dans les événements.
#
# - texte: le texte entre guillemets "" que vous cherchez
# - scripts: true pour une recherche exclusive aux commandes de
# script, false uniquement pour les messages.
#
# Le résultat est un rapport détaillé dans un fichier qui est
# crée dans le dossier du jeu.
#
# t.search_file(texte, fichier) : recherche dans un fichier
#
# - texte: le texte entre guillemets "" que vous cherchez
# - fichier: le nom du fichier entre guillemets ""
#
# Le résultat renvoyé est true ou false.
#
# t.raw_search(texte, scripts) : recherche dans les événements.
#
# La fonction s'utilise comme search_game, mais renvoie true ou
# false. Peut être utile pour les recherches très lourdes.
#
#===================================================================
class Text_Searcher
def initialize
map_infos = load_data("Data/MapInfos.rxdata")
com_events = load_data("Data/CommonEvents.rxdata")
@texts, @scripts = [], []
for k in map_infos.keys
for e in (map = load_data(sprintf("Data/Map%03d.rxdata", k))).events.keys.sort
for p in 0...map.events[e].pages.size
for c in map.events[e].pages[p].list
case c.code
when 101, 401; @texts.push([c.parameters[0], k, e, p, false])
when 355, 655; @scripts.push([c.parameters[0], k, e, p, false])
when 111
@scripts.push([c.parameters[1], k, e, p, false]) if c.parameters[0] == 12
end
end
end
end
end
for e in 1...com_events.size
for c in com_events[e].list
case c.code
when 101, 401; @texts.push([c.parameters[0], nil, e, nil, true])
when 355, 655; @scripts.push([c.parameters[0], nil, e, nil, true])
when 111
@scripts.push([c.parameters[1], nil, e, nil, true]) if c.parameters[0] == 12
end
end
end
end
def raw_search(text, script = false)
!!(script ? @scripts : @texts).find {|i| i.first.include?(text) }
end
def search_file(text, filename)
File.open(filename, "r") {|f| result = f.read.include?(text) }; result
end
def search_game(text, script = false, write_it = true)
m_dat = (script ? @scripts : @texts).find_all {|i| i.first.include?(text) }
write_data(text, m_dat, script) if write_it; m_dat
end
def write_data(text, m_dat, script = false)
File.open("#{script ? "script" : "text"}_search_#{text}.txt", "w") {|f|
f.write("Résultat de la recherche pour #{text}:\n\n\n")
for d in m_dat
f.write(d[0] + (d[4] ? " :: Événement commun: #{d[2]}\n\n" : " :: " +
"Map: #{d[1]} :: Événement : #{d[2]} :: Page: #{d[3] + 1}\n\n")
end
}
p "Recherche de texte terminée."
end
end |