Improved mob checks on CLEU.
F16Gaming [10-27-12 - 13:57]
Improved mob checks on CLEU.
diff --git a/KillTrack.lua b/KillTrack.lua
index 39f12de..dd12d75 100644
--- a/KillTrack.lua
+++ b/KillTrack.lua
@@ -48,12 +48,35 @@ local KT = KillTrack
local KTT = KillTrack_Tools
local DamageTrack = {}
+local DamageValid = {}
+
+local Units = {
+ "target",
+ "focus",
+ "pet"
+}
+
+for i = 1, 40 do
+ if i <= 5 then Units[#Units + 1] = "party" .. i end
+ Units[#Units + 1] = "raid" .. i
+end
+
+for i = 1, #Units * 2 do
+ Units[#Units + 1] = Units[i] .. "target"
+end
if KT.Version == "@" .. "project-version" .. "@" then
KT.Version = "Development"
KT.Debug = true
end
+local function FindUnitByGUID(guid)
+ for i = 1, #Units do
+ if UnitGUID(Units[i]) == guid then return Units[i] end
+ end
+ return nil
+end
+
function KT:OnEvent(_, event, ...)
if self.Events[event] then
self.Events[event](self, ...)
@@ -101,16 +124,29 @@ function KT.Events.COMBAT_LOG_EVENT_UNFILTERED(self, ...)
local event = (select(2, ...))
if event == "SWING_DAMAGE" or event == "RANGE_DAMAGE" or event == "SPELL_DAMAGE" then
local s_name = tostring((select(5, ...)))
- local t_id = tonumber(KTT:GUIDToID((select(8, ...))))
- DamageTrack[t_id] = s_name
+ local guid = (select(8, ...))
+ --local t_id = tonumber(KTT:GUIDToID((select(8, ...))))
+ DamageTrack[guid] = s_name
+ if not DamageValid[guid] then
+ local unit = FindUnitByGUID(guid)
+ if unit and UnitIsTappedByPlayer(unit) then
+ DamageValid[guid] = s_name == UnitName("player") or s_name == UnitName("pet") or (self.Global.COUNT_GROUP and self:IsInGroup(s_name))
+ end
+ end
end
if event ~= "UNIT_DIED" then return end
-- Perform solo/group checks
- local id = KTT:GUIDToID((select(8, ...)))
+ local guid = (select(8, ...))
+ local id = KTT:GUIDToID(guid)
local name = tostring((select(9, ...)))
- local lastDamage = DamageTrack[id] or "<No One>"
+ local lastDamage = DamageTrack[guid] or "<No One>"
local pass
- if lastDamage == UnitName("pet") then
+ -- All checks after DamageValid should be safe to remove
+ -- The checks after DamageValid are also not 100% failsafe
+ -- Scenario: You deal the killing blow to an already tapped mob <- Would count as kill with current code
+ if DamageValid[guid] then
+ pass = true
+ elseif lastDamage == UnitName("pet") then
pass = true
elseif self.Global.COUNT_GROUP then
pass = self:IsInGroup(lastDamage)
@@ -119,6 +155,8 @@ function KT.Events.COMBAT_LOG_EVENT_UNFILTERED(self, ...)
end
if not pass then return end
if id == 0 then return end
+ DamageTrack[guid] = nil
+ DamageValid[guid] = nil
self:AddKill(id, name)
if self.Timer:IsRunning() then
self.Timer:SetData("Kills", self.Timer:GetData("Kills", true) + 1)