Commit 9a6ffee4 authored by TOM_RUS's avatar TOM_RUS
Browse files

WOW-26734patch8.0.1_Beta

parent 5865f89f
......@@ -21,6 +21,19 @@ local AzeriteEmpoweredItem =
{ Name = "canSelect", Type = "bool", Nilable = false },
},
},
{
Name = "CloseAzeriteEmpoweredItemRespec",
Type = "Function",
},
{
Name = "ConfirmAzeriteEmpoweredItemRespec",
Type = "Function",
Arguments =
{
{ Name = "azeriteEmpoweredItemLocation", Type = "table", Mixin = "ItemLocationMixin", Nilable = false },
},
},
{
Name = "GetAllTierInfo",
Type = "Function",
......@@ -50,6 +63,15 @@ local AzeriteEmpoweredItem =
{ Name = "tierInfo", Type = "table", InnerType = "AzeriteEmpoweredItemTierInfo", Nilable = false },
},
},
{
Name = "GetAzeriteEmpoweredItemRespecCost",
Type = "Function",
Returns =
{
{ Name = "cost", Type = "number", Nilable = false },
},
},
{
Name = "GetPowerInfo",
Type = "Function",
......@@ -215,6 +237,16 @@ local AzeriteEmpoweredItem =
{ Name = "azeriteEmpoweredItemLocation", Type = "table", Mixin = "ItemLocationMixin", Nilable = false },
},
},
{
Name = "RespecAzeriteEmpoweredItemClosed",
Type = "Event",
LiteralName = "RESPEC_AZERITE_EMPOWERED_ITEM_CLOSED",
},
{
Name = "RespecAzeriteEmpoweredItemOpened",
Type = "Event",
LiteralName = "RESPEC_AZERITE_EMPOWERED_ITEM_OPENED",
},
},
Tables =
......
......@@ -1102,46 +1102,48 @@ local Club =
{
Name = "ClubErrorType",
Type = "Enumeration",
NumValues = 35,
NumValues = 37,
MinValue = 0,
MaxValue = 34,
MaxValue = 36,
Fields =
{
{ Name = "ErrorCommunitiesUnknown", Type = "ClubErrorType", EnumValue = 0 },
{ Name = "ErrorCommunitiesNeutralFaction", Type = "ClubErrorType", EnumValue = 1 },
{ Name = "ErrorCommunitiesUnknownRealm", Type = "ClubErrorType", EnumValue = 2 },
{ Name = "ErrorCommunitiesBadTarget", Type = "ClubErrorType", EnumValue = 3 },
{ Name = "ErrorCommunitiesWrongFaction", Type = "ClubErrorType", EnumValue = 4 },
{ Name = "ErrorCommunitiesRestricted", Type = "ClubErrorType", EnumValue = 5 },
{ Name = "ErrorCommunitiesIgnored", Type = "ClubErrorType", EnumValue = 6 },
{ Name = "ErrorCommunitiesGuild", Type = "ClubErrorType", EnumValue = 7 },
{ Name = "ErrorCommunitiesWrongRegion", Type = "ClubErrorType", EnumValue = 8 },
{ Name = "ErrorCommunitiesUnknownTicket", Type = "ClubErrorType", EnumValue = 9 },
{ Name = "ErrorCommunitiesMissingShortName", Type = "ClubErrorType", EnumValue = 10 },
{ Name = "ErrorClubFull", Type = "ClubErrorType", EnumValue = 11 },
{ Name = "ErrorClubNoClub", Type = "ClubErrorType", EnumValue = 12 },
{ Name = "ErrorClubNotMember", Type = "ClubErrorType", EnumValue = 13 },
{ Name = "ErrorClubAlreadyMember", Type = "ClubErrorType", EnumValue = 14 },
{ Name = "ErrorClubNoSuchMember", Type = "ClubErrorType", EnumValue = 15 },
{ Name = "ErrorClubNoSuchInvitation", Type = "ClubErrorType", EnumValue = 16 },
{ Name = "ErrorClubInvitationAlreadyExists", Type = "ClubErrorType", EnumValue = 17 },
{ Name = "ErrorClubInvalidRoleID", Type = "ClubErrorType", EnumValue = 18 },
{ Name = "ErrorClubInsufficientPrivileges", Type = "ClubErrorType", EnumValue = 19 },
{ Name = "ErrorClubTooManyClubsJoined", Type = "ClubErrorType", EnumValue = 20 },
{ Name = "ErrorClubVoiceFull", Type = "ClubErrorType", EnumValue = 21 },
{ Name = "ErrorClubStreamNoStream", Type = "ClubErrorType", EnumValue = 22 },
{ Name = "ErrorClubStreamInvalidName", Type = "ClubErrorType", EnumValue = 23 },
{ Name = "ErrorClubStreamCountAtMin", Type = "ClubErrorType", EnumValue = 24 },
{ Name = "ErrorClubStreamCountAtMax", Type = "ClubErrorType", EnumValue = 25 },
{ Name = "ErrorClubMemberHasRequiredRole", Type = "ClubErrorType", EnumValue = 26 },
{ Name = "ErrorClubSentInvitationCountAtMax", Type = "ClubErrorType", EnumValue = 27 },
{ Name = "ErrorClubReceivedInvitationCountAtMax", Type = "ClubErrorType", EnumValue = 28 },
{ Name = "ErrorClubTargetIsBanned", Type = "ClubErrorType", EnumValue = 29 },
{ Name = "ErrorClubBanAlreadyExists", Type = "ClubErrorType", EnumValue = 30 },
{ Name = "ErrorClubBanCountAtMax", Type = "ClubErrorType", EnumValue = 31 },
{ Name = "ErrorClubTicketCountAtMax", Type = "ClubErrorType", EnumValue = 32 },
{ Name = "ErrorClubTicketNoSuchTicket", Type = "ClubErrorType", EnumValue = 33 },
{ Name = "ErrorClubTicketHasConsumedAllowedRedeemCount", Type = "ClubErrorType", EnumValue = 34 },
{ Name = "ErrorCommunitiesNone", Type = "ClubErrorType", EnumValue = 0 },
{ Name = "ErrorCommunitiesUnknown", Type = "ClubErrorType", EnumValue = 1 },
{ Name = "ErrorCommunitiesNeutralFaction", Type = "ClubErrorType", EnumValue = 2 },
{ Name = "ErrorCommunitiesUnknownRealm", Type = "ClubErrorType", EnumValue = 3 },
{ Name = "ErrorCommunitiesBadTarget", Type = "ClubErrorType", EnumValue = 4 },
{ Name = "ErrorCommunitiesWrongFaction", Type = "ClubErrorType", EnumValue = 5 },
{ Name = "ErrorCommunitiesRestricted", Type = "ClubErrorType", EnumValue = 6 },
{ Name = "ErrorCommunitiesIgnored", Type = "ClubErrorType", EnumValue = 7 },
{ Name = "ErrorCommunitiesGuild", Type = "ClubErrorType", EnumValue = 8 },
{ Name = "ErrorCommunitiesWrongRegion", Type = "ClubErrorType", EnumValue = 9 },
{ Name = "ErrorCommunitiesUnknownTicket", Type = "ClubErrorType", EnumValue = 10 },
{ Name = "ErrorCommunitiesMissingShortName", Type = "ClubErrorType", EnumValue = 11 },
{ Name = "ErrorCommunitiesProfanity", Type = "ClubErrorType", EnumValue = 12 },
{ Name = "ErrorClubFull", Type = "ClubErrorType", EnumValue = 13 },
{ Name = "ErrorClubNoClub", Type = "ClubErrorType", EnumValue = 14 },
{ Name = "ErrorClubNotMember", Type = "ClubErrorType", EnumValue = 15 },
{ Name = "ErrorClubAlreadyMember", Type = "ClubErrorType", EnumValue = 16 },
{ Name = "ErrorClubNoSuchMember", Type = "ClubErrorType", EnumValue = 17 },
{ Name = "ErrorClubNoSuchInvitation", Type = "ClubErrorType", EnumValue = 18 },
{ Name = "ErrorClubInvitationAlreadyExists", Type = "ClubErrorType", EnumValue = 19 },
{ Name = "ErrorClubInvalidRoleID", Type = "ClubErrorType", EnumValue = 20 },
{ Name = "ErrorClubInsufficientPrivileges", Type = "ClubErrorType", EnumValue = 21 },
{ Name = "ErrorClubTooManyClubsJoined", Type = "ClubErrorType", EnumValue = 22 },
{ Name = "ErrorClubVoiceFull", Type = "ClubErrorType", EnumValue = 23 },
{ Name = "ErrorClubStreamNoStream", Type = "ClubErrorType", EnumValue = 24 },
{ Name = "ErrorClubStreamInvalidName", Type = "ClubErrorType", EnumValue = 25 },
{ Name = "ErrorClubStreamCountAtMin", Type = "ClubErrorType", EnumValue = 26 },
{ Name = "ErrorClubStreamCountAtMax", Type = "ClubErrorType", EnumValue = 27 },
{ Name = "ErrorClubMemberHasRequiredRole", Type = "ClubErrorType", EnumValue = 28 },
{ Name = "ErrorClubSentInvitationCountAtMax", Type = "ClubErrorType", EnumValue = 29 },
{ Name = "ErrorClubReceivedInvitationCountAtMax", Type = "ClubErrorType", EnumValue = 30 },
{ Name = "ErrorClubTargetIsBanned", Type = "ClubErrorType", EnumValue = 31 },
{ Name = "ErrorClubBanAlreadyExists", Type = "ClubErrorType", EnumValue = 32 },
{ Name = "ErrorClubBanCountAtMax", Type = "ClubErrorType", EnumValue = 33 },
{ Name = "ErrorClubTicketCountAtMax", Type = "ClubErrorType", EnumValue = 34 },
{ Name = "ErrorClubTicketNoSuchTicket", Type = "ClubErrorType", EnumValue = 35 },
{ Name = "ErrorClubTicketHasConsumedAllowedRedeemCount", Type = "ClubErrorType", EnumValue = 36 },
},
},
{
......
......@@ -56,6 +56,21 @@ local ContributionCollector =
{ Name = "spellID", Type = "number", Nilable = false, StrideIndex = 1 },
},
},
{
Name = "GetContributionAppearance",
Type = "Function",
Arguments =
{
{ Name = "contributionID", Type = "number", Nilable = false },
{ Name = "contributionState", Type = "ContributionState", Nilable = false },
},
Returns =
{
{ Name = "appearance", Type = "ContributionAppearance", Nilable = true },
},
},
{
Name = "GetContributionCollectorsForMap",
Type = "Function",
......@@ -298,6 +313,17 @@ local ContributionCollector =
{ Name = "Destroyed", Type = "ContributionState", EnumValue = 4 },
},
},
{
Name = "ContributionAppearanceFlags",
Type = "Enumeration",
NumValues = 1,
MinValue = 0,
MaxValue = 0,
Fields =
{
{ Name = "TooltipUseTimeRemaining", Type = "ContributionAppearanceFlags", EnumValue = 0 },
},
},
{
Name = "ContributionResult",
Type = "Enumeration",
......@@ -316,6 +342,20 @@ local ContributionCollector =
{ Name = "InternalError", Type = "ContributionResult", EnumValue = 7 },
},
},
{
Name = "ContributionAppearance",
Type = "Structure",
Fields =
{
{ Name = "stateName", Type = "string", Nilable = false },
{ Name = "stateColor", Type = "table", Mixin = "ColorMixin", Nilable = false },
{ Name = "tooltipLine", Type = "string", Nilable = false },
{ Name = "tooltipUseTimeRemaining", Type = "bool", Nilable = false },
{ Name = "statusBarAtlas", Type = "string", Nilable = false },
{ Name = "borderAtlas", Type = "string", Nilable = false },
{ Name = "bannerAtlas", Type = "string", Nilable = false },
},
},
{
Name = "ContributionMapInfo",
Type = "Structure",
......
......@@ -20,6 +20,15 @@ local Cursor =
{ Name = "streamId", Type = "string", Nilable = false },
},
},
{
Name = "GetCursorItem",
Type = "Function",
Returns =
{
{ Name = "item", Type = "table", Mixin = "ItemLocationMixin", Nilable = false },
},
},
{
Name = "SetCursorCommunitiesStream",
Type = "Function",
......
......@@ -246,6 +246,15 @@ local PvpInfo =
{ Name = "isPVPMap", Type = "bool", Nilable = false },
},
},
{
Name = "IsWarModeActive",
Type = "Function",
Returns =
{
{ Name = "warModeActive", Type = "bool", Nilable = false },
},
},
{
Name = "IsWarModeDesired",
Type = "Function",
......
UIPanelWindows["AzeriteRespecFrame"] = {area = "left", pushable = 3, showFailedFunc = C_AzeriteEmpoweredItem.CloseAzeriteEmpoweredItemRespec, };
AzeriteRespecMixin = {};
function AzeriteRespecMixin:OnLoad()
SetPortraitToTexture(self.portrait, "Interface\\Icons\\inv_enchant_voidsphere");
self.TitleText:SetText(AZERITE_RESPEC_TITLE);
self.CornerBL:SetPoint("BOTTOMLEFT", -1, 24);
self.CornerBR:SetPoint("BOTTOMRIGHT", 0, 24);
self.CornerTL:SetPoint("TOPLEFT", -2, -18);
self.CornerTR:SetPoint("TOPRIGHT", 0, -18);
self:RegisterEvent("PLAYER_MONEY");
self:RegisterEvent("RESPEC_AZERITE_EMPOWERED_ITEM_CLOSED");
self:RegisterEvent("AZERITE_EMPOWERED_ITEM_SELECTION_UPDATED");
end
function AzeriteRespecMixin:OnEvent(event, ...)
if event == "RESPEC_AZERITE_EMPOWERED_ITEM_CLOSED" then
HideUIPanel(self);
elseif(event == "PLAYER_MONEY") or (event == "AZERITE_EMPOWERED_ITEM_SELECTION_UPDATED") then
self:UpdateMoney();
if (event == "AZERITE_EMPOWERED_ITEM_SELECTION_UPDATED") then
local itemLocation = ...;
if self:GetRespecItemLocation() and self:GetRespecItemLocation():IsEqualTo(itemLocation) then
self:SetRespecItem(nil);
end
end
end
end
function AzeriteRespecMixin:OnShow()
if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_AZERITE_RESPEC) then
self.HelpBox:Show();
end
self:UpdateMoney();
end
function AzeriteRespecMixin:OnHide()
StaticPopup_Hide("CONFIRM_AZERITE_EMPOWERED_RESPEC");
C_AzeriteEmpoweredItem.CloseAzeriteEmpoweredItemRespec();
self:SetRespecItem(nil);
end
function AzeriteRespecMixin:UpdateMoney()
self.respecCost = C_AzeriteEmpoweredItem.GetAzeriteEmpoweredItemRespecCost();
MoneyFrame_Update(self.ButtonFrame.MoneyFrame:GetName(), self.respecCost, false);
if GetMoney() < (self.respecCost) then
SetMoneyFrameColor(self.ButtonFrame.MoneyFrame:GetName(), "red");
else
SetMoneyFrameColor(self.ButtonFrame.MoneyFrame:GetName(), "white");
end
self:UpdateAzeriteRespecButtonState();
end
function AzeriteRespecMixin:GetRespecItemLocation()
return self.respecItemLocation;
end
function AzeriteRespecMixin:AzeriteRespecItem()
local item = Item:CreateFromItemLocation(self.respecItemLocation);
StaticPopup_Show("CONFIRM_AZERITE_EMPOWERED_RESPEC", item:GetItemLink(), nil, {empoweredItemLocation = self.respecItemLocation, respecCost = self.respecCost});
end
function AzeriteRespecMixin:UpdateAzeriteRespecButtonState()
self.ButtonFrame.AzeriteRespecButton:SetEnabled(self.respecItemLocation ~= nil and GetMoney() > self.respecCost);
end
function AzeriteRespecMixin:SetRespecItem(itemLocation)
if itemLocation and not C_AzeriteEmpoweredItem.IsAzeriteEmpoweredItem(itemLocation) then
UIErrorsFrame:AddMessage(ITEM_IS_NOT_AZERITE_EMPOWERED, RED_FONT_COLOR:GetRGBA());
return;
end
if self.itemDataLoadedCancelFunc then
self.itemDataLoadedCancelFunc();
self.itemDataLoadedCancelFunc = nil;
end
if self.respecItemLocation then
local item = Item:CreateFromItemLocation(self.respecItemLocation);
item:UnlockItem();
end
self.respecItemLocation = itemLocation;
if (itemLocation) then
if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_AZERITE_RESPEC) then
self.HelpBox:Hide();
SetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_AZERITE_RESPEC, true);
end
local item = Item:CreateFromItemLocation(self.respecItemLocation);
item:LockItem();
end
self.ItemSlot:RefreshIcon();
self.ItemSlot:RefreshTooltip();
self:UpdateAzeriteRespecButtonState();
end
AzeriteRespecItemSlotMixin = {};
function AzeriteRespecItemSlotMixin:OnLoad()
self:RegisterForClicks("RightButtonDown", "LeftButtonDown");
self:RegisterForDrag("LeftButton");
end
function AzeriteRespecItemSlotMixin:RefreshIcon()
self.Icon:Hide();
self.GlowOverlay:Hide();
if self:GetParent():GetRespecItemLocation() then
local item = Item:CreateFromItemLocation(self:GetParent():GetRespecItemLocation());
self.itemDataLoadedCancelFunc = item:ContinueWithCancelOnItemLoad(function()
self.Icon:SetTexture(item:GetItemIcon());
self.Icon:Show();
self.GlowOverlay:Show();
end);
end
end
function AzeriteRespecItemSlotMixin:RefreshTooltip()
if GetMouseFocus() == self then
self:OnMouseEnter();
else
self:OnMouseLeave();
end
end
function AzeriteRespecItemSlotMixin:OnClick(button)
if button == "RightButton" then
self:GetParent():SetRespecItem(nil);
else
self:GetParent():SetRespecItem(C_Cursor.GetCursorItem());
end
end
function AzeriteRespecItemSlotMixin:OnDragStart()
self:GetParent():SetRespecItem(nil);
end
function AzeriteRespecItemSlotMixin:OnReceiveDrag()
self:GetParent():SetRespecItem(C_Cursor.GetCursorItem());
ClearCursor();
end
function AzeriteRespecItemSlotMixin:OnMouseEnter()
if self:GetParent():GetRespecItemLocation() then
if self:GetParent():GetRespecItemLocation():IsEquipmentSlot() then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:SetInventoryItem("player", self:GetParent():GetRespecItemLocation():GetEquipmentSlot());
else
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:SetBagItem(self:GetParent():GetRespecItemLocation():GetBagAndSlot());
end
else
GameTooltip_Hide();
end
end
function AzeriteRespecItemSlotMixin:OnMouseLeave()
GameTooltip_Hide();
end
AzeriteRespecButtonMixin = {};
function AzeriteRespecButtonMixin:OnMouseEnter()
if (not self:IsEnabled()) and GetMoney() < self:GetParent():GetParent().respecCost then
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT");
GameTooltip:SetText(NOT_ENOUGH_GOLD_FOR_AZERITE_RESPEC);
else
GameTooltip_Hide();
end
end
function AzeriteRespecButtonMixin:OnMouseLeave()
GameTooltip_Hide();
end
\ No newline at end of file
## Interface: 80000
## Title: Blizzard Azerite Respec UI
## Secure: 1
## LoadOnDemand: 1
Blizzard_AzeriteRespecUI.xml
<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_AzeriteRespecUI.lua"/>
<Frame name="AzeriteRespecFrame" inherits="EtherealFrameTemplate" toplevel="true" parent="UIParent" enableMouse="true" mixin="AzeriteRespecMixin" hidden="true">
<Size x="343" y="261"/>
<Layers>
<Layer level="BACKGROUND" textureSubLevel="-4">
<Texture parentKey="Background" atlas="azeritereforger-background" useAtlasSize="true">
<Anchors>
<Anchor point="BOTTOM" y="35" />
</Anchors>
</Texture>
</Layer>
</Layers>
<Frames>
<Button parentKey="ItemSlot" mixin="AzeriteRespecItemSlotMixin">
<Size x="44" y="44" />
<Anchors>
<Anchor point="CENTER" relativeKey="$parent.Background" />
</Anchors>
<Layers>
<Layer level="BORDER">
<Texture parentKey="Icon" hidden="true">
<Size x="42" y="42" />
<Anchors>
<Anchor point="CENTER" x="0" y="0"/>
</Anchors>
</Texture>
</Layer>
<Layer level="OVERLAY">
<Texture parentKey="GlowOverlay" atlas="azeritereforger-glow" useAtlasSize="true" alphaMode="ADD" hidden="true">
<Anchors>
<Anchor point="CENTER" />
</Anchors>
</Texture>
</Layer>
</Layers>
<Scripts>
<OnLoad method="OnLoad" />
<OnClick method="OnClick" />
<OnDragStart method="OnDragStart" />
<OnReceiveDrag method="OnReceiveDrag" />
<OnEnter method="OnMouseEnter" />
<OnLeave method="OnMouseLeave" />
</Scripts>
</Button>
<Frame parentKey="ButtonFrame">
<Size x="0" y="35"/>
<Anchors>
<Anchor point="BOTTOMLEFT"/>
<Anchor point="BOTTOMRIGHT"/>
</Anchors>
<Frames>
<Button parentKey="AzeriteRespecButton" mixin="AzeriteRespecButtonMixin" inherits="MagicButtonTemplate" text="AZERITE_RESPEC_BUTTON" motionScriptsWhileDisabled="true">
<Size x="154" y="22"/>
<Anchors>
<Anchor point="BOTTOMRIGHT" x="-2" y="5"/>
</Anchors>
<Scripts>
<OnClick>
self:GetParent():GetParent():AzeriteRespecItem();
</OnClick>
<OnEnter method="OnMouseEnter" />
<OnLeave method="OnMouseLeave" />
</Scripts>
</Button>
<Frame parentKey="MoneyFrameEdge" inherits="ThinGoldEdgeTemplate" >
<Size x="182" y="24"/>
<Anchors>
<Anchor point="BOTTOMRIGHT" x="-160" y="3"/>
</Anchors>
</Frame>
<Frame parentKey="MoneyFrame" name="$parentMoneyFrame" inherits="SmallMoneyFrameTemplate">
<Anchors>
<Anchor point="BOTTOMRIGHT" x="-150" y="6"/>
</Anchors>
<Scripts>
<OnLoad>
SmallMoneyFrame_OnLoad(self);
MoneyFrame_SetType(self, "STATIC");
MoneyFrame_SetMaxDisplayWidth(self, 183);
</OnLoad>
</Scripts>
</Frame>
</Frames>
<Layers>
<Layer level="BORDER" textureSubLevel="1">
<Texture>
<Size x="334" y="21"/>
<Anchors>
<Anchor point="BOTTOMLEFT" x="1" y="5"/>
</Anchors>
<Color r="0" g="0" b="0"/>
</Texture>
</Layer>
<Layer level="BORDER" textureSubLevel="2">
<Texture parentKey="ButtonBorder" inherits="_UI-Frame-InnerBotTile">
<Anchors>
<Anchor point="BOTTOMLEFT" x="1" y="26"/>
<Anchor point="BOTTOMRIGHT" x="-3" y="26"/>
</Anchors>
</Texture>
<Texture parentKey="ButtonBottomBorder" inherits="_UI-Frame-BtnBotTile">
<Anchors>
<Anchor point="BOTTOMLEFT" x="6" y="2"/>
<Anchor point="BOTTOMRIGHT" x="-8" y="2"/>
</Anchors>
</Texture>
</Layer>
</Layers>
</Frame>
<Frame parentKey="HelpBox" inherits="GlowBoxTemplate" enableMouse="true" hidden="true" frameStrata="DIALOG">
<Size x="220" y="100"/>
<Anchors>
<Anchor point="LEFT" relativeKey="$parent.ItemSlot" relativePoint="RIGHT" x="15" y="0" />
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString parentKey="Text" inherits="GameFontHighlightLeft" justifyV="TOP" text="AZERITE_RESPEC_TUTORIAL_TEXT">
<Size x="188" y="0"/>
<Anchors>
<Anchor point="TOPLEFT" x="16" y="-24"/>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Button parentKey="CloseButton" inherits="UIPanelCloseButton">
<Anchors>
<Anchor point="TOPRIGHT" x="6" y="6"/>
</Anchors>
<Scripts>
<OnClick inherit="append">
SetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_AZERITE_RESPEC, true);
self:GetParent():Hide();
</OnClick>
</Scripts>
</Button>