05-12-18, 12:21 AM | #1 |
Agony weak aura with nameplate glow
Hello,
I am new to LUA and am taking my first crack at writing a custom weak aura with mixed success. The goal: cause an enemy nameplate to glow while Agony (cast by the player) has 4 seconds or less remaining I have managed to make an aura that will cause the nameplates to glow while the player's Agony debuff is on them, however when I add a check for the duration, everything goes haywire. Some of the nameplates don't light up, and the ones that do never stop glowing even after Agony falls off. I feel like I am missing something really basic here. Some of the code below talks about "orbs." This is because I am using lots of code from an aura that causes the nameplats of the fel orbs in mythic+ dungeons to light up. Here is the code I have for the custom trigger (checked every frame) Code:
function() local _,type = GetInstanceInfo() if (type == 'party' or aura_env.test) and (GetCVar("nameplateShowAll")=="0" or GetCVar("nameplateShowEnemies") == "0" ) then if aura_env.autoEnemyNameplates then SetCVar("nameplateShowEnemies",1) end if aura_env.autoAllNameplates then SetCVar("nameplateShowAll",1) end end local orbsUp = 0 local markIndex = 1 for i=1,40 do --for each nameplate local unit = "nameplate"..i local hasAgony = false --print(unit) if UnitExists(unit) then for j=1,40 do --for each debuff on a nameplate --print("orbs: "..orbsUp) local guid = UnitGUID(unit) local type, zero, server_id, instance_id, zone_uid, npc_id, spawn_uid = strsplit("-",guid) --print(npc_id) local name,_,_,_,_,_,etime=UnitDebuff(unit, j, "PLAYER") local duration = etime - GetTime() --print(name) --print(durations) if name == nil then --break if we have checked all debuffs break end if name == "Agony" and duration <= 4 then --turn sentinel on if we find Agony and end the loop hasAgony = true break end end --end debuff checking loop --turn on nameplate glow if we found agony, otherwise turn it off if hasAgony or aura_env.test then orbsUp = orbsUp + 1 aura_env.glow(unit,true) else aura_env.glow(unit,false) end end end --end nameplate checking loop aura_env.orbs = orbsUp if aura_env.icon and orbsUp > 0 then WeakAuras.regions[aura_env.id].region:SetAlpha(1) elseif orbsUp <1 then for i,v in pairs(aura_env.nameplates) do ActionButton_HideOverlayGlow(v) end WeakAuras.regions[aura_env.id].region:SetAlpha(0) end return true end Here is the code for the "on init" section of the action tab: Code:
local enableGlow = true -- glow local enableIcon = false -- show icon local enableMarks = false -- assign marks local showEnemyNameplates = false -- Auto Enable Show Enemy Nameplates local alwaysShowNameplates = false -- Auto Enable Always Show Nameplates -- Assumes that you usually have them disabled. Will enable them when entering m+ dungeon and disable when exiting. Don't enable this if you usually are running with them enabled because it will still disable them. --------------------------------------- local tidyplatesHeight = 8 aura_env.test = false -- change to make all nameplates glow for testing aura_env.nameplates = {} aura_env.glow = function(unit,show) --print(unit) local nameplate = C_NamePlate.GetNamePlateForUnit(unit) if not nameplate then return end if enableGlow and show then if nameplate.unitFrame and nameplate.unitFrame.HealthBar then -- elvui ActionButton_ShowOverlayGlow(nameplate.unitFrame.HealthBar) nameplate = nameplate.unitFrame.HealthBar elseif nameplate.kui then -- kui ActionButton_ShowOverlayGlow(nameplate.kui.HealthBar) nameplate = nameplate.kui.HealthBar elseif nameplate.extended then -- tidyplates nameplate.extended.visual.healthbar:SetHeight(tidyplatesHeight) ActionButton_ShowOverlayGlow(nameplate.extended.visual.healthbar) nameplate = nameplate.extended.visual.healthbar elseif nameplate.TP_Extended then -- tidyplates: threat plates ActionButton_ShowOverlayGlow(nameplate.TP_Extended.visual.healthbar) nameplate = nameplate.TP_Extended.visual.healthbar elseif nameplate.ouf then -- bdNameplates ActionButton_ShowOverlayGlow(nameplate.ouf.Health) nameplate = nameplate.ouf.Health elseif nameplate.UnitFrame then -- default ActionButton_ShowOverlayGlow(nameplate.UnitFrame.healthBar) nameplate = nameplate.UnitFrame.healthBar else ActionButton_ShowOverlayGlow(nameplate) end aura_env.nameplates[unit] = nameplate else if nameplate.UnitFrame and nameplate.UnitFrame.HealthBar then -- elvui ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar) elseif nameplate.kui then -- kui ActionButton_HideOverlayGlow(nameplate.kui.HealthBar) elseif nameplate.extended then -- tidyplates ActionButton_HideOverlayGlow(nameplate.extended.visual.healthbar) elseif nameplate.TP_Extended then -- tidyplates: threat plates ActionButton_HideOverlayGlow(nameplate.TP_Extended.visual.healthbar) nameplate = nameplate.TP_Extended.visual.healthbar elseif nameplate.ouf then -- bdNameplates ActionButton_HideOverlayGlow(nameplate.ouf.Health) elseif nameplate.UnitFrame then -- default ActionButton_HideOverlayGlow(nameplate.UnitFrame.healthBar) else ActionButton_HideOverlayGlow(nameplate) end --aura_env.nameplates[unit] = nil print(unit) end end aura_env.orbs = 0 aura_env.icon = enableIcon aura_env.marks = enableMarks aura_env.npcID = { -- possible to add more [120651] = true, -- fel explosives -- [92168] = true, -- testingdummies -- [92166] = true, -- testingdummies } aura_env.marksBlocked = false aura_env.autoEnemyNameplates = showEnemyNameplates aura_env.autoAllNameplates = alwaysShowNameplates Here is the code for the "on hide" section of the action tab - I don't think this matters at all since the trigger function always returns true, but here it is for the sake of completion: Code:
for i,v in pairs(aura_env.nameplates) do local unit = v local hasAgony = false if UnitExists(unit) then for j=1,40 do --for each debuff on a nameplate local guid = UnitGUID(unit) local type, zero, server_id, instance_id, zone_uid, npc_id, spawn_uid = strsplit("-",guid) local name,_,_,_,_,_,etime=UnitDebuff(unit, j, "PLAYER") local duration = etime - GetTime() --if Agony is gone or refreshed, turn off nameplate glow if name == "Agony" and duration > 4 or name == nil then aura_env.glow(unit,false) end end --end debuff checking loop end end --end nameplate checking loop |
|
05-12-18, 04:38 PM | #2 |
import string
Here is a pastebin of the import string for WeakAuras: https://pastebin.com/FcjV41e1
|
|
WoWInterface » Developer Discussions » Lua/XML Help » Agony weak aura with nameplate glow |
«
Previous Thread
|
Next Thread
»
|
Display Modes |
Linear Mode |
Switch to Hybrid Mode |
Switch to Threaded Mode |
|
|