Skip to content

Commit 3f36501

Browse files
committed
Separate Dispel By Me Status From DeBuffIcons
1 parent e5cf8b2 commit 3f36501

File tree

3 files changed

+140
-78
lines changed

3 files changed

+140
-78
lines changed

Plexus.toc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ Statuses\AltPower.lua
120120
Statuses\Auras.lua
121121

122122
#@retail@
123+
Statuses\DispelByMe.lua
123124
Statuses\Factions.lua
124125
#@end-retail@
125126
Statuses\Group.lua

Statuses/DeBuffIcons.lua

Lines changed: 13 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,6 @@ local PlexusRoster = _G.Plexus:GetModule("PlexusRoster")
1414
local PlexusFrame = _G.Plexus:GetModule("PlexusFrame")
1515
local PlexusDeDeBuffIcons = _G.Plexus:NewModule("PlexusDeDeBuffIcons", "AceBucket-3.0")
1616

17-
local PlexusStatusAuras = _G.Plexus:NewStatusModule("PlexusStatusDispelByMe", "AceTimer-3.0")
18-
PlexusStatusAuras.menuName = L["Dispelable By Me"]
19-
20-
PlexusStatusAuras.defaultDB = {
21-
dispelable_by_me = {
22-
enable = true,
23-
priority = 70,
24-
range = false,
25-
color = { r = 0, g = 0, b = 1.0, a = 1.0 },
26-
},
27-
}
28-
29-
function PlexusStatusAuras:PostInitialize()
30-
self:RegisterStatus("dispelable_by_me", L["Dispelable By Me"], nil, true)
31-
end
32-
3317
local function WithAllPlexusFrames(func)
3418
for _, frame in pairs(PlexusFrame.registeredFrames) do
3519
func(frame)
@@ -355,12 +339,6 @@ function PlexusDeDeBuffIcons:OnEnable()
355339
end
356340
self.enabled = nil
357341
return
358-
elseif PlexusStatusAuras.db.profile.dispelable_by_me.enabled then
359-
self:RegisterEvent("UNIT_AURA")
360-
self:RegisterEvent("UNIT_FLAGS")
361-
self:RegisterEvent("LOADING_SCREEN_DISABLED")
362-
self:RegisterMessage("Plexus_ExtraUnitsChanged", "ExtraUnitsChanged")
363-
self:UpdateAllUnitsBuffs()
364342
else
365343
self.enabled = true
366344
self:RegisterEvent("UNIT_AURA")
@@ -407,7 +385,6 @@ end
407385

