65c98bb7ce
The 1.12 client only parses lowercase |cAARRGGBB color escapes; the uppercase |C codes in the Title rendered as literal escape text in the in-game AddOns list. Lowercasing the escape markers makes the coloured 'Necrosis LdC' title render correctly (matches the normalization the manifest resolver already applies to the catalog). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
163 lines
6.2 KiB
Lua
163 lines
6.2 KiB
Lua
------------------------------------------------------------------------------------------------------
|
|
-- Necrosis LdC
|
|
--
|
|
-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/)
|
|
-- Implémentation de base (FR) : Tilienna Thorondor
|
|
-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas
|
|
--
|
|
-- Skins et voix Françaises : Eliah, Ner'zhul
|
|
-- Version Allemande par Arne Meier et Halisstra, Lothar
|
|
-- Remerciements spéciaux pour Sadyre (JoL)
|
|
-- Version 07.04.2006-1
|
|
------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
-- La fonction d'affichage des timers
|
|
-- tableau est de la forme suivante :
|
|
-- tableau {
|
|
-- texte = "Nom du mob ou du sort",
|
|
-- TimeMax = "TimeMax du sort",
|
|
-- Time = "Time du sort",
|
|
-- titre = "vrai si titre, faux sinon",
|
|
-- temps = "timer numérique",
|
|
-- Gtimer = "Numéro du timer associé (entre 1 et 65)"
|
|
-- }
|
|
function NecrosisAfficheTimer(tableau, pointeur)
|
|
-- On définit l'endroit ou apparaitra la première frame
|
|
-- On déclare que la première frame est toujours le premier mob (logique :P)
|
|
|
|
if tableau ~= nil then
|
|
local TimerTarget = 0;
|
|
local yPosition = NecrosisConfig.SensListe * 5;
|
|
|
|
local PositionTitre = {};
|
|
|
|
if NecrosisConfig.SensListe > 0 then
|
|
PositionTitre = {11, 13};
|
|
else
|
|
PositionTitre = {-13, -11};
|
|
end
|
|
|
|
|
|
for index = 1, table.getn(tableau.texte), 1 do
|
|
-- Si l'entrée est un titre de mob
|
|
if tableau.titre[index] then
|
|
-- On change de groupe de mob
|
|
TimerTarget = TimerTarget + 1;
|
|
if TimerTarget ~= 1 then yPosition = yPosition - PositionTitre[1]; end
|
|
if TimerTarget == 11 then TimerTarget = 1; end
|
|
-- On affiche le titre
|
|
local frameName = "NecrosisTarget"..TimerTarget.."Text";
|
|
local frameItem = getglobal(frameName);
|
|
-- On place le coin gauche de la frame par rapport au centre du bouton des SpellTimers
|
|
frameItem:ClearAllPoints();
|
|
frameItem:SetPoint(NecrosisConfig.SpellTimerJust, "NecrosisSpellTimerButton", "CENTER", NecrosisConfig.SpellTimerPos * 23, yPosition);
|
|
yPosition = yPosition - PositionTitre[2];
|
|
-- On nomme la frame, puis on l'affiche ! :)
|
|
frameItem:SetText(tableau.texte[index]);
|
|
if not frameItem:IsShown() then
|
|
frameItem:Show();
|
|
end
|
|
else
|
|
-- Pareil pour les DoT
|
|
local JustifInverse = "LEFT";
|
|
if NecrosisConfig.SpellTimerJust == "LEFT" then JustifInverse = "RIGHT"; end
|
|
|
|
local frameName1 = "NecrosisTimer"..tableau.Gtimer[index].."Text";
|
|
local frameItem1 = getglobal(frameName1);
|
|
local frameName2 = "NecrosisTimer"..tableau.Gtimer[index].."Bar";
|
|
local frameItem2 = getglobal(frameName2);
|
|
local frameName3 = "NecrosisTimer"..tableau.Gtimer[index].."Texture";
|
|
local frameItem3 = getglobal(frameName3);
|
|
local frameName4 = "NecrosisTimer"..tableau.Gtimer[index].."Spark";
|
|
local frameItem4 = getglobal(frameName4);
|
|
local frameName5 = "NecrosisTimer"..tableau.Gtimer[index].."OutText";
|
|
local frameItem5 = getglobal(frameName5);
|
|
|
|
frameItem1:ClearAllPoints();
|
|
frameItem1:SetPoint(NecrosisConfig.SpellTimerJust, "NecrosisSpellTimerButton", "CENTER", NecrosisConfig.SpellTimerPos * 23, yPosition + 1);
|
|
if NecrosisConfig.Yellow then
|
|
frameItem1:SetTextColor(1, 0.82, 0);
|
|
else
|
|
frameItem1:SetTextColor(1, 1, 1);
|
|
end
|
|
frameItem1:SetJustifyH("LEFT");
|
|
frameItem1:SetText(tableau.texte[index]);
|
|
frameItem2:ClearAllPoints();
|
|
frameItem2:SetPoint(NecrosisConfig.SpellTimerJust, "NecrosisSpellTimerButton", "CENTER", NecrosisConfig.SpellTimerPos * 23, yPosition);
|
|
frameItem2:SetMinMaxValues(tableau.TimeMax[index] - tableau.Time[index], tableau.TimeMax[index]);
|
|
frameItem2:SetValue(2 * tableau.TimeMax[index] - (tableau.Time[index] + floor(GetTime())));
|
|
local r, g;
|
|
local b = 37/255;
|
|
local PercentColor = (tableau.TimeMax[index] - floor(GetTime())) / tableau.Time[index]
|
|
if PercentColor > 0.5 then
|
|
r = (49/255) + (((1 - PercentColor) * 2) * (1 - (49/255)));
|
|
g = 207/255;
|
|
else
|
|
r = 1.0;
|
|
g = (207/255) - (0.5 - PercentColor) * 2 * (207/255);
|
|
end
|
|
frameItem2:SetStatusBarColor(r, g, b)
|
|
frameItem3:ClearAllPoints();
|
|
frameItem3:SetPoint(NecrosisConfig.SpellTimerJust, "NecrosisSpellTimerButton", "CENTER", NecrosisConfig.SpellTimerPos * 23, yPosition);
|
|
frameItem5:ClearAllPoints();
|
|
frameItem5:SetTextColor(1, 1, 1);
|
|
frameItem5:SetJustifyH(NecrosisConfig.SpellTimerJust);
|
|
frameItem5:SetPoint(NecrosisConfig.SpellTimerJust, frameItem2, JustifInverse, NecrosisConfig.SpellTimerPos * 5, 1);
|
|
frameItem5:SetText(tableau.temps[index]);
|
|
|
|
local sparkPosition = 150 - ((floor(GetTime()) - (tableau.TimeMax[index] - tableau.Time[index])) / tableau.Time[index]) * 150;
|
|
if (sparkPosition < 1) then
|
|
sparkPosition = 1;
|
|
end
|
|
frameItem4:SetPoint("CENTER", frameItem2, "LEFT", sparkPosition, 0);
|
|
yPosition = yPosition - NecrosisConfig.SensListe * 11;
|
|
end
|
|
end
|
|
if TimerTarget < 10 then
|
|
for i = TimerTarget + 1, 10, 1 do
|
|
local frameName = "NecrosisTarget"..i.."Text";
|
|
local frameItem = getglobal(frameName);
|
|
if frameItem:IsShown() then
|
|
frameItem:Hide();
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Necrosis_AddFrame(SpellTimer, TimerTable)
|
|
for i = 1, table.getn(TimerTable), 1 do
|
|
if not TimerTable[i] then
|
|
TimerTable[i] = true;
|
|
SpellTimer[table.getn(SpellTimer)].Gtimer = i;
|
|
-- Affichage du timer graphique associé
|
|
if NecrosisConfig.Graphical then
|
|
local elements = {"Text", "Bar", "Texture", "OutText"}
|
|
for j = 1, 4, 1 do
|
|
frameName = "NecrosisTimer"..i..elements[j];
|
|
frameItem = getglobal(frameName);
|
|
frameItem:Show();
|
|
end
|
|
end
|
|
break
|
|
end
|
|
end
|
|
return SpellTimer, TimerTable;
|
|
end
|
|
|
|
function Necrosis_RemoveFrame(Gtime, TimerTable)
|
|
-- On cache le timer graphique
|
|
local elements = {"Text", "Bar", "Texture", "OutText"}
|
|
for j = 1, 4, 1 do
|
|
frameName = "NecrosisTimer"..Gtime..elements[j];
|
|
frameItem = getglobal(frameName);
|
|
frameItem:Hide();
|
|
end
|
|
|
|
-- On déclare le timer graphique comme réutilisable
|
|
TimerTable[Gtime] = false;
|
|
|
|
return TimerTable;
|
|
end
|