From 270e4f7400753cf523821ba8a6429d11ef83d679 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Mon, 21 Apr 2014 05:02:48 +0000 Subject: [PATCH] Properly handle hunter attacks removing the pre-Steady Focus buff. Some spells don't do any damage on hit and must be tracked in other ways, e.g., checking for a debuff applied that does the actual damage, or otherwise, just checking for successful spellcast. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1307 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleSteadyFocus.lua | 49 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/OvaleSteadyFocus.lua b/OvaleSteadyFocus.lua index 8fc3b97..6eb675e 100644 --- a/OvaleSteadyFocus.lua +++ b/OvaleSteadyFocus.lua @@ -50,18 +50,27 @@ local STEADY_FOCUS = 53220 -- Steady Shot spell Id. local STEADY_SHOT = 56641 -- Spell IDs of abilities that clear "pre-Steady Focus". -local RANGED_ATTACKS_MM = { +local RANGED_ATTACKS_DAMAGING = { [ 1978] = "Serpent Sting", [ 2643] = "Multi-Shot", [ 3044] = "Arcane Shot", - [ 13813] = "Explosive Trap", [ 19434] = "Aimed Shot", [ 19503] = "Scatter Shot", - [ 34490] = "Silencing Shot", [ 53209] = "Chimera Shot", [ 53351] = "Kill Shot", [109259] = "Powershot", [117050] = "Glaive Toss", + [120360] = "Barrage", + [120361] = "Barrage", + [120761] = "Glaive Toss", + [121414] = "Glaive Toss", +} +local RANGED_ATTACKS_ON_CAST = { + [ 19801] = "Tranquilizing Shot", + [ 34490] = "Silencing Shot", +} +local RANGED_ATTACKS_BY_DEBUFF = { + [118253] = "Serpent Sting", } -- @@ -104,23 +113,35 @@ end function OvaleSteadyFocus:COMBAT_LOG_EVENT_UNFILTERED(event, timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, ...) local arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23 = ... - if sourceGUID == self_guid and cleuEvent == "SPELL_DAMAGE" then - local spellId = arg12 - if spellId == STEADY_SHOT and self.stacks == 0 then - local now = API_GetTime() - if now - self.ending > 1 then - self:GainedAura(now) + if sourceGUID == self_guid then + if cleuEvent == "SPELL_DAMAGE" then + local spellId = arg12 + if spellId == STEADY_SHOT and self.stacks == 0 then + local now = API_GetTime() + if now - self.ending > 1 then + self:GainedAura(now) + end + elseif RANGED_ATTACKS_DAMAGING[spellId] and self.stacks > 0 then + local now = API_GetTime() + self:LostAura(now) + end + elseif cleuEvent == "SPELL_CAST_SUCCESS" then + local spellId = arg12 + if RANGED_ATTACKS_ON_CAST[spellId] and self.stacks > 0 then + local now = API_GetTime() + self:LostAura(now) end - elseif RANGED_ATTACKS_MM[spellId] and self.stacks > 0 then - local now = API_GetTime() - self:LostAura(now) end end end function OvaleSteadyFocus:Ovale_AuraAdded(event, timestamp, target, auraId, caster) - if target == self_guid and auraId == STEADY_FOCUS and self.stacks > 0 then - self:LostAura(timestamp) + if self.stacks > 0 then + if auraId == STEADY_FOCUS and target == self_guid then + self:LostAura(timestamp) + elseif RANGED_ATTACKS_BY_DEBUFF[auraId] and caster == self_guid then + self:LostAura(timestamp) + end end end -- 1.7.9.5