Files
github-actions[bot] 9588a9cf0a WeakestAuras 0.18.0
ClassicAPI 1.18 is now the only requirement

Requirements
- Needs ClassicAPI 1.18.0 or newer. SuperWoW is no longer used, and Nampower is optional.
- On an older ClassicAPI the addon stays off, and a popup links the download.
- Custom triggers on SuperWoW or Nampower events only fire while that mod is installed.

Triggers
- New Combat Log trigger, with lists of spell IDs, spell names and NPC IDs.
  WeakAuras2 auras that use one now import.
- Custom triggers can listen to the combat log with CLEU or CLEU:SUBEVENT.
- Crowd Control matches a specific type (stun, fear, root, silence, disarm and
  more) or a school lockout, with the effect's real timer.
- Saved Crowd Control auras: Root, Silence and Disarm filters carry over; CC and
  Snare become "any type", and snares are no longer detected.
- Cast bars follow pushback and channel updates.

Displays
- Icon cooldown swipes are drawn by the client's own cooldown frame.
- Sound actions play on a chosen channel, and a new Stop sound type ends a
  looping sound.

Fixes
- Cooldown auras no longer sweep on every wand shot.
- The Global Cooldown trigger ignores wand and Auto Shot shots.
2026-10-29 20:41:53 +00:00

108 lines
4.1 KiB
Lua

-- WeakestAuras -- the "subborder" sub-region: a solid edge drawn around the
-- whole region. Mirrors WA2's Border (§8), including its field names.
-- Upstream section refs (§N) point at design/architecture/weakauras2-reference.md
--
-- A backdrop Frame area-anchored over the parent and tinted via
-- SetBackdropBorderColor; SetBackdrop{edgeFile,edgeSize} is native on 1.12
-- (tooltips use it). Opt-in: addDefaultsForNewAura does not seed one, so an
-- aura carries a border only once the user adds it.
if WeakestAuras.disabled then return end
local WA = WeakestAuras
local proto = WA.regionPrototype
-- Stock solid-white texture on 1.12; tinted to any colour by the backdrop
-- border colour. A solid edge, sized by border_size.
local EDGE = "Interface\\Buttons\\WHITE8X8"
WA.RegisterSubRegionType("subborder", {
displayName = "Border",
supports = function(regionType)
return regionType == "icon" or regionType == "progressbar" or regionType == "text"
or regionType == "texture" or regionType == "progresstexture"
or regionType == "empty"
end,
default = {
type = "subborder",
border_visible = true,
border_color = { 0, 0, 0, 1 },
border_size = 1,
border_offset = 0,
anchor_mode = "area",
anchor_area = "region",
},
-- Condition-overridable (§8): visibility + colour. Size/offset are
-- config-only (a condition animating border thickness is niche).
properties = {
border_visible = { display = "Visible", setter = "SetVisible", type = "bool" },
border_color = { display = "Color", setter = "SetBorderColor", type = "color" },
},
create = function(parent)
local region = { parent = parent }
local frame = CreateFrame("Frame", nil, parent)
region.frame = frame
function region:SetVisible(b)
self.visible = b
if b then self.frame:Show() else self.frame:Hide() end
end
function region:SetBorderColor(r, g, b, a)
self.frame:SetBackdropBorderColor(r, g, b, a or 1)
end
function region:SetFrameLevel(level) self.frame:SetFrameLevel(level) end
function region:Show() if self.visible ~= false then self.frame:Show() end end
function region:Hide() self.frame:Hide() end
return region
end,
modify = function(parent, region, parentData, subData)
region.visible = subData.border_visible ~= false
local frame = region.frame
proto.AnchorSubRegion(frame, parent, subData, {
areaOnly = true, areaTarget = "region", x = subData.border_offset or 0,
y = subData.border_offset or 0,
})
local size = subData.border_size or 1
if size < 1 then size = 1 end
frame:SetBackdrop({ edgeFile = EDGE, edgeSize = size })
local c = subData.border_color or { 0, 0, 0, 1 }
frame:SetBackdropBorderColor(c[1] or 0, c[2] or 0, c[3] or 0, c[4] or 1)
if region.visible then frame:Show() else frame:Hide() end
-- Reassert a condition-cleared visibility when the region reappears
-- (same shape subtext uses for text_visible). No per-frame work, so no
-- Update/FrameTick subscription.
parent.subRegionEvents:AddSubscriber("PreShow", function()
if region.visible then frame:Show() end
end)
end,
-- BuildOptions field array for OptionsFrame's Display Effects list.
options = function(parentData, subData, index)
local fields = {
{
type = "toggle", name = "Show border", key = "border_visible",
get = function() return subData.border_visible ~= false end,
set = function(v) subData.border_visible = v and true or false; WA.Add(parentData, true) end,
},
{
type = "color", name = "Color", key = "border_color",
get = function() return subData.border_color end,
set = function(v) subData.border_color = v; WA.Add(parentData, true) end,
},
{
type = "range", name = "Size", key = "border_size", min = 1, max = 16, step = 1, half = true,
get = function() return subData.border_size end,
set = function(v) subData.border_size = v; WA.Add(parentData, true) end,
},
}
local anchorFields = proto.SubRegionAnchorFields(parentData, subData, {
areaOnly = true, areaTarget = "region", x = subData.border_offset or 0,
y = subData.border_offset or 0,
})
for i = 1, #anchorFields do table.insert(fields, anchorFields[i]) end
return fields
end,
})