❤ 0 Auteur : Trebor777 (Guillaume777)
Logiciel : RPG Maker XP
Nombre de scripts : 1
Objectif du script:Au lieu de mettre chaque message dans chaque évènement, j'appelle juste une commande qui se réfère à un tableau, tableau rempli avec le contenu d'un fichier texte. Ce texte est créé dans le fichier Data.
Bien sûr, il y a une petite syntaxe à respecter, quand vous remplissez le fichier texte. J'ai mis un exemple à la fin.
Je me suis dit que ce script pourrait être utile,dans le cas, par exemple, d'une traduction, ou quelque chose d'autre. Chaque dialogue serait plus facile à trouver et à traduire.
INSTRUCTIONS:
Ce script a pour objectif de fonctionner avec le Dubealex's AMS, mais il pourrait fonctionner avec un nouveau projet, mais vous aurez juste 4 commandes au lieu... De beaucoup !
Alors allons-y !
Version 1.5
Quoi de neuf?
- Un seul script... Plus de méthode redéfinie dans window_message refresh method
- Entièrement compatible avec le Dubealex's AMS
- Aide commentée
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
| class Interpreter
#--------------------------------------------------
alias trebor_dial_command_101 command_101
def command_101
bool= trebor_dial_command_101
$game_temp.message_text.gsub!(/\\[Dd]ial_pnj_ID\[([0-9]+)\]/) do
$data_pnj[$1.to_i] != nil ? $game_temp.message_text=load_dial($data_pnj[$1.to_i]) : ""
end
$game_temp.message_text.gsub!(/\\[Dd]ial_story_ID\[([0-9]+)\]/) do
$data_story[$1.to_i] != nil ? $game_temp.message_text=load_dial($data_story[$1.to_i]) : ""
end
if bool !=nil
return bool
end
end
#---------------------------------------------------
def load_dial(str) #str le message à transmettre type string
@str=str.dup # Enregistrement de la chaine originale
@old_str=str.dup
@command_array=[]
@command_size=[]
@command_trie=[]
@com=[]
@str=clear_com(@str)
last_str=@old_str
if str.size>=40
nb = 40
nb_ligne=(str.size/nb).ceil
if nb_ligne>=4
last_str="Message trop long"
else
for i in 1..nb_ligne
deb_int=(nb*(i-1))
fin_int=(nb*i)
temp=@str[deb_int..fin_int]
id_sp=temp.rindex(" ")
if id_sp!=nil
id=id_sp+(deb_int)
else
id =fin_int
end
str_g=@str[0..id]
str_d=@str[(id+1)..(@str.size-1)]
str_d==nil ? str_d="" : str_d=str_d
@str=str_g+"\n"+str_d
end
for i in 0..@com.size-1
deb_com=@com[i][1]
nb_nl=@str[0..deb_com].count("\n")
deb_com>1? str_fg=@str[0..deb_com+nb_nl-1] : str_fg=""
deb_com>0? str_fd=@str[deb_com+nb_nl..@str.size] : str_fd=@str
str_fg==nil ? str_fg="" : str_fg=str_fg
str_fd==nil ? str_fd="" : str_fd=str_fd
@str=str_fg+@com[i][0]+str_fd
end
last_str=@str
end
end
return last_str # renvoie la chaine non nettoyée, découpée ou non
end
#---------------------------------
def clear_com(str)
begin
last_text = str.clone
str.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
end until str == last_text
str.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
str.gsub!(/\\[Mm]\[([0-9]+)\]/) do
$data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
end
str.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do
$data_items[$1.to_i] != nil ? $data_items[$1.to_i].price : ""
end
str.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do
$data_classes[$data_actors[$1.to_i].class_id] != nil ? $data_classes[$data_actors[$1.to_i].class_id].name : ""
end
str.gsub!(/\\[Mm]ap/) do
$game_map.name != nil ? $game_map.name : ""
end
count_command(/\\[%]/,str)
count_command(/\\[Ff]\[(.*?)\]/,str)
count_command(/\\[Nn]ame\[(.*?)\]/,str)
count_command(/\\[Pp]\[([-1,0-9]+)\]/,str)
count_command(Regexp.new('/\\[Cc]\[([0123456789ABCDEF#]+)\]/'),str)
count_command(/\\[Gg]/,str)
count_command(/\\[Ss]\[([0-9]+)\]/,str)
count_command(/\\[Aa]\[(.*?)\]/,str)
count_command(/\\[Cc]\[([0-9]+)\]/,str)
count_command(/\\[Tt]\[(.*?)\]/,str)
count_command(/\\[.]/,str)
count_command(/\\[|]/,str)
count_command(/\\[>]/,str)
count_command(/\\[<]/,str)
count_command(/\\[!]/,str)
count_command(/\\[~]/,str)
count_command(/\\[Ee]\[([0-9]+)\]/,str)
count_command(/\\[Ii]/,str)
count_command(/\\[Oo]\[([0-9]+)\]/,str)
count_command(/\\[Hh]\[([0-9]+)\]/,str)
count_command(/\\[Bb]\[([0-9]+)\]/,str)
count_command(/\\[Rr]\[(.*?)\]/,str)
@command_trie=@command_array.sort {|x,y| x <=> y }
for i in 0..@command_trie.size-1
deb_com=@command_trie[i]
j=@command_size[@command_array.index(deb_com)]
fin_com=deb_com+j-1
str_com=@old_str[deb_com..fin_com]
if str_com[-1,1]!="]"
str_com.chop!
end
@com.push([str_com,deb_com])
end
return str
end
#-----------------------------------------------------
def count_command(reg,str)
it = 0
for i in 0..@old_str.size
if @old_str.index(reg,it) !=nil
id=@old_str.index(reg,it)
it=id+1
@command_array.push(id)
last_str_size=str.size
str.sub!(reg, "")
diff=last_str_size-str.size
@command_size.push(diff)
end
end
end
#-----------------------------------------------------
end
#==========================================================================
class Scene_Title
alias dial_main main
def main
dial_main
#$data_pnj =create_data("text/pnj.txt")
$data_story = create_data("text/story.txt")
end
#--------------------------------------------------------------------------
def create_data(filename)
data =nil
if FileTest.exist?(filename)
filestr= IO.readlines(filename)
data=[]
it = 0
for line in filestr
phrase = line.split('\244')
if phrase.length>1
data.push(phrase[1].chomp)
it+=1
else
if phrase[0][0,1] !='#' and it>=1
data[it-1]+=phrase[0].chomp
else
next
end
end
end
end
return data
end
#--------------------------------------------------------------------------
end |
Maintenant, les contraintes du fichier texte:
- 2 fichiers à créer dans le dossier Data: PNJ.txt & story.txt
- Vous DEVEZ sauvegarder en format UTF-8 si vous utilisez les accents ou les caractères spéciaux, sinon RPG Maker ne les affichera pas.
- Un message pour une ligne.
- Chaque message doit commencer par: Idvalue\244
Le premier commence avec cette valeur d'ID : 0.
- Bien sûr, les ID continuent en ordre croissant ^^...
La commande de message dans l'évènement :
- Pour un PNJ : (les dialogues pas très importants)
Dial_pnj_ID[n°id]
- Pour un dialogue important:
Dial_story_ID[n°id]
Un exemple de fichier texte : (extrait de mon story.txt)
Citation: O\244Bonjour message IdO.
1\244\N[1]Message plus long d'id 1, de type normal qu'on pourrait croiser dans n'importe quel jeu, et qui s'avère en effet très long, n'est-ce pas ? oui c'est vrai qu'il est long! Même très très très long...
2\244prout
3\244 Valeur de la variable 0022 :\V[22]
4\244 Or : \G
5\244 Nom de la map : \map |
Mis à jour le 22 novembre 2020.
|