mirror of
https://github.com/Relintai/Relintais-Enemy-Kooldown-Tracker-TBC.git
synced 2025-02-04 16:16:09 +01:00
-Fixed a bug:
The DR Frames now properly reposition themself after the frames are locked, without the need for a relog or /reload. (I have no idea how I didn't catch this earlier). Also, when the frames are unlocked, the DR frames properly hide their contents. -Fixed a bug: On the server I tested this I noticed that SPELL_AURA_REFRESH event is sent even on the first CC apply, this made the DR frasem break, but was hard to catch in action.
This commit is contained in:
parent
84783b4bf3
commit
d2c6709ba3
11
Rekt.lua
11
Rekt.lua
@ -322,7 +322,7 @@ function Rekt:COMBAT_LOG_EVENT_UNFILTERED(_, timestamp, eventType, srcGUID, srcN
|
|||||||
end
|
end
|
||||||
|
|
||||||
--DR stuff
|
--DR stuff
|
||||||
if( eventType == "SPELL_AURA_APPLIED" ) then
|
if (eventType == "SPELL_AURA_APPLIED") then
|
||||||
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
||||||
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
||||||
|
|
||||||
@ -335,20 +335,19 @@ function Rekt:COMBAT_LOG_EVENT_UNFILTERED(_, timestamp, eventType, srcGUID, srcN
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Enemy had a debuff refreshed before it faded, so fade + gain it quickly
|
-- Enemy had a debuff refreshed before it faded, so fade + gain it quickly
|
||||||
elseif(eventType == "SPELL_AURA_REFRESH" ) then
|
elseif (eventType == "SPELL_AURA_REFRESH") then
|
||||||
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
||||||
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
||||||
|
|
||||||
if (not isPlayer and not libDRData:IsPVE(drCat)) then
|
if (not isPlayer and not libDRData:IsPVE(drCat)) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
Rekt:DRDebuffFaded(spellID, dstGUID, isPlayer);
|
Rekt:DRDebuffRefreshed(spellID, dstGUID, isPlayer);
|
||||||
Rekt:DRDebuffGained(spellID, dstGUID, isPlayer);
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Buff or debuff faded from an enemy
|
-- Buff or debuff faded from an enemy
|
||||||
elseif(eventType == "SPELL_AURA_REMOVED" ) then
|
elseif (eventType == "SPELL_AURA_REMOVED") then
|
||||||
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
if(detail1 == "DEBUFF" and libDRData:GetSpellCategory(spellID)) then
|
||||||
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
local isPlayer = (bit.band(dstFlags, COMBATLOG_OBJECT_TYPE_PLAYER) == COMBATLOG_OBJECT_TYPE_PLAYER or bit.band(dstFlags, COMBATLOG_OBJECT_CONTROL_PLAYER) == COMBATLOG_OBJECT_CONTROL_PLAYER)
|
||||||
|
|
||||||
|
118
data/drs.lua
118
data/drs.lua
@ -26,6 +26,8 @@ function Rekt:DRDebuffGained(spellID, dstGUID, isPlayer)
|
|||||||
local endTime = currentTime + cd;
|
local endTime = currentTime + cd;
|
||||||
local diminished = 1;
|
local diminished = 1;
|
||||||
local isDiminishingStarted = false;
|
local isDiminishingStarted = false;
|
||||||
|
local lastTimeApplied = GetTime();
|
||||||
|
|
||||||
Rekt.drs[dstGUID][drCat] = {
|
Rekt.drs[dstGUID][drCat] = {
|
||||||
currentTime,
|
currentTime,
|
||||||
endTime,
|
endTime,
|
||||||
@ -34,9 +36,15 @@ function Rekt:DRDebuffGained(spellID, dstGUID, isPlayer)
|
|||||||
spellID,
|
spellID,
|
||||||
diminished,
|
diminished,
|
||||||
isDiminishingStarted,
|
isDiminishingStarted,
|
||||||
drCat
|
drCat,
|
||||||
|
lastTimeApplied
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
--self:Print("asd");
|
||||||
|
if Rekt:ShouldIgnoreDRApply(Rekt.drs[dstGUID][drCat]) then
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
local cd = 18;
|
local cd = 18;
|
||||||
local currentTime = GetTime();
|
local currentTime = GetTime();
|
||||||
local endTime = currentTime + cd;
|
local endTime = currentTime + cd;
|
||||||
@ -46,6 +54,7 @@ function Rekt:DRDebuffGained(spellID, dstGUID, isPlayer)
|
|||||||
Rekt.drs[dstGUID][drCat][5] = spellID;
|
Rekt.drs[dstGUID][drCat][5] = spellID;
|
||||||
Rekt.drs[dstGUID][drCat][6] = Rekt.drs[dstGUID][drCat][6] + 1;
|
Rekt.drs[dstGUID][drCat][6] = Rekt.drs[dstGUID][drCat][6] + 1;
|
||||||
Rekt.drs[dstGUID][drCat][7] = false;
|
Rekt.drs[dstGUID][drCat][7] = false;
|
||||||
|
Rekt.drs[dstGUID][drCat][9] = GetTime();
|
||||||
|
|
||||||
--reset it back to 1, x > 3 means, the server updated the dr in less than 18 sec.
|
--reset it back to 1, x > 3 means, the server updated the dr in less than 18 sec.
|
||||||
if Rekt.drs[dstGUID][drCat][6] > 3 then
|
if Rekt.drs[dstGUID][drCat][6] > 3 then
|
||||||
@ -73,7 +82,7 @@ function Rekt:DRDebuffFaded(spellID, dstGUID, isPlayer)
|
|||||||
if not db["enabled"] then return end;
|
if not db["enabled"] then return end;
|
||||||
|
|
||||||
if not Rekt.drs[dstGUID] then
|
if not Rekt.drs[dstGUID] then
|
||||||
Rekt.drs[dstGUID] = {}
|
Rekt:DRDebuffGained(spellID, dstGUID, isPlayer);
|
||||||
end
|
end
|
||||||
|
|
||||||
local drCat = libDRData:GetSpellCategory(spellID);
|
local drCat = libDRData:GetSpellCategory(spellID);
|
||||||
@ -83,21 +92,7 @@ function Rekt:DRDebuffFaded(spellID, dstGUID, isPlayer)
|
|||||||
|
|
||||||
if not Rekt.drs[dstGUID][drCat] then
|
if not Rekt.drs[dstGUID][drCat] then
|
||||||
--means we didn't see it applied
|
--means we didn't see it applied
|
||||||
local cd = 18;
|
Rekt:DRDebuffGained(spellID, dstGUID, isPlayer);
|
||||||
local currentTime = GetTime();
|
|
||||||
local endTime = currentTime + cd;
|
|
||||||
local diminished = 1;
|
|
||||||
local isDiminishingStarted = true;
|
|
||||||
Rekt.drs[dstGUID][drCat] = {
|
|
||||||
currentTime,
|
|
||||||
endTime,
|
|
||||||
cd,
|
|
||||||
spellIcon,
|
|
||||||
spellID,
|
|
||||||
diminished,
|
|
||||||
isDiminishingStarted,
|
|
||||||
drCat
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
local cd = 18;
|
local cd = 18;
|
||||||
local currentTime = GetTime();
|
local currentTime = GetTime();
|
||||||
@ -105,6 +100,7 @@ function Rekt:DRDebuffFaded(spellID, dstGUID, isPlayer)
|
|||||||
Rekt.drs[dstGUID][drCat][1] = currentTime;
|
Rekt.drs[dstGUID][drCat][1] = currentTime;
|
||||||
Rekt.drs[dstGUID][drCat][2] = endTime;
|
Rekt.drs[dstGUID][drCat][2] = endTime;
|
||||||
Rekt.drs[dstGUID][drCat][7] = true;
|
Rekt.drs[dstGUID][drCat][7] = true;
|
||||||
|
--Rekt.drs[dstGUID][drCat][9] = GetTime();
|
||||||
end
|
end
|
||||||
|
|
||||||
--self:Print(Rekt.cds[srcGUID][spellID][1] .. " " .. Rekt.cds[srcGUID][spellID][2] .. " " .. Rekt.cds[srcGUID][spellID][3]);
|
--self:Print(Rekt.cds[srcGUID][spellID][1] .. " " .. Rekt.cds[srcGUID][spellID][2] .. " " .. Rekt.cds[srcGUID][spellID][3]);
|
||||||
@ -122,17 +118,95 @@ function Rekt:DRDebuffFaded(spellID, dstGUID, isPlayer)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Rekt:DRDebuffRefreshed(spellID, dstGUID, isPlayer)
|
||||||
|
local db = Rekt.db.profile;
|
||||||
|
if not db["enabled"] then return end;
|
||||||
|
|
||||||
|
if not Rekt.drs[dstGUID] then
|
||||||
|
Rekt:DRDebuffGained(spellID, dstGUID, isPlayer);
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
|
local drCat = libDRData:GetSpellCategory(spellID);
|
||||||
|
local spellName, spellRank, spellIcon = GetSpellInfo(spellID);
|
||||||
|
|
||||||
|
Rekt:UpdateDRs(dstGUID);
|
||||||
|
|
||||||
|
if not Rekt.drs[dstGUID][drCat] then
|
||||||
|
--means we didn't see it applied
|
||||||
|
Rekt:DRDebuffGained(spellID, dstGUID, isPlayer);
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
local cd = 18;
|
||||||
|
local currentTime = GetTime();
|
||||||
|
local endTime = currentTime + cd;
|
||||||
|
Rekt.drs[dstGUID][drCat][1] = currentTime;
|
||||||
|
Rekt.drs[dstGUID][drCat][2] = currentTime + cd;
|
||||||
|
Rekt.drs[dstGUID][drCat][4] = spellIcon;
|
||||||
|
Rekt.drs[dstGUID][drCat][5] = spellID;
|
||||||
|
Rekt.drs[dstGUID][drCat][6] = Rekt.drs[dstGUID][drCat][6] + 1;
|
||||||
|
Rekt.drs[dstGUID][drCat][7] = false;
|
||||||
|
Rekt.drs[dstGUID][drCat][9] = GetTime();
|
||||||
|
|
||||||
|
--reset it back to 1, x > 3 means, the server updated the dr in less than 18 sec.
|
||||||
|
if Rekt.drs[dstGUID][drCat][6] > 3 then
|
||||||
|
Rekt.drs[dstGUID][drCat][6] = 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--self:Print(Rekt.cds[srcGUID][spellID][1] .. " " .. Rekt.cds[srcGUID][spellID][2] .. " " .. Rekt.cds[srcGUID][spellID][3]);
|
||||||
|
|
||||||
|
if self.targets["target"] == dstGUID then
|
||||||
|
self:ReassignDRs("targetdr");
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.targets["focus"] == dstGUID then
|
||||||
|
self:ReassignDRs("focusdr");
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.targets["self"] == dstGUID then
|
||||||
|
self:ReassignDRs("selfdr");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Is the DR registered?
|
||||||
|
function Rekt:IsDRRegistered(spellID, dstGUID, isPlayer)
|
||||||
|
if not Rekt.drs[dstGUID][drCat] then
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- This function is needed, because TBC servers fire SPELL_AURA_REFRESH, then SPELL_AURA_APPLIED, even if this is the first
|
||||||
|
-- time the buff is applied.
|
||||||
|
function Rekt:ShouldIgnoreDRApply(drData)
|
||||||
|
local delta = GetTime() - drData[9];
|
||||||
|
--self:Print(delta .. " " .. GetTime() .. " " .. drData[9]);
|
||||||
|
|
||||||
|
--This Might still have false positives, but I guess this is the right tradeoff
|
||||||
|
--it's still better that to just ignore refreshed alltogether if the player didn't see the first apply
|
||||||
|
if (delta < 0.1) then
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
|
||||||
|
return false;
|
||||||
|
end
|
||||||
|
|
||||||
function Rekt:ReassignDRs(which)
|
function Rekt:ReassignDRs(which)
|
||||||
local db = Rekt.db.profile;
|
local db = Rekt.db.profile;
|
||||||
--bail out early, if frames are disabled
|
--bail out early, if frames are disabled
|
||||||
if not db[which]["enabled"] or not db["enabled"] then return end;
|
if not db[which]["enabled"] or not db["enabled"] then return end;
|
||||||
|
|
||||||
--first hide all
|
--first hide all
|
||||||
for i = 1, 18 do
|
for i = 1, 18 do
|
||||||
local frame = Rekt.frames[which][i]["frame"];
|
local frame = Rekt.frames[which][i]["frame"];
|
||||||
frame:Hide();
|
frame:Hide();
|
||||||
end
|
end
|
||||||
|
|
||||||
--check if frames are unlocked
|
--check if frames are unlocked
|
||||||
if not db["locked"] then return end;
|
if not db["locked"] then return end;
|
||||||
|
|
||||||
--check if we have cooldown for that unit
|
--check if we have cooldown for that unit
|
||||||
local whichs = "";
|
local whichs = "";
|
||||||
if which == "targetdr" then
|
if which == "targetdr" then
|
||||||
@ -144,14 +218,17 @@ function Rekt:ReassignDRs(which)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not self.drs[self.targets[whichs]] then return end;
|
if not self.drs[self.targets[whichs]] then return end;
|
||||||
|
|
||||||
--update then
|
--update then
|
||||||
Rekt:UpdateDRs(self.targets[whichs]);
|
Rekt:UpdateDRs(self.targets[whichs]);
|
||||||
|
|
||||||
--sort them
|
--sort them
|
||||||
local tmp = Rekt:SortDRs(whichs);
|
local tmp = Rekt:SortDRs(whichs);
|
||||||
|
|
||||||
--let's fill them up
|
--let's fill them up
|
||||||
local i = 1;
|
local i = 1;
|
||||||
for k, v in ipairs(tmp) do
|
for k, v in ipairs(tmp) do
|
||||||
--self:Print(v["spellID"]);
|
--self:Print(v["diminished"]);
|
||||||
local frame = Rekt.frames[which][i]["frame"];
|
local frame = Rekt.frames[which][i]["frame"];
|
||||||
local text = Rekt.frames[which][i]["texture"];
|
local text = Rekt.frames[which][i]["texture"];
|
||||||
text:SetTexture(v["spellIcon"]);
|
text:SetTexture(v["spellIcon"]);
|
||||||
@ -171,6 +248,7 @@ function Rekt:ReassignDRs(which)
|
|||||||
frame:Show();
|
frame:Show();
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
end
|
end
|
||||||
|
--self:Print("--------");
|
||||||
end
|
end
|
||||||
|
|
||||||
function Rekt:SortDRs(which)
|
function Rekt:SortDRs(which)
|
||||||
@ -187,7 +265,8 @@ function Rekt:SortDRs(which)
|
|||||||
spellIcon = v[4],
|
spellIcon = v[4],
|
||||||
spellID = v[5],
|
spellID = v[5],
|
||||||
diminished = v[6],
|
diminished = v[6],
|
||||||
isDiminishingStarted = v[7]
|
isDiminishingStarted = v[7],
|
||||||
|
lastTimeApplied = v[8]
|
||||||
};
|
};
|
||||||
|
|
||||||
--self:Print(v[1] .. v[2] .. v[3] .. v[4] .. v[5])
|
--self:Print(v[1] .. v[2] .. v[3] .. v[4] .. v[5])
|
||||||
@ -213,6 +292,7 @@ function Rekt:SortDRs(which)
|
|||||||
table.sort(tmp, function(a, b) return Rekt:ComparerRecentLast(a, b) end);
|
table.sort(tmp, function(a, b) return Rekt:ComparerRecentLast(a, b) end);
|
||||||
end
|
end
|
||||||
--["7"] = "No order"
|
--["7"] = "No order"
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -136,15 +136,29 @@ end
|
|||||||
function Rekt:LockFrames()
|
function Rekt:LockFrames()
|
||||||
self:MoveTimersStop("target");
|
self:MoveTimersStop("target");
|
||||||
self:MoveTimersStop("focus");
|
self:MoveTimersStop("focus");
|
||||||
|
|
||||||
|
self:MoveDRTimersStop("targetdr");
|
||||||
|
self:MoveDRTimersStop("focusdr");
|
||||||
|
self:MoveDRTimersStop("selfdr");
|
||||||
|
|
||||||
self:HideMovableFrames()
|
self:HideMovableFrames()
|
||||||
self:ReassignCds("target");
|
self:ReassignCds("target");
|
||||||
self:ReassignCds("focus");
|
self:ReassignCds("focus");
|
||||||
|
|
||||||
|
self:ReassignDRs("targetdr");
|
||||||
|
self:ReassignDRs("focusdr");
|
||||||
|
self:ReassignDRs("selfdr");
|
||||||
end
|
end
|
||||||
|
|
||||||
function Rekt:UnlockFrames()
|
function Rekt:UnlockFrames()
|
||||||
--this will hide the frames
|
--this will hide the frames
|
||||||
self:ReassignCds("target");
|
self:ReassignCds("target");
|
||||||
self:ReassignCds("focus");
|
self:ReassignCds("focus");
|
||||||
|
|
||||||
|
self:ReassignDRs("targetdr");
|
||||||
|
self:ReassignDRs("focusdr");
|
||||||
|
self:ReassignDRs("selfdr");
|
||||||
|
|
||||||
Rekt:ShowMovableFrames();
|
Rekt:ShowMovableFrames();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user