400 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			400 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
| TODO:
 | |
| Add interrupts / stuns / breaks by looking at friendly spells cast on the GUID's
 | |
| Add support for default UI (!!!)
 | |
| Mob deaths remove namepaltes, handle glow maybe?
 | |
| Rework for GetSpellInfo instead of GetCastingInfo
 | |
|  if no namepalte found GetSpellinfo!!!!!! BIG IQ
 | |
| Watch for damage on avengers instead of cast
 | |
| ]]
 | |
| 
 | |
| --TSU
 | |
| --COMBAT_LOG_EVENT_UNFILTERED HIDE_ALLSTATES_CAST NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED
 | |
| function(allstates, e, ...)
 | |
|     local scan = false
 | |
|     local casterGUID, caster, spell, se, interrupted = false
 | |
|     if e == "COMBAT_LOG_EVENT_UNFILTERED" then
 | |
|         se = select(2, ...)
 | |
|         if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then
 | |
|             local casterFlags = select(6, ...)
 | |
|             if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC
 | |
|                 casterGUID = select(4, ...)
 | |
|                 caster = select(5, ...)
 | |
|                 spell = select(13, ...)
 | |
|                 scan = true
 | |
|             end
 | |
|         elseif e == "SPELL_CAST_FAILED" then
 | |
|             if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC
 | |
|                 casterGUID = select(4, ...)
 | |
|                 if allstates[casterGUID] then
 | |
|                     allstates[casterGUID].show = true
 | |
|                     allstates[casterGUID].changed = true
 | |
|                     allstates[casterGUID].progressType = "static"
 | |
|                     allstates[casterGUID].value = 1
 | |
|                     allstates[casterGUID].total = 1
 | |
|                     C_Timer.After(1.5, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end)
 | |
|                 end
 | |
|             end
 | |
|         end
 | |
|     elseif e == "HIDE_ALLSTATES_CAST" then
 | |
|         local casterGUID = ...
 | |
|         if allstates[casterGUID] then
 | |
|             allstates[casterGUID].show = false
 | |
|             allstates[casterGUID].changed = true
 | |
|             return true
 | |
|         end
 | |
|     elseif e == "NAME_PLATE_UNIT_REMOVED" then
 | |
|         local u = ...
 | |
|         local uGUID = UnitGUID(u)
 | |
|         --print(uGUID, "nameplate removed")
 | |
|         if allstates[uGUID] then
 | |
|             aura_env.glow(u, 0)
 | |
|         end
 | |
|     elseif e == "NAME_PLATE_UNIT_ADDED" then
 | |
|         local u = ...
 | |
|         local uGUID = UnitGUID(u)
 | |
|         --print(uGUID, "nameplate added")
 | |
|         if allstates[uGUID] then
 | |
|             aura_env.glow(u, 1)
 | |
|         end
 | |
|     end
 | |
|     if scan == true then
 | |
|         for i = 1, 40 do
 | |
|             local unit = "nameplate" .. i
 | |
|             if UnitExists(unit) then
 | |
|                 local unitGUID = UnitGUID(unit)
 | |
|                 if unitGUID == casterGUID then
 | |
