Files
wow-weakauras/WeakAuras/Projects/Raid Frame Glow.lua

174 lines
6.2 KiB
Lua

--/run WeakAuras.ScanEvents("UPDATE_FRAME_GLOW")
--ID_UPDATED UPDATE_FRAME_GLOW PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED GROUP_ROSTER_UPDATE
--ElvUF_Focus.Health
--ElvUF_TargetTarget.Health
function(e, id)
if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end
if e == "PLAYER_REGEN_DISABLED" or e == "PLAYER_REGEN_ENABLED" then
WeakAuras.ScanEvents("UPDATE_FRAME_GLOW")
elseif e == "UPDATE_FRAME_GLOW" then
local hptable = {["hp"] = 1e21, ["id"] = 0, ["mhp"] = 0, ["php"] = 100}
for i = 1, GetNumGroupMembers() do
--if UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) > hptable.mhp then --Missing HP
if UnitIsConnected("raid" .. i) == true then
if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < hptable.php then --% HP
if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < 0.6 and UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) > 0 and UnitIsConnected("raid" .. i) then
hptable.hp = UnitHealth("raid" .. i)
hptable.mhp = UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i)
hptable.php = UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i)
hptable.id = i
hptable.name = UnitName("raid" .. i)
end
end
end
end
if hptable.id ~= aura_env.lastID then
WeakAuras.ScanEvents("ID_UPDATED", hptable.id)
aura_env.lastID = hptable.id
end
if UnitExists("focus") then
local fhp = UnitHealth("focus") / UnitHealthMax("focus")
if fhp < 0.4 then
ActionButton_ShowOverlayGlow(ElvUF_Focus.Health)
else
ActionButton_HideOverlayGlow(ElvUF_Focus.Health)
end
end
if UnitExists("targettarget") then
local tthp = UnitHealth("targettarget") / UnitHealthMax("targettarget")
if tthp < 0.4 then
print("QUICK GLOW OMG OMGO GMO")
ActionButton_ShowOverlayGlow(ElvUF_TargetTarget.Health)
else
ActionButton_HideOverlayGlow(ElvUF_TargetTarget.Health)
end
end
elseif e == "ID_UPDATED" then
if id ~= aura_env.glowingPlate and aura_env.glowingPlate > 0 then
ActionButton_HideOverlayGlow(aura_env.GetFrame("raid" .. aura_env.glowingPlate))
end
if aura_env.GetFrame("raid" .. id) then
ActionButton_ShowOverlayGlow(aura_env.GetFrame("raid" .. id))
aura_env.glowingPlate = id
end
end
end
--INIT
if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end
aura_env.lastID = 0
aura_env.glowingPlate = 0
local frame_priority = {
-- raid frames
[1] = "^Vd1", -- vuhdo
[2] = "^Healbot", -- healbot
[3] = "^GridLayout", -- grid
[4] = "^Grid2Layout", -- grid2
[5] = "^ElvUF_RaidGroup", -- elv
[6] = "^oUF_bdGrid", -- bdgrid
[7] = "^oUF.*raid", -- generic oUF
[8] = "^LimeGroup", -- lime
[9] = "^SUFHeaderraid", -- suf
[10] = "^CompactRaid", -- blizz
-- party frames
[11] = "^SUFHeaderparty", --suf
[12] = "^ElvUF_PartyGroup", -- elv
[13] = "^oUF.*party", -- generic oUF
[14] = "^PitBull4_Groups_Party", -- pitbull4
[15] = "^CompactParty", -- blizz
-- player frame
[16] = "^SUFUnitplayer",
[17] = "^PitBull4_Frames_Player",
[18] = "^ElvUF_Player",
[19] = "^oUF.*player",
[20] = "^PlayerFrame",
}
WA_GetFramesCache = WA_GetFramesCache or {}
if not WA_GetFramesCacheListener then
WA_GetFramesCacheListener = CreateFrame("Frame")
local f = WA_GetFramesCacheListener
f:RegisterEvent("PLAYER_REGEN_DISABLED")
f:RegisterEvent("PLAYER_REGEN_ENABLED")
f:RegisterEvent("GROUP_ROSTER_UPDATE")
f:SetScript("OnEvent", function(self, event, ...)
WA_GetFramesCache = {}
end)
end
local function GetFrames(target)
local function FindButtonsForUnit(frame, target)
local results = {}
if type(frame) == "table" and not frame:IsForbidden() then
local type = frame:GetObjectType()
if type == "Frame" or type == "Button" then
for _,child in ipairs({frame:GetChildren()}) do
for _,v in pairs(FindButtonsForUnit(child, target)) do
tinsert(results, v)
end
end
end
if type == "Button" then
local unit = frame:GetAttribute('unit')
if unit and frame:IsVisible() and frame:GetName() then
WA_GetFramesCache[frame] = unit
if UnitIsUnit(unit, target) then
-- print("F:", frame:GetName())
tinsert(results, frame)
end
end
end
end
return results
end
if not UnitExists(target) then
if type(target) == "string" and target:find("Player") then
target = select(6,GetPlayerInfoByGUID(target))
else
return {}
end
end
local results = {}
for frame, unit in pairs(WA_GetFramesCache) do
--print("from cache:", frame:GetName())
if UnitIsUnit(unit, target) then
if frame:GetAttribute('unit') == unit then
tinsert(results, frame)
else
results = {}
break
end
end
end
return #results > 0 and results or FindButtonsForUnit(UIParent, target)
end
local isElvUI = IsAddOnLoaded("ElvUI")
local function WhyElvWhy(frame)
if isElvUI and frame and frame:GetName():find("^ElvUF_") and frame.Health then
return frame.Health
else
return frame
end
end
function aura_env.GetFrame(target)
local frames = GetFrames(target)
if not frames then return nil end
for i=1,#frame_priority do
for _,frame in pairs(frames) do
if (frame:GetName()):find(frame_priority[i]) then
return WhyElvWhy(frame)
end
end
end
return WhyElvWhy(frames[1])
end