local GetTotemInfo = GetTotemInfo;
-- character specific frames
+-- TODO try with auraFilter, remove characters, change to classes
+--[[local classes = {
+ ["PALADIN"] = {
+ ["PLAYER HELPFUL"] = {
+ {
+ unit = "player",
+ auras = {["Divine Shield"]=1, ""},
+ frames = {
+ [1] = {
+ x = 0,
+ y = 0,
+ width = 1,
+ height = 1,
+ },
+ },
+ },
+ },
+ },
+};
+local specs = {
+ [retSpecid] = {
+ ["PLAYER HELPFUL"] = {
+ {
+ unit = "player",
+ auras = {["Judgment"]=1},
+ frames = {
+ [1] = {
+ },
+ },
+ },
+ },
+ ["PLAYER HARMFUL"] = {
+ {
+ },
+ },
+ },
+};
+--]]
local chars = {
- ["Stormreaver"] = {
- ["Vildan"] = {
+ ["Sylvanas"] = {
+ ["Vildana"] = {
{
unit = "target",
spec = 3, -- Retribution
auraFilter = "PLAYER HELPFUL",
x = 570,
y = 530,
- width = 80,
- height = 80,
+ width = 40,
+ height = 40,
},
{
unit = "player",
height = 80,
},
},
+ },
+ ["Stormreaver"] = {
+ ["Vildan"] = {
+ {
+ unit = "target",
+ auras = {"Bursting With Pride"},
+ auraFilter = "HELPFUL",
+ x = 570, -- placed over Innervate frame
+ y = 440,
+ width = 80,
+ height = 80,
+ },
+ {
+ unit = "player",
+ auras = {"Divine Purpose"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 570,
+ y = 530,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Protection
+ auras = {"Shield of the Righteous"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 570,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Protection
+ auras = {"Shining Light"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 630,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ {
+ unit = "player",
+ auras = {"Seraphim", "Righteous Verdict"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 570,
+ y = 480,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Divine Shield"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 440,
+ width = 80,
+ height = 80,
+ },
+ {
+ unit = "player",
+ auras = {"Devotion Aura"},
+ auraFilter = "HELPFUL",
+ invert = true,
+ x = 720,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ },
+ ["Gilden"] = {
+ {
+ unit = "target",
+ auras = {"Shadow Word: Pain", "Purge the Wicked"},
+ auraFilter = "PLAYER HARMFUL",
+ x = 660,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ {
+ unit = "player",
+ auras = {"Power Word: Fortitude"},
+ auraFilter = "HELPFUL",
+ invert = true,
+ x = 720,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ {
+ unit = "player",
+ auras = {"Overcharge Mana"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 720,
+ y = 440,
+ width = 60,
+ height = 60,
+ },
+ },
["Gedren"] = {
{
totems = {1}, -- Efflorescence
- x = 570,
+ x = 660,
y = 440,
width = 80,
height = 80,
},
},
+ ["Gazden"] = {
+ {
+ unit = "player",
+ auras = {"Tidal Waves"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Healing Rain"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 700,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Unleash Life"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 740,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ },
+ ["Gran"] = {
+ {
+ unit = "player",
+ auras = {"Tidal Waves"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Healing Rain"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 700,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Unleash Life"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 740,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ },
+ ["Gedrin"] = {
+ {
+ unit = "pet",
+ auras = {"Frenzy"},
+ auraFilter = "HELPFUL",
+ x = 660,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
+ },
+ ["Iled"] = {
+ {
+ unit = "player",
+ auras = {"Arcane Intellect"},
+ auraFilter = "HELPFUL",
+ invert = true,
+ x = 720,
+ y = 460,
+ width = 60,
+ height = 60,
+ },
+ {
+ unit = "player",
+ auras = {"Rune of Power"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 460,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "target",
+ spec = 3, -- Frost
+ auras = {"Winter's Chill"},
+ auraFilter = "PLAYER HARMFUL",
+ x = 700,
+ y = 460,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Fire
+ auras = {"Sun King's Blessing"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 700,
+ y = 460,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ spec = 3, -- Frost
+ auras = {"Icy Veins"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 420,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Fire
+ auras = {"Combustion"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 420,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Fire
+ auras = {"Infernal Cascade"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 620,
+ y = 420,
+ width = 40,
+ height = 40,
+ },
+ {
+ unit = "player",
+ auras = {"Alter Time"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 700,
+ y = 420,
+ width = 40,
+ height = 40,
+ },
+ },
},
};
-- unit = unitID where to check auras, not required for totem checkers
-- spec = player spec index to show frame, if nil show always
-- auras = list of auras to track, in priority order
--- iterateAuras = iterate over UnitAura() instead of auras list
-- auraFilter = filter for UnitAura
-- totems = list of totem slots to track, in priority order, only checked if auras is nil
-- x = x position relative to UIParent bottom left
local settings = {
{
unit = "player",
- auras = {"Innervate"},
+ auras = {"Innervate", "Gift of the Titans", "Power Infusion"},
auraFilter = "HELPFUL",
x = 570,
y = 440,
width = 80,
height = 80,
},
+ {
+ unit = "player",
+ auras = {"Ineffable Truth"},
+ auraFilter = "HELPFUL",
+ x = 570,
+ y = 440,
+ width = 40,
+ height = 40,
+ },
{
unit = "player",
auras = {
"Delusions", "Entropic Blast", "Necrotic Embrace", "Flametouched", "Shadowtouched",
"Blazing Eruption", "Shattering Scream", "Consuming Hunger", "Unstable Soul",
- "Time Bomb", "Broken Shard", "Demolished",
+ "Time Bomb", "Broken Shard", "Demolished", "Fetid Rot", "Roiling Deceit",
+ "Putrid Blood", "Endemic Virus", "Lingering Infection", "Gigavolt Charge",
+ "Crackling Lightning", "Storm's Wail", "Death's Door", "Deathly Withering",
+ "Chilling Touch", "Volatile Charge", "Liquid Gold", "Drained Soul", "Evoke Anguish",
+ "Ancient Curse", "Corrosion", "Debilitating Spit", "Tasty Morsel", "Encroaching Shadows",
+ "Corrupted Existence", "Madness Bomb", "Crimson Chorus", "Essence Sap", "Bloodlight",
+ "Arcane Vulnerability", "Wicked Laceration", "Withering Touch", "Fragment of Destiny",
+ "Flameclasp Eruption", "Wailing Arrow", "Frozen Destruction",
+ "Remnant: Mort'regar's Echoes", "Barbed Arrow", "Scorn", "Ire", "Song of Dissolution",
+ "Grim Portent", "Exposed Threads of Fate", "Despair"
},
- iterateAuras = true, -- typically fewer debuffs on player than this list
auraFilter = "HARMFUL",
x = 660,
y = 530,
width = 80,
height = 80,
},
+ {
+ unit = "player",
+ auras = {
+ "Adaptive Membrane", "Gluttonous Miasma", "Remnant: Soulforge Heat"
+ },
+ auraFilter = "HARMFUL",
+ x = 660,
+ y = 780,
+ width = 160,
+ height = 160,
+ },
};
local frames = {};
local function updateAuraFrame(frame)
local unit = frame.unit;
if UnitExists(unit) and (not frame.spec or frame.spec == currentSpec) then
- local name, icon, count, duration, expires;
+ local name, icon, count, duration, expires, id;
local auraFilter = frame.auraFilter;
- if frame.iterateAuras then
- local i = 1;
- while true do
- name, _, icon, count, _, duration, expires = UnitAura(unit, i, auraFilter);
- if not name then break end
- -- possible improvement to add spellID as an option
- if frame.auras[name] then
- if count > 0 then
- frame.stack:SetText(count);
- frame.stack:Show();
- else
- frame.stack:Hide();
- end
- if expires > 0 then
- frame.cd:SetCooldown(expires - duration, duration);
- frame.cd:Show();
- else
- frame.cd:Hide();
- end
- frame.icon:SetTexture(icon);
- frame:Show();
- return;
+ local i = 1;
+ while true do
+ name, icon, count, _, duration, expires, _, _, _, id = UnitAura(unit, i, auraFilter);
+ if not name then break end
+ -- possible improvement to add spellID as an option
+ if frame.auras[name] and not frame.invert then
+ if count > 1 then
+ frame.stack:SetText(count);
+ frame.stack:Show();
+ else
+ frame.stack:Hide();
end
- i = i + 1;
- end
- else
- for _, aura in pairs(frame.auras) do
- name, _, icon, count, _, duration, expires = UnitAura(unit, aura, nil, auraFilter);
- if name then
- if count > 0 then
- frame.stack:SetText(count);
- frame.stack:Show();
- else
- frame.stack:Hide();
- end
- if expires > 0 then
- frame.cd:SetCooldown(expires - duration, duration);
- frame.cd:Show();
- else
- frame.cd:Hide();
- end
- frame.icon:SetTexture(icon);
- frame:Show();
- return;
+ if expires > 0 then
+ frame.cd:SetCooldown(expires - duration, duration);
+ frame.cd:Show();
+ else
+ frame.cd:Hide();
end
+ frame.icon:SetTexture(icon);
+ frame:Show();
+ return;
+ elseif frame.auras[name] and frame.invert then
+ frame.icon:SetTexture(icon);
+ frame:Hide();
+ return;
end
+ i = i + 1;
+ end
+ if frame.invert then
+ frame:Show(); -- not functional without first hiding once to get SetTexture
+ return;
end
end
frame:Hide();
frame:SetPoint("BOTTOMRIGHT", parent, "BOTTOMLEFT", config.x+config.width, config.y);
frame.unit = config.unit;
frame.spec = config.spec;
- frame.iterateAuras = config.iterateAuras;
- if frame.iterateAuras then
+ if config.auras then
frame.auras = {};
for _, v in pairs(config.auras) do
frame.auras[v] = true;
end
- else
- frame.auras = config.auras;
end
frame.auraFilter = config.auraFilter;
frame.totems = config.totems;
+ frame.invert = config.invert;
frame:Hide();
frame.base = frame:CreateTexture(nil, "BACKGROUND");
frame.base:SetAllPoints();
frame.icon:SetPoint("BOTTOMRIGHT", frame.base, "BOTTOMRIGHT", -1, 1);
frame.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93);
frame.stack = frame:CreateFontString(nil, "OVERLAY", "NumberFontNormalLarge");
+ frame.stack:SetFont(STANDARD_TEXT_FONT, 26, "OUTLINE");
frame.stack:SetPoint("TOPLEFT");
frame.stack:Hide();
frame.cd = CreateFrame("Cooldown", name.."CD", frame, "CooldownFrameTemplate");