Is it possible to use some kind of "global" functions in WeakAuras environment, or global to a group, or to a dynamic group but still local in terms of WoW env? I could still refer to them when creating codes in Custom Triggers or Custom Text
[TL;DR]
I have created and completed a dynamic group in WeakAuras which contains a set of progress bars, which in turn track random buffs when you apply Rogue's Roll the Bones (based on Muzgu in Wowhead). The problem is Roll the Bones produces a number of buffs out of six in total. In terms of WA, each buff works exactly the same. The only difference is the buff itself. I had to copy and paste a lot of functions and change only one line. Because I created codes for Custom Text and Custom Triggers, for each buff, it was very laborious and prone to error. It would be much more effective and optimised, if I could place the core functions somewhere else within WA environment with a single parameter "buff_name".
For instance, for the buff "Broadsides", I created functions for custom text and custom trigger "Dynamic Info". The code for other buffs, such as "Jolly Roger", "Grand Melee", "Grand Melee", "Shark Infested Waters", "True Bearing", "Restless Blades", and "Buried Treasure" is exactly the same. I only change "buff_name". Below is an example of redundant functions and the third one which would handle everything in one place.
Thanks
Custom text:
Lua Code:
-- Function for Custom Text
function()
local buff_name = "Broadsides"
if UnitBuff("PLAYER", buff_name) then
dur, exptime = select(6, UnitBuff("PLAYER", buff_name))
end
return string.format("%.1f", max(0, dur + exptime - GetTime())), max(36, dur), true
end
Custom Trigger "Dynamic Info"
Lua Code:
-- Function for Custom Trigger Dynamic Info
function()
local buff_name = "Broadsides"
if UnitBuff("PLAYER", buff_name) then
dur, exptime = select(6, UnitBuff("PLAYER", buff_name))
end
return max(0, dur + exptime - GetTime()), max(36, dur), true
end
Example of an optimised function:
Lua Code:
-- global function
function(buff_name, format)
if UnitBuff("PLAYER", buff_name) then
dur, exptime = select(6, UnitBuff("PLAYER", buff_name))
end
out = {max(0, dur + exptime - GetTime()), max(dur, 36), true}
if format then
out[1] = string.format("%.1f", out[1])
end
return out
end