vanilla-wow-addons – Rev 1
?pathlinks?
------------------------------------------------------------------------------------------------------
-- 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 23.04.2006-1
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
-- FONCTIONS D'INSERTION
------------------------------------------------------------------------------------------------------
-- La table des timers est là pour ça !
function Necrosis_InsertTimerParTable(IndexTable, Target, LevelTarget, SpellGroup, SpellTimer, TimerTable)
-- Insertion de l'entrée dans le tableau
table.insert(SpellTimer,
{
Name = NECROSIS_SPELL_TABLE[IndexTable].Name,
Time = NECROSIS_SPELL_TABLE[IndexTable].Length,
TimeMax = floor(GetTime() + NECROSIS_SPELL_TABLE[IndexTable].Length),
Type = NECROSIS_SPELL_TABLE[IndexTable].Type,
Target = Target,
TargetLevel = LevelTarget,
Group = 0,
Gtimer = nil
});
-- Association d'un timer graphique au timer
SpellTimer, TimerTable = Necrosis_AddFrame(SpellTimer, TimerTable);
-- Tri des entrées par type de sort
Necrosis_Tri(SpellTimer, "Type");
-- Création des groupes (noms des mobs) des timers
SpellGroup, SpellTimer = Necrosis_Parsing(SpellGroup, SpellTimer);
return SpellGroup, SpellTimer, TimerTable;
end
-- Et pour insérer le timer de pierres
function Necrosis_InsertTimerStone(Stone, start, duration, SpellGroup, SpellTimer, TimerTable)
-- Insertion de l'entrée dans le tableau
if Stone == "Healthstone" then
table.insert(SpellTimer,
{
Name = NECROSIS_COOLDOWN.Healthstone,
Time = 180,
TimeMax = floor(GetTime() + 180),
Type = 2,
Target = "",
TargetLevel = "",
Group = 2,
Gtimer = nil
});
-- Association d'un timer graphique au timer
SpellTimer, TimerTable = Necrosis_AddFrame(SpellTimer, TimerTable);
elseif Stone == "Spellstone" then
table.insert(SpellTimer,
{
Name = NECROSIS_COOLDOWN.Spellstone,
Time = 30,
TimeMax = floor(GetTime() + 30),
Type = 2,
Target = "",
TargetLevel = "",
Group = 2,
Gtimer = nil
});
-- Association d'un timer graphique au timer
SpellTimer, TimerTable = Necrosis_AddFrame(SpellTimer, TimerTable);
elseif Stone == "Soulstone" then
table.insert(SpellTimer,
{
Name = NECROSIS_SPELL_TABLE[11].Name,
Time = floor(duration - GetTime() + start),
TimeMax = floor(start + duration),
Type = NECROSIS_SPELL_TABLE[11].Type,
Target = "???",
TargetLevel = "",
Group = 1,
Gtimer = nil,
});
-- Association d'un timer graphique au timer
SpellTimer, TimerTable = Necrosis_AddFrame(SpellTimer, TimerTable);
end
-- Tri des entrées par type de sort
Necrosis_Tri(SpellTimer, "Type");
-- Création des groupes (noms des mobs) des timers
SpellGroup, SpellTimer = Necrosis_Parsing(SpellGroup, SpellTimer);
return SpellGroup, SpellTimer, TimerTable;
end
-- Pour la création de timers personnels
function NecrosisTimerX(nom, duree, truc, Target, LevelTarget, SpellGroup, SpellTimer, TimerTable)
table.insert(SpellTimer,
{
Name = nom,
Time = duree,
TimeMax = floor(GetTime() + duree),
Type = truc,
Target = Target,
TargetLevel = LevelTarget,
Group = 0,
Gtimer = nil
});
-- Association d'un timer graphique au timer
SpellTimer, TimerTable = Necrosis_AddFrame(SpellTimer, TimerTable);
-- Tri des entrées par type de sort
Necrosis_Tri(SpellTimer, "Type");
-- Création des groupes (noms des mobs) des timers
SpellGroup, SpellTimer = Necrosis_Parsing(SpellGroup, SpellTimer);
return SpellGroup, SpellTimer, TimerTable;
end
------------------------------------------------------------------------------------------------------
-- FONCTIONS DE RETRAIT
------------------------------------------------------------------------------------------------------
-- Connaissant l'index du Timer dans la liste, on le supprime
function Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable)
-- Suppression du timer graphique
local Gtime = SpellTimer[index].Gtimer;
TimerTable = Necrosis_RemoveFrame(Gtime, TimerTable);
-- On enlève le timer de la liste
table.remove(SpellTimer, index);
return SpellTimer, TimerTable;
end
-- Si on veut supprimer spécifiquement un Timer...
function Necrosis_RetraitTimerParNom(name, SpellTimer, TimerTable)
for index = 1, table.getn(SpellTimer), 1 do
if SpellTimer[index].Name == name then
SpellTimer = Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable);
break;
end
end
return SpellTimer, TimerTable;
end
-- Fonction pour enlever les timers de combat lors de la regen
function Necrosis_RetraitTimerCombat(SpellGroup, SpellTimer, TimerTable)
for index=1, table.getn(SpellTimer), 1 do
if SpellTimer[index] then
-- Si les cooldowns sont nominatifs, on enlève le nom
if SpellTimer[index].Type == 3 then
SpellTimer[index].Target = "";
SpellTimer[index].TargetLevel = "";
end
-- Enlevage des timers de combat
if ((SpellTimer[index].Type == 4) or (SpellTimer[index].Type == 5)) then
SpellTimer = Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable);
end
end
end
if table.getn(SpellGroup.Name) >= 4 then
for index = 4, table.getn(SpellGroup.Name), 1 do
table.remove(SpellGroup.Name);
table.remove(SpellGroup.SubName);
table.remove(SpellGroup.Visible);
end
end
return SpellGroup, SpellTimer, TimerTable;
end
------------------------------------------------------------------------------------------------------
-- FONCTIONS BOOLEENNES
------------------------------------------------------------------------------------------------------
function Necrosis_TimerExisteDeja(Nom, SpellTimer)
for index = 1, table.getn(SpellTimer), 1 do
if SpellTimer[index].Name == Nom then
return true;
end
end
return false;
end
------------------------------------------------------------------------------------------------------
-- FONCTIONS DE TRI
------------------------------------------------------------------------------------------------------
-- On définit les groupes de chaque Timer
function Necrosis_Parsing(SpellGroup, SpellTimer)
local GroupeOK = false;
for index = 1, table.getn(SpellTimer), 1 do
local GroupeOK = false;
for i = 1, table.getn(SpellGroup.Name), 1 do
if ((SpellTimer[index].Type == i) and (i <= 3)) or
(SpellTimer[index].Target == SpellGroup.Name[i]
and SpellTimer[index].TargetLevel == SpellGroup.SubName[i])
then
GroupeOK = true;
SpellTimer[index].Group = i;
break;
end
end
-- Si le groupe n'existe pas, on en crée un nouveau
if not GroupeOK then
table.insert(SpellGroup.Name, SpellTimer[index].Target);
table.insert(SpellGroup.SubName, SpellTimer[index].TargetLevel);
table.insert(SpellGroup.Visible, false);
SpellTimer[index].Group = table.getn(SpellGroup.Name);
end
end
Necrosis_Tri(SpellTimer, "Group");
return SpellGroup, SpellTimer;
end
-- On trie les timers selon leur groupe
function Necrosis_Tri(SpellTimer, clef)
return table.sort(SpellTimer,
function (SubTab1, SubTab2)
return SubTab1[clef] < SubTab2[clef]
end);
end
------------------------------------------------------------------------------------------------------
-- FONCTIONS D'AFFICHAGE : CREATION DE LA CHAINE DE CARACTERE
------------------------------------------------------------------------------------------------------
function Necrosis_DisplayTimer(display, index, SpellGroup, SpellTimer, GraphicalTimer, TimerTable)
if not SpellTimer then
return display, SpellGroup;
end
local minutes = 0;
local seconds = 0;
local affichage;
-- Changement de la couleur suivant le temps restant
local percent = (floor(SpellTimer[index].TimeMax - floor(GetTime())) / SpellTimer[index].Time)*100;
local color = NecrosisTimerColor(percent);
if not SpellGroup.Visible[SpellTimer[index].Group]
and SpellGroup.SubName[SpellTimer[index].Group] ~= nil
and SpellGroup.Name[SpellTimer[index].Group] ~= nil then
display = display.."<purple>-------------------------------\n"..SpellGroup.Name[SpellTimer[index].Group].." "..SpellGroup.SubName[SpellTimer[index].Group].."\n-------------------------------<close>\n";
-- Crée le tableau qui servira aux timers graphiques
table.insert(GraphicalTimer.texte, SpellGroup.Name[SpellTimer[index].Group].." "..SpellGroup.SubName[SpellTimer[index].Group]);
table.insert(GraphicalTimer.TimeMax, 0);
table.insert(GraphicalTimer.Time, 0);
table.insert(GraphicalTimer.titre, true);
table.insert(GraphicalTimer.temps, "");
table.insert(GraphicalTimer.Gtimer, 0);
SpellGroup.Visible[SpellTimer[index].Group] = true;
end
-- Mise en place d'un Chrono plutôt qu'un Compte à Rebours pour l'asservissement
if SpellTimer[index].Name == NECROSIS_SPELL_TABLE[10].Name then
seconds = floor(GetTime()) - (SpellTimer[index].TimeMax - SpellTimer[index].Time);
else
seconds = SpellTimer[index].TimeMax - floor(GetTime());
end
minutes = floor(seconds/60);
if (minutes > 0) then
if (minutes > 9) then
affichage = tostring(minutes)..":";
else
affichage = "0"..minutes..":"
end
else
affichage = "0:";
end
seconds = mod(seconds, 60);
if (seconds > 9) then
affichage = affichage..seconds
else
affichage = affichage.."0"..seconds
end
display = display.."<white>"..affichage.." - <close>";
-- Crée le tableau qui servira aux timers graphiques
if (SpellTimer[index].Type == 1 or SpellTimer[index].Name == NECROSIS_SPELL_TABLE[16].Name)
and (SpellTimer[index].Target ~= "") then
if NecrosisConfig.SpellTimerPos == 1 then
affichage = affichage.." - "..SpellTimer[index].Target;
else
affichage = SpellTimer[index].Target.." - "..affichage;
end
end
table.insert(GraphicalTimer.texte, SpellTimer[index].Name);
table.insert(GraphicalTimer.TimeMax, SpellTimer[index].TimeMax);
table.insert(GraphicalTimer.Time, SpellTimer[index].Time);
table.insert(GraphicalTimer.titre, false);
table.insert(GraphicalTimer.temps, affichage);
table.insert(GraphicalTimer.Gtimer, SpellTimer[index].Gtimer);
if NecrosisConfig.CountType == 3 then
if SpellTimer[index].Name == NECROSIS_SPELL_TABLE[11].Name then
if (minutes > 0) then
NecrosisShardCount:SetText(minutes.." m");
else
NecrosisShardCount:SetText(seconds);
end
end
end
if NecrosisConfig.Circle == 2 then
if SpellTimer[index].Name == NECROSIS_SPELL_TABLE[11].Name then
if (minutes >= 16) then
NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Turquoise\\Shard"..minutes - 15);
elseif minutes >= 1 or seconds >= 33 then
NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Orange\\Shard"..minutes + 1);
else
NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Rose\\Shard"..seconds);
end
end
end
display = display..color..SpellTimer[index].Name.."<close><white>";
if (SpellTimer[index].Type == 1 or SpellTimer[index].Name == NECROSIS_SPELL_TABLE[16].Name)
and (SpellTimer[index].Target ~= "")
then
display = display.." - "..SpellTimer[index].Target.."<close>\n";
else
display = display.."<close>\n";
end
-- Affichage des timers graphiques (si sélectionnés)
if NecrosisConfig.Graphical then
NecrosisAfficheTimer(GraphicalTimer, TimerTable);
end
return display, SpellGroup, GraphicalTimer, TimerTable;
end