408386
local UnitAuraInstanceID
409387
local function showBuffIcon(v, n, setting, icon, count, unit, instanceid)
410-
local settings = PlexusStatusAuras.db.profile.dispelable_by_me
411388
local DEBUFF_DISPLAY_COLOR_INFO = {
412389
[0] = DEBUFF_TYPE_NONE_COLOR,
413390
[1] = DEBUFF_TYPE_MAGIC_COLOR,
@@ -424,30 +401,21 @@ local function showBuffIcon(v, n, setting, icon, count, unit, instanceid)
424401
curve:AddPoint(i, c)
425402
end
426403
end
427-
if PlexusDeDeBuffIcons.db.profile.enabled then
428-
local dur = C_UnitAuras.GetAuraDuration(unit, instanceid)
429-
v.DeBuffIcons[n]:Show()
430-
v.DeBuffIcons[n].icon:SetTexture(icon)
431-
v.DeBuffIcons[n].auraid = instanceid
432-
--count = C_StringUtil.TruncateWhenZero(count)
433-
count = C_UnitAuras.GetAuraApplicationDisplayCount(unit, instanceid , 2 , 100)
434-
435-
v.DeBuffIcons[n].stack:SetText(count)
436-
v.DeBuffIcons[n].stack:Show()
437-
if dur then
438-
v.DeBuffIcons[n].cd:SetCooldownFromDurationObject(dur)
439-
end
404+
405+
local dur = C_UnitAuras.GetAuraDuration(unit, instanceid)
406+
v.DeBuffIcons[n]:Show()
407+
v.DeBuffIcons[n].icon:SetTexture(icon)
408+
v.DeBuffIcons[n].auraid = instanceid
409+
--count = C_StringUtil.TruncateWhenZero(count)
410+
count = C_UnitAuras.GetAuraApplicationDisplayCount(unit, instanceid , 2 , 100)
411+
412+
v.DeBuffIcons[n].stack:SetText(count)
413+
v.DeBuffIcons[n].stack:Show()
414+
if dur then
415+
v.DeBuffIcons[n].cd:SetCooldownFromDurationObject(dur)
440416
end
441-
local filter = "HARMFUL|RAID_PLAYER_DISPELLABLE"
417+
442418
local alpha = 0
443-
local ok, filtered = true, true
444-
for instanceID in pairs(UnitAuraInstanceID[v.unitGUID]) do
445-
ok, filtered = xpcall(function() return C_UnitAuras.IsAuraFilteredOutByInstanceID(unit, instanceID, filter) end, geterrorhandler())
446-
if ok and not filtered then
447-
alpha = 1
448-
break
449-
end
450-
end
451419
local dispelTypeColor = C_UnitAuras.GetAuraDispelTypeColor(unit, instanceid, curve)
452420
local R,G,B
453421
if dispelTypeColor then
@@ -456,38 +424,6 @@ local function showBuffIcon(v, n, setting, icon, count, unit, instanceid)
456424
if dispelTypeColor and R and G and B then
457425
v.DeBuffIcons[n]:SetBackdropBorderColor(R,G,B,alpha)
458426
end
459-
if settings.enabled then
460-
PlexusStatusAuras.core:SendStatusLost(v.unitGUID, "dispelable_by_me")
461-
if dispelTypeColor then
462-
if ok and not filtered then
463-
PlexusStatusAuras.core:SendStatusGained(v.unitGUID,
464-
"dispelable_by_me",
465-
settings.priority,
466-
nil,
467-
dispelTypeColor,
468-
nil,
469-
nil,
470-
nil,
471-
nil,
472-
nil,
473-
nil,
474-
nil,
475-
nil)
476-
end
477-
end
478-
end
479-
--if not v.DeBuffIcons[n].hooked then
480-
-- v.DeBuffIcons[n]:HookScript("OnUpdate", function(self, elapsed)
481-
-- if v.DeBuffIcons[n].auraid then
482-
-- local dur = C_UnitAuras.GetAuraDuration(v.unit, v.DeBuffIcons[n].auraid)
483-
-- local remains = dur:GetRemainingDuration()
484-
-- --local remains = dur:GetRemainingPercent()
485-
-- v.DeBuffIcons[n].cdtext:SetText(AbbreviateNumbers(remains))
486-
-- --print(v.DeBuffIcons[n].auraid)
487-
-- end
488-
-- end)
489-
-- v.DeBuffIcons[n].hooked = true
490-
--end
491427
end
492428

493429
local function updateFrame_df(v)
@@ -497,7 +433,6 @@ local function updateFrame_df(v)
497433
for i=n, MAX_BUFFS do --luacheck: ignore
498434
v.DeBuffIcons[i]:Hide()
499435
end
500-
PlexusStatusAuras.core:SendStatusLost(v.unitGUID, "dispelable_by_me")
501436

502437
if v.unit and UnitAuraInstanceID[v.unitGUID] then
503438
local numAuras = 0

Statuses/DispelByMe.lua

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
local _, Plexus = ...
2+
3+
local function IsRetailWow()
4+
return WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
5+
end
6+
7+
local UnitAura, UnitGUID, pairs = _G.UnitAura, _G.UnitGUID, _G.pairs
8+
9+
local L = setmetatable(PlexusDeDeBuffIconsLocale or {}, {__index = function(t, k) t[k] = k return k end})
10+
11+
local PlexusRoster = _G.Plexus:GetModule("PlexusRoster")
12+
13+
local PlexusStatusAuras = _G.Plexus:NewStatusModule("PlexusStatusDispelByMe", "AceTimer-3.0")
14+
PlexusStatusAuras.menuName = L["Dispelable By Me"]
15+
16+
PlexusStatusAuras.defaultDB = {
17+
dispelable_by_me = {
18+
enable = true,
19+
priority = 70,
20+
range = false,
21+
color = { r = 0, g = 0, b = 1.0, a = 1.0 },
22+
},
23+
}
24+
25+
function PlexusStatusAuras:PostInitialize()
26+
self:RegisterStatus("dispelable_by_me", L["Dispelable By Me"], nil, true)
27+
end
28+
29+
function PlexusStatusAuras:OnEnable()
30+
self:RegisterEvent("UNIT_AURA")
31+
self:RegisterEvent("UNIT_FLAGS")
32+
self:RegisterEvent("LOADING_SCREEN_DISABLED")
33+
self:UpdateAllUnitsBuffs()
34+
end
35+
36+
function PlexusStatusAuras:OnDisable()
37+
self:UnregisterEvent("UNIT_AURA")
38+
self:UnregisterEvent("UNIT_FLAGS")
39+
self:UnregisterEvent("LOADING_SCREEN_DISABLED")
40+
end
41+
42+
function PlexusStatusAuras:UNIT_FLAGS(_,unit)
43+
local hostile = UnitCanAttack("player", unit) or UnitIsCharmed(unitid)
44+
if hostile then
45+
self:UNIT_AURA("UpdateAllUnitsBuffs", unit, {isFullUpdate = true} )
46+
end
47+
end
48+
49+
function PlexusStatusAuras:LOADING_SCREEN_DISABLED()
50+
PlexusStatusAuras:UpdateAllUnitsBuffs()
51+
end
52+
53+
local UnitAuraInstanceID
54+
function PlexusStatusAuras:UNIT_AURA(_, unitid, updatedAuras)
55+
local settings = PlexusStatusAuras.db.profile.dispelable_by_me
56+
if not unitid then return end
57+
local guid = not Plexus.IsSpecialUnit[unitid] and UnitGUID(unitid) or unitid
58+
if not guid then return end
59+
60+
if not UnitAuraInstanceID then
61+
UnitAuraInstanceID = {}
62+
end
63+
if issecretvalue(guid) then
64+
return
65+
end
66+
if type(UnitAuraInstanceID[guid]) ~= "table" then
67+
UnitAuraInstanceID[guid] = {}
68+
end
69+
70+
if not Plexus.IsSpecialUnit[unitid] and not PlexusRoster:IsGUIDInRaid(guid) then return end
71+
local DEBUFF_DISPLAY_COLOR_INFO = {
72+
[0] = DEBUFF_TYPE_NONE_COLOR,
73+
[1] = DEBUFF_TYPE_MAGIC_COLOR,
74+
[2] = DEBUFF_TYPE_CURSE_COLOR,
75+
[3] = DEBUFF_TYPE_DISEASE_COLOR,
76+
[4] = DEBUFF_TYPE_POISON_COLOR,
77+
[9] = DEBUFF_TYPE_BLEED_COLOR, -- enrage
78+
[11] = DEBUFF_TYPE_BLEED_COLOR,
79+
}
80+
local curve = C_CurveUtil.CreateColorCurve()
81+
if curve then
82+
curve:SetType(Enum.LuaCurveType.Step)
83+
for i, c in pairs(DEBUFF_DISPLAY_COLOR_INFO) do
84+
curve:AddPoint(i, c)
85+
end
86+
end
87+
local filter = "HARMFUL|RAID_PLAYER_DISPELLABLE"
88+
local auradata = C_UnitAuras.GetUnitAuras(unitid, filter)
89+
UnitAuraInstanceID[guid] = {}
90+
for _,aura in pairs(auradata) do
91+
UnitAuraInstanceID[guid][aura.auraInstanceID] = aura
92+
end
93+
local ok, filtered = true, true
94+
local dispelTypeColor
95+
PlexusStatusAuras.core:SendStatusLost(guid, "dispelable_by_me")
96+
for instanceID in pairs(UnitAuraInstanceID[guid]) do
97+
ok, filtered = xpcall(function() return C_UnitAuras.IsAuraFilteredOutByInstanceID(unitid, instanceID, filter) end, geterrorhandler())
98+
if ok and not filtered then
99+
dispelTypeColor = C_UnitAuras.GetAuraDispelTypeColor(unitid, instanceID, curve)
100+
--if dispelTypeColor then
101+
if ok and not filtered then
102+
PlexusStatusAuras.core:SendStatusGained(guid,
103+
"dispelable_by_me",
104+
settings.priority,
105+
nil,
106+
dispelTypeColor or settings.color,
107+
nil,
108+
nil,
109+
nil,
110+
nil,
111+
nil,
112+
nil,
113+
nil,
114+
nil)
115+
end
116+
--end
117+
break
118+
end
119+
end
120+
end
121+
122+
function PlexusStatusAuras:UpdateAllUnitsBuffs()
123+
for _, unitid in PlexusRoster:IterateRoster() do
124+
self:UNIT_AURA("UpdateAllUnitsBuffs", unitid)
125+
end
126+
end

0 commit comments

Comments
 (0)