annotate SayIt.lua @ 4:2d55f8ac0c21 tip

?tiquette v1.0 ajout?e pour le jeu de r?visions 0b3ef26f2bb3
author contrebasse
date Mon, 09 May 2011 00:07:50 +0200
parents 24f337b9dfa0
children
rev   line source
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