SecureAuraHeaderTemplate

From Warcraft Wiki
Jump to navigation Jump to search


SecureAuraHeaderTemplate is one of the SecureTemplates. It's purpose is to automate the creation of SecureActionButtonTemplate frames associated with a unit's auras. These secure frames permit players to use protected functions in combat such as right-clicking to cancel a helpful buff.

Attributes

Essential

template
String - Name of a custom XML template which should inherit SecureActionButtonTemplate and include useful code for interactivity
unit
String (UnitId), normally "player" (because the principle benefit of secure frames is allowing players to cancel their own buffs)

Layout

point
String - Where the first child SecureActionButtonTemplate should appear
xOffset, yOffset
Numbers - Where subsequent children should appear
wrapAfter, wrapXOffset, wrapYOffset, maxWraps
Numbers - Organizing children into rows/cols
minWidth, minHeight
Numbers - Minimum size of the container frame

Ordering and Filtering

filter
String - Comma separated list of possible filter values found in UnitAura, except "RAID" will be ignored
sortMethod
String - Sort the resulting auras by "INDEX", "NAME" or "TIME"
sortDirection
String - "+" or "-" to reverse-sort
separateOwn
Number - Whether to place auras you cast yourself before (1) or after (-1) others; if nil or 0, no separation is done
groupBy
String - If present, a series of comma-separated filters appended to the base filter to separate auras into groups within a single stream
includeWeapons
Number - The aura sub-stream before which to include temporary weapon enchants; if nil or 0, weapon enchants are ignored
weaponTemplate
String - Name of a custom XML template corresponding to the use of includeWeapons (may be nil if you preset tempEnchant1 and tempEnchant2, or if not includeWeapons)

Consolidation Frame

consolidateTo
Number - The aura sub-stream before which to place a proxy for the consolidated header; if nil or 0, consolidation is ignored.
consolidateDuration
Number - the minimum total duration an aura should have to be considered for consolidation (Default: 30)
consolidateThreshold
Number - buffs with less remaining duration than this many seconds should not be consolidated (Default: 10)
consolidateFraction
Number - The fraction of remaining duration a buff should still have to be eligible for consolidation (Default: .10)

Child Frames

Example

-- create a template in XML
<Ui ...>
<Button name="myAuraButtonTemplate" inherits="SecureActionButtonTemplate" virtual="true">
<Size x="10 y="10" />
<Attributes>
  <Attribute name="type2" value="cancelaura" />  
</Attributes>
<Scripts>
  <OnLoad>
    self:RegisterForClicks("RightButtonUp")
  </OnLoad>
</Button>
</Ui>


-- create the SecureAuraHeader in lua
assert(not InCombatLockdown());
local mySecureHeader = CreateFrame("Frame", "mySecureHeader", UIParent, "SecureAuraHeaderTemplate");
mysecureHeader:SetAttribute("template", "myAuraButtonTemplate"); -- it will use
mySecureHeader:SetAttribute("unit", "player"); -- to show auras on the player
mySecureHeader:SetAttribute("minWidth", 1);
mySecureHeader:SetAttribute("minHeight", 1);
mySecureHeader:Show();

-- customize via these attributes
mySecureHeader:SetAttribute("filter", "HELPFUL"); -- see UnitAura() for a list of possible filters
mySecureHeader:SetAttribute("sortMethod", "TIME"); -- also could be "INDEX" or "NAME"
mySecureHeader:SetAttribute("sortDirection", "+"); -- also could be "-" for reverse sorting
mySecureHeader:SetAttribute("point", "CENTER"); -- start creating buff icons in the middle of the screen
mySecureHeader:SetAttribute("xOffset", 15); -- position each buff relative to the previous one
mySecureHeader:SetAttribute("yOffset", 0);
mySecureHeader:SetAttribute("wrapAfter", 5); -- create a new row if there are 6 or more buffs
mySecureHeader:SetAttribute("wrapXOffset", 0);
mySecureHeader:SetAttribute("wrapYOffset", -15);

-- create a function to update the appearance of each button (see UnitAura earlier)
-- use HookScript here so we don't override the built-in OnEvent script, which causes the frame to behave incorrectly.
mySecureHeader:HookScript("OnEvent", function()
  for i=1, 40 do
    local child = header:GetAttribute("child" .. i);  -- gets the i'th automatically created button
    if (not child or not child:IsShown()) then
      return;  -- the player has fewer than 40 buffs
    end
    child.texture = child.texture or child:CreateTexture(nil, "ARTWORK")  -- create a texture if one doesn't exist already
    child.texture:SetAllPoints();
    
    -- the 2nd parameter should accomodate the secure header's sortMethod and sortDirection attributes, by using GetID()
    -- the 3rd parameter should match the secure header's filter attribute, by using the same string
    local name, icon = UnitAura("player", child:GetID(), "HELPFUL"); 
    if (name) then
      child.texture:SetTexture(icon);
      child.texture:Show();
    else
      child.texture:Hide();
    end
  end
end); -- end of the OnEvent handler

-- register the handler to a useful event so it triggers
mySecureHeader:RegisterUnitEvent("UNIT_AURA", "player"); -- triggers when buffs/debuffs on the player change

See Also

SecureAuraHeaderTemplate was contributed by non-employee Nevin Flanagan[1]

  1. ^ SecureGroupHeaders.lua, archived at TownLong-Yak.com (see line 633 of version 8.2.5.31960).