|                     if se and (se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS") then
 | |
|                         if UnitCastingInfo(unit) then
 | |
|                             if aura_env.spells[spell] then
 | |
|                                 local _, _, _, texture, startTime, endTime = UnitCastingInfo(unit)
 | |
|                                 local remainingTime = math.floor(endTime - (GetTime() * 1000))
 | |
|                                 local castTime = endTime - startTime
 | |
|                                 local castTimeDisplay = math.floor((castTime / 1000) * 10) / 10
 | |
|                                 local castDisplay = math.floor((remainingTime / 1000) * 10) / 10
 | |
|                                 local target = select(9, ...)
 | |
|                                 print(select(8, ...), select(9, ...), select(10, ...))
 | |
|                                 --print(endTime / 1000, castTimeDisplay, GetTime())
 | |
|                                 --print(unit)
 | |
|                                 --print("Adding", casterGUID, "to allstates")
 | |
|                                 if castTime > 1000 then
 | |
|                                     allstates[casterGUID] = {
 | |
|                                         changed = true,
 | |
|                                         show = true,
 | |
|                                         resort = true,
 | |
|                                         index = remainingTime,
 | |
|                                         icon = texture,
 | |
|                                         
 | |
|                                         progressType = "timed",
 | |
|                                         expirationTime = endTime / 1000,
 | |
|                                         duration = castTimeDisplay,
 | |
|                                         autoHide = true,
 | |
|                                         
 | |
|                                         name = caster,
 | |
|                                         spell = spell,
 | |
|                                         unitGUID = unitGUID,
 | |
|                                         castDisplay = castDisplay,
 | |
|                                         castTimeDisplay = castTimeDisplay,
 | |
|                                         unit = unit,
 | |
|                                     }
 | |
|                                     if aura_env.instructions[spell] ~= true then
 | |
|                                         allstates[casterGUID].instruction = aura_env.instructions[spell]
 | |
|                                     else
 | |
|                                         allstates[casterGUID].instruction = ""
 | |
|                                     end
 | |
|                                 end
 | |
|                             end
 | |
|                         end
 | |
|                     elseif se == "SPELL_CAST_SUCCESS" then
 | |
|                         if aura_env.spells[spell] then
 | |
|                             if not allstates[casterGUID] then
 | |
|                                 allstates[casterGUID] = {
 | |
|                                     changed = true,
 | |
|                                     show = true,
 | |
|                                     resort = true,
 | |
|                                     index = 0,
 | |
|                                     icon = texture,
 | |
|                                     
 | |
|                                     progressType = "static",
 | |
|                                     value = 0,
 | |
|                                     total = 1,
 | |
|                                     
 | |
|                                     name = caster,
 | |
|                                     spell = spell,
 | |
|                                     unitGUID = unitGUID,
 | |
|                                     unit = unit,
 | |
|                                 }
 | |
|                                 if aura_env.instructions[spell] ~= true then
 | |
|                                     allstates[casterGUID].instruction = aura_env.instructions[spell]
 | |
|                                 else
 | |
|                                     allstates[casterGUID].instruction = ""
 | |
|                                 end
 | |
|                                 C_Timer.After(1, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end)
 | |
|                             end
 | |
|                         end
 | |
|                     end
 | |
|                 end
 | |
|             else
 | |
|                 break
 | |
|             end
 | |
|         end
 | |
|         return true
 | |
|     end
 | |
| end
 | |
| 
 | |
| --[[
 | |
| DisplayText
 | |
| Left: %total
 | |
| Right: %castDisplay / %castTimeDisplay
 | |
| ]]
 | |
| 
 | |
| --ON SHOW?
 | |
| PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master")
 | |
| if aura_env.state.unit then
 | |
|     aura_env.glow(aura_env.state.unit, 1)
 | |
| end
 | |
| 
 | |
| --ON HIDE
 | |
| if aura_env.state.unit then
 | |
|     aura_env.glow(aura_env.state.unit, 0)
 | |
| end
 | |
| 
 | |
| --INIT
 | |
| aura_env.spells = {
 | |
|     --["Emblazoned Swipe"] = true,
 | |
|     ["Surge"] = true,
 | |
|     ["Stygian Blast"] = true,
 | |
|     ["Fragment of Despair"] = true,
 | |
|     ["Ruinous Strike"] = true,
 | |
|     ["Howling Dark "] = true,
 | |
|     
 | |
|     ["Dark Mending"] = true,
 | |
|     ["Sacrifice Soul"] = true,
 | |
|     ["Arrow Barrage"] = true,
 | |
|     ["Knife Dance"] = true,
 | |
|     ["Bonebreaking Strike"] = true,
 | |
|     ["Brutal Assault"] = true,
 | |
|     ["Indigestion"] = true,
 | |
|     ["Coup de Grace"] = true,
 | |
|     ["Raven's Dive"] = true,
 | |
|     
 | |
|     ["Shadow Wall"] = true,
 | |
|     ["Demonic Mending"] = true,
 | |
|     ["Devour Magic"] = true,
 | |
|     ["Shadow Wave"] = true,
 | |
|     ["Lumbering Crash"] = true,
 | |
|     ["Vile Roots"] = true,
 | |
|     ["Alluring Aroma"] = true,
 | |
|     ["Blistering Rain"] = true,
 | |
|     ["Floral Fulmination"] = true,
 | |
|     ["Throw Arcane Tome"] = true,
 | |
|     ["Throw Frost Tome"] = true,
 | |
|     ["Throw Silence Tome"] = true,
 | |
|     ["Summon Monstrosity"] = true,
 | |
|     ["Blinding Glare"] = true,
 | |
|     ["Stifling Satire"] = true,
 | |
|     ["Beguiling Biography"] = true,
 | |
|     ["Chaotic Energy"] = true,
 | |
|     
 | |
|     ["Hinder"] = true,
 | |
|     ["Quelling Strike"] = true,
 | |
|     ["Nightfall Orb"] = true,
 | |
|     ["Seal Magic"] = true,
 | |
|     ["Suppress"] = true,
 | |
|     ["Charging Station"] = true,
 | |
|     ["Bewitch"] = true,
 | |
|     ["Fel Detonation"] = true,
 | |
|     
 | |
|     ["Unnerving Screech"] = true,
 | |
|     ["Star Shower"] = true,
 | |
|     ["Maddening Roar"] = true,
 | |
|     ["Tormenting Eye"] = true,
 | |
|     
 | |
|     ["Storm"] = true,
 | |
|     ["Arc Lightning"] = true,
 | |
|     ["Mighty Slam"] = true,
 | |
|     ["Thundering Stomp"] = true,
 | |
|     ["Rejuvenating Waters"] = true,
 | |
|     ["Lightning Prod"] = true,
 | |
|     ["Restoration"] = true,
 | |
|     ["Polymorph: Fish"] = true,
 | |
|     
 | |
|     ["Etch"] = true,
 | |
|     ["Holy Radiance"] = true,
 | |
|     ["Cleansing Flames"] = true,
 | |
|     ["Unruly Yell"] = true,
 | |
|     
 | |
|     ["Soul Leech"] = true,
 | |
|     ["Terrifying Wail"] = true,
 | |
|     ["Pennies From Heaven"] = true,
 | |
|     ["Spotlight"] = true, --Kite away
 | |
|     ["Poetry Slam"] = true, --Interrupt
 | |
|     ["Final Curtainaw"] = true, --Run ay
 | |
|     ["Flashlight "] = true, --Face away
 | |
|     ["Shadow Rejuvenation"] = true,
 | |
|     ["Oath of Fealty"] = true,
 | |
|     
 | |
|     ["Unstable Energy"] = true,
 | |
|     ["Fel Bomb"] = true,
 | |
|     
 | |
|     ["Bone Chilling Scream"] = true,
 | |
|     ["Void Snap"] = true,
 | |
|     ["Brackwater Barrage"] = true,
 | |
|     ["Corrupted Bellow"] = true,
 | |
|     
 | |
|     ["Stone Gaze"] = true,
 | |
|     ["Piercing Shards"] = true,
 | |
|     ["Shatter"] = true,
 | |
|     ["Stone Bolt"] = true,
 | |
|     
 | |
|     ["Decimate"] = true,
 | |
|     ["Dread Screech"] = true,
 | |
|     ["Howling Dark"] = true,
 | |
|     ["Eternal Twilight"] = true,
 | |
|     ["Fragment of Despair"] = true,
 | |
|     
 | |
|     ["Prophecies of Doom"] = true,
 | |
|     ["Siphon Essence"] = true,
 | |
|     ["Torment"] = true,
 | |
|     ["Demonic Ascension"] = true,
 | |
|     ["Arcane Reconstitution"] = true,
 | |
|     ["Devour"] = true,
 | |
|     
 | |
|     ["Nightmares"] = true,
 | |
|     ["Unleash Fury"] = true,
 | |
|     ["Drain"] = true,
 | |
|     ["Scorching"] = true,
 | |
|     ["Meteor"] = true,
 | |
|     ["Detonate"] = true,
 | |
|     
 | |
|     ["Surge"] = true,
 | |
|     ["Stygian Blast"] = true,
 | |
|     ["Fragment of Despair"] = true,
 | |
|     ["Ruinous Strike"] = true,
 | |
|     ["Howling Dark"] = true,
 | |
|     ["Blood Assault"] = true,
 | |
|     ["Dread Screech"] = true,
 | |
|     ["Void Trap"] = true,
 | |
|     ["Ravaging Darkness"] = true,
 | |
| }
 | |
| aura_env.instructions = {
 | |
|     --["Emblazoned Swipe"] = "TEST",
 | |
|     
 | |
|     ["Dark Mending"] = "Interrupt",
 | |
|     ["Sacrifice Soul"] = true,
 | |
|     ["Arrow Barrage"] = true,
 | |
|     ["Knife Dance"] = true,
 | |
|     ["Bonebreaking Strike"] = "Dodge",
 | |
|     ["Brutal Assault"] = true,
 | |
|     ["Indigestion"] = true,
 | |
|     ["Coup de Grace"] = true,
 | |
|     ["Raven's Dive"] = "Dodge",
 | |
|     
 | |
|     ["Shadow Wall"] = true,
 | |
|     ["Demonic Mending"] = "Interrupt",
 | |
|     ["Devour Magic"] = true,
 | |
|     ["Shadow Wave"] = true,
 | |
|     ["Lumbering Crash"] = "Stun",
 | |
|     ["Vile Roots"] = true,
 | |
|     ["Alluring Aroma"] = "Stun",
 | |
|     ["Blistering Rain"] = "Stun",
 | |
|     ["Floral Fulmination"] = true,
 | |
|     ["Throw Arcane Tome"] = "Dodge",
 | |
|     ["Throw Frost Tome"] = "Dodge",
 | |
|     ["Throw Silence Tome"] = "Dodge",
 | |
|     ["Summon Monstrosity"] = "Stun/Kill",
 | |
|     ["Blinding Glare"] = "Face away",
 | |
|     ["Stifling Satire"] = true,
 | |
|     ["Beguiling Biography"] = true,
 | |
|     ["Chaotic Energy"] = true,
 | |
|     
 | |
|     ["Hinder"] = "Interrupt",
 | |
|     ["Quelling Strike"] = "Dodge",
 | |
|     ["Nightfall Orb"] = "Interrupt",
 | |
|     ["Seal Magic"] = "Interrupt",
 | |
|     ["Suppress"] = "Interrupt",
 | |
|     ["Charging Station"] = "Interrupt",
 | |
|     ["Bewitch"] = "Interrupt",
 | |
|     ["Fel Detonation"] = true,
 | |
|     
 | |
|     ["Unnerving Screech"] = "Interrupt",
 | |
|     ["Star Shower"] = "Interrupt",
 | |
|     ["Maddening Roar"] = true,
 | |
|     ["Tormenting Eye"] = true,
 | |
|     
 | |
|     ["Storm"] = "Interrupt",
 | |
|     ["Arc Lightning"] = "Interrupt",
 | |
|     ["Mighty Slam"] = "Stun",
 | |
|     ["Thundering Stomp"] = "Interrupt",
 | |
|     ["Rejuvenating Waters"] = "Interrupt",
 | |
|     ["Lightning Prod"] = "Interrupt",
 | |
|     ["Restoration"] = "Interrupt",
 | |
|     ["Polymorph: Fish"] = "Interrupt",
 | |
|     
 | |
|     ["Etch"] = "Interrupt",
 | |
|     ["Holy Radiance"] = "Interrupt",
 | |
|     ["Cleansing Flames"] = true,
 | |
|     ["Unruly Yell"] = "Interrupt",
 | |
|     
 | |
|     ["Soul Leech"] = "Interrupt",
 | |
|     ["Terrifying Wail"] = "Interrupt",
 | |
|     ["Pennies From Heaven"] = true,
 | |
|     ["Spotlight"] = "Move", --Kite away
 | |
|     ["Poetry Slam"] = "Interrupt", --Interrupt
 | |
|     ["Final Curtainaw"] = "Move", --Run ay
 | |
|     ["Flashlight "] = "Face away", --Face away
 | |
|     ["Shadow Rejuvenation"] = true,
 | |
|     ["Oath of Fealty"] = true,
 | |
|     
 | |
|     ["Unstable Energy"] = true,
 | |
|     ["Fel Bomb"] = "Soak",
 | |
|     
 | |
|     ["Bone Chilling Scream"] = "Interrupt",
 | |
|     ["Void Snap"] = "Interrupt",
 | |
|     ["Brackwater Barrage"] = "Dodge",
 | |
|     ["Corrupted Bellow"] = true,
 | |
|     
 | |
|     ["Stone Gaze"] = "Interrupt",
 | |
|     ["Piercing Shards"] = true,
 | |
|     ["Shatter"] = true,
 | |
|     ["Stone Bolt"] = "Interrupt",
 | |
|     
 | |
|     ["Decimate"] = true,
 | |
|     ["Dread Screech"] = true,
 | |
|     ["Howling Dark"] = true,
 | |
|     ["Eternal Twilight"] = true,
 | |
|     ["Fragment of Despair"] = true,
 | |
|     
 | |
|     ["Prophecies of Doom"] = "Stun",
 | |
|     ["Siphon Essence"] = true,
 | |
|     ["Torment"] = true,
 | |
|     ["Demonic Ascension"] = "Interrupt",
 | |
|     ["Arcane Reconstitution"] = true,
 | |
|     ["Devour"] = true,
 | |
|     
 | |
|     ["Nightmares"] = true,
 | |
|     ["Unleash Fury"] = true,
 | |
|     ["Drain"] = true,
 | |
|     ["Scorching"] = true,
 | |
|     ["Meteor"] = true,
 | |
|     ["Detonate"] = true,
 | |
|     
 | |
|     ["Surge"] = "Interrupt",
 | |
|     ["Stygian Blast"] = "Interrupt",
 | |
|     ["Fragment of Despair"] = "Soak",
 | |
|     ["Ruinous Strike"] = "Dodge",
 | |
|     ["Howling Dark"] = "Interrupt",
 | |
|     ["Blood Assault"] = "Stun",
 | |
|     ["Dread Screech"] = "Interrupt",
 | |
|     ["Void Trap"] = true,
 | |
|     ["Ravaging Darkness"] = true,
 | |
| }
 | |
| aura_env.glow = function(unit, s)
 | |
|     local nameplate = C_NamePlate.GetNamePlateForUnit(unit)
 | |
|     if nameplate and s == 1 then
 | |
|         ActionButton_ShowOverlayGlow(nameplate.UnitFrame.HealthBar)
 | |
|     else
 | |
|         ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar)
 | |
|     end
 | |
| end
 |