Files
coa-elvui/ElvUI_OptionsUI/Nameplates.lua
T
Andrew6810 60ef8a38af init
2022-10-21 07:09:01 -07:00

4156 lines
134 KiB
Lua

local E, _, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local C, L = unpack(select(2, ...))
local NP = E:GetModule("NamePlates")
local ACD = E.Libs.AceConfigDialog
local next, ipairs, pairs, type, tonumber = next, ipairs, pairs, type, tonumber
local tremove, tinsert, tconcat = tremove, tinsert, table.concat
local format, match, gsub, strsplit = string.format, string.match, string.gsub, strsplit
local GetSpellInfo = GetSpellInfo
local positionValues = {
BOTTOMLEFT = "BOTTOMLEFT",
BOTTOMRIGHT = "BOTTOMRIGHT",
LEFT = "LEFT",
RIGHT = "RIGHT",
TOPLEFT = "TOPLEFT",
TOPRIGHT = "TOPRIGHT"
}
local raidTargetIcon = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_%s:0|t %s"
local selectedNameplateFilter
local totemsColor = {
["fire"] = "|cffff8f8f",
["earth"] = "|cffffb31f",
["water"] = "|cff2b76ff",
["air"] = "|cffb8d1ff"
}
local carryFilterFrom, carryFilterTo
local function filterMatch(s,v)
local m1, m2, m3, m4 = "^"..v.."$", "^"..v..",", ","..v.."$", ","..v..","
return (match(s, m1) and m1) or (match(s, m2) and m2) or (match(s, m3) and m3) or (match(s, m4) and v..",")
end
local function filterPriority(auraType, unit, value, remove, movehere)
if not auraType or not value then return end
local filter = E.db.nameplates.units[unit] and E.db.nameplates.units[unit][auraType] and E.db.nameplates.units[unit][auraType].filters and E.db.nameplates.units[unit][auraType].filters.priority
if not filter then return end
local found = filterMatch(filter, E:EscapeString(value))
if found and movehere then
local tbl, sv, sm = {strsplit(",",filter)}
for i in ipairs(tbl) do
if tbl[i] == value then sv = i elseif tbl[i] == movehere then sm = i end
if sv and sm then break end
end
tremove(tbl, sm)
tinsert(tbl, sv, movehere)
E.db.nameplates.units[unit][auraType].filters.priority = tconcat(tbl,",")
elseif found and remove then
E.db.nameplates.units[unit][auraType].filters.priority = gsub(filter, found, "")
elseif not found and not remove then
E.db.nameplates.units[unit][auraType].filters.priority = (filter == "" and value) or (filter..","..value)
end
end
local function UpdateInstanceDifficulty()
if E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.party then
E.Options.args.nameplate.args.filters.args.triggers.args.instanceType.args.dungeonDifficulty = {
order = 10,
type = "group",
name = L["DUNGEON_DIFFICULTY"],
desc = L["Check these to only have the filter active in certain difficulties. If none are checked, it is active in all difficulties."],
guiInline = true,
get = function(info) return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceDifficulty.dungeon[info[#info]] end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceDifficulty.dungeon[info[#info]] = value
UpdateInstanceDifficulty()
NP:ConfigureAll()
end,
args = {
normal = {
order = 1,
type = "toggle",
name = L["PLAYER_DIFFICULTY1"]
},
heroic = {
order = 2,
type = "toggle",
name = L["PLAYER_DIFFICULTY2"]
}
}
}
else
E.Options.args.nameplate.args.filters.args.triggers.args.instanceType.args.dungeonDifficulty = nil
end
if E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.raid then
E.Options.args.nameplate.args.filters.args.triggers.args.instanceType.args.raidDifficulty = {
order = 11,
type = "group",
name = L["Raid Difficulty"],
desc = L["Check these to only have the filter active in certain difficulties. If none are checked, it is active in all difficulties."],
guiInline = true,
get = function(info) return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceDifficulty.raid[info[#info]] end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceDifficulty.raid[info[#info]] = value
UpdateInstanceDifficulty()
NP:ConfigureAll()
end,
args = {
normal = {
order = 1,
type = "toggle",
name = L["PLAYER_DIFFICULTY1"]
},
heroic = {
order = 2,
type = "toggle",
name = L["PLAYER_DIFFICULTY2"]
}
}
}
else
E.Options.args.nameplate.args.filters.args.triggers.args.instanceType.args.raidDifficulty = nil
end
end
local function UpdateStyleLists()
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.names then
E.Options.args.nameplate.args.filters.args.triggers.args.names.args.names = {
order = 50,
type = "group",
name = "",
guiInline = true,
args = {}
}
if next(E.global.nameplates.filters[selectedNameplateFilter].triggers.names) then
for name in pairs(E.global.nameplates.filters[selectedNameplateFilter].triggers.names) do
E.Options.args.nameplate.args.filters.args.triggers.args.names.args.names.args[name] = {
order = -1,
type = "toggle",
name = name,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.names and E.global.nameplates.filters[selectedNameplateFilter].triggers.names[name]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.names[name] = value
NP:ConfigureAll()
end
}
end
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.casting and E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells then
E.Options.args.nameplate.args.filters.args.triggers.args.casting.args.spells = {
order = 50,
type = "group",
name = "",
guiInline = true,
args = {}
}
if next(E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells) then
local spell, spellName, notDisabled
for name in pairs(E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells) do
spell = name
if tonumber(spell) then
spellName = GetSpellInfo(spell)
notDisabled = (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
if spellName then
if notDisabled then
spell = format("|cFFffff00%s|r |cFFffffff(%d)|r", spellName, spell)
else
spell = format("%s (%d)", spellName, spell)
end
end
end
E.Options.args.nameplate.args.filters.args.triggers.args.casting.args.spells.args[name] = {
order = -1,
type = "toggle",
name = spell,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells and E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells[name]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells[name] = value
NP:ConfigureAll()
end
}
end
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns and E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names then
E.Options.args.nameplate.args.filters.args.triggers.args.cooldowns.args.names = {
order = 50,
type = "group",
name = "",
guiInline = true,
args = {}
}
if next(E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names) then
local spell, spellName, notDisabled
for name in pairs(E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names) do
spell = name
if tonumber(spell) then
spellName = GetSpellInfo(spell)
notDisabled = (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
if spellName then
if notDisabled then
spell = format("|cFFffff00%s|r |cFFffffff(%d)|r", spellName, spell)
else
spell = format("%s (%d)", spellName, spell)
end
end
end
E.Options.args.nameplate.args.filters.args.triggers.args.cooldowns.args.names.args[name] = {
order = -1,
type = "select",
name = spell,
values = {
["DISABLED"] = L["DISABLE"],
["ONCD"] = L["On Cooldown"],
["OFFCD"] = L["Off Cooldown"]
},
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names and E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names[name]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names[name] = value
NP:ConfigureAll()
end
}
end
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names then
E.Options.args.nameplate.args.filters.args.triggers.args.buffs.args.names = {
order = 50,
type = "group",
name = "",
guiInline = true,
args = {}
}
if next(E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names) then
local spell, spellName, notDisabled
for name in pairs(E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names) do
spell = name
if tonumber(spell) then
spellName = GetSpellInfo(spell)
notDisabled = (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
if spellName then
if notDisabled then
spell = format("|cFFffff00%s|r |cFFffffff(%d)|r", spellName, spell)
else
spell = format("%s (%d)", spellName, spell)
end
end
end
E.Options.args.nameplate.args.filters.args.triggers.args.buffs.args.names.args[name] = {
order = -1,
type = "toggle",
name = spell,
textWidth = true,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names[name]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names[name] = value
NP:ConfigureAll()
end
}
end
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names then
E.Options.args.nameplate.args.filters.args.triggers.args.debuffs.args.names = {
order = 50,
type = "group",
name = "",
guiInline = true,
args = {}
}
if next(E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names) then
local spell, spellName, notDisabled
for name in pairs(E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names) do
spell = name
if tonumber(spell) then
spellName = GetSpellInfo(spell)
notDisabled = (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
if spellName then
if notDisabled then
spell = format("|cFFffff00%s|r |cFFffffff(%d)|r", spellName, spell)
else
spell = format("%s (%d)", spellName, spell)
end
end
end
E.Options.args.nameplate.args.filters.args.triggers.args.debuffs.args.names.args[name] = {
textWidth = true,
order = -1,
type = "toggle",
name = spell,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names[name]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names[name] = value
NP:ConfigureAll()
end
}
end
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.totems then
for totemSchool in pairs(G.nameplates.totemTypes) do
local titemSchoolLoc, order
if totemSchool == "fire" then
titemSchoolLoc, order = BINDING_NAME_MULTICASTACTIONBUTTON10, 51
elseif totemSchool == "earth" then
titemSchoolLoc, order = BINDING_NAME_MULTICASTACTIONBUTTON1, 50
elseif totemSchool == "water" then
titemSchoolLoc, order = BINDING_NAME_MULTICASTACTIONBUTTON11, 52
elseif totemSchool == "air" then
titemSchoolLoc, order = BINDING_NAME_MULTICASTACTIONBUTTON12, 53
elseif totemSchool == "other" then
titemSchoolLoc, order = OTHER, 54
end
E.Options.args.nameplate.args.filters.args.triggers.args.totems.args[totemSchool] = {
order = order,
type = "group",
name = (totemsColor[totemSchool] or "")..titemSchoolLoc,
guiInline = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.totems.enable end,
args = {}
}
end
for totem, data in pairs(NP.TriggerConditions.totems) do
E.Options.args.nameplate.args.filters.args.triggers.args.totems.args[data[2]].args[totem] = {
textWidth = true,
order = -1,
type = "toggle",
name = data[1],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.totems and E.global.nameplates.filters[selectedNameplateFilter].triggers.totems[totem]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.totems[totem] = value
NP:ConfigureAll()
end
}
end
end
if E.global.nameplates.filters[selectedNameplateFilter] and E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits then
for unitType in pairs(G.nameplates.uniqueUnitTypes) do
local name, order
if unitType == "pvp" then
name, order = "PvP", 50
elseif unitType == "pve" then
name, order = "PvE", 51
end
E.Options.args.nameplate.args.filters.args.triggers.args.uniqueUnits.args[unitType] = {
order = order,
type = "group",
name = name,
guiInline = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits.enable end,
args = {}
}
end
for unit, data in pairs(NP.TriggerConditions.uniqueUnits) do
E.Options.args.nameplate.args.filters.args.triggers.args.uniqueUnits.args[data[2]].args[unit] = {
textWidth = true,
order = -1,
type = "toggle",
name = data[1],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers and E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits and E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits[unit]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits[unit] = value
NP:ConfigureAll()
end
}
end
end
end
local function UpdateFilterGroup()
if not selectedNameplateFilter or not E.global.nameplates.filters[selectedNameplateFilter] then
E.Options.args.nameplate.args.filters.args.header = nil
E.Options.args.nameplate.args.filters.args.actions = nil
E.Options.args.nameplate.args.filters.args.triggers = nil
end
if selectedNameplateFilter and E.global.nameplates.filters[selectedNameplateFilter] then
E.Options.args.nameplate.args.filters.args.header = {
order = 4,
type = "header",
name = selectedNameplateFilter
}
E.Options.args.nameplate.args.filters.args.triggers = {
order = 5,
type = "group",
name = L["Triggers"],
args = {
enable = {
order = 0,
type = "toggle",
name = L["Enable"],
get = function(info)
return (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
set = function(info, value)
if not E.db.nameplates then E.db.nameplates = {} end
if not E.db.nameplates.filters then E.db.nameplates.filters = {} end
if not E.db.nameplates.filters[selectedNameplateFilter] then E.db.nameplates.filters[selectedNameplateFilter] = {} end
if not E.db.nameplates.filters[selectedNameplateFilter].triggers then E.db.nameplates.filters[selectedNameplateFilter].triggers = {} end
E.db.nameplates.filters[selectedNameplateFilter].triggers.enable = value
UpdateStyleLists() --we need this to recolor the spellid based on wether or not the filter is disabled
NP:ConfigureAll()
end
},
priority = {
order = 1,
type = "range",
name = L["Filter Priority"],
desc = L["Lower numbers mean a higher priority. Filters are processed in order from 1 to 100."],
min = 1, max = 100, step = 1,
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.priority or 1
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.priority = value
NP:ConfigureAll()
end
},
resetFilter = {
order = 2,
type = "execute",
name = L["Clear Filter"],
desc = L["Return filter to its default state."],
func = function()
local filter = {}
if G.nameplates.filters[selectedNameplateFilter] then
filter = E:CopyTable(filter, G.nameplates.filters[selectedNameplateFilter])
end
NP:StyleFilterCopyDefaults(filter)
E.global.nameplates.filters[selectedNameplateFilter] = filter
UpdateStyleLists()
UpdateInstanceDifficulty()
NP:ConfigureAll()
end
},
spacer1 = {
order = 3,
type = "description",
name = ""
},
names = {
order = 4,
type = "group",
name = L["NAME"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
addName = {
order = 1,
type = "input",
name = L["Add Name"],
desc = L["Add a Name to the list."],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.names[value] = true
UpdateFilterGroup()
NP:ConfigureAll()
end
},
removeName = {
order = 2,
type = "input",
name = L["Remove Name"],
desc = L["Remove a Name from the list."],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.names[value] = nil
UpdateFilterGroup()
NP:ConfigureAll()
end
}
}
},
targeting = {
order = 5,
type = "group",
name = L["Targeting"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers[info[#info]]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter]
and E.db.nameplates.filters[selectedNameplateFilter].triggers
and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
args = {
isTarget = {
order = 1,
type = "toggle",
name = L["Is Targeted"],
desc = L["If enabled then the filter will only activate when you are targeting the unit."]
},
notTarget = {
order = 2,
type = "toggle",
name = L["Not Targeted"],
desc = L["If enabled then the filter will only activate when you are not targeting the unit."]
},
requireTarget = {
order = 3,
type = "toggle",
name = L["Require Target"],
desc = L["If enabled then the filter will only activate when you have a target."]
},
}
},
casting = {
order = 6,
type = "group",
name = L["Casting"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.casting[info[#info]]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.casting[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and
E.db.nameplates.filters[selectedNameplateFilter].triggers and
E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
args = {
types = {
name = "",
type = "group",
guiInline = true,
order = 2,
args = {
isCasting = {
type = "toggle",
order = 1,
name = L["Is Casting Anything"],
desc = L["If enabled then the filter will activate if the unit is casting anything."]
},
notCasting = {
type = "toggle",
order = 2,
name = L["Not Casting Anything"],
desc = L["If enabled then the filter will activate if the unit is not casting anything."]
},
isChanneling = {
type = "toggle",
order = 3,
customWidth = 200,
name = L["Is Channeling Anything"],
desc = L["If enabled then the filter will activate if the unit is channeling anything."]
},
notChanneling = {
type = "toggle",
order = 4,
customWidth = 200,
name = L["Not Channeling Anything"],
desc = L["If enabled then the filter will activate if the unit is not channeling anything."]
},
spacer1 = {
order = 5,
type = "description",
name = " ",
width = "full"
},
interruptible = {
type = "toggle",
order = 6,
name = L["Interruptible"],
desc = L["If enabled then the filter will only activate if the unit is casting interruptible spells."]
},
notInterruptible = {
type = "toggle",
order = 7,
name = L["Non-Interruptable"],
desc = L["If enabled then the filter will only activate if the unit is casting not interruptible spells."]
}
}
},
addSpell = {
order = 9,
name = L["Add Spell ID or Name"],
type = "input",
get = function(info)
return ""
end,
set = function(info, value)
if match(value, "^[%s%p]-$") then return end
E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells[value] = true
UpdateFilterGroup()
NP:ConfigureAll()
end
},
removeSpell = {
order = 10,
name = L["Remove Spell ID or Name"],
desc = L["If the aura is listed with a number then you need to use that to remove it from the list."],
type = "input",
get = function(info)
return ""
end,
set = function(info, value)
if match(value, "^[%s%p]-$") then return end
E.global.nameplates.filters[selectedNameplateFilter].triggers.casting.spells[value] = nil
UpdateFilterGroup()
NP:ConfigureAll()
end
},
description1 = {
order = 12,
type = "description",
name = L["You do not need to use 'Is Casting Anything' or 'Is Channeling Anything' for these spells to trigger."]
},
description2 = {
order = 13,
type = "description",
name = L["If this list is empty, and if 'Interruptible' is checked, then the filter will activate on any type of cast that can be interrupted."]
},
notSpell = {
type = "toggle",
order = -2,
name = L["Not Spell"],
desc = L["If enabled then the filter will only activate if the unit is not casting or channeling one of the selected spells."]
}
}
},
combat = {
order = 7,
type = "group",
name = L["COMBAT"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
inCombat = {
order = 1,
type = "toggle",
name = L["Player in Combat"],
desc = L["If enabled then the filter will only activate when you are in combat."],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.inCombat
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.inCombat = value
NP:ConfigureAll()
end
},
outOfCombat = {
order = 2,
type = "toggle",
name = L["Player Out of Combat"],
desc = L["If enabled then the filter will only activate when you are out of combat."],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.outOfCombat
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.outOfCombat = value
NP:ConfigureAll()
end
}
}
},
role = {
order = 8,
type = "group",
name = L["ROLE"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
tank = {
order = 1,
type = "toggle",
name = L["TANK"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.role.tank
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.role.tank = value
NP:ConfigureAll()
end,
},
healer = {
order = 2,
type = "toggle",
name = L["HEALER"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.role.healer
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.role.healer = value
NP:ConfigureAll()
end
},
damager = {
order = 3,
type = "toggle",
name = L["DAMAGER"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.role.damager
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.role.damager = value
NP:ConfigureAll()
end
}
}
},
health = {
order = 9,
type = "group",
name = L["Health Threshold"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.healthThreshold
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.healthThreshold = value
NP:ConfigureAll()
end
},
usePlayer = {
order = 2,
type = "toggle",
name = L["Player Health"],
desc = L["Enabling this will check your health amount."],
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.healthThreshold end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.healthUsePlayer
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.healthUsePlayer = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 3,
type = "description",
name = " "
},
underHealthThreshold = {
order = 4,
type = "range",
name = L["Under Health Threshold"],
desc = L["If this threshold is used then the health of the unit needs to be lower than this value in order for the filter to activate. Set to 0 to disable."],
min = 0, max = 1, step = 0.01,
isPercent = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.healthThreshold end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.underHealthThreshold or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.underHealthThreshold = value
NP:ConfigureAll()
end
},
overHealthThreshold = {
order = 5,
type = "range",
name = L["Over Health Threshold"],
desc = L["If this threshold is used then the health of the unit needs to be higher than this value in order for the filter to activate. Set to 0 to disable."],
min = 0, max = 1, step = 0.01,
isPercent = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.healthThreshold end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.overHealthThreshold or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.overHealthThreshold = value
NP:ConfigureAll()
end
}
}
},
power = {
order = 10,
type = "group",
name = L["Power Threshold"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
powerThreshold = {
order = 1,
type = "toggle",
name = L["Enable"],
desc = L["Enabling this will check your power amount."],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.powerThreshold
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.powerThreshold = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 2,
type = "description",
name = " "
},
underPowerThreshold = {
order = 3,
type = "range",
name = L["Under Power Threshold"],
desc = L["If this threshold is used then the power of the unit needs to be lower than this value in order for the filter to activate. Set to 0 to disable."],
min = 0, max = 1, step = 0.01,
isPercent = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.powerThreshold end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.underPowerThreshold or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.underPowerThreshold = value
NP:ConfigureAll()
end
},
overPowerThreshold = {
order = 4,
type = "range",
name = L["Over Power Threshold"],
desc = L["If this threshold is used then the power of the unit needs to be higher than this value in order for the filter to activate. Set to 0 to disable."],
min = 0, max = 1, step = 0.01,
isPercent = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.powerThreshold end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.overPowerThreshold or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.overPowerThreshold = value
NP:ConfigureAll()
end
}
}
},
levels = {
order = 11,
type = "group",
name = L["LEVEL"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.level
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.level = value
NP:ConfigureAll()
end
},
matchLevel = {
order = 2,
type = "toggle",
name = L["Match Player Level"],
desc = L["If enabled then the filter will only activate if the level of the unit matches your own."],
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].triggers.level end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.mylevel
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.mylevel = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 3,
type = "description",
name = L["LEVEL_BOSS"],
},
minLevel = {
order = 4,
type = "range",
name = L["Minimum Level"],
desc = L["If enabled then the filter will only activate if the level of the unit is equal to or higher than this value."],
min = -1, max = MAX_PLAYER_LEVEL+3, step = 1,
disabled = function() return not (E.global.nameplates.filters[selectedNameplateFilter].triggers.level and not E.global.nameplates.filters[selectedNameplateFilter].triggers.mylevel) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.minlevel or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.minlevel = value
NP:ConfigureAll()
end
},
maxLevel = {
order = 5,
type = "range",
name = L["Maximum Level"],
desc = L["If enabled then the filter will only activate if the level of the unit is equal to or lower than this value."],
min = -1, max = MAX_PLAYER_LEVEL+3, step = 1,
disabled = function() return not (E.global.nameplates.filters[selectedNameplateFilter].triggers.level and not E.global.nameplates.filters[selectedNameplateFilter].triggers.mylevel) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.maxlevel or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.maxlevel = value
NP:ConfigureAll()
end
},
currentLevel = {
order = 6,
type = "range",
name = L["Current Level"],
desc = L["If enabled then the filter will only activate if the level of the unit matches this value."],
min = -1, max = MAX_PLAYER_LEVEL+3, step = 1,
disabled = function() return not (E.global.nameplates.filters[selectedNameplateFilter].triggers.level and not E.global.nameplates.filters[selectedNameplateFilter].triggers.mylevel) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.curlevel or 0
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.curlevel = value
NP:ConfigureAll()
end
}
}
},
cooldowns = {
order = 12,
type = "group",
name = L["Cooldowns"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
mustHaveAll = {
order = 1,
type = "toggle",
name = L["Require All"],
desc = L["If enabled then it will require all cooldowns to activate the filter. Otherwise it will only require any one of the cooldowns to activate it."],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns and E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.mustHaveAll
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.mustHaveAll = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 5,
type = "description",
name = " "
},
addCooldown = {
order = 6,
type = "input",
name = L["Add Spell ID or Name"],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names[value] = "ONCD"
UpdateFilterGroup()
NP:ConfigureAll()
end
},
removeCooldown = {
order = 7,
type = "input",
name = L["Remove Spell ID or Name"],
desc = L["If the aura is listed with a number then you need to use that to remove it from the list."],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.cooldowns.names[value] = nil
UpdateFilterGroup()
NP:ConfigureAll()
end
}
}
},
buffs = {
order = 13,
type = "group",
name = L["Buffs"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
mustHaveAll = {
order = 1,
type = "toggle",
name = L["Require All"],
desc = L["If enabled then it will require all auras to activate the filter. Otherwise it will only require any one of the auras to activate it."],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.mustHaveAll
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.mustHaveAll = value
NP:ConfigureAll()
end
},
missing = {
order = 2,
type = "toggle",
name = L["Missing"],
desc = L["If enabled then it checks if auras are missing instead of being present on the unit."],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.missing
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.missing = value
NP:ConfigureAll()
end
},
minTimeLeft = {
order = 3,
type = "range",
name = L["Minimum Time Left"],
desc = L["Apply this filter if a buff has remaining time greater than this. Set to zero to disable."],
min = 0, max = 10800, step = 1,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.minTimeLeft
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.minTimeLeft = value
NP:ConfigureAll()
end
},
maxTimeLeft = {
order = 4,
type = "range",
name = L["Maximum Time Left"],
desc = L["Apply this filter if a buff has remaining time less than this. Set to zero to disable."],
min = 0, max = 10800, step = 1,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.maxTimeLeft
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.maxTimeLeft = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 5,
type = "description",
name = " "
},
addBuff = {
order = 6,
type = "input",
name = L["Add Spell ID or Name"],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names[value] = true
UpdateFilterGroup()
NP:ConfigureAll()
end
},
removeBuff = {
order = 7,
type = "input",
name = L["Remove Spell ID or Name"],
desc = L["If the aura is listed with a number then you need to use that to remove it from the list."],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.buffs.names[value] = nil
UpdateFilterGroup()
NP:ConfigureAll()
end
}
}
},
debuffs = {
order = 14,
type = "group",
name = L["Debuffs"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
mustHaveAll = {
order = 1,
name = L["Require All"],
desc = L["If enabled then it will require all auras to activate the filter. Otherwise it will only require any one of the auras to activate it."],
type = "toggle",
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.mustHaveAll
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.mustHaveAll = value
NP:ConfigureAll()
end
},
missing = {
order = 2,
type = "toggle",
name = L["Missing"],
desc = L["If enabled then it checks if auras are missing instead of being present on the unit."],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.missing
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.missing = value
NP:ConfigureAll()
end
},
minTimeLeft = {
order = 3,
type = "range",
name = L["Minimum Time Left"],
desc = L["Apply this filter if a debuff has remaining time greater than this. Set to zero to disable."],
min = 0, max = 10800, step = 1,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.minTimeLeft
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.minTimeLeft = value
NP:ConfigureAll()
end
},
maxTimeLeft = {
order = 4,
type = "range",
name = L["Maximum Time Left"],
desc = L["Apply this filter if a debuff has remaining time less than this. Set to zero to disable."],
min = 0, max = 10800, step = 1,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs and E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.maxTimeLeft
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.maxTimeLeft = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 5,
type = "description",
name = " "
},
addDebuff = {
order = 6,
type = "input",
name = L["Add Spell ID or Name"],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names[value] = true
UpdateFilterGroup()
NP:ConfigureAll()
end
},
removeDebuff = {
order = 7,
type = "input",
name = L["Remove Spell ID or Name"],
desc = L["If the aura is listed with a number then you need to use that to remove it from the list."],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
E.global.nameplates.filters[selectedNameplateFilter].triggers.debuffs.names[value] = nil
UpdateFilterGroup()
NP:ConfigureAll()
end
}
}
},
nameplateType = {
order = 15,
type = "group",
name = L["Unit Type"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
enable = {
order = 0,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType and E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enable = value
NP:ConfigureAll()
end
},
types = {
order = 1,
type = "group",
name = "",
guiInline = true,
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) or not E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enable end,
args = {
friendlyPlayer = {
order = 1,
type = "toggle",
name = L["FRIENDLY_PLAYER"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.friendlyPlayer
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.friendlyPlayer = value
NP:ConfigureAll()
end
},
friendlyNPC = {
order = 2,
type = "toggle",
name = L["FRIENDLY_NPC"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.friendlyNPC
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.friendlyNPC = value
NP:ConfigureAll()
end
},
enemyPlayer = {
order = 3,
type = "toggle",
name = L["ENEMY_PLAYER"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enemyPlayer
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enemyPlayer = value
NP:ConfigureAll()
end
},
enemyNPC = {
order = 4,
type = "toggle",
name = L["ENEMY_NPC"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enemyNPC
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.nameplateType.enemyNPC = value
NP:ConfigureAll()
end
}
}
}
}
},
reactionType = {
order = 16,
type = "group",
name = L["Reaction Type"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
enable = {
order = 0,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType and E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.enable = value
NP:ConfigureAll()
end
},
types = {
order = 1,
type = "group",
name = "",
guiInline = true,
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) or not E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.enable end,
args = {
hostile = {
order = 1,
type = "toggle",
name = L["FACTION_STANDING_LABEL2"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.hostile
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.hostile = value
NP:ConfigureAll()
end
},
neutral = {
order = 2,
type = "toggle",
name = L["FACTION_STANDING_LABEL4"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.neutral
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.neutral = value
NP:ConfigureAll()
end
},
friendly = {
order = 3,
type = "toggle",
name = L["FACTION_STANDING_LABEL5"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.friendly
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.reactionType.friendly = value
NP:ConfigureAll()
end
}
}
}
}
},
instanceType = {
order = 17,
type = "group",
name = L["Instance Type"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
none = {
order = 1,
type = "toggle",
name = L["NONE"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.none
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.none = value
NP:ConfigureAll()
end
},
sanctuary = {
order = 1,
type = "toggle",
name = L["Sanctuary"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.sanctuary
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.sanctuary = value
NP:ConfigureAll()
end
},
party = {
order = 2,
type = "toggle",
name = L["DUNGEONS"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.party
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.party = value
UpdateInstanceDifficulty()
NP:ConfigureAll()
end
},
raid = {
order = 3,
type = "toggle",
name = L["RAID"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.raid
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.raid = value
UpdateInstanceDifficulty()
NP:ConfigureAll()
end
},
arena = {
order = 4,
type = "toggle",
name = L["ARENA"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.arena
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.arena = value
NP:ConfigureAll()
end
},
pvp = {
order = 5,
type = "toggle",
name = L["BATTLEFIELDS"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.pvp
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.instanceType.pvp = value
NP:ConfigureAll()
end
}
}
},
raidTarget = {
order = 27,
type = "group",
name = L["BINDING_HEADER_RAID_TARGET"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.raidTarget[info[#info]]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.raidTarget[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and
E.db.nameplates.filters[selectedNameplateFilter].triggers and
E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
args = {
types = {
name = "",
type = "group",
guiInline = true,
order = 2,
args = {
star = {
type = "toggle",
order = 1,
name = format(raidTargetIcon, 1, L["RAID_TARGET_1"])
},
circle = {
type = "toggle",
order = 2,
name = format(raidTargetIcon, 2, L["RAID_TARGET_2"])
},
diamond = {
type = "toggle",
order = 3,
name = format(raidTargetIcon, 3, L["RAID_TARGET_3"])
},
triangle = {
type = "toggle",
order = 4,
name = format(raidTargetIcon, 4, L["RAID_TARGET_4"])
},
moon = {
type = "toggle",
order = 5,
name = format(raidTargetIcon, 5, L["RAID_TARGET_5"])
},
square = {
type = "toggle",
order = 6,
name = format(raidTargetIcon, 6, L["RAID_TARGET_6"])
},
cross = {
type = "toggle",
order = 7,
name = format(raidTargetIcon, 7, L["RAID_TARGET_7"])
},
skull = {
type = "toggle",
order = 8,
name = format(raidTargetIcon, 8, L["RAID_TARGET_8"])
}
}
}
}
},
totems = {
order = 28,
type = "group",
name = L["Totem"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.totems[info[#info]]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.totems[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and
E.db.nameplates.filters[selectedNameplateFilter].triggers and
E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
args = {
enable = {
order = 0,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.totems and E.global.nameplates.filters[selectedNameplateFilter].triggers.totems.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.totems.enable = value
NP:ConfigureAll()
end
}
}
},
uniqueUnits = {
order = 28,
type = "group",
name = L["Unique Units"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits[info[#info]]
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and
E.db.nameplates.filters[selectedNameplateFilter].triggers and
E.db.nameplates.filters[selectedNameplateFilter].triggers.enable)
end,
args = {
enable = {
order = 0,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits and E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits.enable = value
NP:ConfigureAll()
end
}
}
}
}
}
E.Options.args.nameplate.args.filters.args.actions = {
order = 6,
type = "group",
name = L["Actions"],
disabled = function() return not (E.db.nameplates and E.db.nameplates.filters and E.db.nameplates.filters[selectedNameplateFilter] and E.db.nameplates.filters[selectedNameplateFilter].triggers and E.db.nameplates.filters[selectedNameplateFilter].triggers.enable) end,
args = {
hide = {
order = 1,
type = "toggle",
name = L["Hide Frame"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.hide
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.hide = value
NP:ConfigureAll()
end
},
nameOnly = {
order = 2,
type = "toggle",
name = L["Name Only"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.nameOnly
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.nameOnly = value
NP:ConfigureAll()
end,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end
},
icon = {
order = 3,
type = "toggle",
name = L["Icon"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.icon
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.icon = value
NP:ConfigureAll()
end,
disabled = function()
return E.global.nameplates.filters[selectedNameplateFilter].actions.hide or not (E.global.nameplates.filters[selectedNameplateFilter].triggers.totems.enable or E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits.enable)
end
},
iconOnly = {
order = 3,
type = "toggle",
name = L["Icon Only"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.iconOnly
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.iconOnly = value
NP:ConfigureAll()
end,
disabled = function()
return E.global.nameplates.filters[selectedNameplateFilter].actions.hide or not (E.global.nameplates.filters[selectedNameplateFilter].triggers.totems.enable or E.global.nameplates.filters[selectedNameplateFilter].triggers.uniqueUnits.enable)
end
},
spacer1 = {
order = 4,
type = "description",
name = " "
},
scale = {
order = 5,
type = "range",
name = L["Scale"],
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.scale or 1
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.scale = value
NP:ConfigureAll()
end,
min = 0.35, max = 1.5, step = 0.01
},
alpha = {
order = 6,
type = "range",
name = L["Alpha"],
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.alpha or -1
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.alpha = value
NP:ConfigureAll()
end,
min = -1, max = 100, step = 1
},
frameLevel = {
order = 7,
name = L["Frame Level"],
desc = L["NAMEPLATE_FRAMELEVEL_DESC"],
type = "range",
min = 0, max = 10, step = 1,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
get = function(info) return E.global.nameplates.filters[selectedNameplateFilter].actions.frameLevel or 0 end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.frameLevel = value
NP:ConfigureAll()
end,
},
color = {
order = 10,
type = "group",
name = L["COLOR"],
guiInline = true,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
args = {
health = {
order = 1,
type = "toggle",
name = L["HEALTH"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.color.health
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.color.health = value
NP:ConfigureAll()
end
},
healthColor = {
order = 2,
type = "color",
name = L["Health Color"],
hasAlpha = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].actions.color.health end,
get = function(info)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.healthColor
return t.r, t.g, t.b, t.a, 136/255, 255/255, 102/255, 1
end,
set = function(info, r, g, b, a)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.healthColor
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end
},
spacer1 = {
order = 3,
type = "description",
name = " ",
},
border = {
order = 4,
type = "toggle",
name = L["Border"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.color.border
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.color.border = value
NP:ConfigureAll()
end
},
borderColor = {
order = 5,
type = "color",
name = L["Border Color"],
hasAlpha = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].actions.color.border end,
get = function(info)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.borderColor
return t.r, t.g, t.b, t.a, 0, 0, 0, 1
end,
set = function(info, r, g, b, a)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.borderColor
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end
},
spacer2 = {
order = 6,
type = "description",
name = " "
},
name = {
order = 7,
type = "toggle",
name = L["NAME"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.color.name
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.color.name = value
NP:ConfigureAll()
end
},
nameColor = {
order = 8,
type = "color",
name = L["Name Color"],
hasAlpha = true,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].actions.color.name end,
get = function(info)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.nameColor
return t.r, t.g, t.b, t.a, 200/255, 200/255, 200/255, 1
end,
set = function(info, r, g, b, a)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.color.nameColor
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end
}
}
},
texture = {
order = 20,
type = "group",
name = L["Texture"],
guiInline = true,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.texture.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.texture.enable = value
NP:ConfigureAll()
end
},
texture = {
order = 2,
type = "select",
dialogControl = "LSM30_Statusbar",
name = L["Texture"],
values = AceGUIWidgetLSMlists.statusbar,
disabled = function() return not E.global.nameplates.filters[selectedNameplateFilter].actions.texture.enable end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.texture.texture
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.texture.texture = value
NP:ConfigureAll()
end
}
}
},
flashing = {
order = 30,
type = "group",
name = L["Flash"],
guiInline = true,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
args = {
enable = {
name = L["Enable"],
order = 1,
type = "toggle",
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.flash.enable
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.flash.enable = value
NP:ConfigureAll()
end
},
speed = {
order = 2,
type = "range",
name = L["SPEED"],
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
get = function(info)
return E.global.nameplates.filters[selectedNameplateFilter].actions.flash.speed or 4
end,
set = function(info, value)
E.global.nameplates.filters[selectedNameplateFilter].actions.flash.speed = value
NP:ConfigureAll()
end,
min = 1, max = 10, step = 1
},
color = {
order = 3,
type = "color",
name = L["COLOR"],
hasAlpha = true,
disabled = function() return E.global.nameplates.filters[selectedNameplateFilter].actions.hide end,
get = function(info)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.flash.color
return t.r, t.g, t.b, t.a, 104/255, 138/255, 217/255, 1
end,
set = function(info, r, g, b, a)
local t = E.global.nameplates.filters[selectedNameplateFilter].actions.flash.color
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end
}
}
}
}
}
UpdateInstanceDifficulty()
UpdateStyleLists()
end
end
local ORDER = 100
local function GetUnitSettings(unit, name)
local copyValues = {}
for x, y in pairs(NP.db.units) do
if type(y) == "table" and x ~= unit then
copyValues[x] = L[x]
end
end
local group = {
order = ORDER,
type = "group",
name = name,
childGroups = "tab",
get = function(info) return E.db.nameplates.units[unit][info[#info]] end,
set = function(info, value) E.db.nameplates.units[unit][info[#info]] = value NP:ConfigureAll() end,
disabled = function() return not E.NamePlates.Initialized end,
args = {
showTestFrame = {
order = -10,
name = L["Show/Hide Test Frame"],
type = "execute",
func = function(info)
NP:TogleTestFrame(unit)
end
},
copySettings = {
order = -9,
type = "select",
name = L["Copy Settings From"],
desc = L["Copy settings from another unit."],
values = copyValues,
get = function() return "" end,
set = function(info, value)
NP:CopySettings(value, unit)
NP:ConfigureAll()
end
},
defaultSettings = {
order = -8,
type = "execute",
name = L["Default Settings"],
desc = L["Set Settings to Default"],
func = function(info)
NP:ResetSettings(unit)
NP:ConfigureAll()
end
},
healthGroup = {
order = 1,
type = "group",
name = L["HEALTH"],
get = function(info) return E.db.nameplates.units[unit].health[info[#info]] end,
set = function(info, value) E.db.nameplates.units[unit].health[info[#info]] = value NP:ConfigureAll() end,
args = {
header = {
order = 1,
type = "header",
name = L["HEALTH"]
},
enable = {
order = 2,
type = "toggle",
name = L["Enable"]
},
height = {
order = 3,
type = "range",
name = L["Height"],
min = 4, max = 20, step = 1
},
width = {
order = 4,
type = "range",
name = L["Width"],
min = 50, max = 200, step = 1
},
textGroup = {
order = 5,
type = "group",
name = L["Text"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].health.text[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].health.text[info[#info]] = value
NP:ConfigureAll()
end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
format = {
order = 2,
type = "select",
name = L["Format"],
values = {
["CURRENT"] = L["Current"],
["CURRENT_MAX"] = L["Current / Max"],
["CURRENT_PERCENT"] = L["Current - Percent"],
["CURRENT_MAX_PERCENT"] = L["Current - Max | Percent"],
["PERCENT"] = L["Percent"],
["DEFICIT"] = L["Deficit"]
}
},
position = {
order = 3,
type = "select",
name = L["Position"],
values = {
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["TOPRIGHT"] = "TOPRIGHT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT"
}
},
parent = {
order = 4,
type = "select",
name = L["Parent"],
values = {
["Nameplate"] = L["Nameplate"],
["Health"] = L["Health"]
}
},
xOffset = {
order = 5,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1
},
yOffset = {
order = 6,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1
},
fontGroup = {
type = "group",
order = 7,
name = L["Fonts"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].health.text[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].health.text[info[#info]] = value
NP:ConfigureAll()
end,
args = {
font = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
fontSize = {
order = 2,
name = L["FONT_SIZE"],
type = "range",
min = 4, max = 32, step = 1
},
fontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
}
}
}
}
}
}
},
castGroup = {
order = 2,
type = "group",
name = L["Cast Bar"],
get = function(info) return E.db.nameplates.units[unit].castbar[info[#info]] end,
set = function(info, value) E.db.nameplates.units[unit].castbar[info[#info]] = value; NP:ConfigureAll() end,
args = {
header = {
order = 0,
type = "header",
name = L["Cast Bar"]
},
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
timeToHold = {
order = 2,
type = "range",
name = L["Time To Hold"],
desc = L["How many seconds the castbar should stay visible after the cast failed or was interrupted."],
min = 0, max = 4, step = 0.1
},
width = {
order = 3,
type = "range",
name = L["Width"],
min = 50, max = 250, step = 1
},
height = {
order = 4,
type = "range",
name = L["Height"],
min = 4, max = 20, step = 1
},
xOffset = {
order = 5,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1
},
yOffset = {
order = 6,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1
},
textGroup = {
order = 7,
type = "group",
name = L["Text"],
get = function(info)
return E.db.nameplates.units[unit].castbar[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].castbar[info[#info]] = value
NP:ConfigureAll()
end,
guiInline = true,
args = {
hideSpellName = {
order = 1,
type = "toggle",
name = L["Hide Spell Name"]
},
hideTime = {
order = 2,
type = "toggle",
name = L["Hide Time"]
},
textPosition = {
order = 3,
type = "select",
name = L["Text Position"],
values = {
["ONBAR"] = L["Cast Bar"],
["ABOVE"] = L["Above"],
["BELOW"] = L["Below"]
}
},
castTimeFormat = {
order = 4,
type = "select",
name = L["Cast Time Format"],
values = {
["CURRENT"] = L["Current"],
["CURRENTMAX"] = L["Current / Max"],
["REMAINING"] = L["Remaining"],
["REMAININGMAX"] = L["Remaining / Max"]
}
},
channelTimeFormat = {
order = 5,
type = "select",
name = L["Channel Time Format"],
values = {
["CURRENT"] = L["Current"],
["CURRENTMAX"] = L["Current / Max"],
["REMAINING"] = L["Remaining"],
["REMAININGMAX"] = L["Remaining / Max"]
}
}
}
},
iconGroup = {
order = 8,
name = L["Icon"],
type = "group",
get = function(info)
return E.db.nameplates.units[unit].castbar[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].castbar[info[#info]] = value
NP:ConfigureAll()
end,
guiInline = true,
args = {
showIcon = {
order = 11,
type = "toggle",
name = L["Show Icon"]
},
iconPosition = {
order = 12,
type = "select",
name = L["Icon Position"],
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"]
}
},
iconSize = {
order = 13,
name = L["Icon Size"],
type = "range",
min = 4, max = 40, step = 1
},
iconOffsetX = {
order = 14,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
iconOffsetY = {
order = 15,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
},
fontGroup = {
type = "group",
order = 30,
name = L["Font"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].castbar[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].castbar[info[#info]] = value
NP:ConfigureAll()
end,
args = {
font = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
fontSize = {
order = 2,
name = L["FONT_SIZE"],
type = "range",
min = 4, max = 60, step = 1
},
fontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
}
}
}
}
},
buffsGroup = {
order = 3,
type = "group",
name = L["Buffs"],
get = function(info)
return E.db.nameplates.units[unit].buffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].buffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 0,
type = "header",
name = L["Buffs"]
},
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
perrow = {
order = 2,
type = "range",
name = L["Per Row"],
min = 1, max = 20, step = 1,
},
numrows = {
order = 3,
type = "range",
name = L["Num Rows"],
min = 1, max = 10, step = 1
},
size = {
order = 4,
type = "range",
name = L["Icon Size"],
min = 6, max = 60, step = 1
},
spacing = {
order = 5,
type = "range",
name = L["Spacing"],
min = 0, max = 60, step = 1
},
xOffset = {
order = 6,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1
},
yOffset = {
order = 7,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1
},
anchorPoint = {
order = 8,
type = "select",
name = L["Anchor Point"],
desc = L["What point to anchor to the frame you set to attach to."],
values = positionValues
},
attachTo = {
order = 9,
type = "select",
name = L["Attach To"],
values = {
["FRAME"] = L["Nameplate"]
}
},
growthX = {
order = 10,
type = "select",
name = L["Growth X-Direction"],
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"]
}
},
growthY = {
order = 11,
type = "select",
name = L["Growth Y-Direction"],
values = {
["UP"] = L["Up"],
["DOWN"] = L["Down"]
}
},
cooldownOrientation = {
order = 12,
type = "select",
name = L["Cooldown Orientation"],
values = {
["VERTICAL"] = L["Vertical"],
["HORIZONTAL"] = L["Horizontal"]
}
},
reverseCooldown = {
order = 13,
type = "toggle",
name = L["Reverse Cooldown"],
},
stacks = {
order = 14,
type = "group",
name = L["Stack Counter"],
guiInline = true,
get = function(info, value)
return E.db.nameplates.units[unit].buffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].buffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
countFont = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
countFontSize = {
order = 2,
name = L["FONT_SIZE"],
type = "range",
min = 4, max = 20, step = 1 -- max 20 cause otherwise it looks weird
},
countFontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
},
countPosition = {
order = 4,
type = "select",
name = L["Position"],
values = {
["TOP"] = "TOP",
["LEFT"] = "LEFT",
["BOTTOM"] = "BOTTOM",
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT",
["RIGHT"] = "RIGHT",
["TOPRIGHT"] = "TOPRIGHT"
}
},
countXOffset = {
order = 5,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
countYOffset = {
order = 6,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
},
duration = {
order = 15,
type = "group",
name = L["Duration"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].buffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].buffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
durationFont = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
durationFontSize = {
order = 2,
type = "range",
name = L["FONT_SIZE"],
min = 4, max = 20, step = 1 -- max 20 cause otherwise it looks weird
},
durationFontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
},
durationPosition = {
order = 4,
type = "select",
name = L["Position"],
values = {
["TOP"] = "TOP",
["LEFT"] = "LEFT",
["BOTTOM"] = "BOTTOM",
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT",
["RIGHT"] = "RIGHT",
["TOPRIGHT"] = "TOPRIGHT"
}
},
durationXOffset = {
order = 5,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
durationYOffset = {
order = 6,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
},
filtersGroup = {
order = 16,
name = L["FILTERS"],
type = "group",
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].buffs.filters[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].buffs.filters[info[#info]] = value
NP:ConfigureAll()
end,
args = {
minDuration = {
order = 1,
type = "range",
name = L["Minimum Duration"],
desc = L["Don't display auras that are shorter than this duration (in seconds). Set to zero to disable."],
min = 0, max = 10800, step = 1
},
maxDuration = {
order = 2,
type = "range",
name = L["Maximum Duration"],
desc = L["Don't display auras that are longer than this duration (in seconds). Set to zero to disable."],
min = 0, max = 10800, step = 1
},
jumpToFilter = {
order = 3,
type = "execute",
name = L["Filters Page"],
desc = L["Shortcut to global filters."],
func = function()
ACD:SelectGroup("ElvUI", "filters")
end
},
spacer1 = {
order = 4,
type = "description",
name = " "
},
specialFilters = {
order = 5,
type = "select",
sortByValue = true,
name = L["Add Special Filter"],
desc = L["These filters don't use a list of spells like the regular filters. Instead they use the WoW API and some code logic to determine if an aura should be allowed or blocked."],
values = function()
local filters = {}
local list = E.global.nameplates.specialFilters
if not (list and next(list)) then return filters end
for filter in pairs(list) do
filters[filter] = L[filter]
end
return filters
end,
set = function(info, value)
filterPriority("buffs", unit, value)
NP:ConfigureAll()
end
},
filter = {
order = 6,
type = "select",
name = L["Add Regular Filter"],
desc = L["These filters use a list of spells to determine if an aura should be allowed or blocked. The content of these filters can be modified in the 'Filters' section of the config."],
values = function()
local filters = {}
local list = E.global.unitframe.aurafilters
if not (list and next(list)) then return filters end
for filter in pairs(list) do
filters[filter] = filter
end
return filters
end,
set = function(info, value)
filterPriority("buffs", unit, value)
NP:ConfigureAll()
end
},
resetPriority = {
order = 7,
type = "execute",
name = L["Reset Priority"],
desc = L["Reset filter priority to the default state."],
func = function()
E.db.nameplates.units[unit].buffs.filters.priority = P.nameplates.units[unit].buffs.filters.priority
NP:ConfigureAll()
end
},
filterPriority = {
order = 8,
type = "multiselect",
name = L["Filter Priority"],
dragdrop = true,
dragOnLeave = E.noop, --keep this here
dragOnEnter = function(info)
carryFilterTo = info.obj.value
end,
dragOnMouseDown = function(info)
carryFilterFrom, carryFilterTo = info.obj.value, nil
end,
dragOnMouseUp = function(info)
filterPriority("buffs", unit, carryFilterTo, nil, carryFilterFrom) --add it in the new spot
carryFilterFrom, carryFilterTo = nil, nil
end,
dragOnClick = function(info)
filterPriority("buffs", unit, carryFilterFrom, true)
end,
stateSwitchGetText = function(_, text)
local SF, localized = E.global.unitframe.specialFilters[text], L[text]
local blockText = SF and localized and text:match("^block") and localized:gsub("^%[.-]%s?", "")
return (blockText and format("|cFF999999%s|r %s", L["BLOCK"], blockText)) or localized or text
end,
stateSwitchOnClick = function()
filterPriority("buffs", unit, carryFilterFrom, nil, nil, true)
end,
values = function()
local str = E.db.nameplates.units[unit].buffs.filters.priority
if str == "" then return {} end
return {strsplit(",", str)}
end,
get = function(_, value)
local str = E.db.nameplates.units[unit].buffs.filters.priority
if str == "" then return end
local tbl = {strsplit(",", str)}
return tbl[value]
end,
set = function()
NP:ConfigureAll()
end
},
spacer3 = {
order = 9,
type = "description",
name = L["Use drag and drop to rearrange filter priority or right click to remove a filter."] ..
"\n" ..
L["Use Shift+LeftClick to toggle between friendly or enemy or normal state. Normal state will allow the filter to be checked on all units. Friendly state is for friendly units only and enemy state is for enemy units."]
}
}
}
}
},
debuffsGroup = {
order = 4,
type = "group",
name = L["Debuffs"],
get = function(info)
return E.db.nameplates.units[unit].debuffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].debuffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 0,
type = "header",
name = L["Debuffs"]
},
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
perrow = {
order = 2,
type = "range",
name = L["Per Row"],
min = 1, max = 20, step = 1,
},
numrows = {
order = 3,
type = "range",
name = L["Num Rows"],
min = 1, max = 10, step = 1
},
size = {
order = 4,
type = "range",
name = L["Icon Size"],
min = 6, max = 60, step = 1
},
spacing = {
order = 5,
type = "range",
name = L["Spacing"],
min = 0, max = 60, step = 1
},
xOffset = {
order = 6,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1
},
yOffset = {
order = 7,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1
},
anchorPoint = {
order = 8,
type = "select",
name = L["Anchor Point"],
desc = L["What point to anchor to the frame you set to attach to."],
values = positionValues
},
attachTo = {
order = 9,
type = "select",
name = L["Attach To"],
values = {
["FRAME"] = L["Nameplate"],
["BUFFS"] = L["Buffs"],
}
},
growthX = {
order = 10,
type = "select",
name = L["Growth X-Direction"],
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"]
}
},
growthY = {
order = 11,
type = "select",
name = L["Growth Y-Direction"],
values = {
["UP"] = L["Up"],
["DOWN"] = L["Down"]
}
},
cooldownOrientation = {
order = 12,
type = "select",
name = L["Cooldown Orientation"],
values = {
["VERTICAL"] = L["Vertical"],
["HORIZONTAL"] = L["Horizontal"]
}
},
reverseCooldown = {
order = 13,
type = "toggle",
name = L["Reverse Cooldown"],
},
stacks = {
order = 14,
type = "group",
name = L["Stack Counter"],
guiInline = true,
get = function(info, value)
return E.db.nameplates.units[unit].debuffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].debuffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
countFont = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
countFontSize = {
order = 2,
type = "range",
name = L["FONT_SIZE"],
min = 4, max = 20, step = 1 -- max 20 cause otherwise it looks weird
},
countFontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
},
countPosition = {
order = 4,
type = "select",
name = L["Position"],
values = {
["TOP"] = "TOP",
["LEFT"] = "LEFT",
["BOTTOM"] = "BOTTOM",
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT",
["RIGHT"] = "RIGHT",
["TOPRIGHT"] = "TOPRIGHT"
}
},
countXOffset = {
order = 5,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
countYOffset = {
order = 6,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
},
duration = {
order = 15,
type = "group",
name = L["Duration"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].debuffs[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].debuffs[info[#info]] = value
NP:ConfigureAll()
end,
args = {
durationFont = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
durationFontSize = {
order = 2,
type = "range",
name = L["FONT_SIZE"],
min = 4, max = 20, step = 1 -- max 20 cause otherwise it looks weird
},
durationFontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
},
durationPosition = {
order = 4,
type = "select",
name = L["Position"],
values = {
["TOP"] = "TOP",
["LEFT"] = "LEFT",
["BOTTOM"] = "BOTTOM",
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT",
["RIGHT"] = "RIGHT",
["TOPRIGHT"] = "TOPRIGHT"
}
},
durationXOffset = {
order = 5,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
durationYOffset = {
order = 6,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
},
filtersGroup = {
order = 16,
type = "group",
name = L["FILTERS"],
get = function(info)
return E.db.nameplates.units[unit].debuffs.filters[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].debuffs.filters[info[#info]] = value
NP:ConfigureAll()
end,
guiInline = true,
args = {
minDuration = {
order = 1,
type = "range",
name = L["Minimum Duration"],
desc = L["Don't display auras that are shorter than this duration (in seconds). Set to zero to disable."],
min = 0, max = 10800, step = 1
},
maxDuration = {
order = 2,
type = "range",
name = L["Maximum Duration"],
desc = L["Don't display auras that are longer than this duration (in seconds). Set to zero to disable."],
min = 0, max = 10800, step = 1
},
jumpToFilter = {
order = 3,
type = "execute",
name = L["Filters Page"],
desc = L["Shortcut to global filters."],
func = function()
ACD:SelectGroup("ElvUI", "filters")
end
},
spacer1 = {
order = 4,
type = "description",
name = " "
},
specialFilters = {
order = 5,
type = "select",
sortByValue = true,
name = L["Add Special Filter"],
desc = L["These filters don't use a list of spells like the regular filters. Instead they use the WoW API and some code logic to determine if an aura should be allowed or blocked."],
values = function()
local filters = {}
local list = E.global.nameplates.specialFilters
if not (list and next(list)) then return filters end
for filter in pairs(list) do
filters[filter] = L[filter]
end
return filters
end,
set = function(info, value)
filterPriority("debuffs", unit, value)
NP:ConfigureAll()
end
},
filter = {
order = 6,
type = "select",
name = L["Add Regular Filter"],
desc = L["These filters use a list of spells to determine if an aura should be allowed or blocked. The content of these filters can be modified in the 'Filters' section of the config."],
values = function()
local filters = {}
local list = E.global.unitframe.aurafilters
if not (list and next(list)) then return filters end
for filter in pairs(list) do
filters[filter] = filter
end
return filters
end,
set = function(info, value)
filterPriority("debuffs", unit, value)
NP:ConfigureAll()
end
},
resetPriority = {
order = 7,
type = "execute",
name = L["Reset Priority"],
desc = L["Reset filter priority to the default state."],
func = function()
E.db.nameplates.units[unit].debuffs.filters.priority = P.nameplates.units[unit].debuffs.filters.priority
NP:ConfigureAll()
end
},
filterPriority = {
order = 8,
type = "multiselect",
name = L["Filter Priority"],
dragdrop = true,
dragOnLeave = E.noop, --keep this here
dragOnEnter = function(info)
carryFilterTo = info.obj.value
end,
dragOnMouseDown = function(info)
carryFilterFrom, carryFilterTo = info.obj.value, nil
end,
dragOnMouseUp = function(info)
filterPriority("debuffs", unit, carryFilterTo, nil, carryFilterFrom) --add it in the new spot
carryFilterFrom, carryFilterTo = nil, nil
end,
dragOnClick = function(info)
filterPriority("debuffs", unit, carryFilterFrom, true)
end,
stateSwitchGetText = function(_, text)
local SF, localized = E.global.unitframe.specialFilters[text], L[text]
local blockText = SF and localized and text:match("^block") and localized:gsub("^%[.-]%s?", "")
return (blockText and format("|cFF999999%s|r %s", L["BLOCK"], blockText)) or localized or text
end,
stateSwitchOnClick = function(info)
filterPriority("debuffs", unit, carryFilterFrom, nil, nil, true)
end,
values = function()
local str = E.db.nameplates.units[unit].debuffs.filters.priority
if str == "" then return {} end
return {strsplit(",", str)}
end,
get = function(info, value)
local str = E.db.nameplates.units[unit].debuffs.filters.priority
if str == "" then return end
local tbl = {strsplit(",", str)}
return tbl[value]
end,
set = function(info)
NP:ConfigureAll()
end
},
spacer3 = {
order = 9,
type = "description",
name = L["Use drag and drop to rearrange filter priority or right click to remove a filter."] ..
"\n" ..
L["Use Shift+LeftClick to toggle between friendly or enemy or normal state. Normal state will allow the filter to be checked on all units. Friendly state is for friendly units only and enemy state is for enemy units."]
}
}
}
}
},
levelGroup = {
order = 5,
name = L["LEVEL"],
type = "group",
get = function(info)
return E.db.nameplates.units[unit].level[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].level[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 0,
type = "header",
name = L["LEVEL"]
},
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
fontGroup = {
type = "group",
order = 2,
name = L["Fonts"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].level[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].level[info[#info]] = value
NP:ConfigureAll()
end,
args = {
font = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
fontSize = {
order = 2,
name = L["FONT_SIZE"],
type = "range",
min = 4, max = 32, step = 1
},
fontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
}
}
}
}
},
nameGroup = {
order = 6,
type = "group",
name = L["Name"],
get = function(info)
return E.db.nameplates.units[unit].name[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].name[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 0,
type = "header",
name = L["Name"]
},
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
abbrev = {
order = 2,
type = "toggle",
name = L["Abbreviation"]
},
fontGroup = {
type = "group",
order = 7,
name = L["Fonts"],
guiInline = true,
get = function(info)
return E.db.nameplates.units[unit].name[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].name[info[#info]] = value
NP:ConfigureAll()
end,
args = {
font = {
order = 1,
type = "select",
name = L["Font"],
dialogControl = "LSM30_Font",
values = AceGUIWidgetLSMlists.font
},
fontSize = {
order = 2,
name = L["FONT_SIZE"],
type = "range",
min = 4, max = 32, step = 1
},
fontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
desc = L["Set the font outline."],
values = C.Values.FontFlags
}
}
}
}
},
raidTargetIndicator = {
order = 7,
name = L["Raid Icon"],
type = "group",
get = function(info)
return E.db.nameplates.units[unit].raidTargetIndicator[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units[unit].raidTargetIndicator[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 0,
type = "header",
name = L["Raid Icon"]
},
size = {
order = 1,
type = "range",
name = L["Size"],
min = 12, max = 64, step = 1
},
position = {
order = 2,
type = "select",
name = L["Icon Position"],
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"],
["TOP"] = L["Top"],
["BOTTOM"] = L["Bottom"],
["CENTER"] = L["Center"]
}
},
xOffset = {
order = 3,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
yOffset = {
order = 4,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
}
}
}
if unit == "FRIENDLY_PLAYER" or unit == "ENEMY_PLAYER" then
if unit == "ENEMY_PLAYER" then
group.args.markHealers = {
order = 7,
type = "group",
name = L["Healer Icon"],
get = function(info) return E.db.nameplates.units.ENEMY_PLAYER[info[#info]] end,
set = function(info, value) E.db.nameplates.units.ENEMY_PLAYER[info[#info]] = value NP:PLAYER_ENTERING_WORLD() NP:ConfigureAll() end,
args = {
header = {
order = 1,
type = "header",
name = L["Healer Icon"]
},
markHealers = {
order = 2,
type = "toggle",
name = L["Enable"],
desc = L["Display a healer icon over known healers inside battlegrounds or arenas."]
}
}
}
end
group.args.healthGroup.args.useClassColor = {
order = 4.5,
type = "toggle",
name = L["Use Class Color"]
}
group.args.nameGroup.args.useClassColor = {
order = 3,
type = "toggle",
name = L["Use Class Color"]
}
elseif unit == "ENEMY_NPC" or unit == "FRIENDLY_NPC" then
group.args.eliteIcon = {
order = 7,
type = "group",
name = L["Elite Icon"],
get = function(info) return E.db.nameplates.units[unit].eliteIcon[info[#info]] end,
set = function(info, value) E.db.nameplates.units[unit].eliteIcon[info[#info]] = value NP:ConfigureAll() end,
args = {
header = {
order = 1,
type = "header",
name = L["Elite Icon"]
},
enable = {
order = 2,
type = "toggle",
name = L["Enable"]
},
position = {
order = 3,
type = "select",
name = L["Position"],
values = {
["LEFT"] = L["Left"],
["RIGHT"] = L["Right"],
["TOP"] = L["Top"],
["BOTTOM"] = L["Bottom"],
["CENTER"] = L["Center"]
},
disabled = function() return not E.db.nameplates.units[unit].eliteIcon.enable end
},
spacer = {
order = 4,
type = "description",
name = " "
},
size = {
order = 5,
type = "range",
name = L["Size"],
min = 12, max = 42, step = 1,
disabled = function() return not E.db.nameplates.units[unit].eliteIcon.enable end
},
xOffset = {
order = 6,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1,
disabled = function() return not E.db.nameplates.units[unit].eliteIcon.enable end
},
yOffset = {
order = 7,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1,
disabled = function() return not E.db.nameplates.units[unit].eliteIcon.enable end
}
}
}
group.args.iconFrame = {
order = 8,
type = "group",
name = L["Icon Frame"],
get = function(info) return E.db.nameplates.units[unit].iconFrame[info[#info]] end,
set = function(info, value) E.db.nameplates.units[unit].iconFrame[info[#info]] = value NP:ConfigureAll() end,
args = {
header = {
order = 1,
type = "header",
name = L["Icon Frame"]
},
enable = {
order = 2,
type = "toggle",
name = L["Enable"]
},
size = {
order = 3,
type = "range",
name = L["Size"],
min = 8, max = 48, step = 1,
},
position = {
order = 4,
type = "select",
name = L["Position"],
values = {
["CENTER"] = "CENTER",
["TOPLEFT"] = "TOPLEFT",
["BOTTOMLEFT"] = "BOTTOMLEFT",
["TOPRIGHT"] = "TOPRIGHT",
["BOTTOMRIGHT"] = "BOTTOMRIGHT"
}
},
parent = {
order = 5,
type = "select",
name = L["Parent"],
values = {
["Nameplate"] = L["Nameplate"],
["Health"] = L["Health"]
}
},
xOffset = {
order = 6,
name = L["X-Offset"],
type = "range",
min = -100, max = 100, step = 1
},
yOffset = {
order = 7,
name = L["Y-Offset"],
type = "range",
min = -100, max = 100, step = 1
}
}
}
end
ORDER = ORDER + 2
return group
end
E.Options.args.nameplate = {
type = "group",
name = L["NamePlates"],
childGroups = "tree",
get = function(info) return E.db.nameplates[info[#info]] end,
set = function(info, value) E.db.nameplates[info[#info]] = value NP:ConfigureAll() end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info) return E.private.nameplates[info[#info]] end,
set = function(info, value) E.private.nameplates[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end
},
intro = {
order = 2,
type = "description",
name = L["NAMEPLATE_DESC"]
},
header = {
order = 3,
type = "header",
name = L["Shortcuts"]
},
spacer1 = {
order = 4,
type = "description",
name = " "
},
generalShortcut = {
order = 5,
type = "execute",
name = L["General"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "general") end,
disabled = function() return not E.NamePlates.Initialized end
},
fontsShortcut = {
order = 6,
type = "execute",
name = L["Fonts"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "fontGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
cooldownShortcut = {
order = 7,
type = "execute",
name = L["Cooldowns"],
func = function() ACD:SelectGroup("ElvUI", "cooldown", "nameplates") end,
disabled = function() return not E.NamePlates.Initialized end
},
threatShortcut = {
order = 8,
type = "execute",
name = L["Threat"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "threatGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
spacer2 = {
order = 9,
type = "description",
name = " "
},
castBarShortcut = {
order = 10,
type = "execute",
name = L["Cast Bar"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "castGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
reactionShortcut = {
order = 12,
type = "execute",
name = L["Reaction Colors"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "reactions") end,
disabled = function() return not E.NamePlates.Initialized end
},
cutawayHealthShortcut = {
order = 13,
type = "execute",
name = L["Cutaway Bars"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "generalGroup", "cutawayHealth") end,
disabled = function() return not E.NamePlates.Initialized end
},
spacer3 = {
order = 14,
type = "description",
name = " "
},
friendlyPlayerShortcut = {
order = 15,
type = "execute",
name = L["FRIENDLY_PLAYER"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "friendlyPlayerGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
friendlyNPCShortcut = {
order = 16,
type = "execute",
name = L["FRIENDLY_NPC"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "friendlyNPCGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
enemyPlayerShortcut = {
order = 17,
type = "execute",
name = L["ENEMY_PLAYER"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "enemyPlayerGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
enemyNPCShortcut = {
order = 18,
type = "execute",
name = L["ENEMY_NPC"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "enemyNPCGroup") end,
disabled = function() return not E.NamePlates.Initialized end
},
spacer4 = {
order = 19,
type = "description",
name = " "
},
filtersShortcut = {
order = 20,
type = "execute",
name = L["Style Filter"],
func = function() ACD:SelectGroup("ElvUI", "nameplate", "filters") end,
disabled = function() return not E.NamePlates.Initialized end
},
generalGroup = {
order = 21,
type = "group",
name = L["General Options"],
childGroups = "tab",
disabled = function() return not E.NamePlates.Initialized end,
args = {
general = {
order = 1,
type = "group",
name = L["General"],
get = function(info)
return E.db.nameplates[info[#info]]
end,
set = function(info, value)
E.db.nameplates[info[#info]] = value
NP:ConfigureAll()
end,
args = {
header = {
order = 1,
type = "header",
name = L["General"]
},
statusbar = {
order = 2,
type = "select",
dialogControl = "LSM30_Statusbar",
name = L["StatusBar Texture"],
values = AceGUIWidgetLSMlists.statusbar
},
motionType = {
order = 3,
type = "select",
name = L["UNIT_NAMEPLATES_TYPES"],
desc = L["Set to either stack nameplates vertically or allow them to overlap."],
values = {
["STACKED"] = L["UNIT_NAMEPLATES_TYPE_2"],
["OVERLAP"] = L["UNIT_NAMEPLATES_TYPE_1"]
}
},
lowHealthThreshold = {
order = 4,
name = L["Low Health Threshold"],
desc = L["Make the unitframe glow yellow when it is below this percent of health, it will glow red when the health value is half of this value."],
type = "range",
isPercent = true,
min = 0, max = 1, step = 0.01
},
showEnemyCombat = {
order = 5,
type = "select",
name = L["Enemy Combat Toggle"],
desc = L["Control enemy nameplates toggling on or off when in combat."],
values = {
["DISABLED"] = L["DISABLE"],
["TOGGLE_ON"] = L["Toggle On While In Combat"],
["TOGGLE_OFF"] = L["Toggle Off While In Combat"]
},
set = function(info, value)
E.db.nameplates[info[#info]] = value
NP:PLAYER_REGEN_ENABLED()
end
},
showFriendlyCombat = {
order = 6,
type = "select",
name = L["Friendly Combat Toggle"],
desc = L["Control friendly nameplates toggling on or off when in combat."],
values = {
["DISABLED"] = L["DISABLE"],
["TOGGLE_ON"] = L["Toggle On While In Combat"],
["TOGGLE_OFF"] = L["Toggle Off While In Combat"]
},
set = function(info, value)
E.db.nameplates[info[#info]] = value
NP:PLAYER_REGEN_ENABLED()
end
},
resetFilters = {
order = 7,
type = "execute",
name = L["Reset Aura Filters"],
func = function(info, value)
E:StaticPopup_Show("RESET_NP_AF") --reset nameplate aurafilters
end
},
fadeIn = {
order = 8,
type = "toggle",
name = L["Alpha Fading"]
},
smoothbars = {
order = 9,
type = "toggle",
name = L["Smooth Bars"],
desc = L["Bars will transition smoothly."],
set = function(info, value)
E.db.nameplates[info[#info]] = value
NP:ConfigureAll()
end
},
highlight = {
order = 10,
type = "toggle",
name = L["Hover Highlight"]
},
nameColoredGlow = {
order = 11,
type = "toggle",
name = L["Name Colored Glow"],
desc = L["Use the Name Color of the unit for the Name Glow."],
disabled = function() return not E.db.nameplates.highlight end
},
clickThrough = {
order = 51,
type = "group",
childGroups = "tabs",
name = L["Click Through"],
get = function(info)
return E.db.nameplates.clickThrough[info[#info]]
end,
set = function(info, value)
E.db.nameplates.clickThrough[info[#info]] = value
NP:ConfigureAll()
end,
args = {
friendly = {
order = 2,
type = "toggle",
name = L["Friendly"],
},
enemy = {
order = 3,
type = "toggle",
name = L["Enemy"]
}
}
},
clickableRange = {
order = 52,
type = "group",
childGroups = "tabs",
name = L["Clickable Size"],
args = {
friendly = {
order = 1,
type = "group",
guiInline = true,
name = L["Friendly"],
get = function(info)
return E.db.nameplates.plateSize[info[#info]]
end,
set = function(info, value)
E.db.nameplates.plateSize[info[#info]] = value
NP:ConfigureAll()
end,
args = {
friendlyWidth = {
order = 1,
type = "range",
name = L["Clickable Width / Width"],
desc = L["Change the width and controls how big of an area on the screen will accept clicks to target unit."],
min = 50,
max = 250,
step = 1
},
friendlyHeight = {
order = 2,
type = "range",
name = L["Clickable Height"],
desc = L["Controls how big of an area on the screen will accept clicks to target unit."],
min = 10,
max = 75,
step = 1
}
}
},
enemy = {
order = 2,
type = "group",
guiInline = true,
name = L["Enemy"],
get = function(info)
return E.db.nameplates.plateSize[info[#info]]
end,
set = function(info, value)
E.db.nameplates.plateSize[info[#info]] = value
NP:ConfigureAll()
end,
args = {
enemyWidth = {
order = 1,
type = "range",
name = L["Clickable Width / Width"],
desc = L["Change the width and controls how big of an area on the screen will accept clicks to target unit."],
min = 50,
max = 250,
step = 1
},
enemyHeight = {
order = 2,
type = "range",
name = L["Clickable Height"],
desc = L["Controls how big of an area on the screen will accept clicks to target unit."],
min = 10,
max = 75,
step = 1
}
}
}
}
}
}
},
colorsGroup = {
order = 2,
type = "group",
name = L["COLORS"],
args = {
general = {
order = 1,
type = "group",
name = L["General"],
guiInline = true,
get = function(info)
local t = E.db.nameplates.colors[info[#info]]
local d = P.nameplates.colors[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b, d.a
end,
set = function(info, r, g, b, a)
local t = E.db.nameplates.colors[info[#info]]
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end,
args = {
glowColor = {
name = L["Target Indicator Color"],
type = "color",
order = 5,
hasAlpha = true
}
}
},
threat = {
order = 2,
type = "group",
name = L["Threat"],
guiInline = true,
get = function(info)
local t = E.db.nameplates.colors.threat[info[#info]]
local d = P.nameplates.colors.threat[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b, d.a
end,
set = function(info, r, g, b, a)
local t = E.db.nameplates.colors.threat[info[#info]]
t.r, t.g, t.b, t.a = r, g, b, a
NP:ConfigureAll()
end,
args = {
goodColor = {
type = "color",
order = 1,
name = L["Good Color"],
hasAlpha = false,
disabled = function()
return not E.db.nameplates.threat.useThreatColor
end
},
goodTransition = {
type = "color",
order = 2,
name = L["Good Transition Color"],
hasAlpha = false,
disabled = function()
return not E.db.nameplates.threat.useThreatColor
end
},
badTransition = {
name = L["Bad Transition Color"],
order = 3,
type = "color",
hasAlpha = false,
disabled = function()
return not E.db.nameplates.threat.useThreatColor
end
},
badColor = {
name = L["Bad Color"],
order = 4,
type = "color",
hasAlpha = false,
disabled = function()
return not E.db.nameplates.threat.useThreatColor
end
},
}
},
castGroup = {
order = 3,
type = "group",
name = L["Cast Bar"],
guiInline = true,
get = function(info)
local t = E.db.nameplates.colors[info[#info]]
local d = P.nameplates.colors[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.nameplates.colors[info[#info]]
t.r, t.g, t.b = r, g, b
NP:ConfigureAll()
end,
args = {
castColor = {
order = 1,
type = "color",
name = L["Cast Color"],
hasAlpha = false
},
castNoInterruptColor = {
order = 2,
type = "color",
name = L["Cast No Interrupt Color"],
hasAlpha = false
},
castInterruptedColor = {
order = 3,
type = "color",
name = L["INTERRUPTED"],
hasAlpha = false
},
castbarDesaturate = {
order = 4,
type = "toggle",
name = L["Desaturated Icon"],
desc = L["Show the castbar icon desaturated if a spell is not interruptible."],
get = function(info)
return E.db.nameplates.colors[info[#info]]
end,
set = function(info, value)
E.db.nameplates.colors[info[#info]] = value
NP:ConfigureAll()
end
}
}
},
reactions = {
order = 4,
type = "group",
name = L["Reaction Colors"],
guiInline = true,
get = function(info)
local t = E.db.nameplates.colors.reactions[info[#info]]
local d = P.nameplates.colors.reactions[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.nameplates.colors.reactions[info[#info]]
t.r, t.g, t.b = r, g, b
NP:ConfigureAll()
end,
args = {
friendlyPlayer = {
order = 1,
type = "color",
name = L["FRIENDLY_PLAYER"],
hasAlpha = false
},
bad = {
order = 2,
type = "color",
name = L["ENEMY"],
hasAlpha = false
},
neutral = {
order = 3,
type = "color",
name = L["Neutral"],
hasAlpha = false
},
good = {
order = 4,
type = "color",
name = L["FRIENDLY_NPC"],
hasAlpha = false
}
}
},
comboPoints = {
order = 5,
type = "group",
name = L["COMBO_POINTS"],
guiInline = true,
args = {}
},
}
},
threatGroup = {
order = 5,
type = "group",
name = L["Threat"],
get = function(info)
local t = E.db.nameplates.threat[info[#info]]
local d = P.nameplates.threat[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.nameplates.threat[info[#info]]
t.r, t.g, t.b = r, g, b
end,
args = {
header = {
order = 1,
type = "header",
name = L["Threat"]
},
useThreatColor = {
order = 2,
type = "toggle",
name = L["Use Threat Color"],
get = function(info) return E.db.nameplates.threat.useThreatColor end,
set = function(info, value) E.db.nameplates.threat.useThreatColor = value end
},
goodScale = {
order = 3,
type = "range",
name = L["Good Scale"],
get = function(info) return E.db.nameplates.threat[info[#info]] end,
set = function(info, value) E.db.nameplates.threat[info[#info]] = value end,
min = 0.3, max = 2, step = 0.01,
isPercent = true
},
badScale = {
order = 4,
type = "range",
name = L["Bad Scale"],
get = function(info) return E.db.nameplates.threat[info[#info]] end,
set = function(info, value) E.db.nameplates.threat[info[#info]] = value end,
min = 0.3, max = 2, step = 0.01,
isPercent = true
},
}
},
cutawayHealth = {
order = 9,
type = "group",
name = L["Cutaway Bars"],
args = {
header = {
order = 1,
type = "header",
name = L["Cutaway Bars"]
},
enabled = {
order = 2,
type = "toggle",
name = L["Enable"],
get = function(info) return E.db.nameplates.cutawayHealth end,
set = function(info, value) E.db.nameplates.cutawayHealth = value end,
},
healthLength = {
order = 3,
type = "range",
name = L["Health Length"],
desc = L["How much time before the cutaway health starts to fade."],
min = 0.1, max = 1, step = 0.1,
get = function(info) return E.db.nameplates.cutawayHealthLength end,
set = function(info, value) E.db.nameplates.cutawayHealthLength = value end,
disabled = function() return not E.db.nameplates.cutawayHealth end
},
healthFadeOutTime = {
order = 4,
type = "range",
name = L["Fade Out"],
desc = L["How long the cutaway health will take to fade out."],
min = 0.1, max = 1, step = 0.1,
get = function(info) return E.db.nameplates.cutawayHealthFadeOutTime end,
set = function(info, value) E.db.nameplates.cutawayHealthFadeOutTime = value end,
disabled = function() return not E.db.nameplates.cutawayHealth end
}
}
}
}
},
friendlyPlayerGroup = GetUnitSettings("FRIENDLY_PLAYER", L["FRIENDLY_PLAYER"]),
friendlyNPCGroup = GetUnitSettings("FRIENDLY_NPC", L["FRIENDLY_NPC"]),
enemyPlayerGroup = GetUnitSettings("ENEMY_PLAYER", L["ENEMY_PLAYER"]),
enemyNPCGroup = GetUnitSettings("ENEMY_NPC", L["ENEMY_NPC"]),
targetGroup = {
order = 200,
type = "group",
name = L["TARGET"],
get = function(info)
return E.db.nameplates.units.TARGET[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units.TARGET[info[#info]] = value
NP:ConfigureAll()
end,
disabled = function()
return not E.NamePlates.Initialized
end,
args = {
useTargetScale = {
order = 1,
type = "toggle",
name = L["Use Target Scale"],
desc = L["Enable/Disable the scaling of targetted nameplates."],
get = function(info) return E.db.nameplates.useTargetScale end,
set = function(info, value)
E.db.nameplates.useTargetScale = value
NP:ConfigureAll()
end
},
targetScale = {
order = 2,
type = "range",
isPercent = true,
name = L["Target Scale"],
desc = L["Scale of the nameplate that is targetted."],
min = 0.3, max = 2, step = 0.01,
get = function(info) return E.db.nameplates.targetScale end,
set = function(info, value)
E.db.nameplates.targetScale = value
NP:ConfigureAll()
end,
disabled = function() return E.db.nameplates.useTargetScale ~= true end
},
nonTargetTransparency = {
order = 3,
type = "range",
isPercent = true,
name = L["Non-Target Alpha"],
min = 0, max = 1, step = 0.01,
get = function(info) return E.db.nameplates.nonTargetTransparency end,
set = function(info, value)
E.db.nameplates.nonTargetTransparency = value
NP:ConfigureAll()
end
},
spacer1 = {
order = 4,
type = "description",
name = " "
},
glowStyle = {
order = 5,
type = "select",
name = L["Target/Low Health Indicator"],
customWidth = 225,
values = {
["none"] = L["NONE"],
["style1"] = L["Border Glow"],
["style2"] = L["Background Glow"],
["style3"] = L["Top Arrow"],
["style4"] = L["Side Arrows"],
["style5"] = L["Border Glow"].." + "..L["Top Arrow"],
["style6"] = L["Background Glow"].." + "..L["Top Arrow"],
["style7"] = L["Border Glow"].." + "..L["Side Arrows"],
["style8"] = L["Background Glow"].." + "..L["Side Arrows"]
}
},
alwaysShowTargetHealth = {
order = 7,
type = "toggle",
name = L["Always Show Target Health"],
get = function(info) return E.db.nameplates.alwaysShowTargetHealth end,
set = function(info, value)
E.db.nameplates.alwaysShowTargetHealth = value
NP:ConfigureAll()
end,
customWidth = 200
},
comboPointsGroup = {
order = 8,
type = "group",
name = L["COMBO_POINTS"],
guiInline = true,
get = function(info)
return E.db.nameplates.units.TARGET.comboPoints[info[#info]]
end,
set = function(info, value)
E.db.nameplates.units.TARGET.comboPoints[info[#info]] = value
NP:ConfigureAll()
end,
args = {
enable = {
order = 1,
type = "toggle",
name = L["Enable"]
},
width = {
order = 2,
type = "range",
name = L["Width"],
min = 4, max = 30, step = 1,
disabled = function() return not E.db.nameplates.units.TARGET.comboPoints.enable end
},
height = {
order = 3,
type = "range",
name = L["Height"],
min = 4, max = 30, step = 1,
disabled = function() return not E.db.nameplates.units.TARGET.comboPoints.enable end
},
spacing = {
order = 4,
type = "range",
name = L["Spacing"],
min = 3, max = 20, step = 1,
disabled = function() return not E.db.nameplates.units.TARGET.comboPoints.enable end
},
xOffset = {
order = 5,
type = "range",
name = L["X-Offset"],
min = -100, max = 100, step = 1,
disabled = function() return not E.db.nameplates.units.TARGET.comboPoints.enable end
},
yOffset = {
order = 6,
type = "range",
name = L["Y-Offset"],
min = -100, max = 100, step = 1,
disabled = function() return not E.db.nameplates.units.TARGET.comboPoints.enable end
}
}
}
}
},
filters = {
order = -99,
type = "group",
name = L["Style Filter"],
childGroups = "tab",
disabled = function() return not E.NamePlates.Initialized end,
args = {
addFilter = {
order = 1,
type = "input",
name = L["Create Filter"],
get = function(info) return "" end,
set = function(info, value)
if match(value, "^[%s%p]-$") then
return
end
if E.global.nameplates.filters[value] then
E:Print(L["Filter already exists!"])
return
end
local filter = {}
NP:StyleFilterCopyDefaults(filter)
E.global.nameplates.filters[value] = filter
UpdateFilterGroup()
NP:ConfigureAll()
end
},
selectFilter = {
order = 2,
type = "select",
sortByValue = true,
name = L["Select Filter"],
get = function(info) return selectedNameplateFilter end,
set = function(info, value) selectedNameplateFilter = value UpdateFilterGroup() end,
values = function()
local filters, priority, name = {}
local list = E.global.nameplates.filters
local profile = E.db.nameplates.filters
if not list then return end
for filter, content in pairs(list) do
priority = (content.triggers and content.triggers.priority) or "?"
name = (content.triggers and profile[filter] and profile[filter].triggers and profile[filter].triggers.enable and filter) or (content.triggers and format("|cFF666666%s|r", filter)) or filter
filters[filter] = format("|cFFffff00(%s)|r %s", priority, name)
end
return filters
end
},
removeFilter = {
order = 3,
type = "execute",
name = L["Delete Filter"],
desc = L["Delete a created filter, you cannot delete pre-existing filters, only custom ones."],
func = function()
for profile in pairs(E.data.profiles) do
if E.data.profiles[profile].nameplates and E.data.profiles[profile].nameplates.filters and E.data.profiles[profile].nameplates.filters[selectedNameplateFilter] then
E.data.profiles[profile].nameplates.filters[selectedNameplateFilter] = nil
end
end
E.global.nameplates.filters[selectedNameplateFilter] = nil
selectedNameplateFilter = nil
UpdateFilterGroup()
NP:ConfigureAll()
end,
disabled = function() return G.nameplates.filters[selectedNameplateFilter] end,
hidden = function() return selectedNameplateFilter == nil end
}
}
}
}
}
for i = 1, 5 do
E.Options.args.nameplate.args.generalGroup.args.colorsGroup.args.comboPoints.args["COMBO_POINTS" .. i] = {
type = "color",
order = i,
name = L["COMBO_POINTS"] .. " #" .. i,
get = function(info)
local t = E.db.nameplates.colors.comboPoints[i]
local d = P.nameplates.colors.comboPoints[i]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.nameplates.colors.comboPoints[i]
t.r, t.g, t.b = r, g, b
NP:ConfigureAll()
end
}
end