Files
wow-weakauras/Complete Projects/Legion/TSU - Spells.lua
2024-08-24 22:43:07 +02:00

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.statee.unit then
aura_env.glow(aura_env.statee.unit, 1)
end
--ON HIDE
if aura_env.statee.unit then
aura_env.glow(aura_env.statee.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