initial
This commit is contained in:
@@ -0,0 +1,351 @@
|
||||
------------------------------------------------------------------------------------------------------
|
||||
-- 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
|
||||
Reference in New Issue
Block a user