174 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			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
 |