From f65e46e8f0d2c355356f353e1955f23ba783ec5e Mon Sep 17 00:00:00 2001 From: Taracque Date: Wed, 18 May 2011 15:21:43 +0200 Subject: [PATCH] Flame Shock tracker now track untargeted Flameshocks to, up to 4 untargeted debuff tracked --- Change_log.txt | 211 +++++++++++++++++++++++++++--------------------------- Ele_GUI.lua | 32 +++++++-- Elementarist.lua | 53 +++++++++++++- 3 files changed, 181 insertions(+), 115 deletions(-) diff --git a/Change_log.txt b/Change_log.txt index 1d491e5..1f4fb66 100755 --- a/Change_log.txt +++ b/Change_log.txt @@ -1,108 +1,109 @@ **v2.0.0alpha** * Change: Earth Shock advice modified * Change: CL advised if more than 2 enemies are presents -* Bugfix: Better (and maybe faster) friend and foe detection - -**v1.9.9** -* Bugfix: Fixed friend and foe detection -* Change: Fire Nova advise if FS is on the target and enabled in config (thx Debose) -* Change: API version changed to 40100 -* Added: Mind Quickening detection - -**v1.9.8** -* Bugfix: Shadowform check fixed - -**v1.9.7** -* Bugfix: fixed a typo in Ele_GUI.lua - -**v1.9.6** -* Added: Unleashed Elements can be enabled in the configuration window - -**v1.9.5** -* Bugfix: Level 80 Flasks replaced with their lvl85 couterparts (Flask of Enhancement and Flask of the Draconic Mind) -* Bugfix: Wrath of Air Totem is not displayed if Moonkin aura, or Shadowform buff is on the player -* Misc: Minor code cleanups - -**v1.9.4** -* Updated to work with 4.0.3 -* Added: Unleash Elements just before Lava Burst, if mainhand weapon has temporary enchant (Flametongue) -* Removed: Single target CL behaviour removed - -**v1.9.3** -* Updated to work with 4.0.1 -* Added: Earth Shock added to rotation (suggested if Lightning Shield has 9 charges) -* Added: Shield tracker window, display Lightning Shield charges in a separate frame -* Added: Searing Totem suggestion if no fire totem is active -* Added: SpellFlash add-on support, if SpellFlash installed, advised spells will flash on you action bar -* Misc: Code cleanup - -**v1.6** -* Added: Chain Lightning behaviour can be changed from the configuration dialog - -**v1.5** -* Bugfix: talent change should not produce lua error anymore -* Bugfix: If Demonic Pact or Heart of the Crusader is active, Totem of Wrath not advised -* Added: A new type of behaviour can be selected, when FS advised just before LvB available -* Added: Threat warning in raid warning frame can be turned on -* Added: Flask of the North buff check if character is Alchemist, and has FotN in the bag - -**v1.4** -* Timing is better, it also calculates when current cast will finish - -**v1.3** -* Fire Nova displayed only if fire totem is active -* Spell queue is added -* Spell currently casted is not displayed (only if the next spell should be the same) - -**v1.2** -* Totem of Wrath is also advised if target doesn't have Totem of Wrath Debuff (i.e. target is to far away from Totem of Wrath) -* Talent detection improved, hopefully now works in all situations - -**v1.1** -* new option to disable Elementarist when not on elemental talent -* Fire Nova added to the rotation, in case of 3 or more foe detected (can be disabled in settings) -* Friend and foe detection runs only while in combat (makes Dalaran less CPU intensive) - -**v1.0rc1** -* Added configuration options for debuff tracker - -**v0.9.9a** -* Bugfix: CPU usage has been reduced (was a bug in 0.9.9) - -**v0.9.9** -* Flame Shock debuff tracker frame added as a separate frame, which shows remaining time for FS debuff on target - -**v0.9** -* Bugfixes in combat log parsing (friend and foe detection) -* Aggro alert (inverse cooldown effect on advised spell) not displayed if not in party, or no other friendly unit detected in combat - -**v0.8** -* DPS and Threat meter added, DPS displayed for the selected target, not the total dps output, Threat displayed as percentage -* Bugfixes - -**v0.7** -* Bugfix: Frame position stored correctly between session -* Bugfix: Lava Burst displays correctly - -**v0.6** -* Should work for lower level shamans -* Orc racial Blood Fury added - -**v0.5** -Configuration panel now should fully work - -**v0.4** -* Configuration panel added (can be accessed by /ele , or /elementarist slash commands) -* Alpha and scale of the frame is now changeable -* Frame can be locked, in that case it doesn't catch mouse clicks - -**v0.3** -* Elementarist hidden if player is controlling a vehicle. -* Berserking watched (in case of Troll player) -* On buff side, Flametongue is the 1st priority now - -**v0.2** -* Bugfix: Lava Burst displayed correctly - -**v0.1** -Initial version +* Bugfix: Better (and maybe faster) friend and foe detection +* Added: Flame Shock tracker now track untargeted Flameshocks to, up to 4 untargeted debuff tracked + +**v1.9.9** +* Bugfix: Fixed friend and foe detection +* Change: Fire Nova advise if FS is on the target and enabled in config (thx Debose) +* Change: API version changed to 40100 +* Added: Mind Quickening detection + +**v1.9.8** +* Bugfix: Shadowform check fixed + +**v1.9.7** +* Bugfix: fixed a typo in Ele_GUI.lua + +**v1.9.6** +* Added: Unleashed Elements can be enabled in the configuration window + +**v1.9.5** +* Bugfix: Level 80 Flasks replaced with their lvl85 couterparts (Flask of Enhancement and Flask of the Draconic Mind) +* Bugfix: Wrath of Air Totem is not displayed if Moonkin aura, or Shadowform buff is on the player +* Misc: Minor code cleanups + +**v1.9.4** +* Updated to work with 4.0.3 +* Added: Unleash Elements just before Lava Burst, if mainhand weapon has temporary enchant (Flametongue) +* Removed: Single target CL behaviour removed + +**v1.9.3** +* Updated to work with 4.0.1 +* Added: Earth Shock added to rotation (suggested if Lightning Shield has 9 charges) +* Added: Shield tracker window, display Lightning Shield charges in a separate frame +* Added: Searing Totem suggestion if no fire totem is active +* Added: SpellFlash add-on support, if SpellFlash installed, advised spells will flash on you action bar +* Misc: Code cleanup + +**v1.6** +* Added: Chain Lightning behaviour can be changed from the configuration dialog + +**v1.5** +* Bugfix: talent change should not produce lua error anymore +* Bugfix: If Demonic Pact or Heart of the Crusader is active, Totem of Wrath not advised +* Added: A new type of behaviour can be selected, when FS advised just before LvB available +* Added: Threat warning in raid warning frame can be turned on +* Added: Flask of the North buff check if character is Alchemist, and has FotN in the bag + +**v1.4** +* Timing is better, it also calculates when current cast will finish + +**v1.3** +* Fire Nova displayed only if fire totem is active +* Spell queue is added +* Spell currently casted is not displayed (only if the next spell should be the same) + +**v1.2** +* Totem of Wrath is also advised if target doesn't have Totem of Wrath Debuff (i.e. target is to far away from Totem of Wrath) +* Talent detection improved, hopefully now works in all situations + +**v1.1** +* new option to disable Elementarist when not on elemental talent +* Fire Nova added to the rotation, in case of 3 or more foe detected (can be disabled in settings) +* Friend and foe detection runs only while in combat (makes Dalaran less CPU intensive) + +**v1.0rc1** +* Added configuration options for debuff tracker + +**v0.9.9a** +* Bugfix: CPU usage has been reduced (was a bug in 0.9.9) + +**v0.9.9** +* Flame Shock debuff tracker frame added as a separate frame, which shows remaining time for FS debuff on target + +**v0.9** +* Bugfixes in combat log parsing (friend and foe detection) +* Aggro alert (inverse cooldown effect on advised spell) not displayed if not in party, or no other friendly unit detected in combat + +**v0.8** +* DPS and Threat meter added, DPS displayed for the selected target, not the total dps output, Threat displayed as percentage +* Bugfixes + +**v0.7** +* Bugfix: Frame position stored correctly between session +* Bugfix: Lava Burst displays correctly + +**v0.6** +* Should work for lower level shamans +* Orc racial Blood Fury added + +**v0.5** +Configuration panel now should fully work + +**v0.4** +* Configuration panel added (can be accessed by /ele , or /elementarist slash commands) +* Alpha and scale of the frame is now changeable +* Frame can be locked, in that case it doesn't catch mouse clicks + +**v0.3** +* Elementarist hidden if player is controlling a vehicle. +* Berserking watched (in case of Troll player) +* On buff side, Flametongue is the 1st priority now + +**v0.2** +* Bugfix: Lava Burst displayed correctly + +**v0.1** +Initial version diff --git a/Ele_GUI.lua b/Ele_GUI.lua index 3b07ea1..dc9f794 100755 --- a/Ele_GUI.lua +++ b/Ele_GUI.lua @@ -534,19 +534,20 @@ function Elementarist:CreateGUI() local debuffTracker = CreateFrame("Frame","ElementaristDebuffTrackerFrame",UIParent) debuffTracker:SetFrameStrata("BACKGROUND") - debuffTracker:SetWidth(50) + debuffTracker:SetWidth(100) debuffTracker:SetHeight(50) debuffTracker:SetBackdrop({ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, }) debuffTracker:SetBackdropColor(0, 0, 0, .0) debuffTracker:SetPoint(ElementaristDB.debuffrelativePoint,ElementaristDB.debuffx,ElementaristDB.debuffy) + debuffTracker:SetAlpha(ElementaristDB.debuffalpha) Elementarist.debuffTracker = debuffTracker local debuffTracker_cd = CreateFrame("Frame","$parent_debuff", ElementaristDebuffTrackerFrame) debuffTracker_cd:SetWidth(50) debuffTracker_cd:SetHeight(50) - debuffTracker_cd:SetPoint("CENTER", 0, 0) + debuffTracker_cd:SetPoint("TOPLEFT", 0, 0) t = debuffTracker_cd:CreateTexture(nil,"BACKGROUND") t:SetTexture(nil) t:SetAllPoints(debuffTracker_cd) @@ -564,11 +565,28 @@ function Elementarist:CreateGUI() debuffCooldownFrame:SetHeight(50) debuffCooldownFrame:SetWidth(50) debuffCooldownFrame:ClearAllPoints() - debuffCooldownFrame:SetPoint("CENTER", debuffTracker, "CENTER", 0, 0) - - debuffTracker:SetAlpha(ElementaristDB.debuffalpha) - - Elementarist.debuffCooldownFrame = debuffCooldownFrame + debuffCooldownFrame:SetPoint("TOPLEFT", Elementarist.debuffTracker, "TOPLEFT", 0, 0) + Elementarist.debuffCooldownFrame["main"] = debuffCooldownFrame + + for i=1,4,1 do + local debuffTracker_cd = CreateFrame("Frame","$parent_debuff_" .. tostring(i), ElementaristDebuffTrackerFrame) + debuffTracker_cd:SetWidth(25) + debuffTracker_cd:SetHeight(25) + debuffTracker_cd:SetPoint("TOPLEFT", 50 + (25 * ( (i - 1) % 2) ), - ( 25 * ( math.floor( (i - 1) / 2) ) ) ) + t = debuffTracker_cd:CreateTexture(nil,"BACKGROUND") + t:SetTexture(nil) + t:SetAllPoints(debuffTracker_cd) + t:SetAlpha(1) + debuffTracker_cd.texture = t + Elementarist.textureList["debuff_" .. tostring(i)] = t + + local debuffCooldownFrame = CreateFrame("Cooldown" ,"$parent_debuffcooldown_" .. tostring(i), ElementaristDebuffTrackerFrame, "CooldownFrameTemplate") + debuffCooldownFrame:SetHeight(25) + debuffCooldownFrame:SetWidth(25) + debuffCooldownFrame:ClearAllPoints() + debuffCooldownFrame:SetPoint("TOPLEFT", 50 + (25 * ( (i - 1) % 2) ), - ( 25 * ( math.floor( (i - 1) / 2) ) ) ) + Elementarist.debuffCooldownFrame["mini_" .. tostring(i)] = debuffCooldownFrame + end local shieldTracker = CreateFrame("Frame","ElementaristShieldTrackerFrame",UIParent) shieldTracker:SetFrameStrata("BACKGROUND") diff --git a/Elementarist.lua b/Elementarist.lua index 666db7b..1a8529d 100755 --- a/Elementarist.lua +++ b/Elementarist.lua @@ -25,6 +25,8 @@ Elementarist.person = { ["friend"] = {}, ["foe"] = {} } +Elementarist.debuffCooldowns = { +} Elementarist.lastPersonTablePurged = 0.0; Elementarist.configPanel = nil Elementarist.prevDB = {} @@ -81,6 +83,13 @@ Elementarist.SpellList = { ["Flask of the Draconic Mind"] = GetSpellInfo(79470), ["Lifeblood"] = GetSpellInfo(55503) } +Elementarist.debuffCooldownFrame = { + ["main"] = nil, + ["mini_1"] = nil, + ["mini_2"] = nil, + ["mini_3"] = nil, + ["mini_4"] = nil +} Elementarist.textureList = { ["next"] = nil, ["next1"] = nil, @@ -88,6 +97,10 @@ Elementarist.textureList = { ["misc"] = nil, ["int"] = nil, ["debuff"] = nil, + ["debuff_1"] = nil, + ["debuff_2"] = nil, + ["debuff_3"] = nil, + ["debuff_4"] = nil, ["shield"] = nil } @@ -279,6 +292,14 @@ function Elementarist:RemoveFromTables(guid) Elementarist.person["foeCount"] = Elementarist.person["foeCount"] - 1 Elementarist:Debug('Friend died:', Elementarist.person["friendCount"]) end + if (Elementarist.debuffCooldowns[guid]) then + table.remove(Elementarist.debuffCooldowns, guid) + Elementarist:UpdateDebuffTracker() + end +end + +function Elementarist:PurgeDebuffTable() + Elementarist.debuffCooldowns = {} end function Elementarist:PurgePersonTable() @@ -455,6 +476,7 @@ function Elementarist.events.PLAYER_REGEN_ENABLED(...) Elementarist.textList["debuff"]:SetText("") Elementarist.cooldownFrame:SetReverse(false) Elementarist:PurgePersonTable() + Elementarist:PurgeDebuffTable() end function Elementarist:isEnabled() @@ -485,19 +507,44 @@ end function Elementarist:UpdateDebuffTracker() local name, _, icon, _, _, d, e = Elementarist:hasDeBuff("target",Elementarist.SpellList["Flame Shock"],"player") + local tguid = UnitGUID("target") Elementarist.debuffTrackerUpdate = GetTime() if (name) then + if (tguid) and (not Elementarist.debuffCooldowns[tguid]) then + Elementarist.debuffCooldowns[tguid] = {} + end + Elementarist.debuffCooldowns[tguid]["start"] = e-d + Elementarist.debuffCooldowns[tguid]["duration"] = d + else + _, _, icon = GetSpellInfo(Elementarist.SpellList["Flame Shock"]) + end + + -- update mini frames + local m = 1 + for i,v in pairs(Elementarist.debuffCooldowns) do + if ( (v["start"] + v["duration"]) > GetTime() ) and (i ~= tguid) and (m <= 4) then + Elementarist.textureList["debuff_" .. tostring(m)]:SetTexture(icon) + Elementarist.debuffCooldownFrame["mini_" .. tostring(m)]:SetCooldown( v["start"], v["duration"]) + + m = m + 1 + end + end + for i=m,4,1 do + Elementarist.textureList["debuff_" .. tostring(m)]:SetTexture(nil) + Elementarist.debuffCooldownFrame["mini_" .. tostring(m)]:SetCooldown( 0, 0) + end + + if (name) then Elementarist.textureList["debuff"]:SetTexture(icon) if (not Elementarist.OmniCC) then Elementarist.textList["debuff"]:SetText(format('%.1f', (e - GetTime()))) end - Elementarist.debuffCooldownFrame:SetCooldown( e-d, d) - + Elementarist.debuffCooldownFrame["main"]:SetCooldown( e-d, d) else Elementarist.textureList["debuff"]:SetTexture(nil) Elementarist.textList["debuff"]:SetText("") - Elementarist.debuffCooldownFrame:SetCooldown(0, 0) + Elementarist.debuffCooldownFrame["main"]:SetCooldown(0, 0) end end -- 1.7.9.5