From 4a1dbe2d57e98e5a388edd9f7c63a973fe9ac819 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sat, 3 May 2014 00:26:08 +0000 Subject: [PATCH] Fix tracking of Bandit's Guile stacks before Insight buff appears. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1358 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleBanditsGuile.lua | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/OvaleBanditsGuile.lua b/OvaleBanditsGuile.lua index 0995157..555ea69 100644 --- a/OvaleBanditsGuile.lua +++ b/OvaleBanditsGuile.lua @@ -53,8 +53,10 @@ local SHALLOW_INSIGHT = 84745 local MODERATE_INSIGHT = 84746 local DEEP_INSIGHT = 84747 -- Spell IDs for abilities that proc Bandit's Guile. -local REVEALING_STRIKE = 84617 -local SINISTER_STRIKE = 1752 +local BANDITS_GUILE_ATTACK = { + [ 1752] = "Sinister Strike", + [84617] = "Revealing Strike", +} -- -- @@ -100,25 +102,30 @@ function OvaleBanditsGuile:Ovale_SpecializationChanged(event, specialization, pr end end +-- This event handler uses CLEU to track Bandit's Guile before it has procced any level of the +-- Insight buff. function OvaleBanditsGuile: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" and self.stacks < 4 then + if sourceGUID == self_guid and cleuEvent == "SPELL_DAMAGE" and self.stacks < 3 then local spellId = arg12 - if spellId == REVEALING_STRIKE or spellID == SINISTER_STRIKE then + if BANDITS_GUILE_ATTACK[spellId] then local now = API_GetTime() self.start = now - self.ending = now + INSIGHT_DURATION + self.ending = self.start + self.duration self.stacks = self.stacks + 1 self:GainedAura(now) end end end +-- This event handler uses Ovale_AuraAdded to track the Insight buff being applied for the first +-- time and sets the implied stacks of Bandit's Guile. function OvaleBanditsGuile:Ovale_AuraAdded(event, timestamp, target, auraId, caster) if target == self_guid then if auraId == SHALLOW_INSIGHT or auraId == MODERATE_INSIGHT or auraId == DEEP_INSIGHT then - -- Unregister for CLEU since we can now track stacks using refreshes on Insight buffs. - self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + local aura = OvaleAura:GetAura("player", auraId, "HELPFUL", true) + self.start, self.ending = aura.start, aura.ending + -- Set stacks to count implied by seeing the given aura added to the player. if auraId == SHALLOW_INSIGHT then self.stacks = 4 @@ -127,18 +134,23 @@ function OvaleBanditsGuile:Ovale_AuraAdded(event, timestamp, target, auraId, cas elseif auraId == DEEP_INSIGHT then self.stacks = 12 end - self.start, self.ending = OvaleAura:GetAura("player", auraId, "HELPFUL", true) + self:GainedAura(timestamp) end end end +-- This event handler uses Ovale_AuraChanged to track refreshes of the Insight buff, which indicates +-- that it the hidden Bandit's Guile buff has gained extra stacks. function OvaleBanditsGuile:Ovale_AuraChanged(event, timestamp, target, auraId, caster) if target == self_guid then if auraId == SHALLOW_INSIGHT or auraId == MODERATE_INSIGHT or auraId == DEEP_INSIGHT then + local aura = OvaleAura:GetAura("player", auraId, "HELPFUL", true) + self.start, self.ending = aura.start, aura.ending + -- A changed Insight buff also means that the Bandit's Guile hidden buff gained a stack. self.stacks = self.stacks + 1 - self.start, self.ending = OvaleAura:GetAura("player", auraId, "HELPFUL", true) + self:GainedAura(timestamp) end end @@ -149,28 +161,21 @@ function OvaleBanditsGuile:Ovale_AuraRemoved(event, timestamp, target, auraId, c if (auraId == SHALLOW_INSIGHT and self.stacks < 8) or (auraId == MODERATE_INSIGHT and self.stacks < 12) or auraId == DEEP_INSIGHT then - self.start = 0 - self.ending = math.huge + self.ending = timestamp self.stacks = 0 - self:LostAura(timestamp) - -- Register for CLEU again to track the aura before reaching Shallow Insight. - self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + OvaleAura:LostAuraOnGUID(self_guid, timestamp, self.spellId, self_guid) end end end function OvaleBanditsGuile:GainedAura(atTime) - atTime = atTime or API_GetTime() - OvaleAura:GainedAuraOnGUID(self_guid, atTime, self.spellId, self_guid, "HELPFUL", nil, nil, self.stacks, nil, INSIGHT_DURATION, self.ending, nil, self.name, nil, nil, nil) -end - -function OvaleBanditsGuile:LostAura(atTime) - atTime = atTime or API_GetTime() - OvaleAura:LostAuraOnGUID(self_guid, atTime, self.spellId, self_guid) + OvaleAura:GainedAuraOnGUID(self_guid, atTime, self.spellId, self_guid, "HELPFUL", nil, nil, self.stacks, nil, self.duration, self.ending, nil, self.name, nil, nil, nil) end function OvaleBanditsGuile:Debug() local aura = OvaleAura:GetAuraByGUID(self_guid, self.spellId, "HELPFUL", true) - Ovale:FormatPrint("Player has Bandit's Guile aura with start=%s, end=%s, stacks=%d.", aura.start, aura.ending, aura.stacks) + if aura then + Ovale:FormatPrint("Player has Bandit's Guile aura with start=%s, end=%s, stacks=%d.", aura.start, aura.ending, aura.stacks) + end end -- -- 1.7.9.5