Files
coa-weakauras/WeakAurasOptions/BuffTrigger2.lua
T
NoM0Re d3c8a9bf3e Make LibGroupTalents work now, but still requires regressions
Arguments might still shut be shared from the original call for custom auras.
More functions need to be added to prototypes.
Documentation is needed soon.
2025-02-06 21:31:45 +01:00

1232 lines
45 KiB
Lua

if not WeakAuras.IsLibsOK() then return end
local AddonName, OptionsPrivate = ...
local L = WeakAuras.L
local function getAuraMatchesLabel(name)
local ids = WeakAuras.spellCache.GetSpellsMatching(name)
if ids then
local numMatches = 0
for _ in pairs(ids) do
numMatches = numMatches + 1
end
return tostring(numMatches)
else
return ""
end
end
local function getAuraMatchesList(name)
local ids = WeakAuras.spellCache.GetSpellsMatching(name)
if ids then
local descText = ""
for id, _ in pairs(ids) do
local _, _, icon = GetSpellInfo(id)
if icon then
if descText == "" then
descText = "|T"..icon..":0|t: "..id
else
descText = descText.."\n|T"..icon..":0|t: "..id
end
end
end
return descText
else
return ""
end
end
local function shiftTable(tbl, pos)
local size = #tbl
for i = pos, size, 1 do
tbl[i] = tbl[i + 1]
end
end
-- Counts the Names or SpellIds in a aura, recursively.
local function CountNames(data, triggernum, name)
local result = 0
local trigger = data.triggers[triggernum].trigger
if trigger[name] then
result = #trigger[name]
end
return result
end
local function IsGroupTrigger(trigger)
return trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"
or trigger.unit == "boss" or trigger.unit == "nameplate" or trigger.unit == "arena" or trigger.unit == "multi"
end
local function IsSingleMissing(trigger)
return not IsGroupTrigger(trigger) and trigger.matchesShowOn == "showOnMissing"
end
local function CanHaveMatchCheck(trigger)
if IsGroupTrigger(trigger) then
return true
end
if trigger.matchesShowOn == "showOnMissing" then
return false
end
if trigger.matchesShowOn == "showOnActive" or trigger.matchesShowOn == "showOnMatches" or not trigger.matchesShowOn then
return true
end
-- Always: If clones are shown
return trigger.showClones
end
local function CreateNameOptions(aura_options, data, trigger, size, isExactSpellId, isIgnoreList, prefix, baseOrder, useKey, optionKey, name, desc, inverse)
local spellCache = WeakAuras.spellCache
for i = 1, size do
local hiddenFunction
if isIgnoreList then
hiddenFunction = function()
return not (trigger.type == "aura2" and trigger[useKey] and (i == 1 or trigger[optionKey] and trigger[optionKey][i - 1]) and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger))
end
else
hiddenFunction = function()
return not (trigger.type == "aura2" and trigger[useKey] and (i == 1 or trigger[optionKey] and trigger[optionKey][i - 1]))
end
end
if i ~= 1 then
aura_options[prefix .. "space" .. i] = {
type = "execute",
name = inverse and L["and"] or L["or"],
width = WeakAuras.normalWidth - 0.2,
image = function() return "", 0, 0 end,
order = baseOrder + i / 100 + 0.0001,
hidden = hiddenFunction
}
end
local iconOption = prefix .. "icon" .. i
aura_options[iconOption] = {
type = "execute",
width = 0.2,
order = baseOrder + i / 100 + 0.0002,
hidden = hiddenFunction,
control = "WeakAurasIcon"
}
if isExactSpellId then
aura_options[iconOption].name = function()
return GetSpellInfo(WeakAuras.SafeToNumber(trigger[optionKey] and trigger[optionKey][i] or 0))
end
aura_options[iconOption].image = function()
local icon
if trigger.auraspellids and trigger.auraspellids[i] then
icon = select(3, GetSpellInfo(trigger.auraspellids[i]))
end
return icon and tostring(icon) or "", 18, 18
end
aura_options[iconOption].disabled = function()
return not trigger[optionKey] or not trigger[optionKey][i] or not select(3, GetSpellInfo(trigger[optionKey] and trigger[optionKey][i] or 0))
end
else
aura_options[iconOption].name = function()
local spellId = trigger[optionKey] and trigger[optionKey][i] and WeakAuras.SafeToNumber(trigger[optionKey][i])
if spellId then
return getAuraMatchesLabel(GetSpellInfo(spellId))
else
return getAuraMatchesLabel(trigger[optionKey] and trigger[optionKey][i])
end
end
aura_options[iconOption].desc = function()
local spellId = trigger[optionKey] and trigger[optionKey][i] and WeakAuras.SafeToNumber(trigger[optionKey][i])
if spellId then
local name = GetSpellInfo(spellId)
if name then
local auraDesc = getAuraMatchesList(name)
if auraDesc then
auraDesc = name .. "\n" .. auraDesc
end
return auraDesc
end
else
return getAuraMatchesList(trigger[optionKey] and trigger[optionKey][i])
end
end
aura_options[iconOption].image = function()
local icon
local spellId = trigger[optionKey] and trigger[optionKey][i] and WeakAuras.SafeToNumber(trigger[optionKey][i])
if spellId then
icon = select(3, GetSpellInfo(spellId))
else
icon = spellCache.GetIcon(trigger[optionKey] and trigger[optionKey][i])
end
return icon and tostring(icon) or "", 18, 18
end
end
aura_options[prefix .. i] = {
type = "input",
width = WeakAuras.normalWidth,
name = name,
desc = desc,
order = baseOrder + i / 100 + 0.0003,
hidden = hiddenFunction,
get = function(info)
local rawString = trigger[optionKey] and trigger[optionKey][i]
if not rawString then return "" end
local spellID = WeakAuras.SafeToNumber(rawString)
local spellName = spellID and GetSpellInfo(spellID)
if spellName and spellID then
return ("%s (%s)"):format(spellID, spellName) .. "\0" .. rawString
elseif spellID then
return ("%s (%s)"):format(rawString, L["Unknown Spell"]) .. "\0" .. rawString
else
return rawString .. "\0" .. rawString
end
end,
set = function(info, v)
trigger[optionKey] = trigger[optionKey] or {}
if v == "" then
shiftTable(trigger[optionKey], i)
else
if isExactSpellId then
trigger[optionKey][i] = v
else
local _, spellId = WeakAuras.spellCache.CorrectAuraName(v)
if spellId then
trigger[optionKey][i] = tostring(spellId)
else
trigger[optionKey][i] = spellCache.BestKeyMatch(v)
end
end
end
WeakAuras.Add(data)
WeakAuras.UpdateThumbnail(data)
WeakAuras.ClearAndUpdateOptions(data.id)
end,
validate = isExactSpellId and WeakAuras.ValidateNumeric or nil,
control = "WeakAurasInputFocus",
}
end
-- VALIDATE ?
end
local function GetBuffTriggerOptions(data, triggernum)
local trigger = data.triggers[triggernum].trigger
local function HasMatchCount(trigger)
if IsGroupTrigger(trigger) then
return trigger.useMatch_count
else
return trigger.matchesShowOn == "showOnMatches"
end
end
local function HasMatchPerUnitCount(trigger)
if trigger.type == "aura2" and IsGroupTrigger(trigger)
and trigger.showClones and trigger.combinePerUnit and trigger.perUnitMode ~= "unaffected"
then
return trigger.useMatchPerUnit_count
end
end
local ValidateNumeric = WeakAuras.ValidateNumeric
local aura_options = {
useUnit = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Unit"],
order = 10,
disabled = true,
hidden = function() return not trigger.type == "aura2" end,
get = function() return true end
},
unit = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Unit"],
order = 10.1,
values = function()
return OptionsPrivate.Private.unit_types_bufftrigger_2
end,
hidden = function() return not trigger.type == "aura2" end,
desc = L[" |cff00ff00Player|r, |cff00ff00Target|r, |cff00ff00Focus|r, and |cff00ff00Pet|r correspond directly to those individual unitIDs.\n |cff00ff00Specific Unit|r lets you provide a specific valid unitID to watch.\n|cffff0000Note|r: The game will not fire events for all valid unitIDs, making some untrackable by this trigger.\n |cffffff00Party|r, |cffffff00Raid|r, |cffffff00Boss|r, |cffffff00Arena|r, and |cffffff00Nameplate|r can match multiple corresponding unitIDs.\n |cffffff00Smart Group|r adjusts to your current group type, matching just the \"player\" when solo, \"party\" units (including \"player\") in a party or \"raid\" units in a raid.\n |cffffff00Multi-target|r attempts to use the Combat Log events, rather than unitID, to track affected units.\n|cffff0000Note|r: Without a direct relationship to actual unitIDs, results may vary.\n\n|cffffff00*|r Yellow Unit settings can match multiple units and will default to being active even while no affected units are found without a Unit Count or Match Count setting."],
},
useSpecificUnit = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Specific Unit"],
order = 10.2,
disabled = true,
hidden = function() return not (trigger.type == "aura2" and trigger.unit == "member") end,
get = function() return true end
},
specificUnit = {
type = "input",
width = WeakAuras.normalWidth,
name = L["Specific Unit"],
order = 10.3,
desc = L["A Unit ID (e.g., party1)."],
hidden = function() return not (trigger.type == "aura2" and trigger.unit == "member") end
},
warnSpecifcUnit = {
type = "description",
width = WeakAuras.doubleWidth,
name = function()
return L["|cFFFF0000Note:|r The unit '%s' is not a trackable unit."]:format(trigger.specificUnit or "")
end,
order = 10.4,
hidden = function() return not (trigger.type == "aura2" and trigger.unit == "member" and WeakAuras.UntrackableUnit(trigger.specificUnit)) end
},
useDebuffType = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Aura Type"],
order = 11,
disabled = true,
hidden = function() return not trigger.type == "aura2" end,
get = function() return true end
},
debuffType = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Aura Type"],
order = 11.1,
values = OptionsPrivate.Private.debuff_types,
hidden = function() return not trigger.type == "aura2" end
},
spell_filters_header = {
type = "header",
name = L["Spell Selection Filters"],
order = 11.15,
},
use_debuffClass = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Debuff Type"],
order = 11.2,
desc = L["Filter to only dispellable de/buffs of the given type(s)"],
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end
},
debuffClass = {
type = "multiselect",
width = WeakAuras.normalWidth,
name = L["Debuff Type"],
order = 11.3,
hidden = function()
return not (trigger.type == "aura2" and trigger.unit ~= "multi"
and CanHaveMatchCheck(trigger)
and trigger.use_debuffClass)
end,
values = OptionsPrivate.Private.debuff_class_types,
},
debuffClassSpace = {
type = "description",
width = WeakAuras.normalWidth,
name = "",
order = 11.4,
hidden = function()
return not (trigger.type == "aura2" and trigger.unit ~= "multi"
and CanHaveMatchCheck(trigger)
and not trigger.use_debuffClass)
end
},
useName = {
type = "toggle",
name = L["Name(s)"],
order = 12,
width = WeakAuras.normalWidth - 0.2,
hidden = function() return not trigger.type == "aura2" end
},
useNameSpace = {
type = "description",
name = "",
order = 12.1,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and not trigger.useName) end
},
useExactSpellId = {
type = "toggle",
name = L["Exact Spell ID(s)"],
width = WeakAuras.normalWidth - 0.2,
order = 22,
hidden = function() return not trigger.type == "aura2" end
},
useExactSpellIdSpace = {
type = "description",
name = "",
order = 22.1,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and not trigger.useExactSpellId) end
},
useIgnoreName = {
type = "toggle",
name = L["Ignored Name(s)"],
order = 32,
width = WeakAuras.normalWidth - 0.2,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end
},
useIgnoreNameSpace = {
type = "description",
name = "",
order = 32.1,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and not trigger.useIgnoreName and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end
},
useIgnoreExactSpellId = {
type = "toggle",
name = L["Ignored Exact Spell ID(s)"],
width = WeakAuras.normalWidth - 0.2,
order = 42,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end
},
useIgnoreExactSpellIddSpace = {
type = "description",
name = "",
order = 42.1,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and not trigger.useIgnoreExactSpellId and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end
},
useNamePattern = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Name Pattern Match"],
desc = L["Filter based on the spell Name string."],
order = 55,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi") end
},
useNamePatternSpace = {
type = "description",
name = "",
order = 55.2,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and not trigger.useNamePattern) end
},
namePattern_operator = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Operator"],
order = 55.1,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and trigger.useNamePattern) end,
values = OptionsPrivate.Private.string_operator_types
},
namePattern_name = {
type = "input",
name = L["Aura Name Pattern"],
width = WeakAuras.doubleWidth,
order = 55.2,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and trigger.useNamePattern) end
},
aura_filters_header = {
type = "header",
name = L["Active Aura Filters and Info"],
order = 59.9,
},
useStacks = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Stack Count"],
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end,
order = 60
},
stacksOperator = {
type = "select",
name = L["Operator"],
order = 60.1,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
disabled = function() return not trigger.useStacks end,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useStacks) end,
get = function() return trigger.useStacks and trigger.stacksOperator or nil end
},
stacks = {
type = "input",
name = L["Stack Count"],
validate = ValidateNumeric,
order = 60.2,
width = WeakAuras.halfWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useStacks) end,
get = function() return trigger.useStacks and trigger.stacks or nil end
},
useStacksSpace = {
type = "description",
width = WeakAuras.normalWidth,
name = "",
order = 60.3,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and not trigger.useStacks) end
},
useRem = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Remaining Time"],
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end,
order = 61
},
remOperator = {
type = "select",
name = L["Operator"],
order = 61.1,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
disabled = function() return not trigger.useRem end,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useRem) end,
get = function() return trigger.useRem and trigger.remOperator or nil end
},
rem = {
type = "input",
name = L["Remaining Time"],
validate = ValidateNumeric,
order = 61.2,
width = WeakAuras.halfWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useRem) end,
get = function() return trigger.useRem and trigger.rem or nil end
},
useRemSpace = {
type = "description",
width = WeakAuras.normalWidth,
name = "",
order = 61.3,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and not trigger.useRem) end
},
useTotal = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Total Time"],
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end,
order = 61.4
},
totalOperator = {
type = "select",
name = L["Operator"],
order = 61.5,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
disabled = function() return not trigger.useTotal end,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useTotal) end,
get = function() return trigger.useTotal and trigger.totalOperator or nil end
},
total = {
type = "input",
name = L["Total Time"],
validate = ValidateNumeric,
order = 61.6,
width = WeakAuras.halfWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.useTotal) end,
get = function() return trigger.useTotal and trigger.total or nil end
},
useTotalSpace = {
type = "description",
width = WeakAuras.normalWidth,
name = "",
order = 61.7,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and not trigger.useTotal) end
},
use_stealable = {
type = "toggle",
name = function()
local value = trigger.use_stealable
if value == nil then return L["Is Stealable"]
elseif value == false then return "|cFFFF0000 " .. L["Negator"] .. " " .. L["Is Stealable"] .. "|r"
else return "|cFF00FF00" .. L["Is Stealable"] .. "|r" end
end,
width = WeakAuras.doubleWidth,
order = 64,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger)) end,
get = function()
local value = trigger.use_stealable
if value == nil then return false
elseif value == false then return "false"
else return "true" end
end,
set = function(info, v)
if v then
trigger.use_stealable = true
else
local value = trigger.use_stealable
if value == false then trigger.use_stealable = nil
else trigger.use_stealable = false end
end
WeakAuras.Add(data)
end
},
ownOnly = {
type = "toggle",
width = WeakAuras.doubleWidth,
name = function()
local value = trigger.ownOnly
if value == nil then return L["Own Only"]
elseif value == false then return "|cFFFF0000 " .. L["Negator"] .. " " .. L["Own Only"] .. "|r"
else return "|cFF00FF00" .. L["Own Only"] .. "|r" end
end,
desc = function()
local value = trigger.ownOnly
if value == nil then return L["Only match auras cast by the player or their pet"]
elseif value == false then return L["Only match auras cast by people other than the player or their pet"]
else return L["Only match auras cast by the player or their pet"] end
end,
get = function()
local value = trigger.ownOnly
if value == nil then return false
elseif value == false then return "false"
else return "true" end
end,
set = function(info, v)
if v then
trigger.ownOnly = true
else
local value = trigger.ownOnly
if value == false then trigger.ownOnly = nil
else trigger.ownOnly = false end
end
WeakAuras.Add(data)
end,
order = 64.3,
hidden = function() return not trigger.type == "aura2" end
},
fetchTooltip = {
type = "toggle",
name = L["Fetch Tooltip Information"],
desc = L["This adds %tooltip, %tooltip1, %tooltip2, %tooltip3 and %tooltip4 as text replacements and also allows filtering based on the tooltip content/values."],
order = 64.5,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and not IsSingleMissing(trigger)) end
},
use_tooltip = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Tooltip Pattern Match"],
order = 64.51,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.fetchTooltip) end
},
use_tooltipSpace = {
type = "description",
name = "",
order = 64.52,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and not trigger.use_tooltip and trigger.fetchTooltip) end
},
tooltip_operator = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Operator"],
order = 64.53,
disabled = function() return not trigger.use_tooltip end,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.use_tooltip and trigger.fetchTooltip) end,
values = OptionsPrivate.Private.string_operator_types
},
tooltip = {
type = "input",
name = L["Tooltip Content"],
width = WeakAuras.doubleWidth,
order = 64.54,
disabled = function() return not trigger.use_tooltip end,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.use_tooltip and trigger.fetchTooltip) end
},
use_tooltipValue = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Tooltip Value"],
order = 64.55,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.fetchTooltip) end
},
tooltipValueNumber = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Tooltip Value #"],
order = 64.56,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.use_tooltipValue and trigger.fetchTooltip) end,
values = OptionsPrivate.Private.tooltip_count
},
use_tooltipValueSpace = {
type = "description",
name = "",
order = 64.57,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and not trigger.use_tooltipValue and trigger.fetchTooltip) end
},
tooltipValue_operator = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Operator"],
order = 64.58,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.use_tooltipValue and trigger.fetchTooltip) end,
values = OptionsPrivate.Private.operator_types
},
tooltipValue = {
type = "input",
name = L["Tooltip"],
width = WeakAuras.normalWidth,
validate = ValidateNumeric,
order = 64.59,
hidden = function() return not (trigger.type == "aura2" and trigger.unit ~= "multi" and CanHaveMatchCheck(trigger) and trigger.use_tooltipValue and trigger.fetchTooltip) end
},
unit_filters_header = {
type = "header",
name = L["Affected Unit Filters and Info"],
order = 65,
hidden = function() return trigger.unit == "multi" end,
},
useAffected = {
type = "toggle",
name = L["Fetch Affected/Unaffected Names and Units"],
width = WeakAuras.doubleWidth,
order = 65.1,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")) end
},
fetchRaidMark = {
type = "toggle",
name = L["Fetch Raid Mark Information"],
desc = L["This adds %raidMark as text replacements."],
order = 65.3,
width = WeakAuras.doubleWidth,
hidden = function()
return not (trigger.type == "aura2" and trigger.unit ~= "multi")
end
},
use_includePets = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Include Pets"],
order = 66.1,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"))
end
},
includePets = {
type = "select",
values = OptionsPrivate.Private.include_pets_types,
width = WeakAuras.normalWidth,
name = L["Include Pets"],
order = 66.15,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.use_includePets) end,
},
includePetsSpace = {
type = "description",
name = "",
order = 66.16,
width = WeakAuras.normalWidth,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and not trigger.use_includePets)
end
},
useActualSpec = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Specialization"],
desc = L["Requires LibGroupTalents, that is e.g. a up-to date WeakAuras version"],
order = 66.3,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"))
end,
},
actualSpec = {
type = "multiselect",
width = WeakAuras.normalWidth,
name = L["Actual Spec"],
desc = L["Requires syncing the specialization via LibGroupTalents."],
values = OptionsPrivate.Private.spec_types_all,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")
and trigger.useActualSpec)
end,
order = 66.4
},
actualSpecSpace = {
type = "description",
name = "",
order = 66.5,
width = WeakAuras.normalWidth,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")
and not trigger.useActualSpec)
end
},
useRaidRole = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Raid Role"],
order = 67.4,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"))
end
},
raid_role = {
type = "multiselect",
width = WeakAuras.normalWidth,
name = L["Raid Role"],
values = OptionsPrivate.Private.raid_role_types,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.useRaidRole)
end,
order = 67.5
},
raid_roleSpace = {
type = "description",
name = "",
order = 67.6,
width = WeakAuras.normalWidth,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and not trigger.useRaidRole)
end
},
useClass = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Class"],
order = 68.1,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"))
end
},
class = {
type = "multiselect",
width = WeakAuras.normalWidth,
name = L["Class"],
values = WeakAuras.class_types,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.useClass) end,
order = 68.2
},
classSpace = {
type = "description",
name = "",
order = 68.3,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and not trigger.useClass) end
},
useUnitName = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Unit Name"],
order = 68.4,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party"))
end
},
unitName = {
type = "input",
width = WeakAuras.normalWidth,
name = L["Filter by Unit Name"],
desc = L["Filter formats: 'Name', 'Name-Realm', '-Realm'.\n\nSupports multiple entries, separated by commas\nCan use \\ to escape -."],
order = 68.5,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and trigger.useUnitName)
end
},
unitNameSpace = {
type = "description",
name = "",
order = 68.5,
width = WeakAuras.normalWidth,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party") and not trigger.useUnitName)
end
},
useHostility = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Hostility"],
order = 69.1,
hidden = function()
return not (trigger.type == "aura2"
and (trigger.unit == "group"
or trigger.unit == "raid"
or trigger.unit == "party"
or trigger.unit == "nameplate"))
end
},
hostility = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Hostility"],
values = OptionsPrivate.Private.hostility_types,
hidden = function()
return not (trigger.type == "aura2"
and trigger.useHostility
and (trigger.unit == "group"
or trigger.unit == "raid"
or trigger.unit == "party"
or trigger.unit == "nameplate"))
end,
order = 69.2
},
hostilitySpace = {
type = "description",
name = "",
order = 69.3,
width = WeakAuras.normalWidth,
hidden = function()
return not (trigger.type == "aura2"
and not trigger.useHostility
and (trigger.unit == "group"
or trigger.unit == "raid"
or trigger.unit == "party"
or trigger.unit == "nameplate"))
end
},
useNpcId = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Filter by Npc ID"],
order = 69.31,
hidden = function() return
not (trigger.type == "aura2" and (trigger.unit == "nameplate" or trigger.unit == "boss"))
end
},
npcId = {
type = "input",
width = WeakAuras.normalWidth,
name = L["Npc ID"],
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "nameplate" or trigger.unit == "boss") and trigger.useNpcId) end,
order = 69.32,
desc = L["Supports multiple entries, separated by commas"]
},
npcIdSpace = {
type = "description",
name = "",
order = 69.33,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "nameplate" or trigger.unit == "boss") and not trigger.useNpcId) end
},
ignoreSelf = {
type = "toggle",
name = L["Ignore Self"],
order = 69.35,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party" or trigger.unit == "nameplate")) end
},
ignoreDead = {
type = "toggle",
name = L["Ignore Dead"],
order = 69.4,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")) end
},
ignoreDisconnected = {
type = "toggle",
name = L["Ignore Disconnected"],
order = 69.8,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")) end
},
ignoreInvisible = {
type = "toggle",
name = L["Ignore out of checking range"],
desc = L["Uses UnitIsVisible() to check if in range. This is polled every second."],
order = 69.9,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and (trigger.unit == "group" or trigger.unit == "raid" or trigger.unit == "party")) end
},
show_settings_header = {
type = "header",
name = L["Show and Clone Settings"],
order = 69.91,
},
multi_unit_hint = {
type = "description",
order = 69.92,
width = WeakAuras.doubleWidth,
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger)) end,
name = L["|cff999999Triggers tracking multiple units will default to being active even while no affected units are found without a Unit Count or Match Count setting applied.|r"],
},
useGroup_count = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Unit Count"],
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger)) end,
order = 70
},
useGroup_countSpace = {
type = "description",
name = "",
order = 70.1,
width = WeakAuras.normalWidth,
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and not trigger.useGroup_count) end
},
group_countOperator = {
type = "select",
name = L["Operator"],
desc = function()
if (trigger.unit == "multi") then
return L["Compare against the number of units affected."]
else
local groupType = OptionsPrivate.Private.unit_types_bufftrigger_2[trigger.unit or "group"] or "|cFFFF0000Error|r"
return L["Group aura count description"]:format(groupType, groupType, groupType, groupType, groupType, groupType, groupType)
end
end,
order = 70.2,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and trigger.useGroup_count) end,
get = function() return trigger.group_countOperator end
},
group_count = {
type = "input",
name = L["Count"],
desc = function()
if (trigger.unit == "multi") then
return L["Compare against the number of units affected."]
else
local groupType = OptionsPrivate.Private.unit_types_bufftrigger_2[trigger.unit or "group"] or "|cFFFF0000Error|r"
return L["Group aura count description"]:format(groupType, groupType, groupType, groupType, groupType, groupType, groupType)
end
end,
order = 70.3,
width = WeakAuras.halfWidth,
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and trigger.useGroup_count) end,
},
use_matchesShowOn = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Show On"],
order = 71,
hidden = function() return not (trigger.type == "aura2" and not IsGroupTrigger(trigger)) end,
get = function() return true end,
disabled = true
},
matchesShowOn = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Show On"],
values = OptionsPrivate.Private.bufftrigger_2_progress_behavior_types,
order = 71.1,
hidden = function() return not (trigger.type == "aura2" and not IsGroupTrigger(trigger)) end,
get = function()
return trigger.matchesShowOn or "showOnActive"
end
},
useMatch_count = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Match Count"],
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger)) end,
order = 71.2
},
useMatch_countSpace = {
type = "description",
name = "",
order = 71.3,
width = WeakAuras.normalWidth,
hidden = function()
if trigger.type ~= "aura2" then
return true
end
if IsGroupTrigger(trigger) then
return trigger.useMatch_count
else
return trigger.matchesShowOn ~= "showOnMatches"
end
end
},
match_countOperator = {
type = "select",
name = L["Operator"],
order = 71.4,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
hidden = function() return not (trigger.type == "aura2" and HasMatchCount(trigger)) end,
desc = L["Counts the number of matches over all units."]
},
match_count = {
type = "input",
name = L["Count"],
order = 71.5,
width = WeakAuras.halfWidth,
hidden = function() return not (trigger.type == "aura2" and HasMatchCount(trigger)) end,
validate = ValidateNumeric,
desc = L["Counts the number of matches over all units."]
},
useMatchPerUnit_count = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Match Count per Unit"],
hidden = function() return not (trigger.type == "aura2" and IsGroupTrigger(trigger)
and trigger.showClones and trigger.combinePerUnit and trigger.perUnitMode ~= "unaffected") end,
order = 71.6
},
useMatchPerUnit_countSpace = {
type = "description",
name = "",
order = 71.7,
width = WeakAuras.normalWidth,
hidden = function()
if trigger.type == "aura2" and IsGroupTrigger(trigger)
and trigger.showClones and trigger.combinePerUnit and trigger.perUnitMode ~= "unaffected" then
return trigger.useMatchPerUnit_count
end
return true
end
},
matchPerUnit_countOperator = {
type = "select",
name = L["Operator"],
order = 71.8,
width = WeakAuras.halfWidth,
values = OptionsPrivate.Private.operator_types,
hidden = function() return not (HasMatchPerUnitCount(trigger)) end,
desc = L["Counts the number of matches per unit."]
},
matchPerUnit_count = {
type = "input",
name = L["Count"],
order = 71.9,
width = WeakAuras.halfWidth,
hidden = function() return not (HasMatchPerUnitCount(trigger)) end,
validate = ValidateNumeric,
desc = L["Counts the number of matches per unit."]
},
showClones = {
type = "toggle",
name = L["Auto-Clone (Show All Matches)"],
order = 72,
hidden = function() return not (trigger.type == "aura2" and not IsSingleMissing(trigger)) end,
width = WeakAuras.doubleWidth,
set = function(info, v)
trigger.showClones = v
WeakAuras.Add(data)
end
},
combinePerUnit = {
type = "toggle",
name = L["Combine Matches Per Unit"],
width = WeakAuras.doubleWidth,
order = 72.2,
hidden = function()
return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and trigger.showClones)
end
},
use_perUnitMode = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Show Matches for Units"],
order = 72.3,
hidden = function()
return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and trigger.showClones and trigger.unit ~= "multi" and trigger.combinePerUnit)
end,
get = function() return true end,
disabled = true
},
perUnitMode = {
type = "select",
name = L["Show Matches for"],
values = OptionsPrivate.Private.bufftrigger_2_per_unit_mode,
order = 72.4,
width = WeakAuras.normalWidth,
hidden = function()
return not (trigger.type == "aura2" and IsGroupTrigger(trigger) and trigger.showClones and trigger.unit ~= "multi" and trigger.combinePerUnit)
end,
get = function()
return trigger.perUnitMode or "affected"
end
},
use_combineMode = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Preferred Match"],
order = 72.5,
hidden = function()
if (trigger.type == "aura2") then
if (IsGroupTrigger(trigger)) then
if trigger.showClones then
return not (trigger.combinePerUnit and trigger.perUnitMode ~= "unaffected")
else
return false
end
else
return not (not IsSingleMissing(trigger) and not trigger.showClones)
end
end
return true
end,
get = function() return true end,
disabled = true
},
combineMode = {
type = "select",
name = L["Preferred Match"],
values = OptionsPrivate.Private.bufftrigger_2_preferred_match_types,
order = 72.6,
width = WeakAuras.normalWidth,
hidden = function()
if (trigger.type == "aura2") then
if (IsGroupTrigger(trigger)) then
if trigger.showClones then
return not (trigger.combinePerUnit and trigger.perUnitMode ~= "unaffected")
else
return false
end
else
return not (not IsSingleMissing(trigger) and not trigger.showClones)
end
end
return true
end,
get = function()
return trigger.combineMode or "showLowest"
end
},
unitExists = {
type = "toggle",
name = L["Show If Unit Does Not Exist"],
width = WeakAuras.doubleWidth,
order = 73,
hidden = function()
return not (trigger.type == "aura2" and trigger.unit ~= "player" and not IsGroupTrigger(trigger))
end,
},
}
-- Names
local nameOptionSize = CountNames(data, triggernum, "auranames") + 1
local spellOptionsSize = CountNames(data, triggernum, "auraspellids") + 1
local ignoreNameOptionSize = CountNames(data, triggernum, "ignoreAuraNames") + 1
local ignoreSpellOptionsSize = CountNames(data, triggernum, "ignoreAuraSpellids") + 1
CreateNameOptions(aura_options, data, trigger, nameOptionSize,
false, false, "name", 12, "useName", "auranames",
L["Aura Name"],
L["Enter an Aura Name, partial Aura Name, or Spell ID. A Spell ID will match any spells with the same name."],
IsSingleMissing(trigger))
CreateNameOptions(aura_options, data, trigger, spellOptionsSize,
true, false, "spellid", 22, "useExactSpellId", "auraspellids",
L["Spell ID"], L["Enter a Spell ID. You can use the addon idTip to determine spell ids."],
IsSingleMissing(trigger))
CreateNameOptions(aura_options, data, trigger, ignoreNameOptionSize,
false, true, "ignorename", 32, "useIgnoreName", "ignoreAuraNames",
L["Ignored Aura Name"],
L["Enter an Aura Name, partial Aura Name, or Spell ID. A Spell ID will match any spells with the same name."],
IsSingleMissing(trigger))
CreateNameOptions(aura_options, data, trigger, ignoreSpellOptionsSize,
true, true, "ignorespellid", 42, "useIgnoreExactSpellId", "ignoreAuraSpellids",
L["Ignored Spell ID"], L["Enter a Spell ID. You can use the addon idTip to determine spell ids."],
IsSingleMissing(trigger))
OptionsPrivate.commonOptions.AddCommonTriggerOptions(aura_options, data, triggernum, true)
OptionsPrivate.commonOptions.AddTriggerGetterSetter(aura_options, data, triggernum)
OptionsPrivate.AddTriggerMetaFunctions(aura_options, data, triggernum)
return {
["trigger." .. triggernum .. ".aura_options"] = aura_options
}
end
WeakAuras.RegisterTriggerSystemOptions({"aura2"}, GetBuffTriggerOptions)