|
contrebasse@0
|
1 --[[ TODO :
|
|
contrebasse@0
|
2 - Changer la couleur pour toutes les fenêtres de quête (possible ?)
|
|
contrebasse@0
|
3 - Chercher le texte pour les couleurs à partir de la somme des longueurs de texte précédents (incrémental), compliqué !
|
|
contrebasse@0
|
4 - Modifier les variables statiques directement dans la fonction Paragraphes() (Bof...)
|
|
contrebasse@0
|
5 - Traduction
|
|
contrebasse@0
|
6 - Clic droit pour phrase perso
|
|
contrebasse@0
|
7 - Shif clic droit pour emote
|
|
contrebasse@0
|
8 - griser le choix des couleurs si pas de coloration
|
|
contrebasse@0
|
9 - reset des options (virer les couleurs foireuses...)
|
|
contrebasse@0
|
10 --]]
|
|
contrebasse@0
|
11
|
|
contrebasse@0
|
12 --********************************************************
|
|
contrebasse@0
|
13 --
|
|
contrebasse@0
|
14 -- Déclarations de variables
|
|
contrebasse@0
|
15 --
|
|
contrebasse@0
|
16 --********************************************************
|
|
contrebasse@0
|
17 --
|
|
contrebasse@0
|
18 -- Variables statiques
|
|
contrebasse@0
|
19 --
|
|
contrebasse@0
|
20 local target_name = "" -- "" vide ou nom du npc
|
|
contrebasse@0
|
21 local text_table = {} -- table du texte à dire
|
|
contrebasse@0
|
22 local text_full = ''
|
|
contrebasse@0
|
23 local i_phrase = 1 -- indice de la prochaine phrase à dire
|
|
contrebasse@0
|
24 --local char_dits = 0 -- nombre de caractères prononcés, pour améliorer la recherche lors de la coloration
|
|
contrebasse@0
|
25 local max_phrase = 0 -- indice du nombre de phrases à dire
|
|
contrebasse@0
|
26 local gossip_button, quest_button, current_button
|
|
contrebasse@0
|
27 local TextFrame
|
|
contrebasse@0
|
28
|
|
contrebasse@0
|
29 --
|
|
contrebasse@0
|
30 -- Fonctions locales pour accélérer l'exécution
|
|
contrebasse@0
|
31 --
|
|
contrebasse@0
|
32 local _G = _G
|
|
contrebasse@0
|
33 local GetUnitName = GetUnitName
|
|
contrebasse@0
|
34 local GetQuestText = GetQuestText
|
|
contrebasse@0
|
35 local GetProgressText = GetProgressText
|
|
contrebasse@0
|
36 local GetGossipText = GetGossipText
|
|
contrebasse@0
|
37 local GetRewardText = GetRewardText
|
|
contrebasse@0
|
38 local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
|
|
contrebasse@0
|
39 local UIErrorsFrame,UIErrorsFrame_OnEvent = UIErrorsFrame,UIErrorsFrame_OnEvent
|
|
contrebasse@0
|
40 local SendChatMessage = SendChatMessage
|
|
contrebasse@0
|
41 local GameTooltip = GameTooltip
|
|
contrebasse@0
|
42 local CreateFrame = CreateFrame
|
|
contrebasse@0
|
43 local IsShiftKeyDown,IsControlKeyDown = IsShiftKeyDown,IsControlKeyDown
|
|
contrebasse@0
|
44 local GossipFrame,QuestFrame = GossipFrame,QuestFrame
|
|
contrebasse@0
|
45 local GossipGreetingText = GossipGreetingText
|
|
contrebasse@0
|
46 local QuestProgressText = QuestProgressText
|
|
contrebasse@0
|
47 local GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor;
|
|
contrebasse@0
|
48
|
|
contrebasse@0
|
49 local tonumber = tonumber;
|
|
contrebasse@0
|
50 local string = string;
|
|
contrebasse@0
|
51 local string_format = string.format;
|
|
contrebasse@0
|
52
|
|
contrebasse@0
|
53 local LibStub = LibStub;
|
|
contrebasse@0
|
54
|
|
contrebasse@0
|
55 --********************************************************
|
|
contrebasse@0
|
56 --
|
|
contrebasse@0
|
57 -- Fonctions de debug et warning
|
|
contrebasse@0
|
58 --
|
|
contrebasse@0
|
59 --********************************************************
|
|
contrebasse@0
|
60 --
|
|
contrebasse@0
|
61 -- fonction qui affiche des messages de debug
|
|
contrebasse@0
|
62 --
|
|
contrebasse@0
|
63 local function DEBUG(msg)
|
|
contrebasse@0
|
64 --if true then return end
|
|
contrebasse@0
|
65 if not msg then msg="nil" end
|
|
contrebasse@0
|
66 DEFAULT_CHAT_FRAME:AddMessage("(DEBUG) " .. msg);
|
|
contrebasse@0
|
67 end
|
|
contrebasse@0
|
68
|
|
contrebasse@0
|
69 local function Warn(msg)
|
|
contrebasse@0
|
70 if not msg then return end
|
|
contrebasse@0
|
71 --DEFAULT_CHAT_FRAME:AddMessage("(SayIt) "..msg);
|
|
contrebasse@0
|
72 local event = "UI_INFO_MESSAGE"
|
|
contrebasse@0
|
73 UIErrorsFrame_OnEvent(UIErrorsFrame, event, msg)
|
|
contrebasse@0
|
74 end
|
|
contrebasse@0
|
75
|
|
contrebasse@0
|
76
|
|
contrebasse@0
|
77 --********************************************************
|
|
contrebasse@0
|
78 --
|
|
contrebasse@0
|
79 -- Analyse de texte
|
|
contrebasse@0
|
80 --
|
|
contrebasse@0
|
81 --********************************************************
|
|
contrebasse@0
|
82 --
|
|
contrebasse@0
|
83 -- Function qui sépare les paragraphes/phrases d'un texte en éléments de tableau
|
|
contrebasse@0
|
84 --
|
|
contrebasse@0
|
85 local function Paragraphes(txt)
|
|
contrebasse@0
|
86 -- Si pas de texte, pas la peine de continuer
|
|
contrebasse@0
|
87 if not txt or txt=="" then
|
|
contrebasse@0
|
88 return {}, 0
|
|
contrebasse@0
|
89 end
|
|
contrebasse@0
|
90
|
|
contrebasse@0
|
91 local text = {}
|
|
contrebasse@0
|
92 local p = 1
|
|
contrebasse@0
|
93 for paragraph in txt:gmatch("[^\r\n]+") do
|
|
contrebasse@0
|
94 -- On enlève au texte le double '|', le nom du Npc le " dit : " et un caractère en plus (fin de string ?)
|
|
contrebasse@0
|
95
|
|
contrebasse@0
|
96 -- Est-ce une émote ?
|
|
contrebasse@0
|
97 local e = (paragraph:sub(1,1)=="<" and paragraph:sub(-1)==">")
|
|
contrebasse@0
|
98 local t,Nchar_supp
|
|
contrebasse@0
|
99 if e then
|
|
contrebasse@0
|
100 Nchar_supp = 2
|
|
contrebasse@0
|
101 t = paragraph:sub(2,-2) -- on vire les < >
|
|
contrebasse@0
|
102 else
|
|
contrebasse@0
|
103 Nchar_supp = 9+target_name:len()
|
|
contrebasse@0
|
104 t = paragraph
|
|
contrebasse@0
|
105 end
|
|
contrebasse@0
|
106
|
|
contrebasse@0
|
107 -- Coupe par phrase
|
|
contrebasse@0
|
108 -- [.!?]+ : au moins un signe de ponctuation, permet de gérer ... !? ?! par exemple
|
|
contrebasse@0
|
109 -- [^%s][^%s]%s* : le dernier mot de la phrase dois avoir au moins 2 caractères, pour éviter de couper "M. Dupont" (pas parfait mais mieux que rien)
|
|
contrebasse@0
|
110 -- on transforme chaque phrase en paragraphe, et on repasse le test précédent
|
|
contrebasse@0
|
111 for tt in t:gsub('([^%s][^%s]%s*[%.%!%?]+)(%s+)(%u)','%1\n%3'):gmatch('[^\r\n]+') do --for tt in t:gmatch('(.-[.!?]+)%s*') do
|
|
contrebasse@0
|
112 text[p] = { -- Le texte est coupé au cas où...
|
|
contrebasse@0
|
113 ["texte"] = tt:sub(1,254-Nchar_supp), -- ça devrait être 255, mais ça ne passe pas...
|
|
contrebasse@0
|
114 ["emote"] = e }
|
|
contrebasse@0
|
115 p = p+1
|
|
contrebasse@0
|
116 end
|
|
contrebasse@0
|
117 end
|
|
contrebasse@0
|
118
|
|
contrebasse@0
|
119 return text, p-1
|
|
contrebasse@0
|
120 end
|
|
contrebasse@0
|
121
|
|
contrebasse@0
|
122 --
|
|
contrebasse@0
|
123 -- Coloration du texte de la fenêtre
|
|
contrebasse@0
|
124 --
|
|
contrebasse@0
|
125 local cDit = "|cff".."606060" -- gris clair
|
|
contrebasse@0
|
126 local cJusteDit = "|cff".."7f0000" -- gris foncé
|
|
contrebasse@0
|
127 local cADire = "|cff".."00007f" -- jaunasse
|
|
contrebasse@0
|
128 local cNonDit = "|cff".."202020" -- noir
|
|
contrebasse@0
|
129
|
|
contrebasse@0
|
130 local function SpecialChar(txt)
|
|
contrebasse@0
|
131 return txt and txt:gsub('([%(%)%.%+%-%*%?%[%^%$%]])','%%%1') or ''
|
|
contrebasse@0
|
132 end
|
|
contrebasse@0
|
133 local function ColorieTexte(txt)
|
|
contrebasse@0
|
134 --print('______')
|
|
contrebasse@0
|
135 local tJusteDit,tADire
|
|
contrebasse@0
|
136 if i_phrase > 1 then
|
|
contrebasse@0
|
137 tJusteDit = text_table[i_phrase-1].texte
|
|
contrebasse@0
|
138 end
|
|
contrebasse@0
|
139 if i_phrase <= max_phrase then
|
|
contrebasse@0
|
140 tADire = text_table[i_phrase].texte
|
|
contrebasse@0
|
141 end
|
|
contrebasse@0
|
142
|
|
contrebasse@0
|
143 --print(txt)
|
|
contrebasse@0
|
144 --print('^(.*)('..SpecialChar(tJusteDit)..')(.-)('..SpecialChar(tADire)..')(.*)$')
|
|
contrebasse@0
|
145 local _,_,tDit,tJusteDit2,space,tADire2,tNonDit = txt:find('^(.-)('..SpecialChar(tJusteDit)..')(.-)('..SpecialChar(tADire)..')(.*)$') --,char_dits)
|
|
contrebasse@0
|
146
|
|
contrebasse@0
|
147 --print('tDit:'..(tDit or ''))
|
|
contrebasse@0
|
148 --print('tJusteDit2:'..(tJusteDit2 or ''))
|
|
contrebasse@0
|
149 --print('tADire2:'..(tADire2 or ''))
|
|
contrebasse@0
|
150 --print('tNonDit:'..(tNonDit or ''))
|
|
contrebasse@0
|
151
|
|
contrebasse@0
|
152 return (tDit and SayItOptions.cDit..tDit..'|r' or '' )..
|
|
contrebasse@0
|
153 (tJusteDit and SayItOptions.cJusteDit..tJusteDit..'|r' or '' )..
|
|
contrebasse@0
|
154 (space or '')..(tADire and SayItOptions.cADire..tADire..'|r' or '' )..
|
|
contrebasse@0
|
155 (tNonDit and SayItOptions.cNonDit..tNonDit..'|r' or '' )
|
|
contrebasse@0
|
156 end
|
|
contrebasse@0
|
157
|
|
contrebasse@0
|
158 --
|
|
contrebasse@0
|
159 -- Faire parler un Npc
|
|
contrebasse@0
|
160 --
|
|
contrebasse@0
|
161 local function NpcDit(txt)
|
|
contrebasse@0
|
162 if not txt then return end
|
|
contrebasse@0
|
163 if not txt.emote then
|
|
contrebasse@0
|
164 SendChatMessage("\124\124 "..GetUnitName("Npc").." dit : "..
|
|
contrebasse@0
|
165 txt.texte,"EMOTE")
|
|
contrebasse@0
|
166 else
|
|
contrebasse@0
|
167 SendChatMessage("\124\124 "..txt.texte,"EMOTE")
|
|
contrebasse@0
|
168 return
|
|
contrebasse@0
|
169 end
|
|
contrebasse@0
|
170 end
|
|
contrebasse@0
|
171
|
|
contrebasse@0
|
172
|
|
contrebasse@0
|
173 --********************************************************
|
|
contrebasse@0
|
174 --
|
|
contrebasse@0
|
175 -- Boutons et tooltips
|
|
contrebasse@0
|
176 --
|
|
contrebasse@0
|
177 --********************************************************
|
|
contrebasse@0
|
178 --
|
|
contrebasse@0
|
179 -- Remplissage du tooltip
|
|
contrebasse@0
|
180 --
|
|
contrebasse@0
|
181 local function TooltipUpdate(b)
|
|
contrebasse@0
|
182 if max_phrase>0 then
|
|
contrebasse@0
|
183 -- Coloration du texte dans la fenêtre
|
|
contrebasse@0
|
184 if TextFrame and SayItOptions.colorisation == 2 then
|
|
contrebasse@0
|
185 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
186 end
|
|
contrebasse@0
|
187
|
|
contrebasse@0
|
188 -- tooltip
|
|
contrebasse@0
|
189 if not SayItOptions.tooltip then return end
|
|
contrebasse@0
|
190
|
|
contrebasse@0
|
191 if SayItOptions.ancre_tooltip then
|
|
contrebasse@0
|
192 GameTooltip:SetOwner(b,"ANCHOR_BOTTOMRIGHT")-- Position du tooltip
|
|
contrebasse@0
|
193 else
|
|
contrebasse@0
|
194 GameTooltip_SetDefaultAnchor(GameTooltip, b)
|
|
contrebasse@0
|
195 end
|
|
contrebasse@0
|
196
|
|
contrebasse@0
|
197 -- texte du tolltip
|
|
contrebasse@0
|
198 GameTooltip:SetText(target_name,1,1,1) -- Nom du Pnj
|
|
contrebasse@0
|
199 if SayItOptions.texte_tooltip then
|
|
contrebasse@0
|
200 local txt = ""
|
|
contrebasse@0
|
201 if i_phrase <= max_phrase then
|
|
contrebasse@0
|
202 if not text_table[i_phrase].emote then
|
|
contrebasse@0
|
203 GameTooltip:AppendText(" va dire :")
|
|
contrebasse@0
|
204 else
|
|
contrebasse@0
|
205 GameTooltip:AppendText(" :")
|
|
contrebasse@0
|
206 end
|
|
contrebasse@0
|
207 txt = text_table[i_phrase].texte
|
|
contrebasse@0
|
208 GameTooltip:AddLine('"'..txt..'"',1,0.82,0,true)
|
|
contrebasse@0
|
209 else
|
|
contrebasse@0
|
210 GameTooltip:AppendText(" a terminé.")
|
|
contrebasse@0
|
211 end
|
|
contrebasse@0
|
212 end
|
|
contrebasse@0
|
213
|
|
contrebasse@0
|
214 -- Raccourcis
|
|
contrebasse@0
|
215 if SayItOptions.raccourcis_tooltip then
|
|
contrebasse@0
|
216 GameTooltip:AddLine(" ")
|
|
contrebasse@0
|
217 if i_phrase <= max_phrase then
|
|
contrebasse@0
|
218 GameTooltip:AddDoubleLine("Dire la phrase","Clic gauche",1,1,1,1,1,1)
|
|
contrebasse@0
|
219 end
|
|
contrebasse@0
|
220 if i_phrase>1 then
|
|
contrebasse@0
|
221 GameTooltip:AddDoubleLine("Phrase précédente","Ctrl+Clic/Roulette haut",1,1,1,1,1,1)
|
|
contrebasse@0
|
222 end
|
|
contrebasse@0
|
223 if i_phrase <= max_phrase then
|
|
contrebasse@0
|
224 GameTooltip:AddDoubleLine("Sauter la phrase","Shift+Clic/Roulette bas",1,1,1,1,1,1)
|
|
contrebasse@0
|
225 end
|
|
contrebasse@0
|
226 end
|
|
contrebasse@0
|
227 GameTooltip:Show()
|
|
contrebasse@0
|
228 else
|
|
contrebasse@0
|
229 GameTooltip:SetText("")
|
|
contrebasse@0
|
230 GameTooltip:Hide()
|
|
contrebasse@0
|
231 end
|
|
contrebasse@0
|
232 end
|
|
contrebasse@0
|
233
|
|
contrebasse@0
|
234 --
|
|
contrebasse@0
|
235 -- Créations des boutons, avec les fonctions des clics/mouseover
|
|
contrebasse@0
|
236 --
|
|
contrebasse@0
|
237 local function CreerBouton(parent)
|
|
contrebasse@0
|
238 local button = CreateFrame("Button", parent:GetName().."SayButton", parent, "UIPanelButtonTemplate")
|
|
contrebasse@0
|
239 button:SetText("Dire")
|
|
contrebasse@0
|
240 button:SetHeight(22)
|
|
contrebasse@0
|
241 button:SetWidth(button:GetTextWidth() + 40)
|
|
contrebasse@0
|
242 button:SetPoint("BOTTOM",parent,"BOTTOM",-9,72)
|
|
contrebasse@0
|
243
|
|
contrebasse@0
|
244 -- Set the frame level of the gossip_button to be 1 deeper than its parent
|
|
contrebasse@0
|
245 local buttonparent = button:GetParent()
|
|
contrebasse@0
|
246 local framelevel = buttonparent:GetFrameLevel()
|
|
contrebasse@0
|
247 local framestrata = buttonparent:GetFrameStrata()
|
|
contrebasse@0
|
248 button:SetFrameLevel(framelevel + 1)
|
|
contrebasse@0
|
249 button:SetFrameStrata(framestrata)
|
|
contrebasse@0
|
250 button:Enable()
|
|
contrebasse@0
|
251
|
|
contrebasse@0
|
252 -- Action du bouton
|
|
contrebasse@0
|
253 button:RegisterForClicks("LeftButtonUp")
|
|
contrebasse@0
|
254 button:EnableMouseWheel(true)
|
|
contrebasse@0
|
255 button:SetScript("OnClick",function(self, button, down)
|
|
contrebasse@0
|
256 -- état des modificateurs
|
|
contrebasse@0
|
257 local shiftDown = IsShiftKeyDown();
|
|
contrebasse@0
|
258 local ctrlDown = IsControlKeyDown();
|
|
contrebasse@0
|
259
|
|
contrebasse@0
|
260 -- On évite le cas foireux
|
|
contrebasse@0
|
261 if shiftDown and ctrlDown then return end
|
|
contrebasse@0
|
262
|
|
contrebasse@0
|
263 -- lecture phrase actuelle
|
|
contrebasse@0
|
264 if not shiftDown and not ctrlDown and i_phrase<=max_phrase then
|
|
contrebasse@0
|
265 NpcDit(text_table[i_phrase])
|
|
contrebasse@0
|
266 end
|
|
contrebasse@0
|
267
|
|
contrebasse@0
|
268 -- Passage phrase suivante
|
|
contrebasse@0
|
269 if ctrlDown then
|
|
contrebasse@0
|
270 if i_phrase==1 then
|
|
contrebasse@0
|
271 Warn("Le début du texte est atteint.")
|
|
contrebasse@0
|
272 else
|
|
contrebasse@0
|
273 i_phrase = i_phrase-1
|
|
contrebasse@0
|
274 --char_dits = char_dits - text_table[i_phrase].texte:len()
|
|
contrebasse@0
|
275 if TextFrame and SayItOptions.colorisation == 3 then
|
|
contrebasse@0
|
276 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
277 end
|
|
contrebasse@0
|
278 end
|
|
contrebasse@0
|
279 else
|
|
contrebasse@0
|
280 if i_phrase>max_phrase then
|
|
contrebasse@0
|
281 Warn("La fin du texte est atteinte.")
|
|
contrebasse@0
|
282 else
|
|
contrebasse@0
|
283 --char_dits = char_dits + text_table[i_phrase].texte:len()
|
|
contrebasse@0
|
284 i_phrase = i_phrase+1
|
|
contrebasse@0
|
285 if TextFrame and SayItOptions.colorisation == 3 then
|
|
contrebasse@0
|
286 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
287 end
|
|
contrebasse@0
|
288 end
|
|
contrebasse@0
|
289 end
|
|
contrebasse@0
|
290
|
|
contrebasse@0
|
291 -- Mise à jour du texte du tooltip
|
|
contrebasse@0
|
292 TooltipUpdate(self)
|
|
contrebasse@0
|
293 end)
|
|
contrebasse@0
|
294 button:SetScript("OnMouseWheel", function(self, delta)
|
|
contrebasse@0
|
295 -- Passage phrase suivante
|
|
contrebasse@0
|
296 if delta==1 then
|
|
contrebasse@0
|
297 if i_phrase==1 then
|
|
contrebasse@0
|
298 Warn("Le début du texte est atteint.")
|
|
contrebasse@0
|
299 else
|
|
contrebasse@0
|
300 i_phrase = i_phrase-1
|
|
contrebasse@0
|
301 --char_dits = char_dits - text_table[i_phrase].texte:len()
|
|
contrebasse@0
|
302 if TextFrame and SayItOptions.colorisation == 3 then
|
|
contrebasse@0
|
303 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
304 end
|
|
contrebasse@0
|
305 end
|
|
contrebasse@0
|
306 else
|
|
contrebasse@0
|
307 if i_phrase>max_phrase then
|
|
contrebasse@0
|
308 Warn("La fin du texte est atteinte.")
|
|
contrebasse@0
|
309 else
|
|
contrebasse@0
|
310 --char_dits = char_dits + text_table[i_phrase].texte:len()
|
|
contrebasse@0
|
311 i_phrase = i_phrase+1
|
|
contrebasse@0
|
312 if TextFrame and SayItOptions.colorisation == 3 then
|
|
contrebasse@0
|
313 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
314 end
|
|
contrebasse@0
|
315 end
|
|
contrebasse@0
|
316 end
|
|
contrebasse@0
|
317
|
|
contrebasse@0
|
318 -- Mise à jour du texte du tooltip
|
|
contrebasse@0
|
319 TooltipUpdate(self)
|
|
contrebasse@0
|
320 end)
|
|
contrebasse@0
|
321
|
|
contrebasse@0
|
322
|
|
contrebasse@0
|
323 -- Tooltip
|
|
contrebasse@0
|
324 button:SetScript("OnEnter", TooltipUpdate)
|
|
contrebasse@0
|
325 button:SetScript("OnLeave", function()
|
|
contrebasse@0
|
326 GameTooltip:Hide()
|
|
contrebasse@0
|
327 if TextFrame and SayItOptions.colorisation == 2 then
|
|
contrebasse@0
|
328 TextFrame:SetText(text_full)
|
|
contrebasse@0
|
329 end
|
|
contrebasse@0
|
330 end)
|
|
contrebasse@0
|
331
|
|
contrebasse@0
|
332 return button
|
|
contrebasse@0
|
333 end
|
|
contrebasse@0
|
334
|
|
contrebasse@0
|
335
|
|
contrebasse@0
|
336 --********************************************************
|
|
contrebasse@0
|
337 --
|
|
contrebasse@0
|
338 -- Gestion des events
|
|
contrebasse@0
|
339 --
|
|
contrebasse@0
|
340 --********************************************************
|
|
contrebasse@0
|
341 --
|
|
contrebasse@0
|
342 -- fonction lancée au chargement de l'add-on
|
|
contrebasse@0
|
343 --
|
|
contrebasse@0
|
344 function _G.SayIt_OnLoad(self,...)
|
|
contrebasse@0
|
345 -- Création des deux boutons
|
|
contrebasse@0
|
346 gossip_button = CreerBouton(GossipFrame)
|
|
contrebasse@0
|
347 quest_button = CreerBouton(QuestFrame)
|
|
contrebasse@0
|
348
|
|
contrebasse@0
|
349 -- Pour ne pas avoir de warning avec findglobals
|
|
contrebasse@0
|
350 -- GLOBALS: this
|
|
contrebasse@0
|
351 -- Events à suivre
|
|
contrebasse@0
|
352 SayItFrame:RegisterEvent("GOSSIP_SHOW"); -- Affiche fenêtre Gossip
|
|
contrebasse@0
|
353 SayItFrame:RegisterEvent("GOSSIP_CLOSED"); -- Ferme fenêtre gossip (peut-être appelé juste avant l'ouverture d'une quête)
|
|
contrebasse@0
|
354 SayItFrame:RegisterEvent("QUEST_DETAIL"); -- Nouvelle quête
|
|
contrebasse@0
|
355 SayItFrame:RegisterEvent("QUEST_PROGRESS"); -- Quête en cours, non terminée
|
|
contrebasse@0
|
356 SayItFrame:RegisterEvent("QUEST_COMPLETE"); -- Quête en cours et terminée
|
|
contrebasse@0
|
357 SayItFrame:RegisterEvent("QUEST_FINISHED"); -- Fermeture fenêtre quête
|
|
contrebasse@0
|
358 --"QUEST_GREETING" ?
|
|
contrebasse@0
|
359 end
|
|
contrebasse@0
|
360
|
|
contrebasse@0
|
361 --
|
|
contrebasse@0
|
362 -- fonction appelée quand il y a un event
|
|
contrebasse@0
|
363 --
|
|
contrebasse@0
|
364 function _G.SayIt_OnEvent(self, event, ...)
|
|
contrebasse@0
|
365 --DEBUG("Event:"..event)
|
|
contrebasse@0
|
366 --Warn(event)
|
|
contrebasse@0
|
367
|
|
contrebasse@0
|
368 if ( event=="GOSSIP_CLOSED" or event=="QUEST_FINISHED") then
|
|
contrebasse@0
|
369 -- Reset
|
|
contrebasse@0
|
370 target_name = ""
|
|
contrebasse@0
|
371 text_full = nil
|
|
contrebasse@0
|
372 current_button = nil
|
|
contrebasse@0
|
373 TextFrame = nil
|
|
contrebasse@0
|
374
|
|
contrebasse@0
|
375 elseif event=="GOSSIP_SHOW" then
|
|
contrebasse@0
|
376 target_name = GetUnitName("Npc")
|
|
contrebasse@0
|
377 text_full = GetGossipText()
|
|
contrebasse@0
|
378 current_button = gossip_button
|
|
contrebasse@0
|
379 TextFrame = GossipGreetingText
|
|
contrebasse@0
|
380
|
|
contrebasse@0
|
381 elseif event=="QUEST_DETAIL" then
|
|
contrebasse@0
|
382 target_name = GetUnitName("Npc")
|
|
contrebasse@0
|
383 text_full = GetQuestText();
|
|
contrebasse@0
|
384 current_button = quest_button
|
|
contrebasse@0
|
385 TextFrame = nil
|
|
contrebasse@0
|
386
|
|
contrebasse@0
|
387 elseif event=="QUEST_PROGRESS" then
|
|
contrebasse@0
|
388 target_name = GetUnitName("Npc")
|
|
contrebasse@0
|
389 text_full = GetProgressText();
|
|
contrebasse@0
|
390 current_button = quest_button
|
|
contrebasse@0
|
391 TextFrame = QuestProgressText
|
|
contrebasse@0
|
392
|
|
contrebasse@0
|
393 elseif event=="QUEST_COMPLETE" then
|
|
contrebasse@0
|
394 target_name = GetUnitName("Npc")
|
|
contrebasse@0
|
395 text_full = GetRewardText();
|
|
contrebasse@0
|
396 current_button = quest_button
|
|
contrebasse@0
|
397 TextFrame = nil
|
|
contrebasse@0
|
398
|
|
contrebasse@0
|
399 --elseif event=="QUEST_GREETING" then
|
|
contrebasse@0
|
400 -- GetGreetingText()
|
|
contrebasse@0
|
401 --GreetingText
|
|
contrebasse@0
|
402 else return
|
|
contrebasse@0
|
403 end
|
|
contrebasse@0
|
404
|
|
contrebasse@0
|
405 -- On ne sait jamais (ça arrive quand la fenêtre ne s'ouvre pas parce que celle des options est ouverte, par exemple)
|
|
contrebasse@0
|
406 if not target_name or not text_full or not current_button then
|
|
contrebasse@0
|
407 return
|
|
contrebasse@0
|
408 end
|
|
contrebasse@0
|
409
|
|
contrebasse@0
|
410 -- Reset de l'indice
|
|
contrebasse@0
|
411 i_phrase = 1
|
|
contrebasse@0
|
412 --char_dits = 0
|
|
contrebasse@0
|
413
|
|
contrebasse@0
|
414 -- Découpage du texte en paragraphes/phrase
|
|
contrebasse@0
|
415 text_table, max_phrase = Paragraphes(text_full)
|
|
contrebasse@0
|
416
|
|
contrebasse@0
|
417 -- Affichage en couleur
|
|
contrebasse@0
|
418 if TextFrame and SayItOptions.colorisation == 3 then
|
|
contrebasse@0
|
419 TextFrame:SetText(ColorieTexte(text_full))
|
|
contrebasse@0
|
420 end
|
|
contrebasse@0
|
421 end
|
|
contrebasse@0
|
422
|
|
contrebasse@0
|
423
|
|
contrebasse@0
|
424 --********************************************************
|
|
contrebasse@0
|
425 --
|
|
contrebasse@0
|
426 -- Ace 3.0
|
|
contrebasse@0
|
427 --
|
|
contrebasse@0
|
428 --********************************************************
|
|
contrebasse@0
|
429 -- http://www.wowace.com/addons/ace3/pages/getting-started/
|
|
contrebasse@0
|
430
|
|
contrebasse@0
|
431 -- Enregistrement comme add-on
|
|
contrebasse@0
|
432 local SayIt = LibStub("AceAddon-3.0"):NewAddon("SayIt")
|
|
contrebasse@0
|
433 --
|
|
contrebasse@0
|
434 -- Ace Config
|
|
contrebasse@0
|
435 --
|
|
contrebasse@0
|
436 local function Hex2Val(h)
|
|
contrebasse@0
|
437 if not h then return 0,0,0 end
|
|
contrebasse@0
|
438 return tonumber(h:sub(5,6),16)/255, tonumber(h:sub(7,8),16)/255, tonumber(h:sub(9,10),16)/255
|
|
contrebasse@0
|
439 end
|
|
contrebasse@0
|
440 local function Val2Hex(r,g,b)
|
|
contrebasse@0
|
441 return string_format("|cff%02x%02x%02x",(r or 0)*255,(g or 0)*255,(b or 0)*255)
|
|
contrebasse@0
|
442 end
|
|
contrebasse@0
|
443 local options = {
|
|
contrebasse@0
|
444 type = "group",
|
|
contrebasse@0
|
445 args = {
|
|
contrebasse@0
|
446 tooltip_header = {
|
|
contrebasse@0
|
447 name = "Tooltip",
|
|
contrebasse@0
|
448 type = "header",
|
|
contrebasse@0
|
449 order = 80
|
|
contrebasse@0
|
450 },
|
|
contrebasse@0
|
451 activer_tooltip = {
|
|
contrebasse@0
|
452 name = "Afficher le tooltip",
|
|
contrebasse@0
|
453 desc = "Affiche un tooltip pour le bouton \"Dire\"",
|
|
contrebasse@0
|
454 type = "toggle",
|
|
contrebasse@0
|
455 get = function() return SayItOptions.tooltip end,
|
|
contrebasse@0
|
456 set = function(info,state) SayItOptions.tooltip = state end,
|
|
contrebasse@0
|
457 width = "full",
|
|
contrebasse@0
|
458 order = 81
|
|
contrebasse@0
|
459 },
|
|
contrebasse@0
|
460 montrer_texte = {
|
|
contrebasse@0
|
461 name = "Afficher le texte dans le tooltip",
|
|
contrebasse@0
|
462 desc = "Affiche le texte qui va être dit pas le pnj dans le tooltip du bouton \"Dire\"",
|
|
contrebasse@0
|
463 type = "toggle",
|
|
contrebasse@0
|
464 get = function() return SayItOptions.texte_tooltip end,
|
|
contrebasse@0
|
465 set = function(info,state) SayItOptions.texte_tooltip = state end,
|
|
contrebasse@0
|
466 width = "full",
|
|
contrebasse@0
|
467 order = 82
|
|
contrebasse@0
|
468 },
|
|
contrebasse@0
|
469 montrer_raccourcis = {
|
|
contrebasse@0
|
470 name = "Afficher les raccourcis dans le tooltip",
|
|
contrebasse@0
|
471 desc = "Affiche les raccourcis dans le tooltip du bouton \"Dire\"",
|
|
contrebasse@0
|
472 type = "toggle",
|
|
contrebasse@0
|
473 get = function() return SayItOptions.raccourcis_tooltip end,
|
|
contrebasse@0
|
474 set = function(info,state) SayItOptions.raccourcis_tooltip = state end,
|
|
contrebasse@0
|
475 width = "full",
|
|
contrebasse@0
|
476 order = 83
|
|
contrebasse@0
|
477 },
|
|
contrebasse@0
|
478 ancre_tooltip = {
|
|
contrebasse@0
|
479 name = "Ancrer le tooltip au bouton",
|
|
contrebasse@0
|
480 desc = "Ancre le tooltip au bouton \"Dire\". Sinon, il sera dans sa position par défaut.",
|
|
contrebasse@0
|
481 type = "toggle",
|
|
contrebasse@0
|
482 get = function() return SayItOptions.ancre_tooltip end,
|
|
contrebasse@0
|
483 set = function(info,state) SayItOptions.ancre_tooltip = state end,
|
|
contrebasse@0
|
484 width = "full",
|
|
contrebasse@0
|
485 order = 84
|
|
contrebasse@0
|
486 },
|
|
contrebasse@0
|
487 couleur_header = {
|
|
contrebasse@0
|
488 name = "Couleurs des textes",
|
|
contrebasse@0
|
489 type = "header",
|
|
contrebasse@0
|
490 order = 99
|
|
contrebasse@0
|
491 },
|
|
contrebasse@0
|
492 o100 = {
|
|
contrebasse@0
|
493 name = "|cffffd100Remarque :|r La colorisation ne marche pas pour les fenêtres d'acceptation et de rendu de quête.\n",
|
|
contrebasse@0
|
494 type = "description",
|
|
contrebasse@0
|
495 order = 100
|
|
contrebasse@0
|
496 },
|
|
contrebasse@0
|
497 colorier = {
|
|
contrebasse@0
|
498 name = "Colorisation",
|
|
contrebasse@0
|
499 desc = "Colore le texte dans la fenêtre du pnj.",
|
|
contrebasse@0
|
500 --descStyle = 'inline',
|
|
contrebasse@0
|
501 type = "select",
|
|
contrebasse@0
|
502 values = {
|
|
contrebasse@0
|
503 "Aucune",
|
|
contrebasse@0
|
504 "Sous la souris",
|
|
contrebasse@0
|
505 "Toujours"
|
|
contrebasse@0
|
506 },
|
|
contrebasse@0
|
507 style = 'radio',
|
|
contrebasse@0
|
508 get = function() return SayItOptions.colorisation end,
|
|
contrebasse@0
|
509 set = function(info,val) SayItOptions.colorisation = val end,
|
|
contrebasse@0
|
510 order = 101
|
|
contrebasse@0
|
511 },
|
|
contrebasse@0
|
512 o102 = {
|
|
contrebasse@0
|
513 name = "\n|cffffd100Couleurs utilisées lors de la colorisation des textes|r",
|
|
contrebasse@0
|
514 type = "description",
|
|
contrebasse@0
|
515 order = 102
|
|
contrebasse@0
|
516 },
|
|
contrebasse@0
|
517 couleur_cDit = {
|
|
contrebasse@0
|
518 name = "Texte déjà dit",
|
|
contrebasse@0
|
519 desc = "Couleur dans laquelle apparaitra le texte que le pnj a déjà dit.",
|
|
contrebasse@0
|
520 type = "color",
|
|
contrebasse@0
|
521 get = function() return Hex2Val(SayItOptions.cDit) end,
|
|
contrebasse@0
|
522 set = function(info,r,g,b) SayItOptions.cDit = Val2Hex(r,g,b) end,
|
|
contrebasse@0
|
523 width = "full",
|
|
contrebasse@0
|
524 order = 103
|
|
contrebasse@0
|
525 },
|
|
contrebasse@0
|
526 couleur_cJusteDit = {
|
|
contrebasse@0
|
527 name = "Texte tout juste dit",
|
|
contrebasse@0
|
528 desc = "Couleur dans laquelle apparaitra le texte que le pnj vient de dire.",
|
|
contrebasse@0
|
529 type = "color",
|
|
contrebasse@0
|
530 get = function() return Hex2Val(SayItOptions.cJusteDit) end,
|
|
contrebasse@0
|
531 set = function(info,r,g,b) SayItOptions.cJusteDit = Val2Hex(r,g,b) end,
|
|
contrebasse@0
|
532 width = "full",
|
|
contrebasse@0
|
533 order = 104
|
|
contrebasse@0
|
534 },
|
|
contrebasse@0
|
535 couleur_cADire = {
|
|
contrebasse@0
|
536 name = "Texte qui va être dit",
|
|
contrebasse@0
|
537 desc = "Couleur dans laquelle apparaitra le texte que le pnj dira la prochaine fois.",
|
|
contrebasse@0
|
538 type = "color",
|
|
contrebasse@0
|
539 get = function() return Hex2Val(SayItOptions.cADire) end,
|
|
contrebasse@0
|
540 set = function(info,r,g,b) SayItOptions.cADire = Val2Hex(r,g,b) end,
|
|
contrebasse@0
|
541 width = "full",
|
|
contrebasse@0
|
542 order = 105
|
|
contrebasse@0
|
543 },
|
|
contrebasse@0
|
544 couleur_cNonDit = {
|
|
contrebasse@0
|
545 name = "Texte pas encore dit",
|
|
contrebasse@0
|
546 desc = "Couleur dans laquelle apparaitra le texte que le pnj n'a pas encore dit.",
|
|
contrebasse@0
|
547 type = "color",
|
|
contrebasse@0
|
548 get = function() return Hex2Val(SayItOptions.cNonDit) end,
|
|
contrebasse@0
|
549 set = function(info,r,g,b) SayItOptions.cNonDit = Val2Hex(r,g,b) end,
|
|
contrebasse@0
|
550 width = "full",
|
|
contrebasse@0
|
551 order = 106
|
|
contrebasse@0
|
552 }
|
|
contrebasse@0
|
553 }
|
|
contrebasse@0
|
554 }
|
|
contrebasse@0
|
555
|
|
contrebasse@0
|
556 function SayIt:OnInitialize()
|
|
contrebasse@0
|
557 -- Code that you want to run when the addon is first loaded goes here.
|
|
contrebasse@0
|
558
|
|
contrebasse@0
|
559 -- Application de la config par Ace
|
|
contrebasse@0
|
560 LibStub("AceConfig-3.0"):RegisterOptionsTable("SayIt".."BlizzOptions", options, {"sayit"})
|
|
contrebasse@0
|
561 LibStub("AceConfigDialog-3.0"):AddToBlizOptions("SayIt".."BlizzOptions","Say It")
|
|
contrebasse@0
|
562 LibStub("AceConfig-3.0"):RegisterOptionsTable("SayIt", function() return self:GetOptions() end) -- tiré de adibags
|
|
contrebasse@0
|
563
|
|
contrebasse@0
|
564 -- Récupération de la config...
|
|
contrebasse@0
|
565 if not SayItOptions then
|
|
contrebasse@0
|
566 SayItOptions = {}
|
|
contrebasse@0
|
567 end
|
|
contrebasse@0
|
568 if SayItOptions.tooltip==nil then
|
|
contrebasse@0
|
569 SayItOptions.tooltip = true
|
|
contrebasse@0
|
570 end
|
|
contrebasse@0
|
571 if SayItOptions.texte_tooltip==nil then
|
|
contrebasse@0
|
572 SayItOptions.texte_tooltip = true
|
|
contrebasse@0
|
573 end
|
|
contrebasse@0
|
574 if SayItOptions.raccourcis_tooltip==nil then
|
|
contrebasse@0
|
575 SayItOptions.raccourcis_tooltip = true
|
|
contrebasse@0
|
576 end
|
|
contrebasse@0
|
577 if SayItOptions.ancre_tooltip==nil then
|
|
contrebasse@0
|
578 SayItOptions.ancre_tooltip = true
|
|
contrebasse@0
|
579 end
|
|
contrebasse@0
|
580 if not SayItOptions.colorisation then
|
|
contrebasse@0
|
581 SayItOptions.colorisation = 2
|
|
contrebasse@0
|
582 end
|
|
contrebasse@0
|
583 if not SayItOptions.cDit then
|
|
contrebasse@0
|
584 SayItOptions.cDit = "|cff".."606060"
|
|
contrebasse@0
|
585 end
|
|
contrebasse@0
|
586 if not SayItOptions.cJusteDit then
|
|
contrebasse@0
|
587 SayItOptions.cJusteDit = "|cff".."7f0000"
|
|
contrebasse@0
|
588 end
|
|
contrebasse@0
|
589 if not SayItOptions.cADire then
|
|
contrebasse@0
|
590 SayItOptions.cADire = "|cff".."00007f"
|
|
contrebasse@0
|
591 end
|
|
contrebasse@0
|
592 if not SayItOptions.cNonDit then
|
|
contrebasse@0
|
593 SayItOptions.cNonDit = "|cff".."202020"
|
|
contrebasse@0
|
594 end
|
|
contrebasse@0
|
595 end
|
|
contrebasse@0
|
596
|
|
contrebasse@0
|
597 --function SayIt:OnEnable()
|
|
contrebasse@0
|
598 -- Called when the addon is enabled
|
|
contrebasse@0
|
599 --end
|
|
contrebasse@0
|
600
|
|
contrebasse@0
|
601 --function SayIt:OnDisable()
|
|
contrebasse@0
|
602 -- Called when the addon is disabled
|
|
contrebasse@0
|
603 --end
|
|
contrebasse@0
|
604
|