режим предателя + UI референсы и DragonUI

This commit is contained in:
2026-04-09 02:05:29 +04:00
parent 1109d19bb5
commit e8f1ae4ab9
397 changed files with 202750 additions and 37 deletions
@@ -0,0 +1,421 @@
GLYPHTYPE_MAJOR = 1;
GLYPHTYPE_MINOR = 2;
GLYPH_MINOR = { r = 0, g = 0.25, b = 1};
GLYPH_MAJOR = { r = 1, g = 0.25, b = 0};
GLYPH_SLOTS = {};
-- Empty Texture
GLYPH_SLOTS[0] = { left = 0.78125, right = 0.91015625, top = 0.69921875, bottom = 0.828125 };
-- Major Glyphs
GLYPH_SLOTS[3] = { left = 0.392578125, right = 0.521484375, top = 0.87109375, bottom = 1 };
GLYPH_SLOTS[1] = { left = 0, right = 0.12890625, top = 0.87109375, bottom = 1 };
GLYPH_SLOTS[5] = { left = 0.26171875, right = 0.390625, top = 0.87109375, bottom = 1 };
-- Minor Glyphs
GLYPH_SLOTS[2] = { left = 0.130859375, right = 0.259765625, top = 0.87109375, bottom = 1 };
GLYPH_SLOTS[6] = { left = 0.654296875, right = 0.783203125, top = 0.87109375, bottom = 1 };
GLYPH_SLOTS[4] = { left = 0.5234375, right = 0.65234375, top = 0.87109375, bottom = 1 };
NUM_GLYPH_SLOTS = 6;
local slotAnimations = {};
local TOPLEFT, TOP, TOPRIGHT, BOTTOMRIGHT, BOTTOM, BOTTOMLEFT = 3, 1, 5, 4, 2, 6;
slotAnimations[TOPLEFT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -85, ["yStart"] = 17, ["yStop"] = 60};
slotAnimations[TOP] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -13, ["yStart"] = 17, ["yStop"] = 100};
slotAnimations[TOPRIGHT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = 59, ["yStart"] = 17, ["yStop"] = 60};
slotAnimations[BOTTOM] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -13, ["yStart"] = 17, ["yStop"] = -64};
slotAnimations[BOTTOMLEFT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = -87, ["yStart"] = 18, ["yStop"] = -27};
slotAnimations[BOTTOMRIGHT] = {["point"] = "CENTER", ["xStart"] = -13, ["xStop"] = 61, ["yStart"] = 18, ["yStop"] = -27};
local HIGHLIGHT_BASEALPHA = .4;
function GlyphFrame_Toggle ()
TalentFrame_LoadUI();
if ( PlayerTalentFrame_ToggleGlyphFrame ) then
PlayerTalentFrame_ToggleGlyphFrame(GetActiveTalentGroup());
end
end
function GlyphFrame_Open ()
TalentFrame_LoadUI();
if ( PlayerTalentFrame_OpenGlyphFrame ) then
PlayerTalentFrame_OpenGlyphFrame(GetActiveTalentGroup());
end
end
function GlyphFrameGlyph_OnLoad (self)
local name = self:GetName();
self:RegisterForClicks("LeftButtonUp", "RightButtonUp");
self.glyph = _G[name .. "Glyph"];
self.setting = _G[name .. "Setting"];
self.highlight = _G[name .. "Highlight"];
self.background = _G[name .. "Background"];
self.ring = _G[name .. "Ring"];
self.shine = _G[name .. "Shine"];
self.elapsed = 0;
self.tintElapsed = 0;
self.glyphType = nil;
end
function GlyphFrameGlyph_UpdateSlot (self)
local id = self:GetID();
local talentGroup = PlayerTalentFrame and PlayerTalentFrame.talentGroup;
local enabled, glyphType, glyphSpell, iconFilename = GetGlyphSocketInfo(id, talentGroup);
local isMinor = glyphType == 2;
if ( isMinor ) then
GlyphFrameGlyph_SetGlyphType(self, GLYPHTYPE_MINOR);
else
GlyphFrameGlyph_SetGlyphType(self, GLYPHTYPE_MAJOR);
end
self.elapsed = 0;
self.tintElapsed = 0;
local slotAnimation = slotAnimations[id];
if ( not enabled ) then
slotAnimation.glyph = nil;
if ( slotAnimation.sparkle ) then
slotAnimation.sparkle:StopAnimating();
slotAnimation.sparkle:Hide();
end
self.shine:Hide();
self.background:Hide();
self.glyph:Hide();
self.ring:Hide();
self.setting:SetTexture("Interface\\Spellbook\\UI-GlyphFrame-Locked");
self.setting:SetTexCoord(.1, .9, .1, .9);
elseif ( not glyphSpell ) then
slotAnimation.glyph = nil;
if ( slotAnimation.sparkle ) then
slotAnimation.sparkle:StopAnimating();
slotAnimation.sparkle:Hide();
end
self.spell = nil;
self.shine:Show();
self.background:Show();
self.background:SetTexCoord(GLYPH_SLOTS[0].left, GLYPH_SLOTS[0].right, GLYPH_SLOTS[0].top, GLYPH_SLOTS[0].bottom);
if ( not GlyphMatchesSocket(id) ) then
self.background:SetAlpha(1);
end
self.glyph:Hide();
self.ring:Show();
else
slotAnimation.glyph = true;
self.spell = glyphSpell;
self.shine:Show();
self.background:Show();
self.background:SetAlpha(1);
self.background:SetTexCoord(GLYPH_SLOTS[id].left, GLYPH_SLOTS[id].right, GLYPH_SLOTS[id].top, GLYPH_SLOTS[id].bottom);
self.glyph:Show();
if ( iconFilename ) then
self.glyph:SetTexture(iconFilename);
else
self.glyph:SetTexture("Interface\\Spellbook\\UI-Glyph-Rune1");
end
self.ring:Show();
end
end
function GlyphFrameGlyph_SetGlyphType (glyph, glyphType)
glyph.glyphType = glyphType;
glyph.setting:SetTexture("Interface\\Spellbook\\UI-GlyphFrame");
if ( glyphType == GLYPHTYPE_MAJOR ) then
glyph.glyph:SetVertexColor(GLYPH_MAJOR.r, GLYPH_MAJOR.g, GLYPH_MAJOR.b);
glyph.setting:SetWidth(108);
glyph.setting:SetHeight(108);
glyph.setting:SetTexCoord(0.740234375, 0.953125, 0.484375, 0.697265625);
glyph.highlight:SetWidth(108);
glyph.highlight:SetHeight(108);
glyph.highlight:SetTexCoord(0.740234375, 0.953125, 0.484375, 0.697265625);
glyph.ring:SetWidth(82);
glyph.ring:SetHeight(82);
glyph.ring:SetPoint("CENTER", glyph, "CENTER", 0, -1);
glyph.ring:SetTexCoord(0.767578125, 0.92578125, 0.32421875, 0.482421875);
glyph.shine:SetTexCoord(0.9609375, 1, 0.9609375, 1);
glyph.background:SetWidth(70);
glyph.background:SetHeight(70);
else
glyph.glyph:SetVertexColor(GLYPH_MINOR.r, GLYPH_MINOR.g, GLYPH_MINOR.b);
glyph.setting:SetWidth(86);
glyph.setting:SetHeight(86);
glyph.setting:SetTexCoord(0.765625, 0.927734375, 0.15625, 0.31640625);
glyph.highlight:SetWidth(86);
glyph.highlight:SetHeight(86);
glyph.highlight:SetTexCoord(0.765625, 0.927734375, 0.15625, 0.31640625);
glyph.ring:SetWidth(62);
glyph.ring:SetHeight(62);
glyph.ring:SetPoint("CENTER", glyph, "CENTER", 0, 1);
glyph.ring:SetTexCoord(0.787109375, 0.908203125, 0.033203125, 0.154296875);
glyph.shine:SetTexCoord(0.9609375, 1, 0.921875, 0.9609375);
glyph.background:SetWidth(64);
glyph.background:SetHeight(64);
end
end
function GlyphFrameGlyph_OnUpdate (self, elapsed)
local GLYPHFRAMEGLYPH_FINISHED = 6;
local GLYPHFRAMEGLYPH_START = 2;
local GLYPHFRAMEGLYPH_HOLD = 4;
local hasGlyph = self.glyph:IsShown();
if ( hasGlyph or self.elapsed > 0 ) then
self.elapsed = self.elapsed + elapsed;
elapsed = self.elapsed;
if ( elapsed >= GLYPHFRAMEGLYPH_FINISHED ) then
self.setting:SetAlpha(.6);
self.elapsed = 0;
elseif ( elapsed <= GLYPHFRAMEGLYPH_START ) then
self.setting:SetAlpha(.6 + (.4 * elapsed/GLYPHFRAMEGLYPH_START));
elseif ( elapsed >= GLYPHFRAMEGLYPH_HOLD ) then
self.setting:SetAlpha(1 - (.4 * (elapsed - GLYPHFRAMEGLYPH_HOLD) / (GLYPHFRAMEGLYPH_FINISHED - GLYPHFRAMEGLYPH_HOLD) ) );
end
elseif ( self.background:IsShown() ) then
self.setting:SetAlpha(.6);
else
self.setting:SetAlpha(.6);
end
local TINT_START, TINT_HOLD, TINT_FINISHED = .6, .8, 1.6;
local id = self:GetID();
if ( not hasGlyph and self.background:IsShown() and GlyphMatchesSocket(id) ) then
self.tintElapsed = self.tintElapsed + elapsed;
self.background:SetTexCoord(GLYPH_SLOTS[id].left, GLYPH_SLOTS[id].right, GLYPH_SLOTS[id].top, GLYPH_SLOTS[id].bottom);
local highlight = false;
if ( not self:IsMouseOver() ) then
self.highlight:Show();
highlight = true;
end
local alpha;
elapsed = self.tintElapsed;
if ( elapsed >= TINT_FINISHED ) then
alpha = 1;
self.tintElapsed = 0;
elseif ( elapsed <= TINT_START ) then
alpha = 1 - (.6 * elapsed/TINT_START);
elseif ( elapsed >= TINT_HOLD ) then
alpha = .4 + (.6 * (elapsed - TINT_HOLD) / (TINT_FINISHED - TINT_HOLD));
end
if ( alpha ) then
self.background:SetAlpha(alpha);
if ( highlight ) then
self.highlight:SetAlpha(HIGHLIGHT_BASEALPHA * alpha);
else
self.highlight:SetAlpha(HIGHLIGHT_BASEALPHA);
end
end
elseif ( not hasGlyph ) then
self.background:SetTexCoord(GLYPH_SLOTS[0].left, GLYPH_SLOTS[0].right, GLYPH_SLOTS[0].top, GLYPH_SLOTS[0].bottom);
self.background:SetAlpha(1);
end
if ( self.hasCursor and SpellIsTargeting() ) then
if ( GlyphMatchesSocket(self:GetID()) and self.background:IsShown() ) then
SetCursor("CAST_CURSOR");
else
SetCursor("CAST_ERROR_CURSOR");
end
end
end
function GlyphFrameGlyph_OnClick (self, button)
local id = self:GetID();
local talentGroup = PlayerTalentFrame and PlayerTalentFrame.talentGroup;
if ( IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() ) then
local link = GetGlyphLink(id, talentGroup);
if ( link ) then
ChatEdit_InsertLink(link);
end
elseif ( button == "RightButton" ) then
if ( IsShiftKeyDown() and talentGroup == GetActiveTalentGroup() ) then
local glyphName;
local _, _, glyphSpell = GetGlyphSocketInfo(id, talentGroup);
if ( glyphSpell ) then
glyphName = GetSpellInfo(glyphSpell);
local dialog = StaticPopup_Show("CONFIRM_REMOVE_GLYPH", glyphName);
dialog.data = id;
end
end
elseif ( talentGroup == GetActiveTalentGroup() ) then
if ( self.glyph:IsShown() and GlyphMatchesSocket(id) ) then
local dialog = StaticPopup_Show("CONFIRM_GLYPH_PLACEMENT", id);
dialog.data = id;
else
PlaceGlyphInSocket(id);
end
end
end
function GlyphFrameGlyph_OnEnter (self)
self.hasCursor = true;
if ( self.background:IsShown() ) then
self.highlight:Show();
end
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:SetGlyph(self:GetID(), PlayerTalentFrame and PlayerTalentFrame.talentGroup);
GameTooltip:Show();
end
function GlyphFrameGlyph_OnLeave (self)
self.hasCursor = nil;
self.highlight:Hide();
GameTooltip:Hide();
end
local GLYPH_SPARKLE_SIZES = 3;
local GLYPH_DURATION_MODIFIERS = { 1.25, 1.5, 1.8 };
function GlyphFrame_OnUpdate (self, elapsed)
for i = 1, #slotAnimations do
local animation = slotAnimations[i];
if ( animation.glyph and not (animation.sparkle and animation.sparkle.animGroup:IsPlaying()) ) then
local sparkleSize = math.random(GLYPH_SPARKLE_SIZES);
GlyphFrame_StartSlotAnimation(i, sparkleSize * GLYPH_DURATION_MODIFIERS[sparkleSize], sparkleSize);
end
end
end
function GlyphFrame_PulseGlow ()
GlyphFrame.glow:Show();
GlyphFrame.glow.pulse:Play();
end
function GlyphFrame_OnShow (self)
GlyphFrame_Update();
end
function GlyphFrame_OnLoad (self)
local name = self:GetName();
self.background = _G[name .. "Background"];
self.sparkleFrame = SparkleFrame:New(self);
self:RegisterEvent("ADDON_LOADED");
self:RegisterEvent("GLYPH_ADDED");
self:RegisterEvent("GLYPH_REMOVED");
self:RegisterEvent("GLYPH_UPDATED");
self:RegisterEvent("USE_GLYPH");
self:RegisterEvent("PLAYER_LEVEL_UP");
end
function GlyphFrame_OnEnter (self)
if ( SpellIsTargeting() ) then
SetCursor("CAST_ERROR_CURSOR");
end
end
function GlyphFrame_OnLeave (self)
end
function GlyphFrame_OnEvent (self, event, ...)
if ( event == "ADDON_LOADED" ) then
local name = ...;
if ( name == "Blizzard_GlyphUI" and IsAddOnLoaded("Blizzard_TalentUI") or name == "Blizzard_TalentUI" ) then
self:ClearAllPoints();
self:SetParent(PlayerTalentFrame);
self:SetAllPoints();
-- make sure this shows up above the talent UI
local frameLevel = self:GetParent():GetFrameLevel() + 4;
self:SetFrameLevel(frameLevel);
PlayerTalentFrameCloseButton:SetFrameLevel(frameLevel + 1);
end
elseif ( event == "USE_GLYPH" or event == "PLAYER_LEVEL_UP" ) then
GlyphFrame_Update();
elseif ( event == "GLYPH_ADDED" or event == "GLYPH_REMOVED" or event == "GLYPH_UPDATED" ) then
local index = ...;
local glyph = _G["GlyphFrameGlyph" .. index];
if ( glyph and self:IsVisible() ) then
-- update the glyph
GlyphFrameGlyph_UpdateSlot(glyph);
-- play effects based on the event and glyph type
GlyphFrame_PulseGlow();
local glyphType = glyph.glyphType;
if ( event == "GLYPH_ADDED" or event == "GLYPH_UPDATED" ) then
if ( glyphType == GLYPHTYPE_MINOR ) then
PlaySound("Glyph_MinorCreate");
elseif ( glyphType == GLYPHTYPE_MAJOR ) then
PlaySound("Glyph_MajorCreate");
end
elseif ( event == "GLYPH_REMOVED" ) then
GlyphFrame_StopSlotAnimation(index);
if ( glyphType == GLYPHTYPE_MINOR ) then
PlaySound("Glyph_MinorDestroy");
elseif ( glyphType == GLYPHTYPE_MAJOR ) then
PlaySound("Glyph_MajorDestroy");
end
end
end
--Refresh tooltip!
if ( GameTooltip:IsOwned(glyph) ) then
GlyphFrameGlyph_OnEnter(glyph);
end
end
end
function GlyphFrame_Update ()
local isActiveTalentGroup =
PlayerTalentFrame and not PlayerTalentFrame.pet and
PlayerTalentFrame.talentGroup == GetActiveTalentGroup(PlayerTalentFrame.pet);
SetDesaturation(GlyphFrame.background, not isActiveTalentGroup);
for i = 1, NUM_GLYPH_SLOTS do
GlyphFrameGlyph_UpdateSlot(_G["GlyphFrameGlyph"..i]);
end
end
function GlyphFrame_StartSlotAnimation (slotID, duration, size)
local animation = slotAnimations[slotID];
-- init texture to animate
local sparkleName = "GlyphFrameSparkle"..slotID;
local sparkle = _G[sparkleName];
if ( not sparkle ) then
sparkle = GlyphFrame:CreateTexture(sparkleName, "OVERLAY", "GlyphSparkleTexture");
sparkle.slotID = slotID;
end
local template;
if ( size == 1 ) then
template = "SparkleTextureSmall";
elseif ( size == 2 ) then
template = "SparkleTextureKindaSmall";
else
template = "SparkleTextureNormal";
end
local sparkleDim = SparkleDimensions[template];
sparkle:SetHeight(sparkleDim.height);
sparkle:SetWidth(sparkleDim.width);
sparkle:SetPoint("CENTER", GlyphFrame, animation.point, animation.xStart, animation.yStart);
sparkle:Show();
-- init animation
local offsetX, offsetY = animation.xStop - animation.xStart, animation.yStop - animation.yStart;
local animGroupAnim = sparkle.animGroup.translate;
animGroupAnim:SetOffset(offsetX, offsetY);
animGroupAnim:SetDuration(duration);
animGroupAnim:Play();
animation.sparkle = sparkle;
end
function GlyphFrame_StopSlotAnimation (slotID)
local animation = slotAnimations[slotID];
if ( animation.sparkle ) then
animation.sparkle.animGroup:Stop();
animation.sparkle:Hide();
animation.sparkle = nil;
end
end
@@ -0,0 +1,9 @@
## Interface: 30300
## Title: Blizzard Glyph UI
## Notes: Get some cool tats and mod your spells.
## Secure: 1
## Author: Blizzard Entertainment
## Version: 1.0
## LoadOnDemand: 1
Blizzard_GlyphUI.xml
Localization.lua
@@ -0,0 +1,221 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\..\FrameXML\UI.xsd">
<Script file="Blizzard_GlyphUI.lua"/>
<Button name="GlyphTemplate" virtual="true">
<Size>
<AbsDimension x="72" y="72"/>
</Size>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parentSetting" file="Interface\Spellbook\UI-GlyphFrame">
<Size x="86" y="86"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="0" y="0"/>
</Anchor>
</Anchors>
<TexCoords left="0.765625" right="0.927734375" top="0.15625" bottom="0.31640625"/>
</Texture>
</Layer>
<Layer level="BORDER">
<Texture name="$parentHighlight" file="Interface\Spellbook\UI-GlyphFrame" hidden="true" alphaMode="ADD">
<Size x="86" y="86"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="0" y="0"/>
</Anchor>
</Anchors>
<TexCoords left="0.765625" right="0.927734375" top="0.15625" bottom="0.31640625"/>
<Color r="1" g="1" b="1" a=".25"/>
</Texture>
<Texture name="$parentBackground" file="Interface\Spellbook\UI-GlyphFrame">
<Size x="64" y="64"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="0" y="0"/>
</Anchor>
</Anchors>
<TexCoords left="0.78125" right="0.91015625" top="0.69921875" bottom="0.828125"/>
</Texture>
</Layer>
<Layer level="ARTWORK">
<Texture name="$parentGlyph" file="Interface\Spellbook\UI-Glyph-Rune1">
<Size x="53" y="53"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="0" y="0"/>
</Anchor>
</Anchors>
</Texture>
</Layer>
<Layer level="OVERLAY">
<Texture name="$parentRing" file="Interface\Spellbook\UI-GlyphFrame">
<Size x="62" y="62"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="0" y="1"/>
</Anchor>
</Anchors>
<TexCoords left="0.787109375" right="0.908203125" top="0.033203125" bottom="0.154296875"/>
</Texture>
<Texture name="$parentShine" file="Interface\Spellbook\UI-GlyphFrame">
<Size x="16" y="16"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="-9" y="12"/>
</Anchor>
</Anchors>
<TexCoords left="0.9609375" right="1" top="0.921875" bottom="0.9609375"/>
</Texture>
</Layer>
</Layers>
<Scripts>
<OnLoad>
GlyphFrameGlyph_OnLoad(self);
</OnLoad>
<OnShow>
GlyphFrameGlyph_UpdateSlot(self);
</OnShow>
<OnClick>
GlyphFrameGlyph_OnClick(self, button, down);
</OnClick>
<OnEnter>
GlyphFrameGlyph_OnEnter(self, motion);
</OnEnter>
<OnLeave>
GlyphFrameGlyph_OnLeave(self, motion);
</OnLeave>
<OnUpdate>
GlyphFrameGlyph_OnUpdate(self, elapsed);
</OnUpdate>
</Scripts>
</Button>
<Texture name="GlyphSparkleTexture" file="Interface\ItemSocketingFrame\UI-ItemSockets" alphaMode="ADD" hidden="true" virtual="true">
<Size x="13" y="13"/>
<Anchors>
<Anchor point="CENTER"/>
</Anchors>
<Animations>
<AnimationGroup name="$parentAnimGroup" parentKey="animGroup">
<Translation name="$parentTranslate" parentKey="translate"/>
</AnimationGroup>
</Animations>
<TexCoords left="0.3984375" right="0.4453125" top="0.40234375" bottom="0.44921875"/>
</Texture>
<Frame name="GlyphFrame" hidden="true">
<Size x="384" y="512"/>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="0" y="0"/>
</Anchor>
</Anchors>
<HitRectInsets>
<AbsInset left="0" right="30" top="0" bottom="70"/>
</HitRectInsets>
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentBackground" file="Interface\Spellbook\UI-GlyphFrame">
<Size x="352" y="441"/>
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
<TexCoords left="0" right="0.6875" top="0" bottom="0.861328125"/>
</Texture>
<FontString name="$parentTitleText" inherits="GameFontNormal" text="GLYPHS">
<Anchors>
<Anchor point="TOP">
<Offset x="0" y="-18"/>
</Anchor>
</Anchors>
</FontString>
</Layer>
<Layer level="OVERLAY">
<Texture name="$parentGlow" parentKey="glow" file="Interface\Spellbook\UI-GlyphFrame-Glow" hidden="true">
<Size x="352" y="441"/>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="-9" y="-38"/>
</Anchor>
</Anchors>
<Animations>
<AnimationGroup name="$parentPulse" parentKey="pulse">
<Alpha name="$parentIn" change="1" duration="0.1"/>
<Alpha name="$parentOut" change="-1" duration="1.5"/>
<Scripts>
<OnStop>
self:GetParent():Hide();
</OnStop>
<OnFinished>
self:GetParent():Hide();
</OnFinished>
</Scripts>
</AnimationGroup>
</Animations>
<TexCoords left="0" right="0.6875" top="0" bottom="0.861328125"/>
<Color r="1.0" g="1.0" b="1.0" a="0.0"/>
</Texture>
</Layer>
</Layers>
<Frames>
<Button name="$parentGlyph1" inherits="GlyphTemplate" id="1">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="-15" y="140"/>
</Anchor>
</Anchors>
</Button>
<Button name="$parentGlyph4" inherits="GlyphTemplate" id="4">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="BOTTOMRIGHT">
<Offset x="-56" y="168"/>
</Anchor>
</Anchors>
</Button>
<Button name="$parentGlyph6" inherits="GlyphTemplate" id="6">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="BOTTOMLEFT">
<Offset x="26" y="168"/>
</Anchor>
</Anchors>
</Button>
<Button name="$parentGlyph2" inherits="GlyphTemplate" id="2">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="CENTER">
<Offset x="-14" y="-103"/>
</Anchor>
</Anchors>
</Button>
<Button name="$parentGlyph5" inherits="GlyphTemplate" id="5">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="TOPRIGHT">
<Offset x="-56" y="-133"/>
</Anchor>
</Anchors>
</Button>
<Button name="$parentGlyph3" inherits="GlyphTemplate" id="3">
<Size x="90" y="90"/>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="28" y="-133"/>
</Anchor>
</Anchors>
</Button>
</Frames>
<Scripts>
<OnLoad function="GlyphFrame_OnLoad"/>
<OnUpdate function="GlyphFrame_OnUpdate"/>
<OnShow function="GlyphFrame_OnShow"/>
<OnEnter function="GlyphFrame_OnEnter"/>
<OnLeave function="GlyphFrame_OnLeave"/>
<OnEvent function="GlyphFrame_OnEvent"/>
</Scripts>
</Frame>
</Ui>
@@ -0,0 +1 @@
-- This file is executed at the end of addon load