diff --git a/Interface/AddOns/Blizzard_APIDocumentation/ArdenwealdGardeningDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/ArdenwealdGardeningDocumentation.lua
new file mode 100644
index 0000000000000000000000000000000000000000..3b9c0b16b7c7f2d499efbd8c872e4371359e505c
--- /dev/null
+++ b/Interface/AddOns/Blizzard_APIDocumentation/ArdenwealdGardeningDocumentation.lua
@@ -0,0 +1,48 @@
+local ArdenwealdGardening =
+{
+ Name = "ArdenwealdGardening",
+ Type = "System",
+ Namespace = "C_ArdenwealdGardening",
+
+ Functions =
+ {
+ {
+ Name = "GetGardenData",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "data", Type = "ArdenwealdGardenData", Nilable = false },
+ },
+ },
+ {
+ Name = "IsGardenAccessible",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "accessible", Type = "bool", Nilable = false },
+ },
+ },
+ },
+
+ Events =
+ {
+ },
+
+ Tables =
+ {
+ {
+ Name = "ArdenwealdGardenData",
+ Type = "Structure",
+ Fields =
+ {
+ { Name = "active", Type = "number", Nilable = false },
+ { Name = "ready", Type = "number", Nilable = false },
+ { Name = "remainingSeconds", Type = "number", Nilable = false },
+ },
+ },
+ },
+};
+
+APIDocumentation:AddDocumentationTable(ArdenwealdGardening);
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/AreaPoiInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/AreaPoiInfoDocumentation.lua
index bd50861363d02035296e1624e5c070d257485de5..d1f84e830842d99085c640102ca53508d694e887 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/AreaPoiInfoDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/AreaPoiInfoDocumentation.lua
@@ -90,6 +90,7 @@ local AreaPoiInfo =
{ Name = "textureIndex", Type = "number", Nilable = true },
{ Name = "widgetSetID", Type = "number", Nilable = true },
{ Name = "atlasName", Type = "string", Nilable = true },
+ { Name = "uiTextureKit", Type = "string", Nilable = true },
},
},
},
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/BarberShopDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/BarberShopDocumentation.lua
index e49e8619e5965c75908137633b97a1bb7a240d99..43f9556e84484e7740694d7ee13dd7f01dd275e2 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/BarberShopDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/BarberShopDocumentation.lua
@@ -59,6 +59,15 @@ local BarberShop =
{ Name = "cost", Type = "number", Nilable = false },
},
},
+ {
+ Name = "HasAnyChanges",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "hasChanges", Type = "bool", Nilable = false },
+ },
+ },
{
Name = "IsViewingAlteredForm",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/Blizzard_APIDocumentation.toc b/Interface/AddOns/Blizzard_APIDocumentation/Blizzard_APIDocumentation.toc
index 9c792088b1c4c0ca85f6e6fd983ec0c73f981d70..296b54e7b59538e271227d1bfea0fb911a2293c6 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/Blizzard_APIDocumentation.toc
+++ b/Interface/AddOns/Blizzard_APIDocumentation/Blizzard_APIDocumentation.toc
@@ -19,6 +19,7 @@ AdventureJournalDocumentation.lua
AdventureMapDocumentation.lua
AlliedRacesFrameDocumentation.lua
AnimaDiversionUIDocumentation.lua
+ArdenwealdGardeningDocumentation.lua
AreaPoiInfoDocumentation.lua
ArtifactUIDocumentation.lua
AuctionHouseDocumentation.lua
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/ChatConstantsDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/ChatConstantsDocumentation.lua
index b918b05c920f132f2e3c8a0e13f9b20a0430fa71..f71a5223e313a287a822629de4fc1ea7f8f7ef78 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/ChatConstantsDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/ChatConstantsDocumentation.lua
@@ -5,13 +5,14 @@ local ChatConstants =
{
Name = "ChatChannelRuleset",
Type = "Enumeration",
- NumValues = 2,
+ NumValues = 3,
MinValue = 0,
- MaxValue = 1,
+ MaxValue = 2,
Fields =
{
{ Name = "None", Type = "ChatChannelRuleset", EnumValue = 0 },
{ Name = "Mentor", Type = "ChatChannelRuleset", EnumValue = 1 },
+ { Name = "Disabled", Type = "ChatChannelRuleset", EnumValue = 2 },
},
},
{
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/ChatInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/ChatInfoDocumentation.lua
index 1b94948a96d67066f3023ffc1c61a3cdd98ec2c2..8e379236f55c8dfeaf3f505ef1285ebb78e267aa 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/ChatInfoDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/ChatInfoDocumentation.lua
@@ -52,6 +52,20 @@ local ChatInfo =
{ Name = "ruleset", Type = "ChatChannelRuleset", Nilable = false },
},
},
+ {
+ Name = "GetChannelShortcut",
+ Type = "Function",
+
+ Arguments =
+ {
+ { Name = "channelIndex", Type = "number", Nilable = false },
+ },
+
+ Returns =
+ {
+ { Name = "shortcut", Type = "string", Nilable = false },
+ },
+ },
{
Name = "GetChannelShortcutForChannelID",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/CovenantSanctumDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/CovenantSanctumDocumentation.lua
index 8380cec933c3e00a6f68eefd50f4ff46dab4060d..d61fb87d0eaba217718c67a61fe9f7a9ba98a737 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/CovenantSanctumDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/CovenantSanctumDocumentation.lua
@@ -6,6 +6,15 @@ local CovenantSanctum =
Functions =
{
+ {
+ Name = "CanDepositAnima",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "canDeposit", Type = "bool", Nilable = false },
+ },
+ },
{
Name = "DepositAnima",
Type = "Function",
@@ -46,6 +55,12 @@ local CovenantSanctum =
Name = "GetRenownMilestones",
Type = "Function",
+ Arguments =
+ {
+ { Name = "covenantID", Type = "number", Nilable = false },
+ { Name = "renownLevel", Type = "number", Nilable = false },
+ },
+
Returns =
{
{ Name = "milestones", Type = "table", InnerType = "CovenantSanctumRenownMilestoneInfo", Nilable = false },
@@ -57,7 +72,8 @@ local CovenantSanctum =
Arguments =
{
- { Name = "level", Type = "number", Nilable = false },
+ { Name = "covenantID", Type = "number", Nilable = false },
+ { Name = "renownLevel", Type = "number", Nilable = false },
},
Returns =
@@ -97,6 +113,16 @@ local CovenantSanctum =
Type = "Event",
LiteralName = "COVENANT_SANCTUM_INTERACTION_STARTED",
},
+ {
+ Name = "CovenantSanctumRenownLevelChanged",
+ Type = "Event",
+ LiteralName = "COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED",
+ Payload =
+ {
+ { Name = "newRenownLevel", Type = "number", Nilable = false },
+ { Name = "oldRenownLevel", Type = "number", Nilable = false },
+ },
+ },
},
Tables =
@@ -138,6 +164,7 @@ local CovenantSanctum =
{ Name = "icon", Type = "number", Nilable = true },
{ Name = "name", Type = "string", Nilable = true },
{ Name = "description", Type = "string", Nilable = true },
+ { Name = "toastDescription", Type = "string", Nilable = true },
},
},
},
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua
index d70ee0a8f3f1169bb509a79019a3f34c7e632b9f..2152123af6ddce728749203db50a22ba97c5b154 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua
@@ -804,6 +804,17 @@ local GarrisonInfo =
{ Name = "garrisonTalentTreeID", Type = "number", Nilable = false },
},
},
+ {
+ Name = "GarrisonTalentResearchStarted",
+ Type = "Event",
+ LiteralName = "GARRISON_TALENT_RESEARCH_STARTED",
+ Payload =
+ {
+ { Name = "garrTypeID", Type = "number", Nilable = false },
+ { Name = "garrisonTalentTreeID", Type = "number", Nilable = false },
+ { Name = "garrTalentID", Type = "number", Nilable = false },
+ },
+ },
{
Name = "GarrisonTalentUpdate",
Type = "Event",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/MapDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/MapDocumentation.lua
index 0d66eb79693ba84536e070ee5ba7e5b6c606b94a..c0e35e3d03e1303003fefbb5d79fcc64715bf8a0 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/MapDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/MapDocumentation.lua
@@ -6,6 +6,20 @@ local Map =
Functions =
{
+ {
+ Name = "CanSetUserWaypointOnMap",
+ Type = "Function",
+
+ Arguments =
+ {
+ { Name = "uiMapID", Type = "number", Nilable = false },
+ },
+
+ Returns =
+ {
+ { Name = "canSet", Type = "bool", Nilable = false },
+ },
+ },
{
Name = "ClearUserWaypoint",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua
index 25c3d367b99af22569464e10ca34758316865557..efeec24eff60c86bb92972d75b8c36ca83890de8 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua
@@ -15,6 +15,15 @@ local PlayerMentorship =
{ Name = "level", Type = "number", Nilable = true },
},
},
+ {
+ Name = "GetMentorOptionalAchievementIDs",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "achievementIDs", Type = "table", InnerType = "number", Nilable = false },
+ },
+ },
{
Name = "GetMentorshipStatus",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/QuestLogDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/QuestLogDocumentation.lua
index 17ffc814c03f87b14d300057eac079adc1511d7c..62edd82e02bd182a4223140750bbec8690e0ae96 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/QuestLogDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/QuestLogDocumentation.lua
@@ -281,6 +281,24 @@ local QuestLog =
{ Name = "numQuestWatches", Type = "number", Nilable = false },
},
},
+ {
+ Name = "GetQuestAdditionalHighlights",
+ Type = "Function",
+
+ Arguments =
+ {
+ { Name = "questID", Type = "number", Nilable = false },
+ },
+
+ Returns =
+ {
+ { Name = "uiMapID", Type = "number", Nilable = false },
+ { Name = "worldQuests", Type = "bool", Nilable = false },
+ { Name = "worldQuestsElite", Type = "bool", Nilable = false },
+ { Name = "dungeons", Type = "bool", Nilable = false },
+ { Name = "treasures", Type = "bool", Nilable = false },
+ },
+ },
{
Name = "GetQuestDetailsTheme",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/SpellDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/SpellDocumentation.lua
index f736f1fa6dbcc3964845ab560070a8c7f65ede04..790bb134e8a37d7e20dfbcb39066956dcfa0c52b 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/SpellDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/SpellDocumentation.lua
@@ -20,6 +20,21 @@ local Spell =
{ Name = "spellExists", Type = "bool", Nilable = false },
},
},
+ {
+ Name = "GetMawPowerRarityStringAndBorderAtlasBySpellID",
+ Type = "Function",
+
+ Arguments =
+ {
+ { Name = "spellID", Type = "number", Nilable = false },
+ },
+
+ Returns =
+ {
+ { Name = "rarityString", Type = "string", Nilable = false },
+ { Name = "rarityBorderAtlas", Type = "string", Nilable = false },
+ },
+ },
{
Name = "IsSpellDataCached",
Type = "Function",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/StableInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/StableInfoDocumentation.lua
index 2d6fa6c04a3a383e061966dce986d920a989e0ec..e71c0e182d727d645158f56d3471d5769fe8891a 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/StableInfoDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/StableInfoDocumentation.lua
@@ -6,6 +6,24 @@ local StableInfo =
Functions =
{
+ {
+ Name = "GetNumActivePets",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "numActivePets", Type = "number", Nilable = false },
+ },
+ },
+ {
+ Name = "GetNumStablePets",
+ Type = "Function",
+
+ Returns =
+ {
+ { Name = "numStablePets", Type = "number", Nilable = false },
+ },
+ },
},
Events =
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/TransmogItemsDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/TransmogItemsDocumentation.lua
index 32255ea9e83235fc0e587cf0fa79a2782c50ee4d..be709f707b0a9ac425074a92cf0b516f0cc8d5fa 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/TransmogItemsDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/TransmogItemsDocumentation.lua
@@ -13,6 +13,7 @@ local TransmogItems =
Arguments =
{
{ Name = "appearanceID", Type = "number", Nilable = false },
+ { Name = "categoryID", Type = "number", Nilable = true },
},
Returns =
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/UnitDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/UnitDocumentation.lua
index 713534ffafebe1f9ab0119852d4fa5c40d2ffc86..c4021396b81d6aa3b28bcec65dbb311457836d7c 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/UnitDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/UnitDocumentation.lua
@@ -932,6 +932,15 @@ local Unit =
{ Name = "isConnected", Type = "bool", Nilable = false },
},
},
+ {
+ Name = "UnitCtrOptions",
+ Type = "Event",
+ LiteralName = "UNIT_CTR_OPTIONS",
+ Payload =
+ {
+ { Name = "unitTarget", Type = "string", Nilable = false },
+ },
+ },
{
Name = "UnitDamage",
Type = "Event",
diff --git a/Interface/AddOns/Blizzard_APIDocumentation/VignetteInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/VignetteInfoDocumentation.lua
index 311c7bb09a7bfbf0e2c6f54111d4560996bcafa4..64d7c85da53a16d926ddb98a9fe1821ba4e476e2 100644
--- a/Interface/AddOns/Blizzard_APIDocumentation/VignetteInfoDocumentation.lua
+++ b/Interface/AddOns/Blizzard_APIDocumentation/VignetteInfoDocumentation.lua
@@ -84,14 +84,15 @@ local VignetteInfo =
{
Name = "VignetteType",
Type = "Enumeration",
- NumValues = 3,
+ NumValues = 4,
MinValue = 0,
- MaxValue = 2,
+ MaxValue = 3,
Fields =
{
{ Name = "Normal", Type = "VignetteType", EnumValue = 0 },
{ Name = "PvPBounty", Type = "VignetteType", EnumValue = 1 },
{ Name = "Torghast", Type = "VignetteType", EnumValue = 2 },
+ { Name = "Treasure", Type = "VignetteType", EnumValue = 3 },
},
},
{
diff --git a/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.lua b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.lua
new file mode 100644
index 0000000000000000000000000000000000000000..681a9bb5497cd1337eb2356b64e7e5f60b3ce9e8
--- /dev/null
+++ b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.lua
@@ -0,0 +1,51 @@
+local ArdenwealdGardeningSecondsFormatter = CreateFromMixins(SecondsFormatterMixin);
+ArdenwealdGardeningSecondsFormatter:Init(SECONDS_PER_MIN, SecondsFormatter.Abbreviation.None, true, true);
+
+function ArdenwealdGardeningSecondsFormatter:GetDesiredUnitCount(seconds)
+ return 1;
+end
+
+function ArdenwealdGardeningSecondsFormatter:GetMinInterval(seconds)
+ return SecondsFormatter.Interval.Minutes;
+end
+
+ArdenwealdGardening = {}
+
+function ArdenwealdGardening.Create(parent)
+ return CreateFrame("Frame", nil, parent, "ArdenwealdGardeningPanelTemplate");
+end
+
+ArdenwealdGardeningButtonMixin = {}
+
+function ArdenwealdGardeningButtonMixin:OnEnter()
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT", 0, 0);
+ GameTooltip_SetTitle(GameTooltip, GARDENWEALD_STATUS_HEADER);
+
+ local data = C_ArdenwealdGardening.GetGardenData();
+ local hasActive = data.active > 0;
+ if hasActive then
+ local time = ArdenwealdGardeningSecondsFormatter:Format(data.remainingSeconds);
+ GameTooltip_AddNormalLine(GameTooltip, GARDENWEALD_STATUS_ACTIVE_COUNT:format(data.active, time));
+ end
+
+ if data.ready > 0 then
+ if hasActive then
+ GameTooltip_AddBlankLineToTooltip(GameTooltip);
+ end
+ GameTooltip_AddNormalLine(GameTooltip, GARDENWEALD_STATUS_READY_COUNT:format(data.ready));
+ elseif not hasActive then
+ GameTooltip_AddNormalLine(GameTooltip, GARDENWEALD_STATUS_DORMANT);
+ end
+
+ GameTooltip:Show();
+
+ self.Highlight:Show();
+ self.Icon2:Show();
+end
+
+function ArdenwealdGardeningButtonMixin:OnLeave()
+ GameTooltip_Hide();
+
+ self.Highlight:Hide();
+ self.Icon2:Hide();
+end
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.toc b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.toc
new file mode 100644
index 0000000000000000000000000000000000000000..4106a2aa6508d1acf5414f32b4467222b31bd3e1
--- /dev/null
+++ b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.toc
@@ -0,0 +1,5 @@
+## Title: Blizzard Ardenweald Gardening
+## Author: Blizzard Entertainment
+## LoadOnDemand: 1
+
+Blizzard_ArdenwealdGardening.xml
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.xml b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15ee88edef4a24f0db1ecd4e1d3cac30c9dc153b
--- /dev/null
+++ b/Interface/AddOns/Blizzard_ArdenwealdGardening/Blizzard_ArdenwealdGardening.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua b/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua
index 038da30e74507c74163e9e73b51180b6b3facb66..05a1a657bc5d45d588c5e2c31007a880c97e7dd1 100644
--- a/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua
+++ b/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua
@@ -35,6 +35,8 @@ function BarberShopMixin:OnShow()
UIErrorsFrame:ClearAllPoints();
UIErrorsFrame:SetPoint("TOP", self.Sexes, "BOTTOM", 0, 0);
+ ActionStatus:SetParent(self);
+
self:UpdateSex();
local reset = true;
@@ -59,6 +61,7 @@ function BarberShopMixin:UpdateSex()
end
self.Sexes:MarkDirty();
+ self.Sexes:Show();
end
function BarberShopMixin:OnHide()
@@ -66,13 +69,16 @@ function BarberShopMixin:OnHide()
UIErrorsFrame:SetFrameStrata("DIALOG");
UIErrorsFrame:ClearAllPoints();
UIErrorsFrame:SetPoint(unpack(self.oldErrorFramePointInfo));
+
+ ActionStatus:SetParent(UIParent);
end
function BarberShopMixin:OnKeyDown(key)
+ local keybind = GetBindingFromClick(key);
if key == "ESCAPE" then
C_BarberShop.Cancel();
- elseif key == "PRINTSCREEN" then
- Screenshot();
+ elseif keybind == "TOGGLEMUSIC" or keybind == "TOGGLESOUND" or keybind == "SCREENSHOT" then
+ RunBinding(keybind);
end
end
@@ -94,6 +100,10 @@ end
function BarberShopMixin:UpdatePrice()
self.PriceFrame:SetAmount(C_BarberShop.GetCurrentCost());
+
+ local hasAnyChanges = C_BarberShop.HasAnyChanges();
+ self.AcceptButton:SetEnabled(hasAnyChanges);
+ self.ResetButton:SetEnabled(hasAnyChanges);
end
function BarberShopMixin:UpdateCharCustomizationFrame(alsoReset)
@@ -156,6 +166,7 @@ end
function BarberShopMixin:SetViewingShapeshiftForm(formID)
C_BarberShop.SetViewingShapeshiftForm(formID);
+ self.Sexes:SetShown(formID == nil);
end
function BarberShopMixin:SetModelDressState(dressedState)
diff --git a/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua b/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua
index 9333ba164607e48289ff9addbda25029ff3be3ba..7f3a815341e32fdf033ed22259b1312f34edf9aa 100644
--- a/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua
+++ b/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua
@@ -55,6 +55,7 @@ do
self:RegisterEvent("VOICE_CHAT_CHANNEL_MEMBER_ADDED");
self:RegisterEvent("VOICE_CHAT_CHANNEL_MEMBER_GUID_UPDATED");
self:RegisterEvent("CHAT_MSG_CHANNEL_LEAVE_PREVENTED");
+ self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE");
local promptSubSystem = ChatAlertFrame:AddAutoAnchoredSubSystem(VoiceChatPromptActivateChannel);
ChatAlertFrame:SetSubSystemAnchorPriority(promptSubSystem, 10);
@@ -162,6 +163,8 @@ function ChannelFrameMixin:OnEvent(event, ...)
self:OnChannelLeavePrevented(...)
elseif event == "CHAT_REGIONAL_STATUS_CHANGED" then
self:MarkDirty("UpdateChannelList");
+ elseif event == "CHAT_MSG_CHANNEL_NOTICE" then
+ self:OnChannelNotice(...);
end
end
@@ -629,6 +632,24 @@ function ChannelFrameMixin:OnChannelLeavePrevented(channelName)
ChatFrame_DisplaySystemMessageInPrimary(CHAT_LEAVE_CHANNEL_PREVENTED:format(channelName));
end
+function ChannelFrameMixin:OnChannelNotice(...)
+ local eventType = select(1, ...);
+ local channelIndex = select(8, ...);
+
+ if eventType == "YOU_CHANGED" and C_ChatInfo.GetChannelRuleset(channelIndex) == Enum.ChatChannelRuleset.Mentor then
+ local channelSlashCommand = GetSlashCommandForChannelOpenChat(channelIndex);
+ if IsActivePlayerNewcomer() then
+ ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER:format(channelSlashCommand));
+ ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER1:format(channelSlashCommand));
+ ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER2:format(channelSlashCommand));
+ else
+ -- NOTE: Guide flags won't be set at this point if the user is joining from the NPC, assume that if the channel join is happening,
+ -- then if you're not a newcomer, you must be a guide.
+ ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_GUIDE:format(channelSlashCommand));
+ end
+ end
+end
+
--[ Utility Functions ]--
function ChannelFrame_Desaturate(texture, desaturate, a)
texture:SetDesaturated(desaturate);
diff --git a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua
index 9909f0da50125dd11c33fb4e13f763adc151dae6..faadfac9c6413048cdbbfe8ba627379323224573 100644
--- a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua
+++ b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua
@@ -14,6 +14,10 @@ local ZOOM_TIME_SECONDS = 0.25;
local ROTATION_ADJUST_SECONDS = 0.25;
local CLASS_ANIM_WAIT_TIME_SECONDS = 5;
+local HIGH_PRIORITY = 1;
+local MEDIUM_PRIORITY = 2;
+local LOW_PRIORITY = 3;
+
local RaceAndClassFrame;
local NameChoiceFrame;
local ClassTrialSpecs;
@@ -388,6 +392,7 @@ function CharacterCreateMixin:SetMode(mode, instantRotate)
if self.currentMode == CHAR_CREATE_MODE_CUSTOMIZE then
self.BottomBackgroundOverlay.FadeIn:Play();
+ self:RemoveNavBlocker(CHARACTER_CREATION_REQUIREMENTS_NEED_ACHIEVEMENT);
end
elseif mode == CHAR_CREATE_MODE_CUSTOMIZE then
if self.currentMode == CHAR_CREATE_MODE_CLASS_RACE then
@@ -406,6 +411,10 @@ function CharacterCreateMixin:SetMode(mode, instantRotate)
ClassTrialSpecs:SetClass(RaceAndClassFrame.selectedClassID, RaceAndClassFrame.selectedSexID);
ZoneChoiceFrame:Setup();
+
+ if not RaceAndClassFrame.selectedRaceData.enabled then
+ self:AddNavBlocker(CHARACTER_CREATION_REQUIREMENTS_NEED_ACHIEVEMENT, HIGH_PRIORITY);
+ end
else
self:EnableZoneChoiceMode(false);
end
@@ -451,10 +460,6 @@ local function SortBlockers(a, b)
return a.priority < b.priority;
end
-local HIGH_PRIORITY = 1;
-local MEDIUM_PRIORITY = 2;
-local LOW_PRIORITY = 3;
-
function CharacterCreateMixin:AddNavBlocker(navBlocker, priority)
for i, currentBlocker in ipairs(self.navBlockers) do
if currentBlocker.error == navBlocker then
@@ -463,7 +468,7 @@ function CharacterCreateMixin:AddNavBlocker(navBlocker, priority)
end
end
- table.insert(self.navBlockers, {error = navBlocker, priority = priority or MEDIUM_PRIORITY});
+ table.insert(self.navBlockers, {error = navBlocker, priority = priority or LOW_PRIORITY});
table.sort(self.navBlockers, SortBlockers);
self:RefreshCurrentNavBlocker();
@@ -621,7 +626,11 @@ function CharacterCreateMixin:UpdateForwardButton()
self.ForwardButton:SetEnabled(self:CanNavForward());
if self.currentMode == CHAR_CREATE_MODE_CLASS_RACE then
- self.ForwardButton:UpdateText(CUSTOMIZE, FORWARD_ARROW);
+ if RaceAndClassFrame.selectedRaceData and not RaceAndClassFrame.selectedRaceData.enabled then
+ self.ForwardButton:UpdateText(PREVIEW, FORWARD_ARROW);
+ else
+ self.ForwardButton:UpdateText(CUSTOMIZE, FORWARD_ARROW);
+ end
elseif self.currentMode == CHAR_CREATE_MODE_CUSTOMIZE then
if ZoneChoiceFrame:ShouldShow() then
self.ForwardButton:UpdateText(NEXT, FORWARD_ARROW);
@@ -717,12 +726,14 @@ function CharacterCreateClassButtonMixin:SetClass(classData, selectedClassID)
local validAllianceRaceNames = {};
local validHordeRaceNames = {};
for _, raceData in ipairs(validRaces) do
- if raceData.isNeutralRace or (raceData.factionInternalName == "Alliance") then
- tinsert(validAllianceRaceNames, raceData.name);
- end
+ if not raceData.isAlliedRace or not C_CharacterCreation.IsNewPlayerRestricted() then
+ if raceData.isNeutralRace or (raceData.factionInternalName == "Alliance") then
+ tinsert(validAllianceRaceNames, raceData.name);
+ end
- if raceData.isNeutralRace or (raceData.factionInternalName == "Horde") then
- tinsert(validHordeRaceNames, raceData.name);
+ if raceData.isNeutralRace or (raceData.factionInternalName == "Horde") then
+ tinsert(validHordeRaceNames, raceData.name);
+ end
end
end
@@ -774,7 +785,7 @@ end
function CharacterCreateClassButtonMixin:OnEnter()
CharCustomizeFrameWithTooltipMixin.OnEnter(self);
- if self:IsDisabledByRace() then
+ if not CharacterCreateFrame.paidServiceType and self:IsDisabledByRace() then
local validRaces = C_CharacterCreation.GetValidRacesForClass(self.classData.classID, Enum.CharacterCreateRaceMode.AllRaces);
local validRacesMap = {};
for _, raceData in ipairs(validRaces) do
@@ -823,6 +834,7 @@ function CharacterCreateRaceButtonMixin:SetRace(raceData, selectedSexID, selecte
self:SetIconAtlas(atlas);
local isValidRace = RaceAndClassFrame:IsRaceValid(raceData, self.faction);
+ self.allowSelectionOnDisable = not isValidRace and not CharacterCreateFrame.paidServiceType;
self:SetEnabledState(isValidRace);
if isValidRace and RaceAndClassFrame.classValidRaces then
@@ -834,6 +846,14 @@ function CharacterCreateRaceButtonMixin:SetRace(raceData, selectedSexID, selecte
self.RaceName:SetText(raceData.name);
self.RaceName:SetShown(C_CharacterCreation.IsNewPlayerRestricted());
+ if not raceData.isAlliedRace then
+ if C_CharacterCreation.IsNewPlayerRestricted() then
+ self.tooltipXOffset = 16;
+ else
+ self.tooltipXOffset = 113;
+ end
+ end
+
self:ClearTooltipLines();
self:AddTooltipLine(raceData.name, HIGHLIGHT_FONT_COLOR);
self:AddBlankTooltipLine();
@@ -1033,7 +1053,7 @@ function CharacterCreateRaceAndClassMixin:StopClassAnimations()
self:ClearTimer();
self.currentSpellVisualKitID = nil;
C_CharacterCreation.StopAllSpellVisualKitsOnCharacter();
- C_CharacterCreation.SetModelsHiddenState(false);
+ C_CharacterCreation.SetPlayerModelHiddenState(false);
end
function CharacterCreateRaceAndClassMixin:StopActiveGroundEffect()
@@ -1133,9 +1153,9 @@ function CharacterCreateRaceAndClassMixin:OnAnimKitFinished(animKitID, spellVisu
self.currentSpellVisualKitID = nil;
if nextAction.hidePlayerModel then
- C_CharacterCreation.SetModelsHiddenState(true);
+ C_CharacterCreation.SetPlayerModelHiddenState(true);
elseif nextAction.showPlayerModel then
- C_CharacterCreation.SetModelsHiddenState(false);
+ C_CharacterCreation.SetPlayerModelHiddenState(false);
end
local modelSvkID;
@@ -1228,7 +1248,7 @@ function CharacterCreateRaceAndClassMixin:UpdateState(selectedFaction)
self.selectedFaction = self.selectedRaceData.factionInternalName;
end
- if not self:IsRaceValid(self.selectedRaceData, self.selectedFaction) then
+ if not self:IsRaceValid(self.selectedRaceData, self.selectedFaction) and CharacterCreateFrame.paidServiceType then
local randomRaceData = self:GetRandomValidRaceData();
self:SetCharacterRace(randomRaceData.raceID, randomRaceData.factionInternalName)
return;
@@ -1243,6 +1263,7 @@ function CharacterCreateRaceAndClassMixin:UpdateState(selectedFaction)
CharacterCreateFrame:RemoveNavBlocker(CHAR_FACTION_CHANGE_SWAP_FACTION);
CharacterCreateFrame:RemoveNavBlocker(CHAR_FACTION_CHANGE_CHOOSE_RACE);
+ CharacterCreateFrame:UpdateForwardButton();
self:UpdateButtons();
end
@@ -1512,7 +1533,7 @@ end
function CharacterCreateEditBoxMixin:OnTextChanged()
local selectedName = self:GetText();
if selectedName == "" or selectedName == PENDING_RANDOM_NAME then
- CharacterCreateFrame:AddNavBlocker(CHARACTER_CREATION_REQUIREMENTS_PICK_NAME, HIGH_PRIORITY);
+ CharacterCreateFrame:AddNavBlocker(CHARACTER_CREATION_REQUIREMENTS_PICK_NAME, MEDIUM_PRIORITY);
self.NameAvailabilityState:Hide();
else
CharacterCreateFrame:RemoveNavBlocker(CHARACTER_CREATION_REQUIREMENTS_PICK_NAME);
diff --git a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.xml b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.xml
index 3cc8c0c11ef53fe6858ca3db6f351000b45d560e..d7bc75ca19f0cbd3f0ddf4867b4adffda391ea44 100644
--- a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.xml
+++ b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.xml
@@ -572,7 +572,7 @@
-
+
@@ -584,7 +584,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_CharacterCustomize/Blizzard_CharacterCustomize.lua b/Interface/AddOns/Blizzard_CharacterCustomize/Blizzard_CharacterCustomize.lua
index a738ccb2eb27d79ef25470c2fff31463bf9109eb..9a2fc1320d7b3fc4d11d3badbbc44eeb94ee94bc 100644
--- a/Interface/AddOns/Blizzard_CharacterCustomize/Blizzard_CharacterCustomize.lua
+++ b/Interface/AddOns/Blizzard_CharacterCustomize/Blizzard_CharacterCustomize.lua
@@ -342,13 +342,19 @@ function CharCustomizeMaskedButtonMixin:StopFlash()
end
function CharCustomizeMaskedButtonMixin:SetEnabledState(enabled)
- self:SetEnabled(enabled);
+ local buttonEnableState = enabled or self.allowSelectionOnDisable;
+ self:SetEnabled(buttonEnableState);
local normalTex = self:GetNormalTexture();
if normalTex then
normalTex:SetDesaturated(not enabled);
end
+ local pushedTex = self:GetPushedTexture();
+ if pushedTex then
+ pushedTex:SetDesaturated(not enabled);
+ end
+
self.Ring:SetAtlas(self.ringAtlas..(enabled and "" or "-disabled"));
self.DisabledOverlay:SetShown(not enabled);
@@ -483,9 +489,9 @@ function CharCustomizeSexButtonMixin:SetSex(sexID, selectedSexID, layoutIndex)
self:ClearTooltipLines();
if sexID == Enum.Unitsex.Male then
- self:AddTooltipLine(MALE);
+ self:AddTooltipLine(MALE, HIGHLIGHT_FONT_COLOR);
else
- self:AddTooltipLine(FEMALE);
+ self:AddTooltipLine(FEMALE, HIGHLIGHT_FONT_COLOR);
end
local atlas = GetGenderAtlas(sexID);
diff --git a/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.lua b/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.lua
index ebaafbc6cd2da70331f9bd416e797d9d14f610fa..b9d665d2d032e057291f3d03440352818536c754 100644
--- a/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.lua
+++ b/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.lua
@@ -135,7 +135,7 @@ function ChromieTimeExpansionButtonMixin:OnClick()
local selectedExpansion = ChromieTimeFrame:GetSelectedExpansion();
if (selectedExpansion ~= self) then
- PlaySound(SOUNDKIT.UI_CHROMIE_TIME_SELECT_EXPANSION);
+ PlaySound(SOUNDKIT.UI_CHROMIE_TIME_SELECT_EXPANSION, nil, SOUNDKIT_ALLOW_DUPLICATES);
end
ChromieTimeFrame:SetSelectedExpansion(self);
diff --git a/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.xml b/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.xml
index 7c16923068a48776a108d5a6984ba9c028e5a28a..8fcf45a3afce89d600de18418be42ff0eb247f22 100644
--- a/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.xml
+++ b/Interface/AddOns/Blizzard_ChromieTimeUI/Blizzard_ChromieTimeUI.xml
@@ -103,6 +103,11 @@
+
+
+
+
+
-
-
+
+
@@ -212,7 +212,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_Communities/ClubFinder.lua b/Interface/AddOns/Blizzard_Communities/ClubFinder.lua
index fe1bb49ae4b474180454113816ca7b25188567d3..5b1f162a75f31f8951a10666b2f41f148f22efbd 100644
--- a/Interface/AddOns/Blizzard_Communities/ClubFinder.lua
+++ b/Interface/AddOns/Blizzard_Communities/ClubFinder.lua
@@ -556,23 +556,23 @@ function ClubFocusClubDropdownInitialize(self)
info.text = CLUB_FINDER_FOCUS_SOCIAL_LEVELING;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Social, CLUB_FINDER_FOCUS_SOCIAL_LEVELING, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
info.text = GUILD_INTEREST_DUNGEON;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Dungeons, GUILD_INTEREST_DUNGEON, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
info.text = GUILD_INTEREST_RAID;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Raids, GUILD_INTEREST_RAID, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
info.text = CLUB_FINDER_FOCUS_PVP;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.PvP, PVP_ENABLED, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
info.text = GUILD_INTEREST_RP;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.RP, GUILD_INTEREST_RP, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
end
LookingForDropdownMixin = { };
@@ -969,7 +969,7 @@ function ClubSortByDropdownInitialize(self)
info.text = text;
local dropdownText = info.text;
self:SetDropdownInfoForPreferences(info, sortByFlag, dropdownText, allowMultipleSelection, isRadioStyle);
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
end
end
@@ -980,18 +980,18 @@ function ClubSizeDropdownInitialize(self)
info.text = SMALL;
local dropdownText = info.text;
- self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Small, dropdownText)
- UIDropDownMenu_AddButton(info, level);
+ self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Small, dropdownText)
+ UIDropDownMenu_AddButton(info);
info.text = CLUB_FINDER_MEDIUM;
local dropdownText = info.text;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Medium, dropdownText)
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
info.text = LARGE;
local dropdownText = info.text;
self:SetDropdownInfoForPreferences(info, Enum.ClubFinderSettingFlags.Large, dropdownText)
- UIDropDownMenu_AddButton(info, level);
+ UIDropDownMenu_AddButton(info);
end
ClubFinderOptionsMixin = { };
diff --git a/Interface/AddOns/Blizzard_Communities/CommunitiesMemberList.lua b/Interface/AddOns/Blizzard_Communities/CommunitiesMemberList.lua
index febfd3776a4b904c3ac07367f4b9d282aaf32b19..cadf5448da9d79239da6c06cc4e0694c6483eb66 100644
--- a/Interface/AddOns/Blizzard_Communities/CommunitiesMemberList.lua
+++ b/Interface/AddOns/Blizzard_Communities/CommunitiesMemberList.lua
@@ -1494,6 +1494,7 @@ end
function GuildMemberListDropDownMenuMixin:OnCommunitiesClubSelected(clubId)
if clubId and self:IsVisible() then
+ local communitiesFrame = self:GetCommunitiesFrame();
local clubInfo = communitiesFrame:GetSelectedClubInfo();
if clubInfo and clubInfo.clubType ~= Enum.ClubType.Guild then
self:Hide();
@@ -1583,6 +1584,7 @@ end
function CommunityMemberListDropDownMenuMixin:OnCommunitiesClubSelected(clubId)
if clubId and self:IsVisible() then
+ local communitiesFrame = self:GetCommunitiesFrame();
local clubInfo = communitiesFrame:GetSelectedClubInfo();
if clubInfo and clubInfo.clubType ~= Enum.ClubType.Character then
self:Hide();
diff --git a/Interface/AddOns/Blizzard_CovenantCallings/CovenantCallings.lua b/Interface/AddOns/Blizzard_CovenantCallings/CovenantCallings.lua
index a18db44aaad6206588b641ba77a0963ad35e7a02..82d164216e9c08be404b0fa5fe58e24b81f8bd46 100644
--- a/Interface/AddOns/Blizzard_CovenantCallings/CovenantCallings.lua
+++ b/Interface/AddOns/Blizzard_CovenantCallings/CovenantCallings.lua
@@ -235,6 +235,7 @@ function CovenantCallingsMixin:OnCovenantCallingsUpdated(callings)
AnchorUtil.GridLayout(frames, AnchorUtil.CreateAnchor("LEFT", self.Decor, "LEFT", -42, 0), self.layout);
self:Layout();
+ self:CheckDisplayHelpTip();
end
end
@@ -282,6 +283,42 @@ function CovenantCallingsMixin:ProcessCallings(callings)
end
end
+function CovenantCallingsMixin:GetHelptipTargetFrame()
+ -- Find right-most frame
+ local maxX = 0;
+ local targetFrame;
+ for frame in self.pool:EnumerateActive() do
+ if frame.calling:GetState() == Enum.CallingStates.QuestOffer then
+ if not targetFrame or maxX < frame:GetLeft() then
+ targetFrame = frame;
+ maxX = frame:GetLeft();
+ end
+ end
+ end
+
+ return targetFrame;
+end
+
+function CovenantCallingsMixin:CheckDisplayHelpTip()
+ if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_CALLINGS) then
+ local target = self:GetHelptipTargetFrame();
+
+ -- It's ok to wait to show this until there's a valid target.
+ if target then
+ HelpTip:Show(target, {
+ text = FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_CALLINGS,
+ buttonStyle = HelpTip.ButtonStyle.Close,
+ cvarBitfield = "closedInfoFrames",
+ bitfieldFlag = LE_FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_CALLINGS,
+ targetPoint = HelpTip.Point.RightEdgeCenter,
+ offsetX = 14,
+ offsetY = 1,
+ useParentStrata = true,
+ });
+ end
+ end
+end
+
CovenantCallings = {};
function CovenantCallings.Create(parent)
diff --git a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua
index a30a5098998d8fca8ab09b66f96a1eef62b95cab..065f4d3cfbe75e204cbde5cf39455c97b9e872f1 100644
--- a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua
+++ b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua
@@ -1,6 +1,34 @@
local MAX_ABILITIES_IN_ROW = 2;
local PLAYER_CHOICE_TEXTURE_KIT = "Oribos";
+
+local closeButtonBorder = {
+ ["NightFae"] = {
+ closeButtonX = -2,
+ closeButtonY = 0,
+ closeBorderX = -1,
+ closeBorderY = 1,
+ },
+ ["Kyrian"] = {
+ closeButtonX = 1,
+ closeButtonY = 2,
+ closeBorderX = -1,
+ closeBorderY = 1,
+ },
+ ["Venthyr"] = {
+ closeButtonX = 0,
+ closeButtonY = 0,
+ closeBorderX = -1,
+ closeBorderY = 1,
+ },
+ ["Necrolord"] = {
+ closeButtonX = -1,
+ closeButtonY = 0,
+ closeBorderX = 0,
+ closeBorderY = 1,
+ },
+}
+
local backgroundTextureKitRegions = {
["BackgroundTile"] = "UI-Frame-%s-BackgroundTile",
};
@@ -58,6 +86,13 @@ function CovenantPreviewFrameMixin:OnEvent(event, ...)
end
end
+function CovenantPreviewFrameMixin:HandleEscape()
+ if (self.showingFromPlayerChoice and PlayerChoiceFrame and PlayerChoiceFrame:IsShown()) then
+ HideUIPanel(PlayerChoiceFrame);
+ end
+ HideUIPanel(self);
+end
+
function CovenantPreviewFrameMixin:Reset()
self.lastAbility = nil;
self.previousRowOption = nil;
@@ -84,7 +119,10 @@ function CovenantPreviewFrameMixin:SetupFramesWithTextureKit()
self:SetupTextureKits(self.InfoPanel, infoPanelTextureKitRegions);
self:SetupTextureKits(self.Background, backgroundTextureKitRegions, self.uiTextureKit);
- UIPanelCloseButton_SetBorderAtlas(self.CloseButton, "UI-Frame-%s-ExitButtonBorder", 0, 0, self.uiTextureKit);
+ local layout = closeButtonBorder[self.uiTextureKit];
+ self.CloseButton:ClearAllPoints();
+ self.CloseButton:SetPoint("TOPRIGHT", self, "TOPRIGHT", layout.closeButtonX, layout.closeButtonY);
+ UIPanelCloseButton_SetBorderAtlas(self.CloseButton, "UI-Frame-%s-ExitButtonBorder", layout.closeBorderX, layout.closeBorderY, self.uiTextureKit);
if(self.showingFromPlayerChoice) then
self:SetupTextureKits(self.Title, titleTextureKitRegions, PLAYER_CHOICE_TEXTURE_KIT);
@@ -155,9 +193,11 @@ end
function CovenantPreviewFrameMixin:SetupModelSceneFrame(transmogSetID, mountID)
self:SetupTextureKits(self.ModelSceneContainer, modelSceneContainerTextureKitRegions);
- SetUpTransmogAndMountDressupFrame(self.ModelSceneContainer, transmogSetID, mountID, 414, 432, "CENTER", "CENTER", 0 , 0);
+ SetUpTransmogAndMountDressupFrame(self.ModelSceneContainer, transmogSetID, mountID, 414, 432, "CENTER", "CENTER", 0 , 0, true);
local sources = C_TransmogSets.GetAllSourceIDs(transmogSetID);
DressUpTransmogSet(sources);
+
+ TransmogAndMountDressupFrame:RemoveWeapons();
end
function CovenantPreviewFrameMixin:SetupCovenantInfoPanel(covenantInfo)
diff --git a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.xml b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.xml
index 8d88ade6c3a173523fb38790c46e20f320f94ba1..1ce122a00d13933d7142d8d3cb2946bf75bc5df5 100644
--- a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.xml
+++ b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.xml
@@ -44,14 +44,14 @@
-
+
-
+
@@ -161,31 +161,33 @@
-
+
-
+
+
-
+
-
+
+
-
-
+
+
-
+
-
+
-
+
@@ -202,7 +204,8 @@
- HideUIPanel(CovenantPreviewFrame);
+ HideUIPanel(CovenantPreviewFrame);
+ PlaySound(SOUNDKIT.UI_COVENANT_CHOICE_CLICK_BACK_BUTTON);
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.lua b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.lua
index 72743bff9df04808fd12b5d7b6d27005648fb428..43d5f7477580bda829aef7ce8ed2ee26560a75dc 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.lua
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.lua
@@ -17,7 +17,7 @@ end
local CovenantSanctumEvents = {
"COVENANT_SANCTUM_INTERACTION_ENDED",
- "CURRENCY_DISPLAY_UPDATE",
+ "COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED",
};
function CovenantSanctumMixin:OnShow()
@@ -39,7 +39,7 @@ function CovenantSanctumMixin:OnEvent(event, ...)
ShowUIPanel(self);
elseif event == "COVENANT_SANCTUM_INTERACTION_ENDED" then
HideUIPanel(self);
- elseif event == "CURRENCY_DISPLAY_UPDATE" then
+ elseif event == "COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED" then
self:RefreshLevel();
end
end
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.xml b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.xml
index 84d87571f2ff98dafb4a2552b7d5d9191d4d74fb..38ee31f4a7fd7c1c2d9fc11f076d3c912616cebe 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.xml
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctum.xml
@@ -12,6 +12,9 @@
+
+
+
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.lua b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.lua
index 00d6f62e0362bf5404445d6fc03fac2f5c85950f..64651546feedcfeec5961e4435eafc02b8254cb7 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.lua
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.lua
@@ -1,8 +1,10 @@
+
local mainTextureKitRegions = {
["Background"] = "CovenantSanctum-Renown-Background-%s",
["BackgroundTile"] = "UI-Frame-%s-BackgroundTile",
["Divider"] = "CovenantSanctum-Renown-Divider-%s",
["Anima"] = "CovenantSanctum-Renown-Anima-%s",
+ ["FinalToastSlabTexture"] = "CovenantSanctum-Renown-FinalToast-%s",
}
local rewardTextureKitRegions = {
["Toast"] = "CovenantSanctum-Renown-Toast-%s",
@@ -14,68 +16,24 @@ local milestonesTextureKitRegions = {
["Middle"] = "_UI-Frame-%s-TitleMiddle",
};
+local finalToastSwirlEffects =
+{
+ Kyrian = {119},
+ Venthyr = {120},
+ NightFae = {121, 123},
+ Necrolord = {122},
+}
+
local g_sanctumTextureKit;
local function SetupTextureKit(frame, regions)
SetupTextureKitOnRegions(g_sanctumTextureKit, frame, regions, TextureKitConstants.SetVisibility, TextureKitConstants.UseAtlasSize);
end
-local function GetRenownRewardDisplayData(rewardInfo, onItemUpdateCallback)
- if rewardInfo.itemID then
- local item = Item:CreateFromItemID(rewardInfo.itemID);
- local icon, name;
- if item:IsItemDataCached() then
- icon = item:GetItemIcon();
- name = item:GetItemName();
- else
- item:ContinueOnItemLoad(onItemUpdateCallback);
- end
- return icon, name, RENOWN_REWARD_ITEM_NAME_FORMAT, RENOWN_REWARD_ITEM_DESCRIPTION;
- elseif rewardInfo.mountID then
- local name, spellID, icon = C_MountJournal.GetMountInfoByID(rewardInfo.mountID);
- return icon, name, RENOWN_REWARD_MOUNT_NAME_FORMAT, RENOWN_REWARD_MOUNT_DESCRIPTION;
- elseif rewardInfo.spellID then
- local name, _, icon = GetSpellInfo(rewardInfo.spellID);
- return icon, name, RENOWN_REWARD_SPELL_NAME_FORMAT, RENOWN_REWARD_SPELL_DESCRIPTION;
- elseif rewardInfo.titleID then
- local name = GetTitleName(rewardInfo.titleID);
- return nil, name, RENOWN_REWARD_TITLE_NAME_FORMAT, RENOWN_REWARD_TITLE_DESCRIPTION;
- elseif rewardInfo.transmogID then
- local itemID = C_Transmog.GetItemIDForSource(rewardInfo.transmogID);
- local item = Item:CreateFromItemID(itemID);
- local icon, name;
- if item:IsItemDataCached() then
- icon = item:GetItemIcon();
- name = item:GetItemName();
- else
- item:ContinueOnItemLoad(onItemUpdateCallback);
- end
- return icon, name, RENOWN_REWARD_TRANSMOG_NAME_FORMAT, RENOWN_REWARD_TRANSMOG_DESCRIPTION;
- elseif rewardInfo.transmogSetID then
- local icon = TransmogUtil.GetSetIcon(rewardInfo.transmogSetID);
- local setInfo = C_TransmogSets.GetSetInfo(rewardInfo.transmogSetID);
- return icon, setInfo.name, RENOWN_REWARD_TRANSMOGSET_NAME_FORMAT, RENOWN_REWARD_TRANSMOGSET_DESCRIPTION;
- elseif rewardInfo.garrFollowerID then
- local followerInfo = C_Garrison.GetFollowerInfo(rewardInfo.garrFollowerID);
- return followerInfo.portraitIconID, followerInfo.name, RENOWN_REWARD_FOLLOWER_NAME_FORMAT, RENOWN_REWARD_FOLLOWER_DESCRIPTION;
- elseif rewardInfo.transmogIllusionSourceID then
- local visualID, name, link, icon = C_TransmogCollection.GetIllusionSourceInfo(rewardInfo.transmogIllusionSourceID);
- return icon, name, RENOWN_REWARD_ILLUSION_NAME_FORMAT, RENOWN_REWARD_ILLUSION_DESCRIPTION;
- end
-end
-
-local function GetRenownRewardInfo(rewardInfo, onItemUpdateCallback)
- local icon, name, formatString, description = GetRenownRewardDisplayData(rewardInfo, onItemUpdateCallback);
- if name and formatString then
- name = formatString:format(name);
- else
- name = rewardInfo.name;
- end
- return (rewardInfo.icon or icon), name, (rewardInfo.description or description);
-end
-
CovenantSanctumRenownTabMixin = {};
function CovenantSanctumRenownTabMixin:OnLoad()
+ self.FinalToastSlabTexture = self.FinalToast.SlabTexture;
+
self.milestonesPool = CreateFramePool("FRAME", self.MilestonesFrame, "CovenantSanctumRenownMilestoneTemplate");
self.rewardsPool = CreateFramePool("FRAME", self, "CovenantSanctumRenownRewardTemplate");
end
@@ -83,15 +41,18 @@ end
function CovenantSanctumRenownTabMixin:OnShow()
self:SetUpTextureKits();
self:Refresh();
- self:RegisterEvent("CURRENCY_DISPLAY_UPDATE");
+ self:RegisterEvent("COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED");
end
function CovenantSanctumRenownTabMixin:OnHide()
- self:UnregisterEvent("CURRENCY_DISPLAY_UPDATE");
+ self:UnregisterEvent("COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED");
+ self:SetCelebrationSwirlEffects(nil);
end
-function CovenantSanctumRenownTabMixin:OnEvent()
- self:Refresh();
+function CovenantSanctumRenownTabMixin:OnEvent(event, ...)
+ if event == "COVENANT_SANCTUM_RENOWN_LEVEL_CHANGED" then
+ self:Refresh();
+ end
end
function CovenantSanctumRenownTabMixin:SetUpTextureKits()
@@ -107,7 +68,7 @@ end
function CovenantSanctumRenownTabMixin:Refresh()
self.milestonesPool:ReleaseAll();
- local milestones = C_CovenantSanctumUI.GetRenownMilestones();
+ local milestones = C_CovenantSanctumUI.GetRenownMilestones(C_Covenants.GetActiveCovenantID(), C_CovenantSanctumUI.GetRenownLevel());
local spacing = 9;
local lastFrame;
for i, milestoneInfo in ipairs(milestones) do
@@ -126,12 +87,22 @@ function CovenantSanctumRenownTabMixin:Refresh()
self:RefreshRewards();
end
+function CovenantSanctumRenownTabMixin:SetCelebrationSwirlEffects(swirlEffects)
+ if swirlEffects == nil then
+ self.CelebrationModelScene:ClearEffects();
+ else
+ for i, swirlEffect in ipairs(swirlEffects) do
+ self.CelebrationModelScene:AddEffect(swirlEffect, self.FinalToast.SlabTexture);
+ end
+ end
+end
+
function CovenantSanctumRenownTabMixin:RefreshRewards()
self.rewardsPool:ReleaseAll();
local nextLevel = C_CovenantSanctumUI.GetRenownLevel() + 1;
- local rewards = C_CovenantSanctumUI.GetRenownRewardsForLevel(nextLevel);
+ local rewards = C_CovenantSanctumUI.GetRenownRewardsForLevel(C_Covenants.GetActiveCovenantID(), nextLevel);
local numRewards = #rewards;
-
+
for i, rewardInfo in ipairs(rewards) do
local rewardFrame = self.rewardsPool:Acquire();
if numRewards == 1 then
@@ -157,14 +128,23 @@ function CovenantSanctumRenownTabMixin:RefreshRewards()
end
if numRewards > 0 then
+ self.Header:SetText(COVENANT_SANCTUM_RENOWN_REWARD_TITLE);
self.Description:SetFormattedText(COVENANT_SANCTUM_RENOWN_REWARD_DESC, nextLevel);
+ self.FinalToast:Hide();
+ self:SetCelebrationSwirlEffects(nil);
else
- -- todo: need design
- self.Description:SetFormattedText(COVENANT_SANCTUM_RENOWN_REWARD_DESC, 0);
+ self.Header:SetText(COVENANT_SANCTUM_RENOWN_REWARD_TITLE_COMPLETE);
+
+ local covenantData = C_Covenants.GetCovenantData(C_Covenants.GetActiveCovenantID());
+ self.Description:SetFormattedText(COVENANT_SANCTUM_RENOWN_REWARD_DESC_COMPLETE, covenantData and covenantData.name or "");
+
+ self.FinalToast:Show();
+ self.FinalToast:SetCovenantTextureKit(covenantData.textureKit);
+ self:SetCelebrationSwirlEffects(finalToastSwirlEffects[covenantData.textureKit]);
end
end
-CovenantSanctumRenownMilestoneMixin = { }
+CovenantSanctumRenownMilestoneMixin = { };
function CovenantSanctumRenownMilestoneMixin:SetMilestone(milestoneInfo)
self.level = milestoneInfo.level;
@@ -204,7 +184,7 @@ function CovenantSanctumRenownMilestoneMixin:RefreshTooltip()
end
local onItemUpdateCallback = GenerateClosure(self.RefreshTooltip, self);
- local rewards = C_CovenantSanctumUI.GetRenownRewardsForLevel(self.level);
+ local rewards = C_CovenantSanctumUI.GetRenownRewardsForLevel(C_Covenants.GetActiveCovenantID(), self.level);
local addRewards = true;
if self.isCapstone then
GameTooltip_SetTitle(GameTooltip, RENOWN_REWARD_CAPSTONE_TOOLTIP_TITLE);
@@ -213,7 +193,7 @@ function CovenantSanctumRenownMilestoneMixin:RefreshTooltip()
GameTooltip_AddHighlightLine(GameTooltip, RENOWN_REWARD_CAPSTONE_TOOLTIP_DESC2);
else
if #rewards == 1 then
- local icon, name, description = GetRenownRewardInfo(rewards[1], onItemUpdateCallback);
+ local icon, name, description = CovenantUtil.GetRenownRewardInfo(rewards[1], onItemUpdateCallback);
GameTooltip_SetTitle(GameTooltip, name);
GameTooltip_AddNormalLine(GameTooltip, description);
addRewards = false;
@@ -223,7 +203,7 @@ function CovenantSanctumRenownMilestoneMixin:RefreshTooltip()
end
if addRewards then
for i, rewardInfo in ipairs(rewards) do
- local icon, name, description = GetRenownRewardInfo(rewardInfo, onItemUpdateCallback);
+ local icon, name, description = CovenantUtil.GetRenownRewardInfo(rewardInfo, onItemUpdateCallback);
if name then
GameTooltip_AddNormalLine(GameTooltip, string.format(RENOWN_REWARD_TOOLTIP_REWARD_LINE, name));
end
@@ -232,7 +212,7 @@ function CovenantSanctumRenownMilestoneMixin:RefreshTooltip()
GameTooltip:Show();
end
-CovenantSanctumRenownRewardMixin = { }
+CovenantSanctumRenownRewardMixin = { };
function CovenantSanctumRenownRewardMixin:SetReward(rewardInfo)
SetupTextureKit(self, rewardTextureKitRegions);
@@ -242,7 +222,7 @@ function CovenantSanctumRenownRewardMixin:SetReward(rewardInfo)
end
function CovenantSanctumRenownRewardMixin:RefreshReward()
- local icon, name, description = GetRenownRewardInfo(self.rewardInfo, GenerateClosure(self.RefreshReward, self));
+ local icon, name, description = CovenantUtil.GetRenownRewardInfo(self.rewardInfo, GenerateClosure(self.RefreshReward, self));
self.Icon:SetTexture(icon);
self.Name:SetText(name);
self.description = description;
@@ -256,4 +236,4 @@ function CovenantSanctumRenownRewardMixin:OnEnter()
GameTooltip_AddNormalLine(GameTooltip, self.description);
GameTooltip:Show();
end
-end
\ No newline at end of file
+end
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.xml b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.xml
index 1a382ef94ee9bde2061c48eebc7f46989fa31aa5..1a2fb7b8f4bfabddc30dd4d9dc396a3bdc69e6c4 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.xml
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumRenown.xml
@@ -93,7 +93,7 @@
-
+
@@ -124,6 +124,8 @@
+
+
@@ -162,6 +164,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.lua b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.lua
index 51cd3a08d0fcf07ca38e5b9c81ac96217abdcb5b..25ab3c5d723ae0858676da64b6f034663adf4f33 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.lua
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.lua
@@ -20,6 +20,7 @@ local listTextureKitRegions = {
};
local featureBorderTextureKitRegions = {
["Border"] = "CovenantSanctum-Icon-Border-%s",
+ ["Glow"] = "CovenantSanctum-Icon-Glow-%s",
}
local reservoirTextureKitRegions = {
["Glow"] = "CovenantSanctum-Resevoir-Glow-%s",
@@ -41,12 +42,13 @@ end
local EFFECT_MISSILE = 1;
local EFFECT_IMPACT = 2;
local EFFECT_ANIMA_FULL = 3;
+local EFFECT_RESEARCH = 4;
local covenantSanctumEffectList = {
- ["Venthyr"] = { 103, 107, 111 },
- ["Kyrian"] = { 104, 108, 112 },
- ["NightFae"] = { 105, 109, 113 },
- ["Necrolord"] = { 106, 110, 114 },
+ ["Venthyr"] = { 103, 107, 111, 115 },
+ ["Kyrian"] = { 104, 108, 112, 116 },
+ ["NightFae"] = { 105, 109, 113, 117 },
+ ["Necrolord"] = { 106, 110, 114, 118 },
}
local function GetEffectID(index)
@@ -61,6 +63,8 @@ local CovenantSanctumUpgradesEvents = {
"GARRISON_TALENT_UPDATE",
"GARRISON_TALENT_COMPLETE",
"SPELL_TEXT_UPDATE",
+ "GARRISON_TALENT_RESEARCH_STARTED",
+ "BAG_UPDATE",
};
function CovenantSanctumUpgradesTabMixin:OnLoad()
@@ -94,12 +98,17 @@ function CovenantSanctumUpgradesTabMixin:OnHide()
if self.animaGainEffect then
self.animaGainEffect:CancelEffect();
end
+ for i, frame in ipairs(self.Upgrades) do
+ if frame.researchEffect then
+ frame.researchEffect:CancelEffect();
+ frame.GlowAnim:Stop();
+ frame.Glow:SetAlpha(0);
+ end
+ end
end
function CovenantSanctumUpgradesTabMixin:OnEvent(event, ...)
- if event == "GARRISON_TALENT_UPDATE" then
- self:Refresh();
- elseif event == "CURRENCY_DISPLAY_UPDATE" then
+ if event == "CURRENCY_DISPLAY_UPDATE" then
local currencyID, total = ...;
local animaCurrencyID = C_CovenantSanctumUI.GetAnimaInfo();
if currencyID == animaCurrencyID and total > self.ReservoirUpgrade:GetAnimaAmount() then
@@ -107,9 +116,31 @@ function CovenantSanctumUpgradesTabMixin:OnEvent(event, ...)
else
self:OnCurrencyUpdate();
end
+ elseif event == "GARRISON_TALENT_RESEARCH_STARTED" then
+ local garrTypeID, talentTreeID, talentID = ...;
+ self:OnResearchStarted(talentTreeID);
+ elseif event == "BAG_UPDATE" then
+ self:UpdateDepositButton();
+ else
+ self:Refresh();
end
end
+function CovenantSanctumUpgradesTabMixin:OnResearchStarted(talentTreeID)
+ for i, frame in ipairs(self.Upgrades) do
+ if frame.treeID == talentTreeID then
+ local effectID = GetEffectID(EFFECT_RESEARCH);
+ if effectID then
+ local target, onEffectFinish = nil, nil;
+ local onEffectResolution = function() frame.researchEffect = nil; end;
+ frame.researchEffect = GlobalFXDialogModelScene:AddEffect(effectID, frame, target, onEffectFinish, onEffectResolution);
+ frame.GlowAnim:Play();
+ end
+ break;
+ end
+ end
+end
+
function CovenantSanctumUpgradesTabMixin:OnAnimaGained()
local playMissile = MainMenuBarBackpackButton:IsVisible();
local effectID = playMissile and GetEffectID(EFFECT_MISSILE) or GetEffectID(EFFECT_IMPACT);
@@ -119,7 +150,8 @@ function CovenantSanctumUpgradesTabMixin:OnAnimaGained()
end
local onEffectFinish = playMissile and GenerateClosure(self.OnAnimaGainEffectMissileFinished, self) or nil;
local onEffectResolution = GenerateClosure(self.OnAnimaGainEffectImpactFinished, self);
- self.animaGainEffect = GlobalFXDialogModelScene:AddEffect(effectID, self.BagsGlowFrame, self.ReservoirUpgrade, onEffectFinish, onEffectResolution);
+ local source = CharacterBag1Slot; -- middle bag
+ self.animaGainEffect = GlobalFXDialogModelScene:AddEffect(effectID, source, self.ReservoirUpgrade, onEffectFinish, onEffectResolution);
if playMissile then
self.BagsGlowFrame.Glow:SetAlpha(1);
else
@@ -152,6 +184,11 @@ function CovenantSanctumUpgradesTabMixin:Refresh()
frame:Refresh();
end
self.TalentsList:Refresh();
+ self:UpdateDepositButton();
+end
+
+function CovenantSanctumUpgradesTabMixin:UpdateDepositButton()
+ self.DepositButton:SetEnabled(C_CovenantSanctumUI.CanDepositAnima());
end
function CovenantSanctumUpgradesTabMixin:SetSelectedTree(treeID)
@@ -166,7 +203,7 @@ function CovenantSanctumUpgradesTabMixin:GetSelectedTree()
end
function CovenantSanctumUpgradesTabMixin:DepositAnima()
- C_CovenantSanctumUI.DepositAnima(); -- TO DO: hook this to a player condition to see if the person even can deposit.
+ C_CovenantSanctumUI.DepositAnima();
end
function CovenantSanctumUpgradesTabMixin:SetUpCurrencies()
@@ -300,7 +337,7 @@ end
function CovenantSanctumUpgradeTalentListMixin:FindTalentButton(talentID)
for talentFrame in self.talentPool:EnumerateActive() do
- if talentFrame.info.id == talentID then
+ if talentFrame.talentID == talentID then
return talentFrame;
end
end
@@ -310,13 +347,18 @@ end
--=============================================================================================
CovenantSanctumUpgradeTalentMixin = { };
+function CovenantSanctumUpgradeTalentMixin:OnLoad()
+ self.Name:SetFontObjectsToTry("SystemFont_Shadow_Med2", "GameFontHighlight");
+end
+
function CovenantSanctumUpgradeTalentMixin:Set(talentInfo)
self.Name:SetText(talentInfo.name);
self.Icon:SetTexture(talentInfo.icon);
- self.info = talentInfo;
+ self.talentID = talentInfo.id;
local disabled = false;
local abbreviateCost = true;
+ local showingCost = false;
local textColor = HIGHLIGHT_FONT_COLOR;
if talentInfo.talentAvailability == Enum.GarrisonTalentAvailability.UnavailableAlreadyHave then
@@ -331,6 +373,7 @@ function CovenantSanctumUpgradeTalentMixin:Set(talentInfo)
self.UpgradeArrow:Show();
local costString = GetGarrisonTalentCostString(talentInfo, abbreviateCost);
self.InfoText:SetText(costString or "");
+ showingCost = not not costString;
else
disabled = true;
self.UpgradeArrow:Hide();
@@ -338,22 +381,41 @@ function CovenantSanctumUpgradeTalentMixin:Set(talentInfo)
if isMet then
local costString = GetGarrisonTalentCostString(talentInfo, abbreviateCost);
self.InfoText:SetText(costString);
+ showingCost = not not costString;
else
self.InfoText:SetText(failureString or "");
end
end
self.InfoText:SetTextColor(textColor:GetRGB());
+ local spaceOutLines = false;
+ if showingCost then
+ if self.Name:GetNumLines() > 1 and self.Name:GetFontObject() == SystemFont_Shadow_Med2 then
+ spaceOutLines = true;
+ end
+ end
+ if spaceOutLines then
+ self.Name:SetPoint("TOPLEFT", 58, -5);
+ self.InfoText:SetPoint("LEFT", self, "BOTTOMLEFT", 58, 13);
+ else
+ self.Name:SetPoint("TOPLEFT", 58, -6);
+ self.InfoText:SetPoint("LEFT", self, "BOTTOMLEFT", 58, 14);
+ end
+
if disabled then
- local atlas = GetFinalNameFromTextureKit(upgradeTextureKitRegions.Border, g_sanctumTextureKit);
- self.Border:SetAtlas(atlas);
self.Name:SetTextColor(DISABLED_FONT_COLOR:GetRGB());
else
- self.Border:SetAtlas("CovenantSanctum-Upgrade-Border-Available");
self.Name:SetTextColor(GREEN_FONT_COLOR:GetRGB());
end
self.Icon:SetDesaturated(disabled);
+ if talentInfo.talentAvailability == Enum.GarrisonTalentAvailability.Available then
+ self.Border:SetAtlas("CovenantSanctum-Upgrade-Border-Available");
+ else
+ local atlas = GetFinalNameFromTextureKit(upgradeTextureKitRegions.Border, g_sanctumTextureKit);
+ self.Border:SetAtlas(atlas);
+ end
+
if talentInfo.isBeingResearched and not talentInfo.hasInstantResearch then
self.Cooldown:SetCooldownUNIX(talentInfo.startTime, talentInfo.researchDuration);
self.Cooldown:Show();
@@ -369,15 +431,21 @@ TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableAnotherIsRes
TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableNotEnoughResources] = COVENANT_SANCTUM_NOT_ENOUGH_RESOURCES;
TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableNotEnoughGold] = ORDER_HALL_TALENT_UNAVAILABLE_NOT_ENOUGH_GOLD;
TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableTierUnavailable] = ORDER_HALL_TALENT_UNAVAILABLE_TIER_UNAVAILABLE;
-TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableRequiresPrerequisiteTalent] = ORDER_HALL_TALENT_UNAVAILABLE_REQUIRES_PREREQUISITE_TALENT;
+TalentUnavailableReasons[Enum.GarrisonTalentAvailability.UnavailableRequiresPrerequisiteTalent] = COVENANT_SANCTUM_TALENT_REQUIRES_PREVIOUS_TIER;
function CovenantSanctumUpgradeTalentMixin:OnEnter()
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+ self:RefreshTooltip();
+end
- local talent = self.info;
+function CovenantSanctumUpgradeTalentMixin:RefreshTooltip()
+ local talent = C_Garrison.GetTalentInfo(self.talentID);
local garrTalentTreeID = C_Garrison.GetCurrentGarrTalentTreeID();
local talentTreeType = C_Garrison.GetGarrisonTalentTreeType(garrTalentTreeID);
+ GameTooltip:ClearLines();
+ self.UpdateTooltip = nil;
+
-- Multi-Rank Talents
if talent.talentMaxRank > 1 then
local talentRank = math.max(0, talent.talentRank);
@@ -400,11 +468,13 @@ function CovenantSanctumUpgradeTalentMixin:OnEnter()
if talent.isBeingResearched and not talent.hasInstantResearch then
GameTooltip:AddLine(" ");
GameTooltip:AddLine(NORMAL_FONT_COLOR_CODE..TIME_REMAINING..FONT_COLOR_CODE_CLOSE.." "..SecondsToTime(talent.timeRemaining), 1, 1, 1);
+ self.UpdateTooltip = CovenantSanctumUpgradeTalentMixin.RefreshTooltip;
elseif (talentTreeType == Enum.GarrTalentTreeType.Tiers and not talent.selected) or (talentTreeType == Enum.GarrTalentTreeType.Classic and not talent.researched) then
GameTooltip:AddLine(" ");
if (talent.researchDuration and talent.researchDuration > 0) then
GameTooltip:AddLine(RESEARCH_TIME_LABEL.." "..HIGHLIGHT_FONT_COLOR_CODE..SecondsToTime(talent.researchDuration)..FONT_COLOR_CODE_CLOSE);
+ self.UpdateTooltip = CovenantSanctumUpgradeTalentMixin.RefreshTooltip;
end
local costString = GetGarrisonTalentCostString(talent);
@@ -413,7 +483,7 @@ function CovenantSanctumUpgradeTalentMixin:OnEnter()
end
if talent.talentAvailability == Enum.GarrisonTalentAvailability.Available or (talent.talentAvailability == Enum.GarrisonTalentAvailability.UnavailableAnotherIsResearching) then
- GameTooltip:AddLine(ORDER_HALL_TALENT_RESEARCH, 0, 1, 0);
+ GameTooltip_AddInstructionLine(GameTooltip, COVENANT_SANCTUM_TALENT_RESEARCH);
else
if (talent.talentAvailability == Enum.GarrisonTalentAvailability.UnavailablePlayerCondition and talent.playerConditionReason) then
GameTooltip:AddLine(talent.playerConditionReason, 1, 0, 0);
@@ -437,12 +507,29 @@ end
CovenantSanctumUpgradeBaseMixin = { };
function CovenantSanctumUpgradeBaseMixin:Refresh()
- local treeInfo = C_Garrison.GetTalentTreeInfo(self.treeID);
+ local treeInfo = C_Garrison.GetTalentTreeInfo(self.treeID);
if treeInfo then
local currentTier = GetCurrentTier(treeInfo.talents);
self.Tier:SetText(currentTier);
self.Icon:SetTexture(treeInfo.talents[1].icon);
self.SelectedTexture:SetShown(self:IsSelected());
+ -- check for cooldown any talent
+ local startTime, researchDuration
+ for i, talentInfo in ipairs(treeInfo.talents) do
+ if talentInfo.isBeingResearched and not talentInfo.hasInstantResearch then
+ startTime = talentInfo.startTime;
+ researchDuration = talentInfo.researchDuration;
+ break;
+ end
+ end
+ if startTime and researchDuration then
+ self.Cooldown:SetCooldownUNIX(startTime, researchDuration);
+ self.Cooldown:Show();
+ self.Icon:SetVertexColor(0.25, 0.25, 0.25);
+ else
+ self.Cooldown:Hide();
+ self.Icon:SetVertexColor(1, 1, 1);
+ end
end
end
diff --git a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.xml b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.xml
index 18fe0ace4f2b9c57eacb271371e22bc7de502068..098bccd2d02ab39d295e8005bab03ccd3ccf70d3 100644
--- a/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.xml
+++ b/Interface/AddOns/Blizzard_CovenantSanctum/Blizzard_CovenantSanctumUpgrades.xml
@@ -57,7 +57,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -106,20 +132,20 @@
-
+
-
+
-
+
-
+
@@ -129,20 +155,20 @@
-
+
-
+
-
+
-
+
-
+
@@ -166,9 +192,15 @@
+
+
+
+
+
+
@@ -240,7 +272,7 @@
-
diff --git a/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua b/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua
index 95bfb0df39a2485157c6671ed5e17dab477647d4..5b2937d89108e8a8c90c0e206e40997258e4b5f6 100644
--- a/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua
+++ b/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua
@@ -77,7 +77,7 @@ function FlightMapMixin:OnShow()
MapCanvasMixin.OnShow(self);
local playerPosition = C_Map.GetPlayerMapPosition(mapID, "player");
- local subMapInfo = C_Map.GetMapInfoAtPosition(mapID, playerPosition:GetXY());
+ local subMapInfo = playerPosition and C_Map.GetMapInfoAtPosition(mapID, playerPosition:GetXY()) or nil;
if subMapInfo and (subMapInfo.mapID ~= mapID) and FlagsUtil.IsSet(subMapInfo.flags, Enum.UIMapFlag.FlightMapAutoZoom) then
local centerX, centerY = MapUtil.GetMapCenterOnMap(subMapInfo.mapID, mapID);
local ignoreScaleRatio = true;
diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua
index 61d7b1edda17182da2877d00346601053ca9e35b..33164e8d64f7713767fbe128bc3cfd5009d3e8dc 100644
--- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua
+++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua
@@ -323,12 +323,8 @@ function CovenantMissionListMixin:Update()
else
button.Summary:SetFormattedText(PARENS_TEMPLATE, mission.duration);
end
- if ( mission.locTextureKit ) then
- button.LocBG:Show();
- button.LocBG:SetAtlas(mission.locTextureKit.."-List");
- else
- button.LocBG:Hide();
- end
+
+ button.LocBG:Hide();
if ( button.EncounterIcon ) then
button.EncounterIcon:SetEncounterInfo(button.info.encounterIconInfo);
@@ -658,6 +654,8 @@ function CovenantPortraitMixin:SetupPortrait(followerInfo)
self.HealthBar:SetMaxHealth(followerInfo.autoCombatantStats.maxHealth);
self.HealthBar:SetHealth(followerInfo.autoCombatantStats.currentHealth);
self.HealthBar:SetRole(followerInfo.role);
+ local puckBorderAtlas = followerInfo.isAutoTroop and "Adventurers-Followers-Frame-Troops" or "Adventurers-Followers-Frame";
+ self.PuckBorder:SetAtlas(puckBorderAtlas);
end
function CovenantPortraitMixin:SetQuality(followerInfo)
diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.xml b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.xml
index 335e62cbace3b150c7c461f0f4734e89f906e114..ff94524274bfe31f66aecdbdb1b470fe2a7a7171 100644
--- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.xml
+++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.xml
@@ -255,6 +255,13 @@
+
+
+
+
+
+
+
@@ -775,8 +782,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -930,105 +952,22 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
@@ -1055,49 +994,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
@@ -1105,18 +1005,22 @@
-
+
-
+
-
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.xml b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.xml
index 767c1f6d4247f5bc9c15e67ccccaca9ed8c4d341..bcaf2a17dc9b59a817e02feae7eae7e675adcef6 100644
--- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.xml
+++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.xml
@@ -513,7 +513,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua
index b4346bed922ef817557eaee7c084666dc017ad40..7ae0ac62dd68f5f4fad7a7bae52ec4131e695bb3 100644
--- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua
+++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua
@@ -2189,6 +2189,7 @@ function GarrisonFollowerTabMixin:UpdateAutoSpellAbilities(followerInfo)
local abilityFrame = self.autoSpellPool:Acquire();
abilityFrame:SetSize(abilityIconSize, abilityIconSize);
abilityFrame.Icon:SetSize(abilityIconSize, abilityIconSize);
+ abilityFrame.SpellBorder:SetSize(abilityIconSize, abilityIconSize);
abilityFrame.info = autoSpell;
abilityFrame.info.showCounters = false;
abilityFrame.Icon:SetTexture(autoSpell.icon);
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCombatLog.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCombatLog.xml
index 9afa9f10fb850bae688fff64d74f139bd2a25b95..a67b650abc8c7314781cdff0f5f3a4c739d806aa 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCombatLog.xml
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCombatLog.xml
@@ -39,8 +39,8 @@
-
-
+
+
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.xml
index 303756c3ac46e226a6a8cd209e0bb4aee9a8f38c..67701d3054b7b7108fad3929401e6073515715b4 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.xml
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.xml
@@ -149,13 +149,13 @@
-
+
-
+
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua
index bef934abc71ac5df78dc9e17ddd46f9b847dd6b8..b350d1f51f39f544d3f37c84540fd7536af015be 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua
@@ -200,6 +200,9 @@ function AdventuresFollowerPuckMixin:SetFollowerGUID(followerGUID, info)
self.info = info;
self.name = info.name;
+ local puckBorderAtlas = info.isAutoTroop and "Adventurers-Followers-Frame-Troops" or "Adventurers-Followers-Frame";
+ self.PuckBorder:SetAtlas(puckBorderAtlas);
+
local autoCombatSpells = info.autoCombatSpells or C_Garrison.GetFollowerAutoCombatSpells(followerGUID, info.level);
self.autoCombatSpells = autoCombatSpells;
@@ -269,6 +272,8 @@ function AdventuresEnemyPuckMixin:OnLoad()
self.AbilityOne:SetPoint("LEFT", -5, -5);
self.AbilityTwo:SetScale(0.7);
self.AbilityTwo:SetPoint("LEFT", 0, 25);
+ self.PuckShadow:SetPoint("TOPLEFT", 0, 0);
+ self.PuckShadow:SetPoint("BOTTOMRIGHT", 0, 0);
self.HealthBar:SetScale(0.7);
self.PuckBorder:SetAtlas("Adventures-Enemy-Frame");
@@ -335,6 +340,7 @@ function AdventuresMissionPageFollowerPuckMixin:SetEmpty()
self.followerGUID = nil;
self.Portrait:Hide();
self.PuckBorder:Hide();
+ self.PuckShadow:Hide();
self.EmptyPortrait:Hide();
self.HealthBar:Hide();
self.AbilityOne:Hide();
@@ -346,6 +352,7 @@ function AdventuresMissionPageFollowerPuckMixin:SetFollowerGUID(...)
self.Portrait:Show();
self.PuckBorder:Show();
+ self.PuckShadow:Show();
self.EmptyPortrait:Hide();
self.HealthBar:Show();
end
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.xml
index 21d73b67e7a5aca049c6e993fd5ba5e606b279a0..e3a919fba2f993123e6075c1079495c6643ff717 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.xml
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.xml
@@ -43,6 +43,14 @@
+
+
+
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua
index 350048c9a1b9c431334dda84693d8eb19461f349..4601d2c98f1abe6f2e596270b6764136e8119438 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua
@@ -131,6 +131,10 @@ end
AdventuresRewardsScreenContinueButtonMixin = {}
+function AdventuresRewardsScreenContinueButtonMixin:OnShow()
+ self.FlashAnim:Play();
+end
+
function AdventuresRewardsScreenContinueButtonMixin:OnClick()
local missionCompleteScreen = self:GetParent():GetParent():GetParent();
missionCompleteScreen:CloseMissionComplete();
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.xml
index ee14173d50e3425329a3c0f5af74dc706f23c02f..283fe164c58ed8e2160ee38d69acbfd6ba2bd6fc 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.xml
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.xml
@@ -220,6 +220,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.lua
index 7de747d385d55a2e090edcf449219402a6294d2e..a52b560bbb989a9f8289bfa9e2768db9adb9ab8d 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.lua
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.lua
@@ -83,8 +83,13 @@ function GarrisonLandingPageMixin:UpdateUIToGarrisonType()
self.Report.Background:SetAtlas(("BfAMissionsLandingPage-Background-%s"):format(UnitFactionGroup("player")));
elseif (self.garrTypeID == Enum.GarrisonType.Type_9_0) then
self:SetupCovenantRenownLevel();
+
+ self:ResetSectionLayoutIndex();
self:SetupCovenantCallings();
self:SetupSoulbind();
+ self:SetupGardenweald();
+ self:LayoutSection();
+
self.FollowerTabButton:SetText(COVENANT_MISSIONS_FOLLOWERS);
self.FollowerList.LandingPageHeader:SetText(COVENANT_MISSIONS_FOLLOWERS);
self.FollowerTab.FollowerText:Hide();
@@ -152,13 +157,29 @@ function GarrisonLandingPageMixin:SetupCovenantRenownLevel()
end
end
+function GarrisonLandingPageMixin:ResetSectionLayoutIndex()
+ self.sectionsLayoutIndex = 1;
+end
+
+function GarrisonLandingPageMixin:SetSectionLayoutIndex(frame)
+ if frame then
+ frame.layoutIndex = self.sectionsLayoutIndex or 1;
+ self.sectionsLayoutIndex = frame.layoutIndex + 1;
+ end
+end
+
+function GarrisonLandingPageMixin:LayoutSection()
+ self.Report.Sections:Layout();
+end
+
function GarrisonLandingPageMixin:SetupCovenantCallings()
if not self.CovenantCallings then
if UIParentLoadAddOn("Blizzard_CovenantCallings") then
- self.CovenantCallings = CovenantCallings.Create(self.Report);
- self.CovenantCallings:SetPoint("TOPLEFT", self.Report.Title, "BOTTOMLEFT", -46, -55);
+ self.CovenantCallings = CovenantCallings.Create(self.Report.Sections);
end
end
+
+ self:SetSectionLayoutIndex(self.CovenantCallings);
end
function GarrisonLandingPageMixin:SetupSoulbind()
@@ -169,10 +190,25 @@ function GarrisonLandingPageMixin:SetupSoulbind()
local soulbindID = C_Soulbinds.GetActiveSoulbindID();
if soulbindID > 0 and UIParentLoadAddOn("Blizzard_LandingSoulbinds") then
local soulbindData = C_Soulbinds.GetSoulbindData(soulbindID);
- self.SoulbindPanel = LandingSoulbind.Create(self.Report);
- self.SoulbindPanel:SetPoint("TOPLEFT", self.Report.Title, "TOPLEFT", -46, -250);
+ self.SoulbindPanel = LandingSoulbind.Create(self.Report.Sections);
+ end
+ end
+
+ self:SetSectionLayoutIndex(self.SoulbindPanel);
+end
+
+function GarrisonLandingPageMixin:SetupGardenweald()
+ if C_ArdenwealdGardening.IsGardenAccessible() then
+ if self.ArdenwealdGardeningPanel then
+ self.ArdenwealdGardeningPanel:Show();
+ elseif UIParentLoadAddOn("Blizzard_ArdenwealdGardening") then
+ self.ArdenwealdGardeningPanel = ArdenwealdGardening.Create(self.Report.Sections);
end
+ elseif self.ArdenwealdGardeningPanel then
+ self.ArdenwealdGardeningPanel:Hide();
end
+
+ self:SetSectionLayoutIndex(self.ArdenwealdGardeningPanel);
end
function GarrisonLandingPageMixin:UpdateCovenantCallings()
diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.xml
index fed0f9a86ad9224295f200f4afe9dbe397704512..8840b9296bc5aef4c352d987ac260b931b1b4287 100644
--- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.xml
+++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_GarrisonLandingPage.xml
@@ -492,6 +492,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/Interface/AddOns/Blizzard_LandingSoulbinds/Blizzard_LandingSoulbindPanel.xml b/Interface/AddOns/Blizzard_LandingSoulbinds/Blizzard_LandingSoulbindPanel.xml
index 686473bfa93ac1c0f44fcba1060e6ea3b794fa70..f97ad414256fc1f7e764d5d41552c3005e7fdb7f 100644
--- a/Interface/AddOns/Blizzard_LandingSoulbinds/Blizzard_LandingSoulbindPanel.xml
+++ b/Interface/AddOns/Blizzard_LandingSoulbinds/Blizzard_LandingSoulbindPanel.xml
@@ -1,8 +1,8 @@
-
-
+
+
@@ -22,7 +22,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.lua b/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.lua
index 0d9c407370aabda6676256309bfdc20cbb7595dd..f70438201b8732e1d10b55219afa547010fc5d25 100644
--- a/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.lua
+++ b/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.lua
@@ -63,7 +63,7 @@ end
function MawBuffsContainerMixin:OnClick()
self.List:SetShown(not self.List:IsShown());
- PlaySound(SOUNDKIT.UI_MAW_BUFFS_ANIMA_POWERS_BUTTON);
+ PlaySound(SOUNDKIT.UI_MAW_BUFFS_ANIMA_POWERS_BUTTON, nil, SOUNDKIT_ALLOW_DUPLICATES);
end
function MawBuffsContainerMixin:HighlightBuffAndShow(spellID, maxStacks)
@@ -168,12 +168,17 @@ function MawBuffMixin:SetBuffInfo(buffInfo)
self.Icon:SetTexture(buffInfo.icon);
self.slot = buffInfo.slot;
self.count = buffInfo.count;
- self.spellID = buffInfo.spellID;
- local showCount = buffInfo.count > 1;
+ self.spellID = buffInfo.spellID;
+ local _, rarityAtlas = C_Spell.GetMawPowerRarityStringAndBorderAtlasBySpellID(self.spellID);
+ local showCount = buffInfo.count > 1;
+
if (showCount) then
self.Count:SetText(buffInfo.count);
end
+ if(rarityAtlas) then
+ self.Border:SetAtlas(rarityAtlas, TextureKitConstants.UseAtlasSize);
+ end
self.Count:SetShown(showCount);
self.CountRing:SetShown(showCount);
@@ -186,8 +191,43 @@ function MawBuffMixin:SetBuffInfo(buffInfo)
end
function MawBuffMixin:OnEnter()
+ self:RefreshTooltip();
+end
+
+function MawBuffMixin:RefreshTooltip()
+ local spell = Spell:CreateFromSpellID(self.spellID);
+ local name, spellDescription = nil;
+
+
+ if (spell:IsSpellDataCached()) then
+ name = UnitAura("player", self.slot, "MAW");
+ spellDescription = GetSpellDescription(self.spellID);
+ else
+ spell:ContinueOnSpellLoad(function()
+ self:RefreshTooltip();
+ end);
+ end
+
+ if(not self:IsMouseOver()) then
+ return;
+ end
+
GameTooltip:SetOwner(self, "ANCHOR_LEFT");
- GameTooltip:SetUnitAura("player", self.slot, "MAW");
+ local name = UnitAura("player", self.slot, "MAW");
+
+ if (name) then
+ GameTooltip_AddNormalLine(GameTooltip, name);
+ end
+
+ local rarityString = C_Spell.GetMawPowerRarityStringAndBorderAtlasBySpellID(self.spellID);
+ if (rarityString) then
+ GameTooltip_AddNormalLine(GameTooltip, rarityString);
+ end
+
+ local spellDescription = GetSpellDescription(self.spellID);
+ if (spellDescription) then
+ GameTooltip_AddHighlightLine(GameTooltip, spellDescription)
+ end
GameTooltip:Show();
self.HighlightBorder:Show();
end
diff --git a/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.xml b/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.xml
index d532915db8eab03a79e223369f7a2135455c34e9..157ca98592ea890ea14a044b20c26cae5c684762 100644
--- a/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.xml
+++ b/Interface/AddOns/Blizzard_MawBuffs/Blizzard_MawBuffs.xml
@@ -7,7 +7,7 @@
-
+
@@ -23,7 +23,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialData.lua b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialData.lua
index d089bffc8c6c5e36150b393427f8abbbfbfde2e7..03061067c9f785df002798bfddfbee155cdcb22f 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialData.lua
+++ b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialData.lua
@@ -41,8 +41,8 @@ TutorialData.LevelAbilitiesTable = {
ROGUE = {
1752, -- Start with Sinister Strike
196819, -- Eviscerate, level 2
- 1784, -- Stealth, level 3
- nil, -- 1833, Cheap Shot, level 4
+ nil, -- 1833 Cheap Shot, level 3 - Rogues also get Stealth, 1784
+ nil, --
2983, -- Sprint, level 5
1766, -- Kick, level 6
nil, -- 8676, Ambush, level 7
@@ -182,6 +182,7 @@ TutorialData.ClassData = {
builderString = nil,
spenderString = nil,
classQuestSpellID = 187650, -- Freezing Trap
+ -- 321164 is a special tutorial only Freezing Trap
},
ROGUE = {
firstSpellID = 1752, -- Sinister Strike
@@ -331,6 +332,8 @@ TutorialData.Alliance = {
SpecChoiceQuest = 59587;
+ AnUrgentMeeting = 58912;
+
UseQuestItemData = {
ScreenTutorialStringID = NPEV2_APPROACH_INJURED_CREWMEMBER;
PointerTutorialStringID = NPEV2_USEQUESTITEM;
@@ -453,6 +456,8 @@ TutorialData.Horde = {
SpecChoiceQuest = 60348;
+ AnUrgentMeeting = 60360;
+
UseQuestItemData = {
ScreenTutorialStringID = NPEV2_APPROACH_INJURED_CREWMEMBER;
PointerTutorialStringID = NPEV2_USEQUESTITEM;
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialKeyboardMouseFrame.xml b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialKeyboardMouseFrame.xml
index fbce0936531ee0787069ec05a9b73bd395671960..b18c3681d0e48df7fb3a2a59bf745879850820db 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialKeyboardMouseFrame.xml
+++ b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialKeyboardMouseFrame.xml
@@ -4,7 +4,7 @@
-
+
@@ -27,7 +27,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialLogic.lua b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialLogic.lua
index f33b58a3d98b319c410d52df9c17103c1edbf82c..98fcd76294dba93826f5b4e0cb9f0f022e942bb2 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialLogic.lua
+++ b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialLogic.lua
@@ -112,6 +112,14 @@ function Tutorials:Begin()
end
end
+ questID = tutorialData.AnUrgentMeeting;
+ if C_QuestLog.GetLogIndexForQuestID(questID) ~= nil then
+ local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
+ if TutorialHelper:GetActionButtonBySpellID(mountData.mountID) then
+ self.UseMountWatcher:Begin();
+ end
+ end
+
-- if we are past a certain point, turn on of all the UI
if C_QuestLog.IsQuestFlaggedCompleted(tutorialData.ShowAllUIQuest) then
self.Hide_Backpack:Complete();
@@ -144,8 +152,10 @@ function Tutorials:Begin()
if C_QuestLog.IsQuestFlaggedCompleted(questID) then -- Mount Quest is complete
-- is the mount already on the action bar?
local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
- if not TutorialHelper:GetActionButtonBySpellID(mountData.mountID) then
- self.MountAddedWatcher:Begin();
+ if TutorialHelper:GetActionButtonBySpellID(mountData.mountID) then
+ self.UseMountWatcher:Begin();
+ else
+ Tutorials.QueueSystem:QueueMountTutorial();
end
end
@@ -193,6 +203,12 @@ function Tutorials:Quest_Accepted(questData)
elseif (questID == vendorQuestID) then
-- Use Vendor Quest
self.Vendor_Watcher:Begin();
+ elseif (questID == tutorialData.AnUrgentMeeting) then
+ -- second use mount reminder
+ local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
+ if TutorialHelper:GetActionButtonBySpellID(mountData.mountID) then
+ self.UseMountWatcher:Begin();
+ end
elseif (questID == tutorialData.ShowAllUIQuest) then
-- Show All UI Quest
self.Hide_Backpack:Complete();
@@ -410,6 +426,8 @@ Tutorials.Death_ResurrectPrompt = Class_Death_ResurrectPrompt:new(Tutorials.De
-- Mount Tutorial
Tutorials.MountAddedWatcher = Class_MountAddedWatcher:new();
Tutorials.MountTutorial = Class_MountTutorial:new();
+Tutorials.UseMountWatcher = Class_UseMountTutorialWatcher:new();
+Tutorials.UseMountTutorial = Class_UseMountTutorial:new();
-- ------------------------------------------------------------------------------------------------------------
-- Spec Choice Tutorial
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialSteps.lua b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialSteps.lua
index 2a7c8aa52983a1d323dd03af028e98b905b6d2f3..d29c181e5a47b8fd15d8581f9ec4d0968ff7f333 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialSteps.lua
+++ b/Interface/AddOns/Blizzard_NewPlayerExperience/Blizzard_TutorialSteps.lua
@@ -402,15 +402,17 @@ end
function Class_Intro_CombatTactics:Reset()
self:HidePointerTutorials();
self:HideResourceCallout();
- self:HideAbilityPointer();
+ self:HideAbilityPrompt();
self.firstTime = true;
local unitGUID = UnitGUID("target");
if unitGUID and (TutorialHelper:GetCreatureIDFromGUID(unitGUID) == TutorialHelper:GetFactionData().StartingQuestTargetDummyCreatureID) then
local playerClass = TutorialHelper:GetClass();
if playerClass == "WARRIOR" then
+ -- warriors are the only class that can't use their ability straight away
Dispatcher:RegisterEvent("UNIT_POWER_FREQUENT", self);
else
+ -- every other class can be immediatedly prompted
self:ShowAbilityPrompt();
end
else
@@ -422,7 +424,6 @@ function Class_Intro_CombatTactics:UNIT_TARGET()
local unitGUID = UnitGUID("target");
if unitGUID and (TutorialHelper:GetCreatureIDFromGUID(unitGUID) == TutorialHelper:GetFactionData().StartingQuestTargetDummyCreatureID) then
Dispatcher:UnregisterEvent("UNIT_TARGET", self);
- Dispatcher:RegisterEvent("UNIT_POWER_FREQUENT", self);
end
end
@@ -430,7 +431,7 @@ function Class_Intro_CombatTactics:ACTIONBAR_SLOT_CHANGED()
self:Reset();
end
-function Class_Intro_CombatTactics:ResourceCallout()
+function Class_Intro_CombatTactics:ShowResourceCallout()
local namePlatePlayer = C_NamePlate.GetNamePlateForUnit("player", issecure());
if not namePlatePlayer then
return;
@@ -462,10 +463,15 @@ function Class_Intro_CombatTactics:PLAYER_LEAVE_COMBAT()
end
function Class_Intro_CombatTactics:ShowAbilityPrompt()
+ local playerClass = TutorialHelper:GetClass();
+ if self.firstTime == false and (playerClass == "WARRIOR" or playerClass == "ROGUE") then
+ -- warriors and rogues only show the very first ability prompt because their resource callout reinforces it as well
+ return;
+ end
+
Dispatcher:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
local classData = TutorialHelper:FilterByClass(TutorialData.ClassData);
local combatString;
-
if self.firstTime == true then
combatString = TutorialHelper:FormatString(classData.initialString:format(self.keyBindString, self.spellIDString));
else
@@ -479,22 +485,28 @@ function Class_Intro_CombatTactics:ShowAbilityPrompt()
end
function Class_Intro_CombatTactics:UNIT_SPELLCAST_SUCCEEDED(caster, spelllineID, spellID)
- if spellID == self.spellID then
- self:HideAbilityPointer();
+ self:HideAbilityPrompt();
+ local playerClass = TutorialHelper:GetClass();
+ if (playerClass == "WARRIOR" or playerClass == "ROGUE") then
+ -- warriors and rogues have a resource callout that reinforces ability use
+ self:ShowResourceCallout();
+ return;
+ end
+
+ if spellID == self.spellID then
+ self:HideAbilityPrompt();
self.firstTime = false;
local button = TutorialHelper:GetActionButtonBySpellID(spellID);
local isUsable, _ = IsUsableAction(button.action);
if isUsable then
self:ShowAbilityPrompt();
- else
- Dispatcher:RegisterEvent("UNIT_POWER_FREQUENT", self);
end
end
end
function Class_Intro_CombatTactics:UNIT_POWER_FREQUENT(unit, resource)
- self:ResourceCallout();
+ -- for the intro tutorial, we only sue this for warriors to ensure they have enough rage before slamming
local button = TutorialHelper:GetActionButtonBySpellID(self.spellID);
if button then
local isUsable, notEnoughMana = IsUsableAction(button.action);
@@ -519,7 +531,7 @@ function Class_Intro_CombatTactics:HideResourceCallout()
end
end
-function Class_Intro_CombatTactics:HideAbilityPointer()
+function Class_Intro_CombatTactics:HideAbilityPrompt()
if self.abilityPointerID then
self:HidePointerTutorial(self.abilityPointerID);
self.abilityPointerID = nil;
@@ -528,7 +540,7 @@ end
function Class_Intro_CombatTactics:OnComplete()
self:HideResourceCallout();
- self:HideAbilityPointer();
+ self:HideAbilityPrompt();
self:HidePointerTutorials();
Dispatcher:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
end
@@ -837,14 +849,15 @@ function Class_QueueSystem:UPDATE_SHAPESHIFT_FORM()
end
end
end
- self.Timer = C_Timer.NewTimer(0.1, function()
+ self.Timer = C_Timer.NewTimer(0.25, function()
self:CheckQueue();
end);
end
function Class_QueueSystem:UNIT_INVENTORY_CHANGED()
local level = UnitLevel("player");
- if (level > 9) then
+ if (level > 10) then
+ -- if the player comes back after level 10, don't prompt them on loot anymore
Dispatcher:UnregisterEvent("UNIT_INVENTORY_CHANGED", self);
else
local value = {};
@@ -911,14 +924,14 @@ function Class_QueueSystem:CheckQueue()
Tutorials.AddSpellToActionBar:Begin(value.spellID, value.warningString, value.spellMicroButtonString);
end
else
- -- not in the correct form, push it back on the queue
- self.tutorialQueue:Push(value);
+ -- not in the correct form, dump it
+ self:CheckQueue();
end
elseif value.type == "UNIT_INVENTORY_CHANGED" then
self.inProgress = Tutorials.EquipFirstItemWatcher:CheckForUpgrades();
elseif value.type == "MOUNT_TUTORIAL" then
self.inProgress = true;
- Tutorials.MountAddedWatcher:StartTutorial();
+ Tutorials.MountAddedWatcher:ForceBegin();
elseif value.type == "SPEC_TUTORIAL" then
self.inProgress = true;
Tutorials.SpecTutorial:StartTutorial();
@@ -1052,6 +1065,16 @@ function Class_AddSpellToActionBar:ACTIONBAR_SLOT_CHANGED(slot)
elseif (actionType == "flyout" and FlyoutHasSpell(sID, self.spellToAdd)) then
self:Complete();
else
+ -- HACK: there is a special Tutorial only condition here we need to check here for Freezing Trap
+ local normalFreezingTrapSpellID = 187650;
+ local specialFreezingTrapSpellID = 321164;
+ if self.spellToAdd == normalFreezingTrapSpellID then
+ if (sID == normalFreezingTrapSpellID) or (sID == specialFreezingTrapSpellID) then
+ self:Complete();
+ return;
+ end
+ end
+
local nextEmptyButton = TutorialHelper:FindEmptyButton();
if not nextEmptyButton then
-- no more empty buttons
@@ -1091,7 +1114,9 @@ function Class_AddClassSpellToActionBar:OnBegin()
local classData = TutorialHelper:FilterByClass(TutorialData.ClassData);
local spellID = classData.classQuestSpellID;
if spellID then
- Tutorials.QueueSystem:QueueSpellTutorial(spellID, nil, NPEV2_SPELLBOOK_TUTORIAL);
+ local playerClass = TutorialHelper:GetClass();
+ local preferredActionBar = playerClass == "ROGUE" and "MultiBarBottomLeftButton" or nil;
+ Tutorials.QueueSystem:QueueSpellTutorial(spellID, nil, NPEV2_SPELLBOOK_TUTORIAL, preferredActionBar);
end
self:Complete();
end
@@ -1490,7 +1515,7 @@ end
function Class_EquipFirstItemWatcher:OnBegin()
local level = UnitLevel("player");
- if (level > 10) then -- if the player comes back after level 10, don't prompt them on loot anymore
+ if (level > 10) then -- if the player comes back after level 10, don't prompt them anymore
self:Complete();
return;
end
@@ -1508,10 +1533,10 @@ function Class_EquipFirstItemWatcher:CheckForUpgrades()
return false;
end
-function Class_EquipFirstItemWatcher:STRUCT_ItemContainer(itemID, characterSlot, container, containerSlot)
+function Class_EquipFirstItemWatcher:STRUCT_ItemContainer(itemLink, characterSlot, container, containerSlot)
return
{
- ItemID = itemID,
+ ItemLink = itemLink,
Container = container,
ContainerSlot = containerSlot,
CharacterSlot = characterSlot,
@@ -1529,7 +1554,8 @@ function Class_EquipFirstItemWatcher:GetBestItemUpgrades()
local highestIlvl = 0;
for i = 1, #items do
- local ilvl = select(4, GetItemInfo(items[i].ItemID));
+ itemLink = items[i].ItemLink;
+ local ilvl = GetDetailedItemLevelInfo(itemLink) or 0;
if (ilvl > highestIlvl) then
highest = items[i];
highestIlvl = ilvl;
@@ -1573,11 +1599,12 @@ function Class_EquipFirstItemWatcher:GetPotentialItemUpgrades()
local existingItemIlvl = 0;
local existingItemWeaponType;
- local existingItemID = GetInventoryItemID("player", i);
- if (existingItemID ~= nil) then
- existingItemIlvl = select(4, GetItemInfo(existingItemID)) or 0;
+ local existingItemLink = GetInventoryItemLink("player", i);
+ if (existingItemLink ~= nil) then
+ existingItemIlvl = GetDetailedItemLevelInfo(existingItemLink) or 0;
if (i == INVSLOT_MAINHAND) then
+ local existingItemID = GetInventoryItemID("player", i);
existingItemWeaponType = self:GetWeaponType(existingItemID);
end
end
@@ -1585,9 +1612,9 @@ function Class_EquipFirstItemWatcher:GetPotentialItemUpgrades()
local availableItems = {};
GetInventoryItemsForSlot(i, availableItems);
- for packedLocation, itemID in pairs(availableItems) do
- local itemInfo = {GetItemInfo(itemID)};
- local ilvl = itemInfo[4];
+ for packedLocation, itemLink in pairs(availableItems) do
+ local itemInfo = {GetItemInfo(itemLink)};
+ local ilvl = GetDetailedItemLevelInfo(itemLink) or 0;
if (ilvl ~= nil) then
if (ilvl > existingItemIlvl) then
@@ -1630,7 +1657,7 @@ function Class_EquipFirstItemWatcher:GetPotentialItemUpgrades()
potentialUpgrades[i] = {};
end
- table.insert(potentialUpgrades[i], self:STRUCT_ItemContainer(itemID, i, bag, slot));
+ table.insert(potentialUpgrades[i], self:STRUCT_ItemContainer(itemLink, i, bag, slot));
end
end
end
@@ -1788,7 +1815,10 @@ function Class_EquipTutorial:CheckReady()
end
function Class_EquipTutorial:PLAYER_EQUIPMENT_CHANGED()
- if (GetInventoryItemID("player", self.data.CharacterSlot) == self.data.ItemID) then
+ local item = Item:CreateFromItemLink(self.data.ItemLink);
+ local itemID = item:GetItemID();
+
+ if (GetInventoryItemID("player", self.data.CharacterSlot) == itemID) then
-- the player successfully equipped the item
Dispatcher:UnregisterEvent("BAG_UPDATE_DELAYED", self);
self.success = true;
@@ -1847,7 +1877,9 @@ function Class_EquipTutorial:StartAnimation()
end
function Class_EquipTutorial:UpdateItemContainerAndSlotInfo()
- local currentItemID = self.data.ItemID;
+ local item = Item:CreateFromItemLink(self.data.ItemLink);
+ local currentItemID = item:GetItemID();
+
if itemInfo and itemInfo[10] == currentItemID then
-- nothing in the inventory changed that effected the current tutorial
else
@@ -2201,34 +2233,6 @@ function Class_EnhancedCombatTactics_Rogue:UNIT_TARGET()
return;
end
Class_EnhancedCombatTactics.UNIT_TARGET(self);
- --[[
- local unitGUID = UnitGUID("target");
- if unitGUID and (TutorialHelper:GetCreatureIDFromGUID(unitGUID) == TutorialHelper:GetFactionData().EnhancedCombatTacticsCreatureID) then
- --check for the builder spell on the action bar
- if not self:IsSpellOnActionBar(self.combatData.resourceBuilderSpellID, self.combatData.warningBuilderString, NPEV2_SPELLBOOK_ADD_SPELL) then
- return;
- end;
-
- --check for the spender spell on the action bar
- if not self:IsSpellOnActionBar(self.combatData.resourceSpenderSpellID, self.combatData.warningSpenderString, NPEV2_SPELLBOOK_ADD_SPELL) then
- return;
- end;
-
- if (self.builderPointerID == nil) and (self.spenderPointerID == nil) then
- self:ShowBuilderPrompt();
- end
- Dispatcher:RegisterEvent("UNIT_POWER_FREQUENT", self);
- Dispatcher:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
- else
- self:HideScreenTutorial();
- self:HideBuilderPrompt();
- self:HideSpenderPrompt();
- self:HidePointerTutorials();
-
- Dispatcher:UnregisterEvent("UNIT_POWER_FREQUENT", self);
- Dispatcher:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
- end
- ]]
end
function Class_EnhancedCombatTactics:UPDATE_SHAPESHIFT_FORM()
@@ -2792,6 +2796,9 @@ function Class_LookingForGroup:OnBegin()
Dispatcher:RegisterEvent("QUEST_REMOVED", self);
Dispatcher:RegisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
Dispatcher:RegisterEvent("LFG_UPDATE", self);
+ Dispatcher:RegisterEvent("LFG_PROPOSAL_SHOW", self);
+ Dispatcher:RegisterEvent("LFG_PROPOSAL_SUCCEEDED", self);
+ Dispatcher:RegisterEvent("LFG_PROPOSAL_FAILED", self);
EventRegistry:RegisterCallback("LFDQueueFrameSpecificList_Update.EmptyDungeonList", self.EmptyDungeonList, self);
EventRegistry:RegisterCallback("LFDQueueFrameSpecificList_Update.DungeonListReady", self.ReadyDungeonList, self);
@@ -2858,7 +2865,7 @@ function Class_LookingForGroup:LFG_UPDATE(args)
end
function Class_LookingForGroup:LFG_QUEUE_STATUS_UPDATE(args)
- --Dispatcher:UnregisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
+ Dispatcher:UnregisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
GlowEmitterFactory:Hide(LFDQueueFrameFindGroupButton);
self:HidePointerTutorials();
@@ -2866,21 +2873,20 @@ function Class_LookingForGroup:LFG_QUEUE_STATUS_UPDATE(args)
if QueueStatusMinimapButton:IsVisible() then
self:ShowPointerTutorial(NPEV2_LFD_INFO_POINTER_MESSAGE, "RIGHT", QueueStatusMinimapButton, 20, 0, nil, "RIGHT");
end
-
- Dispatcher:RegisterEvent("LFG_PROPOSAL_SHOW", self);
- Dispatcher:RegisterEvent("LFG_PROPOSAL_FAILED", self);
end
function Class_LookingForGroup:LFG_PROPOSAL_SHOW()
- Dispatcher:UnregisterEvent("LFG_PROPOSAL_SHOW", self);
+ self:HidePointerTutorials();
+end
- -- if the player reaches this part, they have succeeded
+function Class_LookingForGroup:LFG_PROPOSAL_SUCCEEDED()
+ Dispatcher:UnregisterEvent("LFG_PROPOSAL_SUCCEEDED", self);
Tutorials.LFGStatusWatcher.tutorialSuccess = true;
-
self:Complete();
end
function Class_LookingForGroup:LFG_PROPOSAL_FAILED()
+ Dispatcher:RegisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
end
function Class_LookingForGroup:QUEST_REMOVED(questIDRemoved)
@@ -2892,6 +2898,9 @@ end
function Class_LookingForGroup:OnComplete()
GlowEmitterFactory:Hide(LFDQueueFrameFindGroupButton);
+ Dispatcher:UnregisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
+ Dispatcher:UnregisterEvent("LFG_PROPOSAL_FAILED", self);
+ Dispatcher:UnregisterEvent("LFG_QUEUE_STATUS_UPDATE", self);
self:HidePointerTutorials();
self:HideScreenTutorial();
@@ -3169,7 +3178,7 @@ end
function Class_HunterTameTutorial:StartTameTutorial()
local button = TutorialHelper:GetActionButtonBySpellID(1515);
if button then
- self:ShowPointerTutorial(NPEV2_HUNTER_TAME_ANIMAL, "LEFT", button, 0, 25, nil, "UP");
+ self:ShowPointerTutorial(NPEV2_HUNTER_TAME_ANIMAL, "DOWN", button, 0, 30, nil, "UP");
Dispatcher:RegisterEvent("PET_STABLE_UPDATE", self);
else
self:AddHunterSpellsToActionBar();
@@ -3274,18 +3283,37 @@ end
-- ------------------------------------------------------------------------------------------------------------
Class_HunterStableTutorial = class("HunterStableTutorial", Class_TutorialBase);
function Class_HunterStableTutorial:OnBegin()
+ local count = C_StableInfo.GetNumStablePets();
+ if count > 0 then
+ self:Complete();
+ return;
+ end
+
Dispatcher:RegisterEvent("PET_STABLE_SHOW", self);
Dispatcher:RegisterEvent("PET_STABLE_CLOSED", self);
end
function Class_HunterStableTutorial:PET_STABLE_SHOW()
+ local count = C_StableInfo.GetNumStablePets();
+ if count > 0 then
+ self:Complete();
+ return;
+ end
self:ShowPointerTutorial(NPEV2_HUNTER_STABLE_PET, "LEFT", PetStableStabledPet5, 10, 0, nil, "LEFT");
end
function Class_HunterStableTutorial:PET_STABLE_CLOSED()
- self:HidePointerTutorials();
+ local count = C_StableInfo.GetNumStablePets();
+ if count > 0 then
+ self:Complete();
+ end
end
+function Class_HunterStableTutorial:OnComplete()
+ Dispatcher:UnregisterEvent("PET_STABLE_SHOW", self);
+ Dispatcher:UnregisterEvent("PET_STABLE_CLOSED", self);
+ self:HidePointerTutorials();
+end
-- ------------------------------------------------------------------------------------------------------------
-- Auto Spell Watcher
@@ -3327,7 +3355,8 @@ end
-- ------------------------------------------------------------------------------------------------------------
Class_MountAddedWatcher = class("MountAddedWatcher", Class_TutorialBase);
function Class_MountAddedWatcher:OnBegin()
- Tutorials.QueueSystem:QueueMountTutorial();
+ --Tutorials.QueueSystem:QueueMountTutorial();
+ self:StartTutorial();
end
function Class_MountAddedWatcher:StartTutorial()
@@ -3452,7 +3481,83 @@ function Class_MountTutorial:OnComplete()
Dispatcher:UnregisterEvent("ACTIONBAR_SLOT_CHANGED", self);
NPE_TutorialDragButton:Hide();
self:HidePointerTutorials();
- Tutorials.QueueSystem:TutorialFinished();
+
+ local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
+ if TutorialHelper:GetActionButtonBySpellID(mountData.mountID) then
+ Tutorials.UseMountWatcher:Begin();
+ else
+ Tutorials.QueueSystem:QueueMountTutorial();
+ Tutorials.QueueSystem:TutorialFinished();
+ end
+end
+
+
+Class_UseMountTutorialWatcher = class("UseMountWatcher", Class_TutorialBase);
+function Class_UseMountTutorialWatcher:OnBegin()
+ Dispatcher:RegisterEvent("ACTIONBAR_UPDATE_USABLE", self);
+ local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
+ self.mountID = mountData.mountID;
+ self:TryUseMount();
+end
+
+function Class_UseMountTutorialWatcher:TryUseMount()
+ local button = TutorialHelper:GetActionButtonBySpellID(self.mountID);
+ if button and IsUsableAction(button.action) then
+ Tutorials.UseMountTutorial:Begin();
+ else
+ self:HidePointerTutorials();
+ end
+end
+
+function Class_UseMountTutorialWatcher:ACTIONBAR_UPDATE_USABLE()
+ self:TryUseMount()
+end
+
+function Class_UseMountTutorialWatcher:OnComplete()
+ Dispatcher:UnregisterEvent("ACTIONBAR_UPDATE_USABLE", self);
+ self:HidePointerTutorials();
+end
+
+
+Class_UseMountTutorial = class("UseMountTutorial", Class_TutorialBase);
+function Class_UseMountTutorial:OnBegin()
+ if IsMounted() then
+ self:Complete();
+ return;
+ end
+
+ Dispatcher:RegisterEvent("ACTIONBAR_UPDATE_USABLE", self);
+ Dispatcher:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
+ local mountData = TutorialHelper:FilterByRace(TutorialHelper:GetFactionData().Mounts);
+ self.mountID = mountData.mountID;
+ self.mountSpellID = mountData.mountSpellID;
+
+ local button = TutorialHelper:GetActionButtonBySpellID(self.mountID);
+ if button and IsUsableAction(button.action) then
+ self:ShowPointerTutorial(NPEV2_MOUNT_TUTORIAL_P4, "DOWN", button, 0, 10, nil, "UP");
+ else
+ self:Complete();
+ end
+end
+
+function Class_UseMountTutorial:ACTIONBAR_UPDATE_USABLE()
+ local button = TutorialHelper:GetActionButtonBySpellID(self.mountID);
+ if not button or not IsUsableAction(button.action) then
+ self:Complete();
+ end
+end
+
+function Class_UseMountTutorial:UNIT_SPELLCAST_SUCCEEDED(caster, spelllineID, spellID)
+ if self.mountSpellID == spellID then
+ Tutorials.UseMountWatcher:Complete();
+ self:Complete();
+ end
+end
+
+function Class_UseMountTutorial:OnComplete()
+ Dispatcher:UnregisterEvent("ACTIONBAR_UPDATE_USABLE", self);
+ Dispatcher:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED", self);
+ self:HidePointerTutorials();
end
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.lua b/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.lua
index 6b890b12e25e783086517dc04444bc518f7d838e..b9bdb35e9cc3733793ca0ef55c0a1b17be8411fc 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.lua
+++ b/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.lua
@@ -82,7 +82,7 @@ do
end,
function()
- local achievements = { 7383, 13963, 14144, 14196, 14061 };
+ local achievements = C_PlayerMentorship.GetMentorOptionalAchievementIDs();
local achievementStrings = {};
local mustEarnAtLeast = 2;
local completedCount = 0;
@@ -102,6 +102,11 @@ do
return NPEV2_CHAT_GUIDE_FRAME_ACHIEVEMENT_COUNT_EARNED:format(mustEarnAtLeast, achievementStrings), completedCount >= mustEarnAtLeast;
end,
+ -- IsMentorRestricted backed by a combined state, check this first.
+ function()
+ return nil, not C_SocialRestrictions.IsMuted(), "muted";
+ end,
+
function()
return nil, not C_PlayerMentorship.IsMentorRestricted(), "standing";
end,
@@ -153,9 +158,9 @@ do
self.ScrollFrame.ConfirmationButton:ClearAllPoints();
if params.anchorButtonAfterText then
- self.ScrollFrame.ConfirmationButton:SetPoint("TOP", self.ScrollFrame.Child.Text, "BOTTOM", 0, -10);
+ self.ScrollFrame.ConfirmationButton:SetPoint("TOP", self.ScrollFrame.Child.Text, "BOTTOM", 0, -25);
else
- self.ScrollFrame.ConfirmationButton:SetPoint("BOTTOM", self.ScrollFrame, "BOTTOM", 0, 20);
+ self.ScrollFrame.ConfirmationButton:SetPoint("BOTTOM", self.ScrollFrame, "BOTTOM", 0, 26);
end
end
@@ -199,6 +204,8 @@ function GuideFrameMixin:SetStateCannotGuide(errorType)
message = NPEV2_CHAT_GUIDE_FRAME_ERROR_BAD_STANDING;
elseif errorType == "starter" then
message = NPEV2_CHAT_GUIDE_FRAME_ERROR_STARTER_ACCOUNTS_CANNOT_GUIDE;
+ elseif errorType == "muted" then
+ message = NPEV2_CHAT_GUIDE_FRAME_ERROR_ACCOUNT_MUTED;
end
self:SetDescription(message);
diff --git a/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.xml b/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.xml
index 0dd0ace2cc3a8892025f1ea6ddc313f02e06e9a0..664a52e6e26fb2b9fe81fe2338efddbf804bc130 100644
--- a/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.xml
+++ b/Interface/AddOns/Blizzard_NewPlayerExperienceGuide/GuideFrame.xml
@@ -14,9 +14,9 @@
-
+
-
+
@@ -35,7 +35,7 @@
-
+
@@ -51,7 +51,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_ObjectiveTracker/Blizzard_QuestSuperTracking.lua b/Interface/AddOns/Blizzard_ObjectiveTracker/Blizzard_QuestSuperTracking.lua
index 16bddb1ba5a13c6f3791218d396732af451a51e8..5352a7d7dd09927754cf7a5357b1b6f40ff509ff 100644
--- a/Interface/AddOns/Blizzard_ObjectiveTracker/Blizzard_QuestSuperTracking.lua
+++ b/Interface/AddOns/Blizzard_ObjectiveTracker/Blizzard_QuestSuperTracking.lua
@@ -24,7 +24,26 @@ function SuperTrackEventMixin:CacheCurrentSuperTrackInfo()
self.isComplete = nil;
if self.superTrackQuestID > 0 then
self.isComplete = C_QuestLog.ReadyForTurnIn(self.superTrackQuestID);
+ self.uiMapID, self.worldQuests, self.worldQuestsElite, self.dungeons, self.treasures = C_QuestLog.GetQuestAdditionalHighlights(self.superTrackQuestID);
end
+
+ EventRegistry:TriggerEvent("Supertracking.OnChanged");
+end
+
+function QuestSuperTracking_ShouldHighlightWorldQuests(uiMapID)
+ return SuperTrackEventFrame.uiMapID == uiMapID and SuperTrackEventFrame.worldQuests;
+end
+
+function QuestSuperTracking_ShouldHighlightWorldQuestsElite(uiMapID)
+ return SuperTrackEventFrame.uiMapID == uiMapID and SuperTrackEventFrame.worldQuestsElite;
+end
+
+function QuestSuperTracking_ShouldHighlightDungeons(uiMapID)
+ return SuperTrackEventFrame.uiMapID == uiMapID and SuperTrackEventFrame.dungeons;
+end
+
+function QuestSuperTracking_ShouldHighlightTreasures(uiMapID)
+ return SuperTrackEventFrame.uiMapID == uiMapID and SuperTrackEventFrame.treasures;
end
function QuestSuperTracking_Initialize()
diff --git a/Interface/AddOns/Blizzard_PVPMatch/PVPMatchResults.lua b/Interface/AddOns/Blizzard_PVPMatch/PVPMatchResults.lua
index 415da2471d831fb252d4ae8c862f47852ea810ec..38a4e740364f9f61f0ca80a566a36a832ec4e17b 100644
--- a/Interface/AddOns/Blizzard_PVPMatch/PVPMatchResults.lua
+++ b/Interface/AddOns/Blizzard_PVPMatch/PVPMatchResults.lua
@@ -387,24 +387,20 @@ function PVPMatchResultsMixin:AddItemReward(item)
frame:SetScale(.7931);
end
function PVPMatchResultsMixin:InitHonorFrame(currency)
- local deltaString = FormatValueWithSign(currency.quantityChanged);
+ local deltaString = FormatValueWithSign(math.floor(currency.quantityChanged));
self.honorText:SetText(PVP_HONOR_CHANGE:format(deltaString));
self.honorButton:Update();
self.honorFrame:Show();
end
function PVPMatchResultsMixin:InitConquestFrame(currency)
- local deltaString = FormatValueWithSign(currency.quantityChanged / 100);
+ local deltaString = FormatValueWithSign(math.floor(currency.quantityChanged / 100));
self.conquestText:SetText(PVP_CONQUEST_CHANGE:format(deltaString));
- if GetServerExpansionLevel() < LE_EXPANSION_SHADOWLANDS then
- local questID = select(3, PVPGetConquestLevelInfo());
- if questID and IsPlayerAtEffectiveMaxLevel() then
- self.conquestButton:LegacySetup(questID, nil);
- else
- self.conquestButton:Clear();
- end
+ local questID = select(3, PVPGetConquestLevelInfo());
+ if questID and IsPlayerAtEffectiveMaxLevel() then
+ self.conquestButton:LegacySetup(questID, nil);
else
- --
+ self.conquestButton:Clear();
end
self.conquestFrame:Show();
end
diff --git a/Interface/AddOns/Blizzard_PVPUI/Blizzard_PVPUI.lua b/Interface/AddOns/Blizzard_PVPUI/Blizzard_PVPUI.lua
index 89fa16cf83f03d6ccc4806e4d6e992bced64aaaf..d53429445f10587050d997fcd368768376c4e540 100644
--- a/Interface/AddOns/Blizzard_PVPUI/Blizzard_PVPUI.lua
+++ b/Interface/AddOns/Blizzard_PVPUI/Blizzard_PVPUI.lua
@@ -294,15 +294,25 @@ function PVPQueueFrame_OnLoad(self)
self.CategoryButton3.Name:SetText(PVP_TAB_GROUPS);
-- disable unusable side buttons
+ local disabledButtons = false;
if not C_PvP.CanPlayerUseRatedPVPUI() then
+ disabledButtons = true;
PVPQueueFrame_SetCategoryButtonState(self.CategoryButton2, false);
self.CategoryButton2.tooltip = format(PVP_CONQUEST_LOWLEVEL, PVP_TAB_CONQUEST, GetMaxLevelForLatestExpansion());
+ end
+
+ local canUse, failureReason = C_LFGInfo.CanPlayerUsePremadeGroup();
+ if not canUse then
+ disabledButtons = true;
+ PVPQueueFrame_SetCategoryButtonState(self.CategoryButton3, false);
+ self.CategoryButton3.tooltip = self.CategoryButton3.tooltip or failureReason;
+ end
+
+ if disabledButtons then
PVPQueueFrame:SetScript("OnEvent", PVPQueueFrame_OnEvent);
PVPQueueFrame:RegisterEvent("PLAYER_LEVEL_CHANGED");
end
- PVPQueueFrame_SetCategoryButtonState(self.CategoryButton3, true);
-
-- set up accessors
self.getSelection = PVPQueueFrame_GetSelection;
self.update = PVPQueueFrame_Update;
@@ -319,10 +329,18 @@ end
function PVPQueueFrame_OnEvent(self, event, ...)
if (event == "PLAYER_LEVEL_CHANGED") then
- if C_PvP.CanPlayerUseRatedPVPUI() then
+ local canUseRated = C_PvP.CanPlayerUseRatedPVPUI();
+ local canUsePremade = C_LFGInfo.CanPlayerUsePremadeGroup();
+ if canUseRated then
PVPQueueFrame_SetCategoryButtonState(self.CategoryButton2, true);
self.CategoryButton2.tooltip = nil;
- PVPQueueFrame:UnregisterEvent("PLAYER_LEVEL_CHANGED");
+ end
+ if canUsePremade then
+ self.CategoryButton3.tooltip = nil;
+ PVPQueueFrame_SetCategoryButtonState(self.CategoryButton3, true);
+ end
+ if canUseRated and canUsePremade then
+ self:UnregisterEvent("PLAYER_LEVEL_CHANGED");
end
elseif ( event == "UPDATE_BATTLEFIELD_STATUS" or event == "ZONE_CHANGED_NEW_AREA" or event == "ZONE_CHANGED") then
PVP_UpdateStatus();
@@ -948,13 +966,14 @@ function HonorFrameBonusFrame_Update()
-- brawls
local button = buttons[4];
local brawlInfo = C_PvP.GetAvailableBrawlInfo();
- button.canQueue = brawlInfo and brawlInfo.canQueue and PartyUtil.GetMinLevel() == GetMaxLevelForPlayerExpansion();
+ local expansionMaxLevel = GetMaxLevelForPlayerExpansion();
+ local meetsMaxLevel = PartyUtil.GetMinLevel() == expansionMaxLevel;
+ button.canQueue = brawlInfo and brawlInfo.canQueue and meetsMaxLevel;
+ HonorFrameBonusFrame_SetButtonState(button, button.canQueue, expansionMaxLevel);
button.isBrawl = true;
if (brawlInfo and brawlInfo.canQueue) then
- button:Enable();
button.Title:SetText(brawlInfo.name);
- button.Title:SetTextColor(HIGHLIGHT_FONT_COLOR:GetRGB());
PVPUIFrame_ConfigureRewardFrame(button.Reward, C_PvP.GetBrawlRewards(brawlInfo.brawlType));
button.Reward.EnlistmentBonus:SetShown(brawlEnlistmentActive);
@@ -965,9 +984,7 @@ function HonorFrameBonusFrame_Update()
else
button.Title:SetText(BRAWL_CLOSED_NEW:format(SecondsToTime(timeUntilNext, false, false, 1)));
end
- button.Title:SetTextColor(DISABLED_FONT_COLOR:GetRGB());
button.Reward:Hide();
- button:Disable();
end
HelpTip:Hide(button, BRAWL_TUTORIAL);
if ShouldShowBrawlHelpBox(brawlInfo and brawlInfo.canQueue, (IsPlayerAtEffectiveMaxLevel())) then
diff --git a/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.lua b/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.lua
index 9b71824c3ac17cbe3c5f3924625818c6a7f55b35..592fc7ec5c28fd9a97f33c7d112e9fa17c8f8cc3 100644
--- a/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.lua
+++ b/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.lua
@@ -53,6 +53,9 @@ StaticPopupDialogs["CONFIRM_PLAYER_CHOICE"] = {
button1 = OKAY,
button2 = CANCEL,
OnAccept = function(self)
+ if (self.data.confirmationSoundkit) then
+ PlaySound(self.data.confirmationSoundkit);
+ end
SendPlayerChoiceResponse(self.data.response);
HideUIPanel(self.data.owner);
end,
@@ -314,6 +317,9 @@ local choiceLayout = {
covenantPreviewId = 1,
secondButtonClickDoesntCloseUI = true,
enlargeBackgroundOnMouseOver = true,
+ mouseOverSoundKit = SOUNDKIT.UI_COVENANT_CHOICE_MOUSE_OVER_COVENANT,
+ confirmationOkSoundKit = SOUNDKIT.UI_COVENANT_CHOICE_CONFIRM_COVENANT,
+ exitButtonSoundKit = SOUNDKIT.UI_COVENANT_CHOICE_CLOSE,
},
}
@@ -418,7 +424,7 @@ function PlayerChoiceFrameMixin:OnShow()
local choiceInfo = C_PlayerChoice.GetPlayerChoiceInfo();
if(choiceInfo and choiceInfo.soundKitID) then
- PlaySound(choiceInfo.soundKitID);
+ PlaySound(choiceInfo.soundKitID, nil, SOUNDKIT_ALLOW_DUPLICATES);
else
PlaySound(SOUNDKIT.IG_QUEST_LIST_OPEN);
end
@@ -580,6 +586,13 @@ function PlayerChoiceFrameMixin:TryShow()
self:Update();
end
+function PlayerChoiceFrameMixin:CloseUIFromExitButton()
+ if(self.optionLayout.exitButtonSoundKit) then
+ PlaySound(self.optionLayout.exitButtonSoundKit);
+ end
+ HideUIPanel(self);
+end
+
local function IsTopWidget(widgetFrame)
return widgetFrame.widgetType == Enum.UIWidgetVisualizationType.SpellDisplay;
end
@@ -1106,8 +1119,12 @@ function PlayerChoiceOptionFrameMixin:OnEnterOverride()
self.OptionButtonsContainer:Show();
needsLayout = true;
end
+ local optionLayout = self:GetOptionLayoutInfo();
- if(self:GetOptionLayoutInfo().enlargeBackgroundOnMouseOver) then
+ if(optionLayout.mouseOverSoundKit) then
+ PlaySound(optionLayout.mouseOverSoundKit);
+ end
+ if(optionLayout.enlargeBackgroundOnMouseOver) then
self.BlackBackground:Show();
self.Background:Hide();
self.ScrollingBackgroundAnimIn:Play();
@@ -1443,16 +1460,16 @@ function PlayerChoiceOptionFrameMixin:OnButtonClick(button)
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
end
-
+ local optionLayout = self:GetParent().optionLayout;
if ( button.optID ) then
if ( IsInGroup() and (self.choiceID == GORGROND_GARRISON_ALLIANCE_CHOICE or self.choiceID == GORGROND_GARRISON_HORDE_CHOICE) ) then
StaticPopup_Show("CONFIRM_GORGROND_GARRISON_CHOICE", nil, nil, { response = button.optID, owner = self:GetParent() });
elseif ( button.confirmation ) then
- StaticPopup_Show("CONFIRM_PLAYER_CHOICE", button.confirmation, nil, { response = button.optID, owner = self:GetParent() });
+ local confirmationSoundKit = optionLayout.confirmationOkSoundKit;
+ StaticPopup_Show("CONFIRM_PLAYER_CHOICE", button.confirmation, nil, { response = button.optID, owner = self:GetParent(), confirmationSoundkit = confirmationSoundKit});
else
SendPlayerChoiceResponse(button.optID);
local choiceInfo = C_PlayerChoice.GetPlayerChoiceInfo();
- local optionLayout = self:GetParent().optionLayout;
local isSecondButton = button.buttonIndex == 2;
if (optionLayout.useArtworkGlowOnSelection) then
diff --git a/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.xml b/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.xml
index 6a0c659ce27e2fa118ebcebe5b680e35a6320555..521ee87b2118a894d7b3ac3c31056de97b503835 100644
--- a/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.xml
+++ b/Interface/AddOns/Blizzard_PlayerChoiceUI/Blizzard_PlayerChoiceUI.xml
@@ -556,8 +556,8 @@
-
-
+
+
@@ -730,6 +730,11 @@
+
+
+ self:GetParent():CloseUIFromExitButton();
+
+
diff --git a/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgeCraftingFrame.lua b/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgeCraftingFrame.lua
index 972fcb898ac1f75df4e109ff6236e0f6fcd24659..436bc00c793566ad783f8f839af2c2675cf07906 100644
--- a/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgeCraftingFrame.lua
+++ b/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgeCraftingFrame.lua
@@ -190,7 +190,7 @@ end
function RuneforgeCraftingFrameMixin:GetRuneforgeFlyoutItemsCallback(filterFunction, resultsTable)
local function ItemLocationCallback(itemLocation)
if filterFunction(itemLocation) then
- resultsTable[itemLocation] = C_Item.GetItemID(itemLocation);
+ resultsTable[itemLocation] = C_Item.GetItemLink(itemLocation);
end
end
diff --git a/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgePowerList.lua b/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgePowerList.lua
index e66a9be39a2dcc4f8d3412dbcb9f623bd2e87735..8322a8d3f017fcbbd0c8b3c52a325cbfd0fd3bc1 100644
--- a/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgePowerList.lua
+++ b/Interface/AddOns/Blizzard_RuneforgeUI/Blizzard_RuneforgePowerList.lua
@@ -1,12 +1,8 @@
-RuneforgePowerButtonMixin = {};
-
-function RuneforgePowerButtonMixin:SetPowerID(powerID)
- self.powerID = powerID;
- self.slotNames = nil;
+RuneforgePowerButtonMixin = CreateFromMixins(RuneforgePowerBaseMixin);
+function RuneforgePowerButtonMixin:OnPowerSet(oldPowerID, powerID)
local hasPowerID = powerID ~= nil;
- self.powerInfo = hasPowerID and C_LegendaryCrafting.GetRuneforgePowerInfo(powerID) or nil;
self.Icon:SetShown(hasPowerID);
if hasPowerID then
self.Icon:SetTexture(self.powerInfo and self.powerInfo.iconFileID or QUESTION_MARK_ICON);
@@ -16,69 +12,16 @@ function RuneforgePowerButtonMixin:SetPowerID(powerID)
self.Icon:SetDesaturated(not isAvailable);
self.Icon:SetAlpha(isActive and 1.0 or 0.5);
self:SetEnabled(isActive);
-
- self:RegisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
- else
- self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
- end
-end
-
-function RuneforgePowerButtonMixin:GetPowerID()
- return self.powerID;
-end
-
-function RuneforgePowerButtonMixin:OnHide()
- self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
-end
-
-function RuneforgePowerButtonMixin:OnEvent(event, ...)
- if event == "RUNEFORGE_POWER_INFO_UPDATED" then
- local powerID = ...;
- if powerID == self:GetPowerID() then
- self:SetPowerID(powerID);
-
- if self:IsMouseOver() then
- self:OnEnter();
- end
- end
end
end
function RuneforgePowerButtonMixin:OnEnter()
- if self.powerInfo then
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT", self.tooltipOffsetX or 0, self.tooltipOffsetY or 0);
-
- GameTooltip_SetTitle(GameTooltip, self.powerInfo.name);
-
- GameTooltip_AddColoredLine(GameTooltip, self.powerInfo.description, GREEN_FONT_COLOR);
-
- if not self.slotNames then
- self.slotNames = C_LegendaryCrafting.GetRuneforgePowerSlots(self:GetPowerID());
- end
-
- if #self.slotNames > 0 then
- GameTooltip_AddBlankLineToTooltip(GameTooltip);
- GameTooltip_AddHighlightLine(GameTooltip, RUNEFORGE_LEGENDARY_POWER_TOOLTIP_SLOT_HEADER);
- GameTooltip_AddNormalLine(GameTooltip, table.concat(self.slotNames, LIST_DELIMITER));
- end
-
- if (self.powerInfo.state == Enum.RuneforgePowerState.Unavailable) and self.powerInfo.source then
- GameTooltip_AddBlankLineToTooltip(GameTooltip);
- GameTooltip_AddErrorLine(GameTooltip, self.powerInfo.source);
- end
-
- GameTooltip:Show();
+ local powerInfo = self:GetPowerInfo();
+ if powerInfo ~= nil then
+ RuneforgePowerBaseMixin.OnEnter(self);
end
end
-function RuneforgePowerButtonMixin:OnLeave()
- GameTooltip_Hide();
-end
-
-function RuneforgePowerButtonMixin:OnHide()
- self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
-end
-
RuneforgePowerSlotMixin = CreateFromMixins(RuneforgeSystemMixin);
@@ -136,13 +79,12 @@ function RuneforgePowerSlotMixin:UpdateState()
self:SetEffectShown("chains2", showEffects);
end
-function RuneforgePowerSlotMixin:SetPowerID(powerID)
- local oldPowerID = self:GetPowerID();
+function RuneforgePowerSlotMixin:OnPowerSet(oldPowerID, powerID)
if oldPowerID == powerID then
return;
end
- RuneforgePowerButtonMixin.SetPowerID(self, powerID);
+ RuneforgePowerButtonMixin.OnPowerSet(self, oldPowerID, powerID);
local runeforgeFrame = self:GetRuneforgeFrame();
runeforgeFrame:TriggerEvent(RuneforgeFrameMixin.Event.PowerSelected, powerID);
@@ -175,6 +117,10 @@ function RuneforgePowerSlotMixin:OnBaseItemChanged()
end
end
+function RuneforgePowerSlotMixin:ShouldHideSource()
+ return self:GetPowerInfo().state == Enum.RuneforgePowerState.Available;
+end
+
RuneforgePowerMixin = {};
@@ -199,6 +145,10 @@ function RuneforgePowerMixin:UpdateDisplay()
self:SetAlpha(self:IsEnabled() and 1.0 or 0.5);
end
+function RuneforgePowerMixin:ShouldHideSource()
+ return self:GetPowerInfo().state == Enum.RuneforgePowerState.Available;
+end
+
RuneforgePowerListMixin = {};
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/AreaPOIDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/AreaPOIDataProvider.lua
index 93043d88d06756477ce99ee7404902f6a9f29f31..bb6e477b2a0baaa0cd1e83610746c2118b9780f6 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/AreaPOIDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/AreaPOIDataProvider.lua
@@ -84,6 +84,12 @@ function AreaPOIPinMixin:TryShowTooltip()
GameTooltip_AddWidgetSet(GameTooltip, self.widgetSetID);
end
+ if (self.textureKit) then
+ local backdropStyle = GAME_TOOLTIP_TEXTUREKIT_BACKDROP_STYLES[self.textureKit];
+ if (backdropStyle) then
+ SharedTooltip_SetBackdropStyle(GameTooltip, backdropStyle);
+ end
+ end
GameTooltip:Show();
return true;
end
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/DungeonEntranceDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/DungeonEntranceDataProvider.lua
index d3f824ddee84c69d184e55ba5e12ee629ba4a7fe..6f2e83e4f8b3ba200c886fddfbc6815b1d5810bf 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/DungeonEntranceDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/DungeonEntranceDataProvider.lua
@@ -1,13 +1,28 @@
DungeonEntranceDataProviderMixin = CreateFromMixins(CVarMapCanvasDataProviderMixin);
DungeonEntranceDataProviderMixin:Init("showDungeonEntrancesOnMap", "SHOW_DUNGEON_ENTRANCES");
+function DungeonEntranceDataProviderMixin:OnShow()
+ EventRegistry:RegisterCallback("Supertracking.OnChanged", self.OnSuperTrackingChanged, self);
+end
+
+function DungeonEntranceDataProviderMixin:OnHide()
+ EventRegistry:UnregisterCallback("Supertracking.OnChanged", self);
+end
+
+
+function DungeonEntranceDataProviderMixin:OnSuperTrackingChanged()
+ for pin in self:GetMap():EnumeratePinsByTemplate("DungeonEntrancePinTemplate") do
+ pin:UpdateSupertrackedHighlight();
+ end
+end
+
function DungeonEntranceDataProviderMixin:RemoveAllData()
self:GetMap():RemoveAllPinsByTemplate("DungeonEntrancePinTemplate");
end
function DungeonEntranceDataProviderMixin:RefreshAllData(fromOnShow)
self:RemoveAllData();
-
+
if not self:IsCVarSet() then
return;
end
@@ -15,7 +30,8 @@ function DungeonEntranceDataProviderMixin:RefreshAllData(fromOnShow)
local mapID = self:GetMap():GetMapID();
local dungeonEntrances = C_EncounterJournal.GetDungeonEntrancesForMap(mapID);
for i, dungeonEntranceInfo in ipairs(dungeonEntrances) do
- self:GetMap():AcquirePin("DungeonEntrancePinTemplate", dungeonEntranceInfo);
+ local pin = self:GetMap():AcquirePin("DungeonEntrancePinTemplate", dungeonEntranceInfo);
+ pin:UpdateSupertrackedHighlight();
end
end
@@ -32,3 +48,8 @@ function DungeonEntrancePinMixin:OnMouseClickAction()
EncounterJournal_LoadUI();
EncounterJournal_OpenJournal(nil, self.journalInstanceID);
end
+
+function DungeonEntrancePinMixin:UpdateSupertrackedHighlight()
+ local highlight = QuestSuperTracking_ShouldHighlightDungeons(self:GetMap():GetMapID());
+ MapPinSupertrackHighlight_CheckHighlightPin(highlight, self, self.Texture);
+end
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.lua
index e0bb63cc5549822b2221d0216ad2c75e4f5eab88..3e5f7c7b1429663c9bc330f40fe4518d43edb782 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.lua
@@ -20,7 +20,7 @@ function BaseMapPoiPinMixin:SetTexture(poiInfo)
if poiInfo.textureKit then
atlasName = ATLAS_WITH_TEXTURE_KIT_PREFIX:format(poiInfo.textureKit, atlasName);
end
-
+
self.Texture:SetAtlas(atlasName, true);
if self.HighlightTexture then
self.HighlightTexture:SetAtlas(atlasName, true);
@@ -31,7 +31,7 @@ function BaseMapPoiPinMixin:SetTexture(poiInfo)
self.HighlightTexture:SetSize(sizeX, sizeY);
end
self:SetSize(sizeX, sizeY);
-
+
self.Texture:SetTexCoord(0, 1, 0, 1);
if self.HighlightTexture then
self.HighlightTexture:SetTexCoord(0, 1, 0, 1);
@@ -44,7 +44,7 @@ function BaseMapPoiPinMixin:SetTexture(poiInfo)
if self.HighlightTexture then
self.HighlightTexture:SetTexture("Interface/Minimap/POIIcons");
end
-
+
local x1, x2, y1, y2 = GetPOITextureCoords(poiInfo.textureIndex);
self.Texture:SetTexCoord(x1, x2, y1, y2);
if self.HighlightTexture then
@@ -59,6 +59,7 @@ function BaseMapPoiPinMixin:OnAcquired(poiInfo)
self.name = poiInfo.name;
self.description = poiInfo.description;
self.widgetSetID = poiInfo.widgetSetID;
+ self.textureKit = poiInfo.uiTextureKit;
self:SetPosition(poiInfo.position:GetXY());
end
@@ -71,4 +72,48 @@ end
function BaseMapPoiPinMixin:OnMouseLeave()
self:GetMap():TriggerEvent("ClearAreaLabel", MAP_AREA_LABEL_TYPE.POI);
+end
+
+MapPinSupertrackHighlightMixin = {};
+
+function MapPinSupertrackHighlightMixin:SetHighlightShown(shown, texture)
+ self:SetShown(shown);
+ self.BackHighlight:SetShown(shown);
+ self.TopHighlight:SetShown(shown);
+
+ if shown then
+ local w, h = texture:GetSize();
+ self.Expand:SetSize(w, h);
+ self.BackHighlight:SetSize(w + 10, h + 10);
+ self.TopHighlight:SetSize(w + 10, h + 10);
+
+ local atlas = texture:GetAtlas();
+ if atlas then
+ self.Expand:SetTexCoord(0, 1, 0, 1);
+ self.Expand:SetAtlas(atlas, TextureKitConstants.IgnoreAtlasSize);
+ else
+ self.Expand:SetTexture(texture:GetTexture());
+ self.Expand:SetTexCoord(texture:GetTexCoord());
+ end
+
+ self.ExpandAndFade:Play();
+ end
+end
+
+function MapPinSupertrackHighlight_CheckHighlightPin(highlight, parentPin, regionToHighlight)
+ if highlight and not parentPin.SupertrackedHighlight then
+ local frame = CreateFrame("Frame", nil, parentPin, "MapPinSupertrackHighlightTemplate");
+ parentPin.SupertrackedHighlight = frame;
+ frame:SetPoint("CENTER");
+
+ frame.BackHighlight:SetParent(parentPin)
+ frame.BackHighlight:SetDrawLayer("BACKGROUND", -8);
+
+ frame.TopHighlight:SetParent(parentPin)
+ frame.TopHighlight:SetDrawLayer("OVERLAY", 7);
+ end
+
+ if parentPin.SupertrackedHighlight then
+ parentPin.SupertrackedHighlight:SetHighlightShown(highlight, regionToHighlight);
+ end
end
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.xml b/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.xml
index b510c2bce51dab23eb573f68f6db9f0f51ea2559..869ee79082ed3173750c2744e64489ce3a21ab71 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.xml
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/SharedMapPoiTemplates.xml
@@ -29,4 +29,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/VehicleDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/VehicleDataProvider.lua
index b995cf0297e5e09790cae15ac2bbaf174941a562..627aa747a5b64cc9fa741ff767d7788798faa24d 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/VehicleDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/VehicleDataProvider.lua
@@ -31,7 +31,7 @@ function VehicleDataProviderMixin:RefreshAllData(fromOnShow)
local numVehicles = GetNumBattlefieldVehicles();
for i = 1, numVehicles do
local vehicleInfo = C_PvP.GetBattlefieldVehicleInfo(i, mapID);
- if vehicleInfo.x and vehicleInfo.isAlive and not vehicleInfo.isPlayer and vehicleInfo.atlas then
+ if vehicleInfo and vehicleInfo.x and vehicleInfo.isAlive and not vehicleInfo.isPlayer and vehicleInfo.atlas then
self:GetMap():AcquirePin("VehiclePinTemplate", i);
end
end
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/VignetteDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/VignetteDataProvider.lua
index e31afdfdbce3e3d1c91fa8f0f8de537ae60b83e7..82559ac65c1bef07af2e42c2a54879ab6fed7294 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/VignetteDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/VignetteDataProvider.lua
@@ -12,11 +12,13 @@ end
function VignetteDataProviderMixin:OnShow()
self:RegisterEvent("VIGNETTES_UPDATED");
+ EventRegistry:RegisterCallback("Supertracking.OnChanged", self.OnSuperTrackingChanged, self);
self.ticker = C_Timer.NewTicker(0, function() self:UpdatePinPositions() end);
end
function VignetteDataProviderMixin:OnHide()
self:UnregisterEvent("VIGNETTES_UPDATED");
+ EventRegistry:UnregisterCallback("Supertracking.OnChanged", self);
if self.ticker then
self.ticker:Cancel();
self.ticker = nil;
@@ -41,6 +43,12 @@ function VignetteDataProviderMixin:InitializeAllTrackingTables()
end
function VignetteDataProviderMixin:RefreshAllData(fromOnShow)
+ local mapInfo = C_Map.GetMapInfo(self:GetMap():GetMapID());
+ if FlagsUtil.IsSet(mapInfo.flags, Enum.UIMapFlag.HideVignettes) then
+ self:RemoveAllData();
+ return;
+ end
+
local pinsToRemove = {};
for vignetteGUID, pin in pairs(self.vignetteGuidsToPins) do
pinsToRemove[vignetteGUID] = pin;
@@ -57,6 +65,7 @@ function VignetteDataProviderMixin:RefreshAllData(fromOnShow)
existingPin:UpdateFogOfWar(vignetteInfo);
else
local pin = self:GetMap():AcquirePin(pinTemplate, vignetteGUID, vignetteInfo, self:GetMap():GetNumActivePinsByTemplate(pinTemplate));
+ pin.dataProvider = self;
self.vignetteGuidsToPins[vignetteGUID] = pin;
if pin:IsUnique() then
self:AddUniquePin(pin);
@@ -74,6 +83,13 @@ function VignetteDataProviderMixin:RefreshAllData(fromOnShow)
end
end
+function VignetteDataProviderMixin:OnSuperTrackingChanged()
+ local template = self:GetPinTemplate();
+ for pin in self:GetMap():EnumeratePinsByTemplate(template) do
+ pin:UpdateSupertrackedHighlight();
+ end
+end
+
function VignetteDataProviderMixin:OnMapChanged()
self:RefreshAllData();
end
@@ -156,6 +172,7 @@ function VignettePinMixin:OnAcquired(vignetteGUID, vignetteInfo, frameLevelCount
self.ShowAnim:Play();
self:UpdatePosition();
+ self:UpdateSupertrackedHighlight();
self:UseFrameLevelType("PIN_FRAME_LEVEL_VIGNETTE", frameLevelCount);
end
@@ -214,6 +231,11 @@ function VignettePinMixin:UpdatePosition(bestUniqueVignette)
end
end
+function VignettePinMixin:UpdateSupertrackedHighlight()
+ local highlight = (self:GetVignetteType() == Enum.VignetteType.Treasure) and QuestSuperTracking_ShouldHighlightTreasures(self:GetMap():GetMapID());
+ MapPinSupertrackHighlight_CheckHighlightPin(highlight, self, self.Texture);
+end
+
function VignettePinMixin:OnMouseEnter()
if self.hasTooltip then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/WaypointLocationDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/WaypointLocationDataProvider.lua
index 222ca6396de2bb923747fadb360955a18ba0383e..2cf960c9301d21a6a3c7d76640fb0fcc12639af6 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/WaypointLocationDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/WaypointLocationDataProvider.lua
@@ -81,16 +81,21 @@ function WaypointLocationDataProviderMixin:HandleClick()
C_SuperTrack.SetSuperTrackedUserWaypoint(false);
PlaySound(SOUNDKIT.UI_MAP_WAYPOINT_REMOVE);
else
- if self.toggleActive then
- PlaySound(SOUNDKIT.UI_MAP_WAYPOINT_CLICK_TO_PLACE);
+ local mapID = self:GetMap():GetMapID();
+ if C_Map.CanSetUserWaypointOnMap(mapID) then
+ if self.toggleActive then
+ PlaySound(SOUNDKIT.UI_MAP_WAYPOINT_CLICK_TO_PLACE);
+ else
+ PlaySound(SOUNDKIT.UI_MAP_WAYPOINT_CONTROL_CLICK);
+ end
+ local scrollContainer = self:GetMap().ScrollContainer;
+ local cursorX, cursorY = scrollContainer:NormalizeUIPosition(scrollContainer:GetCursorPosition());
+ local uiMapPoint = UiMapPoint.CreateFromCoordinates(mapID, cursorX, cursorY);
+ C_Map.SetUserWaypoint(uiMapPoint);
+ C_SuperTrack.SetSuperTrackedUserWaypoint(false);
else
- PlaySound(SOUNDKIT.UI_MAP_WAYPOINT_CONTROL_CLICK);
+ UIErrorsFrame:AddMessage(ERR_CLIENT_LOCKED_OUT, RED_FONT_COLOR:GetRGBA());
end
- local scrollContainer = self:GetMap().ScrollContainer;
- local cursorX, cursorY = scrollContainer:NormalizeUIPosition(scrollContainer:GetCursorPosition());
- local uiMapPoint = UiMapPoint.CreateFromCoordinates(self:GetMap():GetMapID(), cursorX, cursorY);
- C_Map.SetUserWaypoint(uiMapPoint);
- C_SuperTrack.SetSuperTrackedUserWaypoint(false);
end
end
diff --git a/Interface/AddOns/Blizzard_SharedMapDataProviders/WorldQuestDataProvider.lua b/Interface/AddOns/Blizzard_SharedMapDataProviders/WorldQuestDataProvider.lua
index 1be5dd0622806bb9e73adce5ccb177bcf5725413..a638f9053af10e1854acbb095a1f996e76e0ca30 100644
--- a/Interface/AddOns/Blizzard_SharedMapDataProviders/WorldQuestDataProvider.lua
+++ b/Interface/AddOns/Blizzard_SharedMapDataProviders/WorldQuestDataProvider.lua
@@ -178,12 +178,14 @@ function WorldQuestDataProviderMixin:OnShow()
assert(self.ticker == nil);
self.ticker = C_Timer.NewTicker(0.5, function() self:RefreshAllData() end);
self:RegisterEvent("QUEST_LOG_UPDATE");
+ EventRegistry:RegisterCallback("Supertracking.OnChanged", self.OnSuperTrackingChanged, self);
end
function WorldQuestDataProviderMixin:OnHide()
self.ticker:Cancel();
self.ticker = nil;
self:UnregisterEvent("QUEST_LOG_UPDATE");
+ EventRegistry:UnregisterCallback("Supertracking.OnChanged", self);
end
function WorldQuestDataProviderMixin:DoesWorldQuestInfoPassFilters(info)
@@ -250,8 +252,38 @@ function WorldQuestDataProviderMixin:RefreshAllData(fromOnShow)
mapCanvas:TriggerEvent("WorldQuestsUpdate", mapCanvas:GetNumActivePinsByTemplate(self:GetPinTemplate()));
end
+function WorldQuestDataProviderMixin:OnSuperTrackingChanged()
+ local template = self:GetPinTemplate();
+ for pin in self:GetMap():EnumeratePinsByTemplate(template) do
+ pin:UpdateSupertrackedHighlight();
+ end
+end
+
function WorldQuestDataProviderMixin:ShouldShowQuest(info)
- return not self.focusedQuestID and not self:IsQuestSuppressed(info.questId);
+ if self:IsQuestSuppressed(info.questId) then
+ return false;
+ end
+
+ if self.focusedQuestID then
+ return C_QuestLog.IsQuestCalling(self.focusedQuestID) and self:ShouldHighlightInfo(info.questId);
+ end
+
+ return true;
+end
+
+function WorldQuestDataProviderMixin:ShouldHighlightInfo(questID, tagInfo)
+ local mapID = self:GetMap():GetMapID();
+ if QuestSuperTracking_ShouldHighlightWorldQuests(mapID) then
+ return true;
+ end
+
+ -- Avoid querying tag info if we don't have to.
+ if not QuestSuperTracking_ShouldHighlightWorldQuestsElite(mapID) then
+ return false;
+ end
+
+ tagInfo = tagInfo or C_QuestLog.GetQuestTagInfo(questID);
+ return tagInfo.quality == Enum.WorldQuestQuality.Rare and tagInfo.isElite;
end
function WorldQuestDataProviderMixin:GetPinTemplate()
@@ -283,7 +315,8 @@ function WorldQuestDataProviderMixin:AddWorldQuest(info)
pin:UseFrameLevelType("PIN_FRAME_LEVEL_WORLD_QUEST", self:GetMap():GetNumActivePinsByTemplate(self:GetPinTemplate()));
local tagInfo = C_QuestLog.GetQuestTagInfo(pin.questID);
- pin.worldQuestType = tagInfo and tagInfo.worldQuestType;
+ pin.tagInfo = tagInfo;
+ pin.worldQuestType = tagInfo.worldQuestType;
if tagInfo.quality ~= Enum.WorldQuestQuality.Common then
pin.Background:SetTexCoord(0, 1, 0, 1);
@@ -365,6 +398,7 @@ end
function WorldQuestPinMixin:RefreshVisuals()
local tagInfo = C_QuestLog.GetQuestTagInfo(self.questID);
+ self.tagInfo = tagInfo;
local selected = self.questID == C_SuperTrack.GetSuperTrackedQuestID();
self.Glow:SetShown(selected);
self.SelectedGlow:SetShown(tagInfo.quality ~= Enum.WorldQuestQuality.Common and selected);
@@ -380,7 +414,8 @@ function WorldQuestPinMixin:RefreshVisuals()
end
local bountyQuestID = self.dataProvider:GetBountyQuestID();
- self.BountyRing:SetShown(bountyQuestID and C_QuestLog.IsQuestCriteriaForBounty(self.questID, bountyQuestID));
+ self.bountyRingShownBecauseOfBountyQuest = bountyQuestID and C_QuestLog.IsQuestCriteriaForBounty(self.questID, bountyQuestID);
+ self:UpdateSupertrackedHighlight();
local inProgress = self.dataProvider:IsMarkingActiveQuests() and C_QuestLog.IsOnQuest(self.questID);
local atlas, width, height = QuestUtil.GetWorldQuestAtlasInfo(self.worldQuestType, inProgress, tagInfo.tradeskillLineID);
@@ -392,6 +427,15 @@ function WorldQuestPinMixin:RefreshVisuals()
end
end
+function WorldQuestPinMixin:UpdateSupertrackedHighlight()
+ if self.bountyRingShownBecauseOfBountyQuest then
+ self.BountyRing:Show();
+ else
+ local highlight = self.dataProvider:ShouldHighlightInfo(self.questID, self.tagInfo);
+ MapPinSupertrackHighlight_CheckHighlightPin(highlight, self, self.Background);
+ end
+end
+
function WorldQuestPinMixin:OnMouseEnter()
TaskPOI_OnEnter(self);
end
diff --git a/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsSelectButton.lua b/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsSelectButton.lua
index 1c86dd08694341d8754665ac8d2855fd9b908b7c..b9fa551ed1722becf951cd08848c086995777d13 100644
--- a/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsSelectButton.lua
+++ b/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsSelectButton.lua
@@ -58,6 +58,7 @@ function SoulbindsSelectButtonMixin:Reset()
self:SetSoulbind(nil);
self.ModelScene.Active:Hide();
self.ModelScene.Selected:Hide();
+ self.inTutorial = false;
self:SetHighlightUnselected();
self:GetFxModelScene():ClearEffects();
self.deferredFx = nil;
@@ -139,6 +140,13 @@ function SoulbindsSelectButtonMixin:OnSelected(newSelected)
self:SetHighlightSelected();
else
self:SetHighlightUnselected();
+
+ if self.inTutorial then
+ self.ModelScene.Dark:SetAlpha(.5);
+ self.ModelScene.Dark.Pulse:Stop();
+ self.ModelScene:SetDesaturation(.8);
+ self.inTutorial = false;
+ end
end
self.ModelScene.Selected:SetShown(newSelected);
@@ -162,6 +170,7 @@ function SoulbindsSelectButtonMixin:SetActivated(activated)
end
if self:ShouldShowTutorial() then
+ self.inTutorial = true;
self.ModelScene.Dark:SetAlpha(0);
self.ModelScene.Dark.Pulse:Play();
self.ModelScene:SetDesaturation(0);
diff --git a/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsViewer.lua b/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsViewer.lua
index 5735b811f134afcb617a14f0855a274c982fd067..61b8b6c219cace45194e77b425382ac9c00cd09b 100644
--- a/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsViewer.lua
+++ b/Interface/AddOns/Blizzard_Soulbinds/Blizzard_SoulbindsViewer.lua
@@ -242,12 +242,8 @@ function SoulbindViewerMixin:UpdateActivateSoulbindButton()
self.ActivateSoulbindButton:SetEnabled(enabled);
- if Soulbinds.HasNewSoulbindTutorial(self.soulbindData.ID) then
- local showTutorial = enabled and self.Tree:HasSelectedNodes() and not GetCVarBitfield("soulbindsActivatedTutorial", self.soulbindData.cvarIndex);
- GlowEmitterFactory:SetShown(self.ActivateSoulbindButton, showTutorial, GlowEmitterMixin.Anims.FadeAnim);
- else
- GlowEmitterFactory:Hide(self.ActivateSoulbindButton);
- end
+ local showTutorial = enabled and self.Tree:HasSelectedNodes() and not GetCVarBitfield("soulbindsActivatedTutorial", self.soulbindData.cvarIndex);
+ GlowEmitterFactory:SetShown(self.ActivateSoulbindButton, showTutorial, GlowEmitterMixin.Anims.FadeAnim);
end
function SoulbindViewerMixin:UpdateCommitConduitsButton()
diff --git a/Interface/AddOns/Blizzard_StoreUI/Blizzard_StoreUISecure.lua b/Interface/AddOns/Blizzard_StoreUI/Blizzard_StoreUISecure.lua
index d503bd0e353931845acde1e7698d05ae1cca9bd7..c4d47a581b5ce296bda24570e78b3b18686c7b3d 100644
--- a/Interface/AddOns/Blizzard_StoreUI/Blizzard_StoreUISecure.lua
+++ b/Interface/AddOns/Blizzard_StoreUI/Blizzard_StoreUISecure.lua
@@ -2313,6 +2313,8 @@ function StoreFrame_OnShow(self)
StoreFrame_UpdateCoverState();
PlaySound(SOUNDKIT.UI_IG_STORE_WINDOW_OPEN_BUTTON);
+
+ C_StoreSecure.ClearPreGeneratedExternalTransactionID();
end
function StoreFrame_OnHide(self)
@@ -2329,6 +2331,8 @@ function StoreFrame_OnHide(self)
StoreVASValidationFrame:Hide();
SimpleCheckout:Hide();
PlaySound(SOUNDKIT.UI_IG_STORE_WINDOW_CLOSE_BUTTON);
+
+ C_StoreSecure.ClearPreGeneratedExternalTransactionID();
end
function StoreFrame_OnMouseWheel(self, value)
@@ -2511,7 +2515,7 @@ function StoreFrame_OnAttributeChanged(self, name, value)
SetStoreCategoryFromAttribute(WOW_GAME_TIME_CATEGORY_ID);
else
PlaySound(SOUNDKIT.GS_LOGIN_NEW_ACCOUNT);
- LoadURLIndex(2);
+ LoadURLIndex(22);
end
elseif ( name == "setservicescategory" ) then
SetStoreCategoryFromAttribute(WOW_SERVICES_CATEGORY_ID);
diff --git a/Interface/AddOns/Blizzard_SubscriptionInterstitialUI/Blizzard_SubscriptionInterstitialUI.lua b/Interface/AddOns/Blizzard_SubscriptionInterstitialUI/Blizzard_SubscriptionInterstitialUI.lua
index 47aa2d3fcd7000b8c13feee0f2338f25e66e4897..eb229514a03272334e285f9041ff5750013fb5ca 100644
--- a/Interface/AddOns/Blizzard_SubscriptionInterstitialUI/Blizzard_SubscriptionInterstitialUI.lua
+++ b/Interface/AddOns/Blizzard_SubscriptionInterstitialUI/Blizzard_SubscriptionInterstitialUI.lua
@@ -25,7 +25,7 @@ function SubscriptionInterstitialSubscribeButtonMixin:OnClick()
StoreFrame_SelectGameTimeProduct();
ToggleStoreUI();
else
- LoadURLIndex(2);
+ LoadURLIndex(22);
end
self.wasClicked = true;
diff --git a/Interface/AddOns/Blizzard_TorghastLevelPicker/Blizzard_TorghastLevelPicker.lua b/Interface/AddOns/Blizzard_TorghastLevelPicker/Blizzard_TorghastLevelPicker.lua
index d4035b8372b992ff35951be87c983194afaa0acc..a58c03965f0b9c9b737e46daa6a968b088afaed4 100644
--- a/Interface/AddOns/Blizzard_TorghastLevelPicker/Blizzard_TorghastLevelPicker.lua
+++ b/Interface/AddOns/Blizzard_TorghastLevelPicker/Blizzard_TorghastLevelPicker.lua
@@ -21,11 +21,7 @@ end
function TorghastLevelPickerFrameMixin:OnShow()
self:RegisterEvent("PARTY_LEADER_CHANGED");
- PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_OPEN_UI);
-end
-
-function TorghastLevelPickerFrameMixin:OnHide()
- self:UnregisterEvent("PARTY_LEADER_CHANGED");
+ PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_OPEN_UI, nil, SOUNDKIT_ALLOW_DUPLICATES);
end
function TorghastLevelPickerFrameMixin:CancelEffects()
@@ -35,11 +31,16 @@ function TorghastLevelPickerFrameMixin:CancelEffects()
end
end
-function TorghastLevelPickerFrameMixin:UpdatePortalButtonState()
+function TorghastLevelPickerFrameMixin:UpdatePortalButtonState(startingIndex)
local inParty = UnitInParty("player");
self.isPartyLeader = not inParty or UnitIsGroupLeader("player");
+ local enabled = true;
+
+ if (startingIndex and self.currentSelectedButtonIndex) then
+ enabled = startingIndex <= self.currentSelectedButtonIndex;
+ end
- self.OpenPortalButton:SetEnabled(self.isPartyLeader and self.currentSelectedButton)
+ self.OpenPortalButton:SetEnabled(self.isPartyLeader and self.currentSelectedButton and enabled)
end
function TorghastLevelPickerFrameMixin:TryShow(textureKit)
@@ -58,10 +59,9 @@ function TorghastLevelPickerFrameMixin:TryShow(textureKit)
end
function TorghastLevelPickerFrameMixin:OnHide()
- if(self.currentSelectedButton) then
- self.currentSelectedButton:ClearSelection();
- end
- self.currentSelectedButton = nil;
+ self:UnregisterEvent("PARTY_LEADER_CHANGED");
+ self:ClearLevelSelection();
+
self.textureKit = nil;
EmbeddedItemTooltip:Hide();
self:CancelEffects();
@@ -90,15 +90,28 @@ function TorghastLevelPickerFrameMixin:GetCurrentPage()
return self.Pager.currentPage;
end
+function TorghastLevelPickerFrameMixin:ClearLevelSelection()
+ if (self.currentSelectedButton) then
+ self.currentSelectedButton:ClearSelection();
+ self.currentSelectedButton = nil;
+ self.currentSelectedButtonIndex = nil;
+ end
+ self:UpdatePortalButtonState();
+end
+
function TorghastLevelPickerFrameMixin:SelectLevel(selectedLevelButton)
- if(self.currentSelectedButton == selectedLevelButton) then
+ if(self.currentSelectedButton == selectedLevelButton and self.currentSelectedButtonIndex == selectedLevelButton.index) then
self.currentSelectedButton:ClearSelection();
self.currentSelectedButton = nil;
+ self.currentSelectedButtonIndex = nil;
else
+ if (self.currentSelectedButton) then
+ self.currentSelectedButton:ClearSelection();
+ end
self.currentSelectedButton = selectedLevelButton;
+ self.currentSelectedButtonIndex = self.currentSelectedButton.index;
end
self:UpdatePortalButtonState();
-
end
function TorghastLevelPickerFrameMixin:SetupBackground()
@@ -142,7 +155,10 @@ function TorghastLevelPickerOptionButtonMixin:SetState(status)
self.RewardBanner.Reward:Init()
self.Background:SetDesaturated(lockedState);
self.Icon:SetDesaturated(lockedState);
-
+ local parent = self:GetParent():GetParent();
+ local isChecked = (self == parent.currentSelectedButton) and (self.index == parent.currentSelectedButtonIndex);
+ self:SetChecked(isChecked);
+ self.SelectedBorder:SetShown(self:GetChecked());
local fontColor = HIGHLIGHT_FONT_COLOR;
if(lockedState) then
fontColor = LIGHTGRAY_FONT_COLOR;
@@ -152,11 +168,12 @@ function TorghastLevelPickerOptionButtonMixin:SetState(status)
end
function TorghastLevelPickerOptionButtonMixin:ClearSelection()
- self:SetChecked(false)
+ self:SetChecked(false);
+ self.SelectedBorder:SetShown(self:GetChecked());
end
function TorghastLevelPickerOptionButtonMixin:OnClick()
- PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_SELECT_DIFFICULTY);
+ PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_SELECT_DIFFICULTY, nil, SOUNDKIT_ALLOW_DUPLICATES);
self:SetChecked(true);
self:GetParent():GetParent():SelectLevel(self);
self.SelectedBorder:SetShown(self:GetChecked());
@@ -191,6 +208,7 @@ function TorghastPagingContainerMixin:PagePrevious()
self:GetParent():SetupOptionsByStartingIndex(startingIndex);
self:Setup();
PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_PAGING_CLICK);
+ self:GetParent():UpdatePortalButtonState(startingIndex);
end
function TorghastPagingContainerMixin:PageNext()
@@ -198,6 +216,7 @@ function TorghastPagingContainerMixin:PageNext()
local startingIndex = ((self.currentPage - 1) * self.maxOptionsPerPage) + 1;
self:GetParent():SetupOptionsByStartingIndex(startingIndex);
self:Setup();
+ self:GetParent():UpdatePortalButtonState(startingIndex);
PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_PAGING_CLICK);
end
@@ -208,10 +227,14 @@ local function TorghastLevelPickerRewardSortFunction(firstValue, secondValue)
end
function TorghastLevelPickerRewardCircleMixin:SetSortedRewards()
+ local continuableContainer = ContinuableContainer:Create();
+ self.itemRewards = { };
+ self.currencyRewards = { };
+
for _, reward in ipairs(self.rewards) do
if (reward.rewardType == Enum.GossipOptionRewardType.Item) then
- local _, _, quality = GetItemInfo(reward.id);
- table.insert(self.itemRewards, {id = reward.id, quality = quality});
+ local item = Item:CreateFromItemID(reward.id);
+ continuableContainer:AddContinuable(item);
else
local isCurrencyContainer = C_CurrencyInfo.IsCurrencyContainer(reward.id, reward.quantity);
if (IsCurrencyContainer) then
@@ -223,17 +246,27 @@ function TorghastLevelPickerRewardCircleMixin:SetSortedRewards()
end
end
end
+
+ continuableContainer:ContinueOnLoad(function()
+ for _, reward in ipairs(self.rewards) do
+ if (reward.rewardType == Enum.GossipOptionRewardType.Item) then
+ local name, _, quality, _, _, _, _, _, _, itemIcon = GetItemInfo(reward.id);
+ table.insert(self.itemRewards, {id = reward.id, quality = quality, quantity = reward.quantity, texture = itemIcon, name = name});
+ end
+ end
+ if (self.itemRewards and #self.itemRewards > 1) then
+ table.sort(self.itemRewards, function(a, b)
+ return TorghastLevelPickerRewardSortFunction(a.quality, b.quality);
+ end);
+ end
+ self:RefreshTooltip();
+ end);
+
if (self.currencyRewards and #self.currencyRewards > 1) then
table.sort(self.currencyRewards, function(a, b)
return TorghastLevelPickerRewardSortFunction(a.quality, b.quality);
end);
end
-
- if (self.itemRewards and #self.itemRewards > 1) then
- table.sort(self.itemRewards, function(a, b)
- return TorghastLevelPickerRewardSortFunction(a.quality, b.quality);
- end);
- end
end
function TorghastLevelPickerRewardCircleMixin:AddCurrencyToTooltip(currency, tooltip)
@@ -289,6 +322,14 @@ function TorghastLevelPickerRewardCircleMixin:Init()
end
function TorghastLevelPickerRewardCircleMixin:OnEnter()
+ self:RefreshTooltip();
+end
+
+function TorghastLevelPickerRewardCircleMixin:RefreshTooltip()
+ if (not self:IsMouseOver()) then
+ return;
+ end
+
if (self.lockedState) then
EmbeddedItemTooltip:SetOwner(self, "ANCHOR_RIGHT");
if (UnitInParty("player")) then
@@ -319,14 +360,26 @@ function TorghastLevelPickerRewardCircleMixin:OnEnter()
self:AddCurrencyToTooltip(currencyReward, EmbeddedItemTooltip);
end
- if (self.itemRewards and self.itemRewards[1]) then
+ for i, itemReward in ipairs(self.itemRewards) do
GameTooltip_AddBlankLineToTooltip(EmbeddedItemTooltip);
- EmbeddedItemTooltip_SetItemByID(EmbeddedItemTooltip.ItemTooltip, self.itemRewards[1].id);
+ if(i == 1) then
+ EmbeddedItemTooltip_SetItemByID(EmbeddedItemTooltip.ItemTooltip, itemReward.id)
+ else
+ local text;
+ if itemReward.quantity > 1 then
+ text = string.format(JAILERS_TOWER_ITEM_REWARD_TOOLTIP_WITH_COUNT_FORMAT, itemReward.texture, HIGHLIGHT_FONT_COLOR:WrapTextInColorCode(itemReward.quantity), itemReward.name);
+ else
+ text = string.format(JAILERS_TOWER_ITEM_REWARD_TOOLTIP_FORMAT, itemReward.texture, itemReward.name);
+ end
+ if text then
+ local color = ITEM_QUALITY_COLORS[itemReward.quality];
+ EmbeddedItemTooltip:AddLine(text, color.r, color.g, color.b);
+ end
+ end
end
if(self.index and self.index > 1) then
- GameTooltip_AddBlankLineToTooltip(EmbeddedItemTooltip);
- GameTooltip_AddNormalLine(EmbeddedItemTooltip, JAILERS_TOWER_REWARD_HIGH_DIFFICULTY, true)
+ GameTooltip_SetBottomText(EmbeddedItemTooltip, JAILERS_TOWER_REWARD_HIGH_DIFFICULTY, NORMAL_FONT_COLOR);
end
EmbeddedItemTooltip:Show();
@@ -356,5 +409,5 @@ function TorghastLevelPickerOpenPortalButtonMixin:OnClick()
return;
end
C_GossipInfo.SelectOption(selectedPortal.index);
- PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_OPEN_PORTAL);
+ PlaySound(SOUNDKIT.UI_TORGHAST_WAYFINDER_OPEN_PORTAL, nil, SOUNDKIT_ALLOW_DUPLICATES);
end
diff --git a/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillDetails.lua b/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillDetails.lua
index 1cc824ba20cbd69623e1dc85e5a73f8ad4974c35..656ee5322ee641fc84c30c11a84bad79c47b6571 100644
--- a/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillDetails.lua
+++ b/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillDetails.lua
@@ -802,12 +802,12 @@ function TradeSkillDetailsMixin:OnOptionalReagentClicked(reagentButton, button)
end
if button == "LeftButton" then
- PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
+ PlaySound(SOUNDKIT.UI_9_0_CRAFTING_CLICK_OPTIONAL_REAGENT_SLOT);
self:GetParent():OpenOptionalReagentSelection(self.selectedRecipeID, reagentButton.optionalReagentIndex);
self:CheckOptionalReagentTutorial(OptionalReagentTutorialStage.Slot);
self:Refresh();
elseif button == "RightButton" then
- PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF);
+ PlaySound(SOUNDKIT.UI_9_0_CRAFTING_RIGHT_CLICK_REMOVE_REAGENT);
self:SetOptionalReagent(reagentButton.optionalReagentIndex, nil);
self:OnOptionalReagentMouseEnter(reagentButton);
end
diff --git a/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillOptionalReagentList.lua b/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillOptionalReagentList.lua
index 960eae5257e09dba4745135f5cd3acc97f22aa6c..79e673e9825cbbab1205256d5a8d7e4e5506f506 100644
--- a/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillOptionalReagentList.lua
+++ b/Interface/AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillOptionalReagentList.lua
@@ -33,7 +33,7 @@ function OptionalReagentListLineMixin:OnClick()
end
if self:ShouldAllowSelection() then
- PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
+ PlaySound(SOUNDKIT.UI_9_0_CRAFTING_CLICK_MAT_TO_SLOT);
TemplatedListElementMixin.OnClick(self);
end
end
@@ -400,5 +400,5 @@ OptionalReagentListCloseButtonMixin = {};
function OptionalReagentListCloseButtonMixin:OnClick()
self:GetParent():ClearSelection();
self:GetParent():Hide();
- PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF);
+ PlaySound(SOUNDKIT.UI_9_0_CRAFTING_CLOSE_REAGENT_WINDOW);
end
diff --git a/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.lua b/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.lua
index 042f4e6ab479e14b6b9b30f0b31a567630d143b9..cfc3370ea382d42535c779e55a0be47541617b0a 100644
--- a/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.lua
+++ b/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.lua
@@ -203,6 +203,7 @@ function WeeklyRewardsActivityMixin:SetSelectionState(state)
self.SelectedTexture:Hide();
self.UnselectedFrame:Hide();
end
+ self.ItemFrame:OnSelectionChanged(state == SELECTION_STATE_SELECTED);
end
function WeeklyRewardsActivityMixin:Refresh(activityInfo)
@@ -396,7 +397,11 @@ function WeeklyRewardsActivityMixin:HandlePreviewPvPRewardTooltip(itemLevel, upg
if ascendTierInfo then
GameTooltip_AddColoredLine(GameTooltip, string.format(WEEKLY_REWARDS_IMPROVE_ITEM_LEVEL, upgradeItemLevel), GREEN_FONT_COLOR);
local ascendTierName = PVPUtil.GetTierName(ascendTierInfo.pvpTierEnum);
- GameTooltip_AddHighlightLine(GameTooltip, string.format(WEEKLY_REWARDS_COMPLETE_PVP, ascendTierName, tierInfo.ascendRating, ascendTierInfo.ascendRating - 1));
+ if ascendTierInfo.ascendRating == 0 then
+ GameTooltip_AddHighlightLine(GameTooltip, string.format(WEEKLY_REWARDS_COMPLETE_PVP_MAX, ascendTierName, tierInfo.ascendRating));
+ else
+ GameTooltip_AddHighlightLine(GameTooltip, string.format(WEEKLY_REWARDS_COMPLETE_PVP, ascendTierName, tierInfo.ascendRating, ascendTierInfo.ascendRating - 1));
+ end
end
end
end
@@ -445,6 +450,12 @@ function WeeklyRewardActivityItemMixin:OnClick()
end
end
+function WeeklyRewardActivityItemMixin:OnSelectionChanged(selected)
+ local alpha = selected and 1 or 0;
+ self.Glow:SetAlpha(alpha);
+ self.GlowSpin:SetAlpha(alpha);
+end
+
function WeeklyRewardActivityItemMixin:SetDisplayedItem()
self.displayedItemDBID = nil;
local bestItemQuality = 0;
diff --git a/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.xml b/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.xml
index 75f4db5d766781ca0e3801c1ac3b5aaecdc6b19c..190aa8a9fea6357860fcbeec9aa1a22d6ecce10d 100644
--- a/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.xml
+++ b/Interface/AddOns/Blizzard_WeeklyRewards/Blizzard_WeeklyRewards.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.lua b/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.lua
index 2d447c7ba5cc0123e55b1d5554a50046c3eb22e5..1aeeab1ddcc9779dbdd8d9245d91aadd27fdda76 100644
--- a/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.lua
+++ b/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.lua
@@ -223,8 +223,10 @@ function WorldMapTrackingPinButtonMixin:OnEvent()
end
function WorldMapTrackingPinButtonMixin:OnMouseDown(button)
- self.Icon:SetPoint("TOPLEFT", 8, -8);
- self.IconOverlay:Show();
+ if self:IsEnabled() then
+ self.Icon:SetPoint("TOPLEFT", 8, -8);
+ self.IconOverlay:Show();
+ end
end
function WorldMapTrackingPinButtonMixin:OnMouseUp()
@@ -241,9 +243,14 @@ end
function WorldMapTrackingPinButtonMixin:OnEnter()
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip_SetTitle(GameTooltip, MAP_PIN);
- GameTooltip_AddNormalLine(GameTooltip, MAP_PIN_TOOLTIP);
- GameTooltip_AddBlankLineToTooltip(GameTooltip);
- GameTooltip_AddInstructionLine(GameTooltip, MAP_PIN_TOOLTIP_INSTRUCTIONS);
+ local mapID = self:GetParent():GetMapID();
+ if C_Map.CanSetUserWaypointOnMap(mapID) then
+ GameTooltip_AddNormalLine(GameTooltip, MAP_PIN_TOOLTIP);
+ GameTooltip_AddBlankLineToTooltip(GameTooltip);
+ GameTooltip_AddInstructionLine(GameTooltip, MAP_PIN_TOOLTIP_INSTRUCTIONS);
+ else
+ GameTooltip_AddErrorLine(GameTooltip, ERR_CLIENT_LOCKED_OUT);
+ end
GameTooltip:Show();
end
@@ -252,7 +259,14 @@ function WorldMapTrackingPinButtonMixin:OnHide()
end
function WorldMapTrackingPinButtonMixin:Refresh()
- -- nothing to do here
+ local mapID = self:GetParent():GetMapID();
+ if C_Map.CanSetUserWaypointOnMap(mapID) then
+ self:Enable();
+ self:DesaturateHierarchy(0);
+ else
+ self:Disable();
+ self:DesaturateHierarchy(1);
+ end
end
function WorldMapTrackingPinButtonMixin:SetActive(isActive)
diff --git a/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.xml b/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.xml
index 91da9ab9d9188c3b4a46d21ff7bac8342708fdf5..174a691dc6461a039ccf33ff87fca8c7462bc2b6 100644
--- a/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.xml
+++ b/Interface/AddOns/Blizzard_WorldMap/Blizzard_WorldMapTemplates.xml
@@ -65,7 +65,7 @@
-
+
diff --git a/Interface/AddOns/Blizzard_WorldMap/WM_WorldQuestDataProvider.lua b/Interface/AddOns/Blizzard_WorldMap/WM_WorldQuestDataProvider.lua
index 69c9f9546fd4f93454c4836152af838fcb517e74..c88301faf69d2bc4457f66a7b687cfd8666b278d 100644
--- a/Interface/AddOns/Blizzard_WorldMap/WM_WorldQuestDataProvider.lua
+++ b/Interface/AddOns/Blizzard_WorldMap/WM_WorldQuestDataProvider.lua
@@ -5,7 +5,7 @@ function WorldMap_WorldQuestDataProviderMixin:GetPinTemplate()
end
function WorldMap_WorldQuestDataProviderMixin:ShouldShowQuest(info)
- if self.focusedQuestID or self:IsQuestSuppressed(info.questId) then
+ if not WorldQuestDataProviderMixin.ShouldShowQuest(self, info) then
return false;
end
local mapID = self:GetMap():GetMapID();
diff --git a/Interface/FrameXML/AlertFrameSystems.lua b/Interface/FrameXML/AlertFrameSystems.lua
index 51907187b1edc57a2b14859a0fcc4c5b5f8a6c9c..b7fb051255606c36af40794ffb22e19105e97dfb 100644
--- a/Interface/FrameXML/AlertFrameSystems.lua
+++ b/Interface/FrameXML/AlertFrameSystems.lua
@@ -716,9 +716,12 @@ function GarrisonMissionAlertFrame_SetUp(frame, missionInfo)
frame.MissionType:SetAtlas(missionInfo.typeAtlas);
frame.garrisonType = GarrisonFollowerOptions[missionInfo.followerTypeID].garrisonType;
frame.Title:SetText(GarrisonFollowerOptions[missionInfo.followerTypeID].strings.ALERT_FRAME_TITLE);
+ frame.MissionType:SetShown(true);
+ frame.EncounterIcon:SetShown(false);
+
if (missionInfo.followerTypeID == Enum.GarrisonFollowerType.FollowerType_9_0) then
- frame.MissionType:SetShown(false);
frame.EncounterIcon:SetShown(true);
+ frame.MissionType:SetShown(false);
local encounterIconInfo = C_Garrison.GetMissionEncounterIconInfo(missionInfo.missionID);
frame.EncounterIcon.RareOverlay:SetShown(encounterIconInfo.isRare);
@@ -1149,62 +1152,18 @@ function NewRuneforgePowerAlertSystem_SetUp(frame, powerID)
frame:SetUp(powerID);
end
-NewRuneforgePowerAlertFrameMixin = CreateFromMixins(ItemAlertFrameMixin);
+NewRuneforgePowerAlertFrameMixin = CreateFromMixins(ItemAlertFrameMixin, RuneforgePowerBaseMixin);
function NewRuneforgePowerAlertFrameMixin:SetUp(powerID)
- self.powerID = powerID;
+ self:SetPowerID(powerID);
+end
- local powerInfo = C_LegendaryCrafting.GetRuneforgePowerInfo(powerID);
+function NewRuneforgePowerAlertFrameMixin:OnPowerSet(oldPowerID, newPowerID)
+ local powerInfo = self:GetPowerInfo();
self.powerInfo = powerInfo;
self:SetUpDisplay(powerInfo.iconFileID, Enum.ItemQuality.Legendary, powerInfo.name, YOU_EARNED_LABEL);
end
-function NewRuneforgePowerAlertFrameMixin:OnShow(event, ...)
- self:RegisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
-end
-
-function NewRuneforgePowerAlertFrameMixin:OnHide(event, ...)
- self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
-end
-
-function NewRuneforgePowerAlertFrameMixin:OnEvent(event, ...)
- if event == "RUNEFORGE_POWER_INFO_UPDATED" then
- local powerID = ...;
- if powerID == self.powerID then
- self:SetUp(powerID);
- if self:IsMouseOver() then
- self:OnEnter();
- end
- end
- end
-end
-
-function NewRuneforgePowerAlertFrameMixin:OnEnter()
- if self.powerInfo then
- GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
-
- GameTooltip_SetTitle(GameTooltip, self.powerInfo.name);
-
- GameTooltip_AddColoredLine(GameTooltip, self.powerInfo.description, GREEN_FONT_COLOR);
-
- if not self.slotNames then
- self.slotNames = C_LegendaryCrafting.GetRuneforgePowerSlots(self:GetPowerID());
- end
-
- if #self.slotNames > 0 then
- GameTooltip_AddBlankLineToTooltip(GameTooltip);
- GameTooltip_AddHighlightLine(GameTooltip, RUNEFORGE_LEGENDARY_POWER_TOOLTIP_SLOT_HEADER);
- GameTooltip_AddNormalLine(GameTooltip, table.concat(self.slotNames, LIST_DELIMITER));
- end
-
- GameTooltip:Show();
- end
-end
-
-function NewRuneforgePowerAlertFrameMixin:OnLeave()
- GameTooltip_Hide();
-end
-
function NewRuneforgePowerAlertFrameMixin:OnClick(button, down)
if AlertFrame_OnClick(self, button, down) then
return;
@@ -1212,7 +1171,3 @@ function NewRuneforgePowerAlertFrameMixin:OnClick(button, down)
-- No left-click behavior.
end
-
-function NewRuneforgePowerAlertFrameMixin:GetPowerID()
- return self.powerID;
-end
\ No newline at end of file
diff --git a/Interface/FrameXML/AlertFrameSystems.xml b/Interface/FrameXML/AlertFrameSystems.xml
index 7b725f2710943ab03d96e7e7c3f83d5c1c95ca01..28bc4f87273b5a4e9548ae455e52d7cd16c9a467 100644
--- a/Interface/FrameXML/AlertFrameSystems.xml
+++ b/Interface/FrameXML/AlertFrameSystems.xml
@@ -2650,7 +2650,6 @@
-
diff --git a/Interface/FrameXML/AudioOptionsPanels.lua b/Interface/FrameXML/AudioOptionsPanels.lua
index 6bb1e95a4b5264e217a94b954ce6303d2454918b..aded38cfe5357e6e04b698426ba3baa20dfee25f 100644
--- a/Interface/FrameXML/AudioOptionsPanels.lua
+++ b/Interface/FrameXML/AudioOptionsPanels.lua
@@ -434,6 +434,7 @@ function AudioOptionsVoicePanelEnableVoice_UpdateControls(self)
local enabled = (not errorString);
BlizzardOptionsPanel_SetControlsEnabled(self, enabled);
AudioOptionsVoicePanel_SetCustomControlsEnabled(self, enabled);
+ self.MacMicrophoneAccessWarning:UpdateState();
if(enabled) then
self.ErrorStateMessage:Hide();
@@ -483,7 +484,7 @@ local function AudioOptionsPanelVoiceChatSlider_BaseOnValueChanged(self, value,
max = 100;
end
self.Text:SetText(FormatPercentage(self.newValue / max, true));
-
+
-- If the underlying cvar's value has an inverse range, i.e. the slider
-- range is [0,1], but the cvar represents this range as [0,1], the value
-- can be inverted before returning. This changes a slider value of .9 to
@@ -822,4 +823,18 @@ function AudioOptionsVoicePanelTestInputDevice_OnEvent(self, event, ...)
elseif event == "VOICE_CHAT_AUDIO_CAPTURE_ENERGY" then
UpdateVUMeter(self, ...);
end
-end
\ No newline at end of file
+end
+
+MacMicrophoneAccessWarningMixin = {};
+
+function MacMicrophoneAccessWarningMixin:UpdateState()
+ local shown = MacOptions_IsMicrophoneEnabled and not MacOptions_IsMicrophoneEnabled();
+ if shown then
+ self.Label:SetFormattedText(MAC_MIC_PREMISSIONS_NOTIFICATION, MacOptions_GetGameBundleName());
+ end
+
+ self:SetShown(shown);
+ local color = shown and RED_FONT_COLOR or NORMAL_FONT_COLOR;
+ AudioOptionsVoicePanelOutputDeviceDropdownLabel:SetTextColor(color:GetRGBA());
+ AudioOptionsVoicePanelMicDeviceDropdownLabel:SetTextColor(color:GetRGBA());
+end
diff --git a/Interface/FrameXML/AudioOptionsPanels.xml b/Interface/FrameXML/AudioOptionsPanels.xml
index 6dc904adeacb524002ae3fbf2e62c5f5e2555e54..45d0542bb41b1878612bbf7a85b852b7f34480be 100644
--- a/Interface/FrameXML/AudioOptionsPanels.xml
+++ b/Interface/FrameXML/AudioOptionsPanels.xml
@@ -789,7 +789,7 @@
-
+
@@ -808,7 +808,7 @@
-
+
@@ -939,6 +939,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if MacOptions_OpenMicrophoneRequestDialogue then
+ MacOptions_OpenMicrophoneRequestDialogue();
+ end
+
+
+
+
+
diff --git a/Interface/FrameXML/ChatConfigFrame.lua b/Interface/FrameXML/ChatConfigFrame.lua
index 62502ab109006e0adf4ab698b52f0db817f8b49d..201f17c94ea34e772fb07574a5a00a03ca38a58c 100644
--- a/Interface/FrameXML/ChatConfigFrame.lua
+++ b/Interface/FrameXML/ChatConfigFrame.lua
@@ -718,9 +718,16 @@ function ChatConfigFrame_OnEvent(self, event, ...)
-- Default selections
ChatConfigCategory_OnClick(ChatConfigCategoryFrameButton2);
ChatConfig_UpdateCombatTabs(1);
- elseif ( event == "CHANNEL_UI_UPDATE" ) then
+
ChatConfigCategory_UpdateEnabled();
ChatConfig_UpdateChatSettings();
+
+ self.hasEnteredWorld = true;
+ elseif ( event == "CHANNEL_UI_UPDATE" ) then
+ if self.hasEnteredWorld then
+ ChatConfigCategory_UpdateEnabled();
+ ChatConfig_UpdateChatSettings();
+ end
elseif event == "CHAT_REGIONAL_STATUS_CHANGED" then
if ChatConfigChannelSettings:IsVisible() then
ChatConfigChannelSettings_OnShow();
@@ -1537,6 +1544,17 @@ function ChatConfigCategory_UpdateEnabled()
end
end
+local function IsChannelNameChecked(channelList, channelName)
+ if channelList then
+ for index, value in pairs(channelList) do
+ if value == channelName then
+ return true;
+ end
+ end
+ end
+ return false;
+end
+
function CreateChatChannelList(self, ...)
if ( not FCF_GetCurrentChatFrame() ) then
return;
@@ -1553,21 +1571,7 @@ function CreateChatChannelList(self, ...)
if C_ChatInfo.GetChannelRuleset(channelID) == Enum.ChatChannelRuleset.Mentor then
disabled = disabled or not C_ChatInfo.IsRegionalServiceAvailable();
end
- local checked = nil;
- if ( channelList ) then
- for index, value in pairs(channelList) do
- if ( value == channel ) then
- checked = 1;
- end
- end
- end
- if ( zoneChannelList ) then
- for index, value in pairs(zoneChannelList) do
- if ( value == channel ) then
- checked = 1;
- end
- end
- end
+ local checked = IsChannelNameChecked(channelList, channel);
while count < channelID do
-- Leave empty entries for missing channels to allow for re-ordering.
@@ -1994,7 +1998,6 @@ function ChatConfig_RefreshCurrentChatCategory(preserveCategorySelection)
ChatConfigCategoryFrame_Refresh(preserveCategorySelection);
end
-
function ChatConfigChatSettings_UpdateCheckboxes()
ChatConfig_UpdateCheckboxes(ChatConfigChatSettingsLeft);
end
@@ -2005,14 +2008,13 @@ function ChatConfigChatSettings_OnShow()
end
function ChatConfigChannelSettings_UpdateCheckboxes()
+ CreateChatChannelList(ChatConfigChannelSettings, GetChannelList());
+ ChatConfig_CreateCheckboxes(ChatConfigChannelSettingsLeft, CHAT_CONFIG_CHANNEL_LIST, "MovableChatConfigWideCheckBoxWithSwatchTemplate", CHAT_CONFIG_CHANNEL_SETTINGS_TITLE_WITH_DRAG_INSTRUCTIONS);
ChatConfig_UpdateCheckboxes(ChatConfigChannelSettingsLeft);
ChatConfigChannelSettingsLeft:UpdateStates();
end
function ChatConfigChannelSettings_OnShow()
- -- Have to build it here since the channel list doesn't exist on load
- CreateChatChannelList(ChatConfigChannelSettings, GetChannelList());
- ChatConfig_CreateCheckboxes(ChatConfigChannelSettingsLeft, CHAT_CONFIG_CHANNEL_LIST, "MovableChatConfigWideCheckBoxWithSwatchTemplate", CHAT_CONFIG_CHANNEL_SETTINGS_TITLE_WITH_DRAG_INSTRUCTIONS);
ChatConfigChannelSettings_UpdateCheckboxes();
UpdateDefaultButtons(false);
end
@@ -2023,9 +2025,7 @@ function ChatConfigChannelSettings_MoveChannelDown(channelIndex)
end
C_ChatInfo.SwapChatChannelsByChannelIndex(channelIndex, channelIndex + 1);
- CreateChatChannelList(ChatConfigChannelSettings, GetChannelList());
- ChatConfig_CreateCheckboxes(ChatConfigChannelSettingsLeft, CHAT_CONFIG_CHANNEL_LIST, "ChatConfigWideCheckBoxWithSwatchTemplate", CHAT_CONFIG_CHANNEL_SETTINGS_TITLE_WITH_DRAG_INSTRUCTIONS);
- ChatConfig_UpdateCheckboxes(ChatConfigChannelSettingsLeft);
+ ChatConfigChannelSettings_UpdateCheckboxes();
end
function ChatConfigChannelSettings_MoveChannelUp(channelIndex)
@@ -2034,9 +2034,7 @@ function ChatConfigChannelSettings_MoveChannelUp(channelIndex)
end
C_ChatInfo.SwapChatChannelsByChannelIndex(channelIndex, channelIndex - 1);
- CreateChatChannelList(ChatConfigChannelSettings, GetChannelList());
- ChatConfig_CreateCheckboxes(ChatConfigChannelSettingsLeft, CHAT_CONFIG_CHANNEL_LIST, "ChatConfigWideCheckBoxWithSwatchTemplate", CHAT_CONFIG_CHANNEL_SETTINGS_TITLE_WITH_DRAG_INSTRUCTIONS);
- ChatConfig_UpdateCheckboxes(ChatConfigChannelSettingsLeft);
+ ChatConfigChannelSettings_UpdateCheckboxes();
end
function ChatConfigOtherSettings_UpdateCheckboxes()
@@ -2294,9 +2292,6 @@ function ChatConfigWideCheckBoxMixin:LeaveChannel()
for i = channelIndex, #CHAT_CONFIG_CHANNEL_LIST - 1 do
C_ChatInfo.SwapChatChannelsByChannelIndex(i, i + 1);
end
-
- CreateChatChannelList(ChatConfigChannelSettings, GetChannelList());
- ChatConfig_CreateCheckboxes(ChatConfigChannelSettingsLeft, CHAT_CONFIG_CHANNEL_LIST, "ChatConfigWideCheckBoxWithSwatchTemplate", CHAT_CONFIG_CHANNEL_SETTINGS_TITLE_WITH_DRAG_INSTRUCTIONS);
else
LeaveChannelByLocalID(CHAT_CONFIG_CHANNEL_LIST[channelIndex].channelID);
if channelIndex == #CHAT_CONFIG_CHANNEL_LIST then
@@ -2309,5 +2304,5 @@ function ChatConfigWideCheckBoxMixin:LeaveChannel()
end
end
- ChatConfig_UpdateCheckboxes(ChatConfigChannelSettingsLeft);
+ ChatConfigChannelSettings_UpdateCheckboxes();
end
diff --git a/Interface/FrameXML/ChatFrame.lua b/Interface/FrameXML/ChatFrame.lua
index 64595c3c1e170d0f1ef9b163384da9fb76ce9444..42124da9f356feccad2c3a57d0e1c7180dfa2cf8 100644
--- a/Interface/FrameXML/ChatFrame.lua
+++ b/Interface/FrameXML/ChatFrame.lua
@@ -2391,11 +2391,6 @@ if IsGMClient() then
end
end
-SLASH_PERFREPORT1 = "/perfreport";
-SlashCmdList["PERFREPORT"] = function(msg)
- C_ReportSystem.ReportServerLag();
-end
-
SlashCmdList["TABLEINSPECT"] = function(msg)
if ( Kiosk.IsEnabled() or ScriptsDisallowedForBeta() ) then
return;
@@ -3064,7 +3059,7 @@ local function GetFirstChannelIDOfChannelMatchingRuleset(ruleset, excludeChannel
return nil;
end
-local function GetSlashCommandForChannelOpenChat(channelIndex)
+function GetSlashCommandForChannelOpenChat(channelIndex)
return "/" .. channelIndex;
end
@@ -3119,7 +3114,6 @@ function ChatFrame_ConfigEventHandler(self, event, ...)
self.alternativeDefaultLanguage = GetAlternativeDefaultLanguage();
if self == DEFAULT_CHAT_FRAME then
- self.needsMentorChatExplanation = true;
ChatEdit_UpdateNewcomerEditBoxHint(self.editBox);
local isInitialLogin, isUIReload = ...;
@@ -3479,11 +3473,7 @@ function ChatFrame_MessageEventHandler(self, event, ...)
end
end
if not found or not info then
- if arg1 == "YOU_CHANGED" and C_ChatInfo.GetChannelRulesetForChannelID(arg7) == Enum.ChatChannelRuleset.Mentor and self == DEFAULT_CHAT_FRAME then
- ChatFrame_AddChannel(self, C_ChatInfo.GetChannelShortcutForChannelID(arg7));
- else
- return true;
- end
+ return true;
end
end
@@ -3621,21 +3611,6 @@ function ChatFrame_MessageEventHandler(self, event, ...)
if arg1 == "YOU_CHANGED" and C_ChatInfo.GetChannelRuleset(arg8) == Enum.ChatChannelRuleset.Mentor then
ChatFrame_UpdateDefaultChatTarget(self);
ChatEdit_UpdateNewcomerEditBoxHint(self.editBox);
-
- if self.needsMentorChatExplanation then
- self.needsMentorChatExplanation = nil;
-
- local channelSlashCommand = GetSlashCommandForChannelOpenChat(arg8);
- if IsActivePlayerNewcomer() then
- ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER:format(channelSlashCommand));
- ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER1:format(channelSlashCommand));
- ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_NEWCOMER2:format(channelSlashCommand));
- else
- -- NOTE: Guide flags won't be set at this point if the user is joining from the NPC, assume that if the channel join is happening,
- -- then if you're not a newcomer, you must be a guide.
- ChatFrame_DisplaySystemMessageInPrimary(NPEV2_CHAT_WELCOME_TO_CHANNEL_GUIDE:format(channelSlashCommand));
- end
- end
else
if arg1 == "YOU_LEFT" then
ChatEdit_UpdateNewcomerEditBoxHint(self.editBox, arg8);
@@ -5477,9 +5452,11 @@ function ChatChannelDropDown_PopOutChat(self, chatType, chatTarget)
end
function Chat_GetChannelShortcutName(index)
- local _, name = GetChannelName(index);
- name = strtrim(name:match("([^%-]+)"));
- return name;
+ if not tonumber(index) and type(index) == "string" then
+ index = GetChannelName(index);
+ end
+
+ return C_ChatInfo.GetChannelShortcut(index);
end
function ChatChannelDropDown_PopInChat(self, chatType, chatTarget)
diff --git a/Interface/FrameXML/CompactUnitFrame.lua b/Interface/FrameXML/CompactUnitFrame.lua
index 9978239865fdd211199587cb19990fbfbad4484f..4a49f53a1d653319b518a959471316fceeb79e03 100644
--- a/Interface/FrameXML/CompactUnitFrame.lua
+++ b/Interface/FrameXML/CompactUnitFrame.lua
@@ -37,6 +37,7 @@ function CompactUnitFrame_OnLoad(self)
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED");
self:RegisterEvent("UNIT_HEAL_ABSORB_AMOUNT_CHANGED");
self:RegisterEvent("UNIT_PHASE");
+ self:RegisterEvent("UNIT_CTR_OPTIONS");
self:RegisterEvent("UNIT_FLAGS");
self:RegisterEvent("GROUP_JOINED");
self:RegisterEvent("GROUP_LEFT");
@@ -134,7 +135,7 @@ function CompactUnitFrame_OnEvent(self, event, ...)
CompactUnitFrame_UpdateHealPrediction(self);
elseif ( event == "PLAYER_FLAGS_CHANGED" ) then
CompactUnitFrame_UpdateStatusText(self);
- elseif ( event == "UNIT_PHASE" or event == "UNIT_FLAGS" ) then
+ elseif ( event == "UNIT_PHASE" or event == "UNIT_FLAGS" or event == "UNIT_CTR_OPTIONS" ) then
CompactUnitFrame_UpdateCenterStatusIcon(self);
elseif ( event == "GROUP_JOINED" ) then
CompactUnitFrame_UpdateAggroFlash(self);
diff --git a/Interface/FrameXML/CovenantUtil.lua b/Interface/FrameXML/CovenantUtil.lua
new file mode 100644
index 0000000000000000000000000000000000000000..1ca32d2686b52453902826349d35e624547483de
--- /dev/null
+++ b/Interface/FrameXML/CovenantUtil.lua
@@ -0,0 +1,57 @@
+CovenantUtil = {};
+
+function CovenantUtil.GetRenownRewardDisplayData(rewardInfo, onItemUpdateCallback)
+ if rewardInfo.itemID then
+ local item = Item:CreateFromItemID(rewardInfo.itemID);
+ local icon, name;
+ if item:IsItemDataCached() then
+ icon = item:GetItemIcon();
+ name = item:GetItemName();
+ else
+ item:ContinueOnItemLoad(onItemUpdateCallback);
+ end
+ return icon, name, RENOWN_REWARD_ITEM_NAME_FORMAT, RENOWN_REWARD_ITEM_DESCRIPTION;
+ elseif rewardInfo.mountID then
+ local name, spellID, icon = C_MountJournal.GetMountInfoByID(rewardInfo.mountID);
+ return icon, name, RENOWN_REWARD_MOUNT_NAME_FORMAT, RENOWN_REWARD_MOUNT_DESCRIPTION;
+ elseif rewardInfo.spellID then
+ local name, _, icon = GetSpellInfo(rewardInfo.spellID);
+ return icon, name, RENOWN_REWARD_SPELL_NAME_FORMAT, RENOWN_REWARD_SPELL_DESCRIPTION;
+ elseif rewardInfo.titleID then
+ local name = GetTitleName(rewardInfo.titleID);
+ return nil, name, RENOWN_REWARD_TITLE_NAME_FORMAT, RENOWN_REWARD_TITLE_DESCRIPTION;
+ elseif rewardInfo.transmogID then
+ local itemID = C_Transmog.GetItemIDForSource(rewardInfo.transmogID);
+ local item = Item:CreateFromItemID(itemID);
+ local icon, name;
+ if item:IsItemDataCached() then
+ icon = item:GetItemIcon();
+ name = item:GetItemName();
+ else
+ item:ContinueOnItemLoad(onItemUpdateCallback);
+ end
+ return icon, name, RENOWN_REWARD_TRANSMOG_NAME_FORMAT, RENOWN_REWARD_TRANSMOG_DESCRIPTION;
+ elseif rewardInfo.transmogSetID then
+ local icon = TransmogUtil.GetSetIcon(rewardInfo.transmogSetID);
+ local setInfo = C_TransmogSets.GetSetInfo(rewardInfo.transmogSetID);
+ if setInfo then
+ return icon, setInfo.name, RENOWN_REWARD_TRANSMOGSET_NAME_FORMAT, RENOWN_REWARD_TRANSMOGSET_DESCRIPTION;
+ end
+ elseif rewardInfo.garrFollowerID then
+ local followerInfo = C_Garrison.GetFollowerInfo(rewardInfo.garrFollowerID);
+ return followerInfo.portraitIconID, followerInfo.name, RENOWN_REWARD_FOLLOWER_NAME_FORMAT, RENOWN_REWARD_FOLLOWER_DESCRIPTION;
+ elseif rewardInfo.transmogIllusionSourceID then
+ local visualID, name, link, icon = C_TransmogCollection.GetIllusionSourceInfo(rewardInfo.transmogIllusionSourceID);
+ return icon, name, RENOWN_REWARD_ILLUSION_NAME_FORMAT, RENOWN_REWARD_ILLUSION_DESCRIPTION;
+ end
+end
+
+function CovenantUtil.GetUnformattedRenownRewardInfo(rewardInfo, onItemUpdateCallback)
+ local icon, name, formatString, description = CovenantUtil.GetRenownRewardDisplayData(rewardInfo, onItemUpdateCallback);
+ return (rewardInfo.icon or icon), (name or rewardInfo.name), formatString, (rewardInfo.description or description);
+end
+
+function CovenantUtil.GetRenownRewardInfo(rewardInfo, onItemUpdateCallback)
+ local icon, name, formatString, description = CovenantUtil.GetUnformattedRenownRewardInfo(rewardInfo, onItemUpdateCallback);
+ return icon, name and formatString and formatString:format(name) or name, description;
+end
\ No newline at end of file
diff --git a/Interface/FrameXML/CustomGossipFrameBase.lua b/Interface/FrameXML/CustomGossipFrameBase.lua
index 4ec7a8d2d6f7641fe1812c609db66d5abb718bf5..0e64d0f60717cebf93b82ef06ca87aea9e80b134 100644
--- a/Interface/FrameXML/CustomGossipFrameBase.lua
+++ b/Interface/FrameXML/CustomGossipFrameBase.lua
@@ -46,7 +46,6 @@ function CustomGossipManagerMixin:HandleOpenEvent(textureKit)
if(not textureKit) then
GossipFrame_HandleShow(GossipFrame);
else
- assert(not self.customFrame)
local handler = self:GetHandler(textureKit);
if handler then
self.customFrame = handler(textureKit);
diff --git a/Interface/FrameXML/DressUpFrames.lua b/Interface/FrameXML/DressUpFrames.lua
index 30b0d706d2b1e72c72f9a7daa3e46a21b9a7806c..97ea9de5c24a3197b5ee998fd9dd75880a6cebeb 100644
--- a/Interface/FrameXML/DressUpFrames.lua
+++ b/Interface/FrameXML/DressUpFrames.lua
@@ -323,13 +323,15 @@ function CloseSideDressUpFrame(parentFrame)
end
end
-function SetUpTransmogAndMountDressupFrame(parentFrame, transmogSetID, mountID, width, height, point, relativePoint, offsetX, offsetY)
+function SetUpTransmogAndMountDressupFrame(parentFrame, transmogSetID, mountID, width, height, point, relativePoint, offsetX, offsetY, removeWeapons)
local self = TransmogAndMountDressupFrame;
self.parentFrame = parentFrame;
- TransmogAndMountDressupFrame.transmogSetID = transmogSetID;
- TransmogAndMountDressupFrame.mountID = mountID;
- TransmogAndMountDressupFrame:SetSize(width, height);
+ self.transmogSetID = transmogSetID;
+ self.mountID = mountID;
+ self:SetSize(width, height);
+ TransmogAndMountDressupFrame.removeWeapons = removeWeapons;
relativePoint = relativePoint or point;
+
self:SetParent(parentFrame);
self:SetPoint(point, parentFrame, relativePoint, offsetX, offsetY);
end
\ No newline at end of file
diff --git a/Interface/FrameXML/DressUpFrames.xml b/Interface/FrameXML/DressUpFrames.xml
index 135a8738e4e62de76f3904ecf7c9d3ff9f77d96f..129e27456c8faf548b87d33c7ba8dab9936a5086 100644
--- a/Interface/FrameXML/DressUpFrames.xml
+++ b/Interface/FrameXML/DressUpFrames.xml
@@ -96,7 +96,7 @@
-
+
diff --git a/Interface/FrameXML/FrameXML.toc b/Interface/FrameXML/FrameXML.toc
index 5f59a3948b317e741b1733d34faabc3bd2529c6a..58c42ab757f34873a8ce1faeefe1969f45e8a506 100644
--- a/Interface/FrameXML/FrameXML.toc
+++ b/Interface/FrameXML/FrameXML.toc
@@ -126,6 +126,7 @@ PVPUtil.lua
TransmogUtil.lua
ActionButtonUtil.lua
DifficultyUtil.lua
+CovenantUtil.lua
ItemDisplay.xml
HelpTip.xml
ExtraAbilityContainer.xml
diff --git a/Interface/FrameXML/GameTooltip.lua b/Interface/FrameXML/GameTooltip.lua
index 38a0d8216b4a37a2e1655e053a38c862c0f2538d..8460e97a039e26f9ea5e33201f3aba7000ed5ba7 100644
--- a/Interface/FrameXML/GameTooltip.lua
+++ b/Interface/FrameXML/GameTooltip.lua
@@ -387,6 +387,10 @@ GAME_TOOLTIP_BACKDROP_STYLE_RUNEFORGE_LEGENDARY = {
padding = { left = 3, right = 3, top = 3, bottom = 3 },
};
+GAME_TOOLTIP_TEXTUREKIT_BACKDROP_STYLES = {
+ ["jailerstower"] = GAME_TOOLTIP_BACKDROP_STYLE_RUNEFORGE_LEGENDARY;
+};
+
function GameTooltip_OnHide(self)
self.needsReset = true;
SharedTooltip_SetBackdropStyle(self, self.IsEmbedded and GAME_TOOLTIP_BACKDROP_STYLE_EMBEDDED or TOOLTIP_BACKDROP_STYLE_DEFAULT);
diff --git a/Interface/FrameXML/InterfaceOptionsFrame.lua b/Interface/FrameXML/InterfaceOptionsFrame.lua
index b62ecd834fc897e8498c41d239030f3d5d78afd0..cc4528fa2e0f45a2c62b67b3acd43761cca55f81 100644
--- a/Interface/FrameXML/InterfaceOptionsFrame.lua
+++ b/Interface/FrameXML/InterfaceOptionsFrame.lua
@@ -3,6 +3,7 @@ INTERFACEOPTIONS_ADDONCATEGORIES = {};
local blizzardCategories = {};
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
return securecall(next, elements, key);
diff --git a/Interface/FrameXML/InterfaceOptionsPanels.lua b/Interface/FrameXML/InterfaceOptionsPanels.lua
index 62c77ab1df1c6a7adce1d4f72de3ac9409dfc383..ae5ed49eb1f46bb14289a3fe7d9061872ef87fc1 100644
--- a/Interface/FrameXML/InterfaceOptionsPanels.lua
+++ b/Interface/FrameXML/InterfaceOptionsPanels.lua
@@ -1,3 +1,4 @@
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
return securecall(next, elements, key);
diff --git a/Interface/FrameXML/MainMenuBarMicroButtons.lua b/Interface/FrameXML/MainMenuBarMicroButtons.lua
index 98998e7479933a143200c7c2abab7cf6e1098562..6ed21494162fa8612f0bff2328da39a12bfc1b71 100644
--- a/Interface/FrameXML/MainMenuBarMicroButtons.lua
+++ b/Interface/FrameXML/MainMenuBarMicroButtons.lua
@@ -48,6 +48,7 @@ LFDMicroButtonMixin = {};
function LFDMicroButtonMixin:OnLoad()
LoadMicroButtonTextures(self, "LFG");
+ self:RegisterEvent("QUEST_LOG_UPDATE");
SetDesaturation(self:GetDisabledTexture(), true);
self.tooltipText = MicroButtonTooltipText(DUNGEONS_BUTTON, "TOGGLEGROUPFINDER");
self.newbieText = NEWBIE_TOOLTIP_LFGPARENT;
diff --git a/Interface/FrameXML/Minimap.lua b/Interface/FrameXML/Minimap.lua
index 165c45609be515e95087405064c817a9604e646c..c4d960c2c7112f54962658f87040cc355613643b 100644
--- a/Interface/FrameXML/Minimap.lua
+++ b/Interface/FrameXML/Minimap.lua
@@ -652,6 +652,7 @@ end
function GarrisonLandingPageMinimapButton_UpdateIcon(self)
local garrisonType = C_Garrison.GetLandingPageGarrisonType();
+ self.garrisonType = garrisonType;
ApplyGarrisonTypeAnchor(self, garrisonType);
@@ -688,8 +689,9 @@ function GarrisonLandingPageMinimapButton_UpdateIcon(self)
end
end
-function GarrisonLandingPageMinimapButton_OnClick()
+function GarrisonLandingPageMinimapButton_OnClick(self, button)
GarrisonLandingPage_Toggle();
+ GarrisonMinimap_HideHelpTip(self);
end
function GarrisonLandingPage_Toggle()
@@ -780,6 +782,18 @@ function GarrisonMinimap_ShowCovenantCallingsNotification(self)
GarrisonMinimap_Justify(self.AlertText);
self.MinimapAlertAnim:Play();
self.MinimapLoopPulseAnim:Play();
+
+ if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS) then
+ GarrisonMinimap_SetQueuedHelpTip(self, {
+ text = FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS,
+ buttonStyle = HelpTip.ButtonStyle.Close,
+ cvarBitfield = "closedInfoFrames",
+ bitfieldFlag = LE_FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS,
+ targetPoint = HelpTip.Point.LeftEdgeCenter,
+ offsetX = 0,
+ useParentStrata = true,
+ });
+ end
end
function GarrisonMinimap_OnCallingsUpdated(self, callings, completedCount, availableCount)
@@ -790,4 +804,29 @@ function GarrisonMinimap_OnCallingsUpdated(self, callings, completedCount, avail
self.isInitialLogin = false;
end
+end
+
+function GarrisonMinimap_SetQueuedHelpTip(self, tipInfo)
+ self.queuedHelpTip = tipInfo;
+end
+
+function GarrisonMinimap_CheckQueuedHelpTip(self)
+ if self.queuedHelpTip then
+ local tip = self.queuedHelpTip;
+ self.queuedHelpTip = nil;
+ HelpTip:Show(self, tip);
+ end
+end
+
+function GarrisonMinimap_ClearQueuedHelpTip(self)
+ if self.queuedHelpTip and self.queuedHelpTip.text == FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS then
+ self.queuedHelpTip = nil;
+ end
+end
+
+function GarrisonMinimap_HideHelpTip(self)
+ if self.garrisonType == Enum.GarrisonType.Type_9_0 then
+ HelpTip:Acknowledge(self, FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS);
+ GarrisonMinimap_ClearQueuedHelpTip(self, FRAME_TUTORIAL_9_0_GRRISON_LANDING_PAGE_BUTTON_CALLINGS);
+ end
end
\ No newline at end of file
diff --git a/Interface/FrameXML/Minimap.xml b/Interface/FrameXML/Minimap.xml
index 52bec8dd9afc21c84e6c1772129f0dc7bb8c66f6..63f66320114bb9e5a839cc39fea23c3398dbdfa1 100644
--- a/Interface/FrameXML/Minimap.xml
+++ b/Interface/FrameXML/Minimap.xml
@@ -3,26 +3,26 @@
+-->
@@ -168,7 +168,7 @@
if( GameTooltip:IsOwned(self) ) then
MinimapMailFrameUpdate();
end
-
+
@@ -246,13 +246,13 @@
-
+
-
+
@@ -353,7 +353,7 @@
-
+
@@ -382,7 +382,7 @@
-
+
@@ -524,6 +524,7 @@
self:GetParent().AlertText:Hide();
self:GetParent().SideToastGlow:Hide();
self:GetParent().MinimapPulseAnim:Stop();
+ GarrisonMinimap_CheckQueuedHelpTip(self:GetParent());
@@ -541,7 +542,7 @@
GameTooltip:Hide();
-
+
@@ -558,7 +559,7 @@
-
+
@@ -571,14 +572,14 @@
-
+
-
+
@@ -588,7 +589,7 @@
-
+
diff --git a/Interface/FrameXML/OptionsFrameTemplates.lua b/Interface/FrameXML/OptionsFrameTemplates.lua
index 8112a2d6f3da604fe7f151f9928aa3e65bbfb7a7..983d7d27a1457e232af96bb609701291b654c083 100644
--- a/Interface/FrameXML/OptionsFrameTemplates.lua
+++ b/Interface/FrameXML/OptionsFrameTemplates.lua
@@ -1,5 +1,6 @@
-- if you change something here you probably want to change the glue version too
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
-- not totally necessary in all cases in this file (since Interface Options are independent), but
diff --git a/Interface/FrameXML/OptionsPanelTemplates.lua b/Interface/FrameXML/OptionsPanelTemplates.lua
index 22e4d424995ac075c7168c333ab5d1777c796ba6..f9c6f6a4b883b149616780a74c08c101c8e0473e 100644
--- a/Interface/FrameXML/OptionsPanelTemplates.lua
+++ b/Interface/FrameXML/OptionsPanelTemplates.lua
@@ -11,6 +11,7 @@ local CONTROL_KEY = "controlkey";
local SHIFT_KEY = "shiftkey";
local NO_KEY = "none";
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
return securecall(next, elements, key);
diff --git a/Interface/FrameXML/PartyMemberFrame.lua b/Interface/FrameXML/PartyMemberFrame.lua
index f9d97c561a50fcd110e2d5b915d4c41ce2f07ce3..5b4d1628549a226728109d42d0e9c703e9936d98 100644
--- a/Interface/FrameXML/PartyMemberFrame.lua
+++ b/Interface/FrameXML/PartyMemberFrame.lua
@@ -114,6 +114,7 @@ function PartyMemberFrame_OnLoad (self)
self:RegisterEvent("PARTY_MEMBER_ENABLE");
self:RegisterEvent("PARTY_MEMBER_DISABLE");
self:RegisterEvent("UNIT_PHASE");
+ self:RegisterEvent("UNIT_CTR_OPTIONS");
self:RegisterEvent("UNIT_FLAGS");
self:RegisterEvent("UNIT_OTHER_PARTY_CHANGED");
self:RegisterEvent("INCOMING_SUMMON_CHANGED");
@@ -433,7 +434,7 @@ function PartyMemberFrame_OnEvent(self, event, ...)
end
elseif ( event == "UNIT_CONNECTION" ) and ( arg1 == "party"..selfID ) then
PartyMemberFrame_UpdateArt(self);
- elseif ( event == "UNIT_PHASE" or event == "PARTY_MEMBER_ENABLE" or event == "PARTY_MEMBER_DISABLE" or event == "UNIT_FLAGS") then
+ elseif ( event == "UNIT_PHASE" or event == "PARTY_MEMBER_ENABLE" or event == "PARTY_MEMBER_DISABLE" or event == "UNIT_FLAGS" or event == "UNIT_CTR_OPTIONS") then
if ( event ~= "UNIT_PHASE" or arg1 == unit ) then
PartyMemberFrame_UpdateNotPresentIcon(self);
end
diff --git a/Interface/FrameXML/QuestMapFrame.lua b/Interface/FrameXML/QuestMapFrame.lua
index 3fd3a97dbb21bdb5e0d1dae5c8580e402c1eba04..2661036d663764e75a990b2ff347aa6d3db5553b 100644
--- a/Interface/FrameXML/QuestMapFrame.lua
+++ b/Interface/FrameXML/QuestMapFrame.lua
@@ -541,7 +541,16 @@ function QuestDetailsFrame_OnHide(self)
QuestMapFrame.QuestSessionManagement:SetSuppressed(false);
end
+function QuestMapFrame_CheckAutoSupertrackOnShowDetails(questID)
+ -- Callings never display a POI icon, so super-track it now, yep, this steals the current super-track.
+ if C_QuestLog.IsQuestCalling(questID) then
+ C_SuperTrack.SetSuperTrackedQuestID(questID);
+ end
+end
+
function QuestMapFrame_ShowQuestDetails(questID)
+ QuestMapFrame_CheckAutoSupertrackOnShowDetails(questID);
+
EventRegistry:TriggerEvent("QuestLog.HideCampaignOverview");
C_QuestLog.SetSelectedQuest(questID);
QuestMapFrame.DetailsFrame.questID = questID;
@@ -988,10 +997,12 @@ local function QuestLogQuests_GetBestTagID(questID, info, isComplete)
if info.isCalling then
local secondsRemaining = C_TaskQuest.GetQuestTimeLeftSeconds(questID);
- if secondsRemaining < 3600 then -- 1 hour
- return "EXPIRING_SOON";
- elseif secondsRemaining < 18000 then -- 5 hours
- return "EXPIRING";
+ if secondsRemaining then
+ if secondsRemaining < 3600 then -- 1 hour
+ return "EXPIRING_SOON";
+ elseif secondsRemaining < 18000 then -- 5 hours
+ return "EXPIRING";
+ end
end
end
@@ -1152,6 +1163,16 @@ local function QuestLogQuests_AddQuestButton(displayState, info)
button:Show();
displayState.prevButton = button;
+ displayState.prevButtonInfo = info;
+end
+
+local function QuestLogQuests_IsPreviousButtonCollapsed(displayState)
+ local info = displayState.prevButtonInfo;
+ if info then
+ return info.isHeader and info.isCollapsed;
+ end
+
+ return false;
end
local function QuestLogQuests_AddCampaignHeaderButton(displayState, info)
@@ -1168,15 +1189,13 @@ local function QuestLogQuests_AddCampaignHeaderButton(displayState, info)
displayState.campaignShown = true;
button.topPadding = 0;
else
- if displayState.lastHeaderCollapsed then
+ if QuestLogQuests_IsPreviousButtonCollapsed(displayState) then
button.topPadding = 0;
else
button.topPadding = 12;
end
end
- displayState.lastHeaderCollapsed = button:IsCollapsed();
-
return button;
end
@@ -1198,6 +1217,16 @@ function CovenantCallingsHeaderMixin:OnLoadCovenantCallings()
EventRegistry:RegisterCallback("CovenantCallings.CallingsUpdated", self.UpdateText, self);
end
+function CovenantCallingsHeaderMixin:UpdateBG()
+ local covenantData = C_Covenants.GetCovenantData(C_Covenants.GetActiveCovenantID());
+
+ if covenantData then
+ local bgAtlas = GetFinalNameFromTextureKit("Callings-Header-%s", covenantData.textureKit);
+ self.HighlightBackground:SetAtlas(bgAtlas, TextureKitConstants.UseAtlasSize);
+ self.Background:SetAtlas(bgAtlas, TextureKitConstants.UseAtlasSize);
+ end
+end
+
function CovenantCallingsHeaderMixin:UpdateText()
CovenantCalling_CheckCallings();
self:SetText(QUEST_LOG_COVENANT_CALLINGS_HEADER:format(CovenantCalling_GetCompletedCount(), Constants.Callings.MaxCallings));
@@ -1208,6 +1237,13 @@ local function QuestLogQuests_AddCovenantCallingsHeaderButton(displayState, info
QuestLogQuests_SetupStandardHeaderButton(button, displayState, info);
button.SelectedTexture:SetShown(not info.isCollapsed);
button:UpdateText();
+ button:UpdateBG();
+
+ button.topPadding = 20; -- Set the default
+ if QuestLogQuests_IsPreviousButtonCollapsed(displayState) then
+ button.topPadding = 0;
+ end
+
return button;
end
@@ -1238,6 +1274,7 @@ local function QuestLogQuests_AddHeaderButton(displayState, info)
end
displayState.prevButton = button;
+ displayState.prevButtonInfo = info;
button:Show();
end
diff --git a/Interface/FrameXML/QuestMapFrame.xml b/Interface/FrameXML/QuestMapFrame.xml
index 2da83b137ad026eb94f3b082a699502cc841f4da..745dfd536ab3d441c0d14b3425644afe531e0230 100644
--- a/Interface/FrameXML/QuestMapFrame.xml
+++ b/Interface/FrameXML/QuestMapFrame.xml
@@ -72,7 +72,7 @@
-
+
@@ -90,7 +90,7 @@
-
+
@@ -102,7 +102,7 @@
-
+
@@ -110,6 +110,8 @@
+
+
diff --git a/Interface/FrameXML/QuestPOI.lua b/Interface/FrameXML/QuestPOI.lua
index f43e19c221b34f01daf9382bd797a66292032b2c..23cbbbf2bc629c96d92be8124b0d110f9704d527 100644
--- a/Interface/FrameXML/QuestPOI.lua
+++ b/Interface/FrameXML/QuestPOI.lua
@@ -313,6 +313,10 @@ local function QuestPOI_GetButtonInternal(parent, questID, style, index)
end
function QuestPOI_GetButton(parent, questID, style, index)
+ if C_QuestLog.IsQuestCalling(questID) then
+ return;
+ end
+
local poiButton = QuestPOI_GetButtonInternal(parent, questID, style, index);
QuestPOI_UpdateButtonStyle(poiButton);
poiButton:Show();
diff --git a/Interface/FrameXML/QuickKeybind.lua b/Interface/FrameXML/QuickKeybind.lua
index c877f1f84693132075d985683219f35cbffcd781..c769109eccf7eea269e7312b4907a4db850b3218 100644
--- a/Interface/FrameXML/QuickKeybind.lua
+++ b/Interface/FrameXML/QuickKeybind.lua
@@ -13,6 +13,7 @@ function QuickKeybindButtonTemplateMixin:QuickKeybindButtonOnEnter()
self:QuickKeybindButtonSetTooltip();
self.oldUpdateScript = self:GetScript("OnUpdate");
self:SetScript("OnUpdate", self.QuickKeybindButtonOnUpdate);
+ self.changedUpdateScript = true;
self.QuickKeybindHighlightTexture:SetAlpha(1);
end
end
@@ -24,7 +25,10 @@ function QuickKeybindButtonTemplateMixin:QuickKeybindButtonOnLeave()
self.QuickKeybindHighlightTexture:SetAlpha(idleAlpha);
end
QuickKeybindTooltip:Hide();
- self:SetScript("OnUpdate", self.oldUpdateScript);
+ if ( self.changedUpdateScript ) then
+ self:SetScript("OnUpdate", self.oldUpdateScript);
+ self.changedUpdateScript = nil;
+ end
end
function QuickKeybindButtonTemplateMixin:QuickKeybindButtonOnMouseWheel(delta)
diff --git a/Interface/FrameXML/RestrictedInfrastructure.lua b/Interface/FrameXML/RestrictedInfrastructure.lua
index bf7a5a3689cd094a0333a0045e191eac5b42b797..10a481fa35202ee3bdcb115dcf01e2a0dd42f47b 100644
--- a/Interface/FrameXML/RestrictedInfrastructure.lua
+++ b/Interface/FrameXML/RestrictedInfrastructure.lua
@@ -646,6 +646,22 @@ string.rtgsub = RestrictedTable_rtgsub;
-- Working environments and control handles
local function ManagedEnvironmentsIndex(t, k)
+ if (not issecure() or type(k) ~= "table") then
+ error("Invalid access of managed environments table");
+ return;
+ end;
+
+ local ownerHandle = GetFrameHandle(k, true);
+ if (not ownerHandle) then
+ error("Invalid access of managed environments table (bad frame)");
+ return;
+ end
+ local _, explicitProtected = ownerHandle:IsProtected();
+ if (not explicitProtected) then
+ error("Invalid access of managed environments table (not protected)");
+ return;
+ end
+
local e = RestrictedTable_create();
e._G = e;
e.owner = ownerHandle;
@@ -661,22 +677,6 @@ setmetatable(LOCAL_Managed_Environments,
});
function GetManagedEnvironment(envKey, withCreate)
- if (not issecure() or type(envKey) ~= "table") then
- error("Invalid access of managed environments table");
- return;
- end;
-
- local ownerHandle = GetFrameHandle(envKey, true);
- if (not ownerHandle) then
- error("Invalid access of managed environments table (bad frame)");
- return;
- end
- local _, explicitProtected = ownerHandle:IsProtected();
- if (not explicitProtected) then
- error("Invalid access of managed environments table (not protected)");
- return;
- end
-
if (withCreate) then
return LOCAL_Managed_Environments[envKey];
else
diff --git a/Interface/FrameXML/RuneforgeUtil.lua b/Interface/FrameXML/RuneforgeUtil.lua
index 49153fcee053ab9ba687ccef0b1e2fae4a5726ac..f7de7e07c1b8d73b1f6ab56bfe49d8e8188da94b 100644
--- a/Interface/FrameXML/RuneforgeUtil.lua
+++ b/Interface/FrameXML/RuneforgeUtil.lua
@@ -1,4 +1,100 @@
+RuneforgePowerBaseMixin = {};
+
+function RuneforgePowerBaseMixin:OnHide()
+ self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
+end
+
+function RuneforgePowerBaseMixin:OnEvent(event, ...)
+ if event == "RUNEFORGE_POWER_INFO_UPDATED" then
+ local powerID = ...;
+ if powerID == self:GetPowerID() then
+ self:SetPowerID(powerID);
+
+ if self:IsMouseOver() then
+ self:OnEnter();
+ end
+ end
+ end
+end
+
+function RuneforgePowerBaseMixin:OnEnter()
+ local powerInfo = self:GetPowerInfo();
+ if powerInfo then
+ GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
+
+ GameTooltip_SetTitle(GameTooltip, powerInfo.name, LEGENDARY_ORANGE_COLOR);
+
+ GameTooltip_AddColoredLine(GameTooltip, powerInfo.description, GREEN_FONT_COLOR);
+
+ if not self.slotNames then
+ self.slotNames = C_LegendaryCrafting.GetRuneforgePowerSlots(self:GetPowerID());
+ end
+
+ if #self.slotNames > 0 then
+ GameTooltip_AddBlankLineToTooltip(GameTooltip);
+ GameTooltip_AddHighlightLine(GameTooltip, RUNEFORGE_LEGENDARY_POWER_TOOLTIP_SLOT_HEADER);
+ GameTooltip_AddNormalLine(GameTooltip, table.concat(self.slotNames, LIST_DELIMITER));
+ end
+
+ if not self:ShouldHideSource() and powerInfo.source then
+ GameTooltip_AddBlankLineToTooltip(GameTooltip);
+ GameTooltip_AddNormalLine(GameTooltip, powerInfo.source);
+ end
+
+ if self:ShouldShowUnavailableError() and (powerInfo.state ~= Enum.RuneforgePowerState.Available) then
+ GameTooltip_AddBlankLineToTooltip(GameTooltip);
+ GameTooltip_AddErrorLine(GameTooltip, RUNEFORGE_LEGENDARY_POWER_TOOLTIP_NOT_COLLECTED);
+ end
+
+ GameTooltip:Show();
+ end
+end
+
+function RuneforgePowerBaseMixin:OnLeave()
+ GameTooltip_Hide();
+end
+
+function RuneforgePowerBaseMixin:SetPowerID(powerID)
+ local oldPowerID = self.powerID;
+
+ self.powerID = powerID;
+ self.slotNames = nil;
+
+ local hasPowerID = powerID ~= nil;
+ self.powerInfo = hasPowerID and C_LegendaryCrafting.GetRuneforgePowerInfo(powerID) or nil;
+ if hasPowerID then
+ self:RegisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
+ else
+ self:UnregisterEvent("RUNEFORGE_POWER_INFO_UPDATED");
+ end
+
+ self:OnPowerSet(oldPowerID, powerID);
+end
+
+function RuneforgePowerBaseMixin:GetPowerID()
+ return self.powerID;
+end
+
+function RuneforgePowerBaseMixin:GetPowerInfo()
+ return self.powerInfo;
+end
+
+function RuneforgePowerBaseMixin:OnPowerSet(oldPowerID, newPowerID)
+ -- override in your mixin.
+end
+
+function RuneforgePowerBaseMixin:ShouldHideSource()
+ -- override in your mixin.
+ return false;
+end
+
+function RuneforgePowerBaseMixin:ShouldShowUnavailableError()
+ -- override in your mixin.
+ return false;
+end
+
+
RuneforgeEffectOwnerMixin = {};
function RuneforgeEffectOwnerMixin:GetRuneforgeFrame()
diff --git a/Interface/FrameXML/SplashFrame.lua b/Interface/FrameXML/SplashFrame.lua
index e111663b1c19c75f6f45f017f21bfde364a65d68..4efdbbfe17dddb29165d287b79dc7f480ba00dc2 100644
--- a/Interface/FrameXML/SplashFrame.lua
+++ b/Interface/FrameXML/SplashFrame.lua
@@ -44,6 +44,10 @@ function SplashFrameMixin:SetupFrame(screenInfo)
return;
end
+ if(screenInfo.soundKitID > 0) then
+ PlaySound(screenInfo.soundKitID);
+ end
+
SetupTextureKitOnRegions(screenInfo.textureKit, self, splashFrameTextureRegions, TextureKitConstants.SetVisibility, TextureKitConstants.UseAtlasSize);
self.BottomTexture:SetSize(371, 137);
diff --git a/Interface/FrameXML/TransmogUtil.lua b/Interface/FrameXML/TransmogUtil.lua
index 29f03840d207464f18294d91046eaf8d41f739f1..3cc2ef20e7614314c6038f2061900ce7f693c926 100644
--- a/Interface/FrameXML/TransmogUtil.lua
+++ b/Interface/FrameXML/TransmogUtil.lua
@@ -103,13 +103,15 @@ function TransmogUtil.GetSetIcon(setID)
local bestItemID;
local bestSortOrder = 100;
local sources = C_TransmogSets.GetSetSources(setID);
- for sourceID, collected in pairs(sources) do
- local sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID);
- if sourceInfo then
- local sortOrder = EJ_GetInvTypeSortOrder(sourceInfo.invType);
- if sortOrder < bestSortOrder then
- bestSortOrder = sortOrder;
- bestItemID = sourceInfo.itemID;
+ if sources then
+ for sourceID, collected in pairs(sources) do
+ local sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID);
+ if sourceInfo then
+ local sortOrder = EJ_GetInvTypeSortOrder(sourceInfo.invType);
+ if sortOrder < bestSortOrder then
+ bestSortOrder = sortOrder;
+ bestItemID = sourceInfo.itemID;
+ end
end
end
end
diff --git a/Interface/FrameXML/UIParent.lua b/Interface/FrameXML/UIParent.lua
index 45fcd6118cb4a8142150248b4ef9934d23362a2d..7999acdc96942face268ca40ebfb37aa2a94a032 100644
--- a/Interface/FrameXML/UIParent.lua
+++ b/Interface/FrameXML/UIParent.lua
@@ -73,7 +73,6 @@ UIPanelWindows["AnimaDiversionFrame"] = { area = "center", pushable = 0, x
UIPanelWindows["CinematicFrame"] = { area = "full", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 1 };
UIPanelWindows["ChatConfigFrame"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 1 };
UIPanelWindows["ChromieTimeFrame"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 0, allowOtherPanels = 1 };
-UIPanelWindows["CovenantPreviewFrame"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 0, allowOtherPanels = 1 };
UIPanelWindows["PVPMatchScoreboard"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 1, ignoreControlLost = true, };
UIPanelWindows["PVPMatchResults"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 1, ignoreControlLost = true, };
UIPanelWindows["PlayerChoiceFrame"] = { area = "center", pushable = 0, xoffset = -16, yoffset = 12, whileDead = 0, allowOtherPanels = 1 };
@@ -4302,6 +4301,8 @@ function ToggleGameMenu()
SplashFrame:Close();
elseif ( ChallengesKeystoneFrame and ChallengesKeystoneFrame:IsShown() ) then
ChallengesKeystoneFrame:Hide();
+ elseif ( CovenantPreviewFrame and CovenantPreviewFrame:IsShown()) then
+ CovenantPreviewFrame:HandleEscape();
elseif ( CanAutoSetGamePadCursorControl(false) and (not IsModifierKeyDown()) ) then
SetGamePadCursorControl(false);
else
diff --git a/Interface/FrameXML/VoiceChatHeadsetButton.lua b/Interface/FrameXML/VoiceChatHeadsetButton.lua
index 9386e4c0994898d0131ba0a7d8e1de340c66750d..c1fe651c03c30e6ea7114b68abf63717cf1f3bcd 100644
--- a/Interface/FrameXML/VoiceChatHeadsetButton.lua
+++ b/Interface/FrameXML/VoiceChatHeadsetButton.lua
@@ -221,19 +221,27 @@ function VoiceChatHeadsetButtonMixin:OnLeave()
GameTooltip:Hide();
end
+function VoiceChatHeadsetButtonMixin:GetClubErrorReason()
+ if self.clubId then
+ return C_VoiceChat.GetJoinClubVoiceChannelError(self.clubId);
+ end
+
+ return nil;
+end
+
function VoiceChatHeadsetButtonMixin:ShowTooltip()
local isActive = self:IsVoiceActive();
local message = isActive and VOICE_CHAT_LEAVE or VOICE_CHAT_JOIN;
local tooltip = GameTooltip;
tooltip:SetOwner(self, "ANCHOR_RIGHT");
-
- local errorReason = C_VoiceChat.GetJoinClubVoiceChannelError(self.clubId);
+
+ local errorReason = self:GetClubErrorReason();
if errorReason then
if errorReason == Enum.VoiceChannelErrorReason.IsBattleNetChannel then
- GameTooltip_AddErrorLine(tooltip, ERR_GROUPS_VOICE_CHAT_DISABLED);
+ GameTooltip_SetTitle(tooltip, ERR_GROUPS_VOICE_CHAT_DISABLED, RED_FONT_COLOR);
else
- GameTooltip_AddErrorLine(tooltip, VOICECHAT_DISABLED);
+ GameTooltip_SetTitle(tooltip, VOICECHAT_DISABLED, RED_FONT_COLOR);
end
else
GameTooltip_SetTitle(tooltip, message);
diff --git a/Interface/FrameXML/WarCampaignTemplates.lua b/Interface/FrameXML/WarCampaignTemplates.lua
index 8ba4d73db5a90c15545baf39b0a3d53eebea52be..afeb46ff6794e4da281c33f73b8b1a940450822c 100644
--- a/Interface/FrameXML/WarCampaignTemplates.lua
+++ b/Interface/FrameXML/WarCampaignTemplates.lua
@@ -320,7 +320,13 @@ CampaignCollapseButtonMixin = {};
function CampaignCollapseButtonMixin:OnClick()
local header = self:GetParent();
- header:SetCollapsed(not header:IsCollapsed());
+ local isCollapsed = header:IsCollapsed()
+ if(isCollapsed) then
+ PlaySound(SOUNDKIT.UI_JOURNEYS_EXPAND_HEADER);
+ else
+ PlaySound(SOUNDKIT.UI_JOURNEYS_COLLAPSE_HEADER);
+ end
+ header:SetCollapsed(not isCollapsed);
end
function CampaignCollapseButtonMixin:OnEnter()
@@ -350,9 +356,11 @@ end
function CampaignLoreButtonMixin:OnClick()
if self.mode == "overview" then
+ PlaySound(SOUNDKIT.UI_JOURNEYS_OPEN_LORE_BOOK);
HelpTip:Hide(QuestScrollFrame, CAMPAIGN_LORE_BUTTON_HELPTIP);
EventRegistry:TriggerEvent("QuestLog.ShowCampaignOverview", self:GetParent():GetCampaign():GetID());
elseif self.mode == "questlog" then
+ PlaySound(SOUNDKIT.UI_JOURNEYS_CLOSE_LORE_BOOK);
EventRegistry:TriggerEvent("QuestLog.HideCampaignOverview");
end
end
diff --git a/Interface/GlueXML/CreditsFrame.lua b/Interface/GlueXML/CreditsFrame.lua
index 6126cc5dd8b1e7cff81b66cb8b583be4f0c768b4..9b2fcacae5d1c7a8a43ad1a56de0d61b6dbc9c2b 100644
--- a/Interface/GlueXML/CreditsFrame.lua
+++ b/Interface/GlueXML/CreditsFrame.lua
@@ -13,7 +13,7 @@ function CreditsFrameMixin:OnHide()
end
function CreditsFrameMixin:Update()
- PlayGlueMusic(SafeGetExpansionData(GLUE_CREDITS_SOUND_KITS, self.expansion));
+ PlayCreditsMusic(SafeGetExpansionData(GLUE_CREDITS_SOUND_KITS, self.expansion));
local expansionInfo = GetExpansionDisplayInfo(self.expansion);
if expansionInfo then
self.Logo:SetTexture(expansionInfo.logo);
@@ -28,6 +28,7 @@ function CreditsFrameMixin:Update()
-- Set Credits Text
self.ScrollFrame.Text:SetText(GetCreditsText(self.expansion));
+ self.Slider:SetValue(0);
end
function CreditsFrameMixin:Switch(expansion)
@@ -114,6 +115,7 @@ function CreditsFrameMixin:OnUpdate(elapsed)
end
self.ScrollFrame:SetVerticalScroll(self.ScrollFrame.scroll);
+ self.Slider:SetValue(self.ScrollFrame.scroll);
end
function CreditsFrameMixin:OnKeyDown(key)
@@ -144,6 +146,7 @@ end
function CreditsScrollFrameMixin:UpdateMax()
self.scrollMax = self:GetVerticalScrollRange() + 768;
+ self:GetParent().Slider:SetMinMaxValues(0, self.scrollMax);
end
CreditsExpansionListMixin = {}
diff --git a/Interface/GlueXML/CreditsFrame.xml b/Interface/GlueXML/CreditsFrame.xml
index f95a32a3b3e4ae195d298362499d484fd5f611b8..bc4c24f88ffed79e996894f2c60070077f3790ef 100644
--- a/Interface/GlueXML/CreditsFrame.xml
+++ b/Interface/GlueXML/CreditsFrame.xml
@@ -20,6 +20,7 @@
self:GetParent():SetSelectedExpansion(self:GetID());
+ self.Highlight:Hide();
if not self.Selection:IsShown() then
@@ -35,7 +36,9 @@
-
+
+
+
@@ -49,7 +52,7 @@
-
+
@@ -127,6 +130,25 @@
+
+
+
+
+
+
+
+
+
+
+
+ CreditsFrame.ScrollFrame.scroll = value;
+ CreditsFrame.ScrollFrame:SetVerticalScroll(value);
+
+
+
+
+
+
diff --git a/Interface/GlueXML/GlueParent.lua b/Interface/GlueXML/GlueParent.lua
index 9f774a2cd33aab9db8cd77b47e5c7cb44d77935f..c4d7f05f6f0e903e836d8703d839420033d96a94 100644
--- a/Interface/GlueXML/GlueParent.lua
+++ b/Interface/GlueXML/GlueParent.lua
@@ -643,7 +643,7 @@ function UpgradeAccount()
ToggleStoreUI();
else
PlaySound(SOUNDKIT.GS_LOGIN_NEW_ACCOUNT);
- LoadURLIndex(2);
+ LoadURLIndex(22);
end
else
if C_StorePublic.DoesGroupHavePurchaseableProducts(WOW_GAMES_CATEGORY_ID) then
diff --git a/Interface/GlueXML/OptionsFrameTemplates.lua b/Interface/GlueXML/OptionsFrameTemplates.lua
index 444e3454684394e25c5222dcebcdc5c1153e328f..6be105275d59f45c037a6de9740dcdea010d07de 100644
--- a/Interface/GlueXML/OptionsFrameTemplates.lua
+++ b/Interface/GlueXML/OptionsFrameTemplates.lua
@@ -1,5 +1,6 @@
-- if you change something here you probably want to change the frame version too
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
-- not totally necessary in all cases in this file (since Interface Options are independent), but
diff --git a/Interface/GlueXML/OptionsPanelTemplates.lua b/Interface/GlueXML/OptionsPanelTemplates.lua
index fc4ea06f3849e1b05d7b629d1611c1fa2822d6d1..9c66aaf5f9c0637cf1faa99670af1f1e8706dc97 100644
--- a/Interface/GlueXML/OptionsPanelTemplates.lua
+++ b/Interface/GlueXML/OptionsPanelTemplates.lua
@@ -11,6 +11,7 @@ local CONTROL_KEY = "controlkey";
local SHIFT_KEY = "shiftkey";
local NO_KEY = "none";
+local securecall = securecall;
local next = next;
local function SecureNext(elements, key)
return securecall(next, elements, key);
diff --git a/Interface/GlueXML/constants.lua b/Interface/GlueXML/constants.lua
index f6620b6427a128a1911a2d52e17fda77d15ad3ca..a213ef86897492dc514faddeccaf3bd9f063926e 100644
--- a/Interface/GlueXML/constants.lua
+++ b/Interface/GlueXML/constants.lua
@@ -16,6 +16,7 @@ EXPANSION_GLUE_AMBIENCE = {
[LE_EXPANSION_WARLORDS_OF_DRAENOR] = SOUNDKIT.AMB_GLUESCREEN_WARLORDS_OF_DRAENOR,
[LE_EXPANSION_LEGION] = SOUNDKIT.AMB_GLUESCREEN_LEGION,
[LE_EXPANSION_BATTLE_FOR_AZEROTH] = SOUNDKIT.AMB_GLUESCREEN_BATTLE_FOR_AZEROTH,
+ [LE_EXPANSION_SHADOWLANDS] = SOUNDKIT.AMB_GLUESCREEN_SHADOWLANDS,
};
--Music
@@ -27,6 +28,7 @@ EXPANSION_GLUE_MUSIC = {
[LE_EXPANSION_WARLORDS_OF_DRAENOR] = SOUNDKIT.MUS_60_MAIN_TITLE,
[LE_EXPANSION_LEGION] = SOUNDKIT.MUS_70_MAIN_TITLE,
[LE_EXPANSION_BATTLE_FOR_AZEROTH] = SOUNDKIT.MUS_80_MAIN_TITLE,
+ [LE_EXPANSION_SHADOWLANDS] = SOUNDKIT.MUS_90_MAIN_TITLE,
};
GLUE_AMBIENCE_TRACKS = {
@@ -171,6 +173,7 @@ GLUE_CREDITS_SOUND_KITS = {
[LE_EXPANSION_WARLORDS_OF_DRAENOR] = SOUNDKIT.MENU_CREDITS06,
[LE_EXPANSION_LEGION] = SOUNDKIT.MENU_CREDITS07,
[LE_EXPANSION_BATTLE_FOR_AZEROTH] = SOUNDKIT.MENU_CREDITS08,
+ [LE_EXPANSION_SHADOWLANDS] = SOUNDKIT.MENU_CREDITS09,
};
AUTO_LOGIN_WAIT_TIME = 1.75;
diff --git a/Interface/SharedXML/CustomBindingButtonTemplate.xml b/Interface/SharedXML/CustomBindingButtonTemplate.xml
index f14224504bf77ace5f9aa86a1845352f8f3de879..49933ea8aaa64f9ee79ab81076aa6378e6078e03 100644
--- a/Interface/SharedXML/CustomBindingButtonTemplate.xml
+++ b/Interface/SharedXML/CustomBindingButtonTemplate.xml
@@ -17,6 +17,8 @@
+
+
diff --git a/Interface/SharedXML/DressUpModelFrameMixin.lua b/Interface/SharedXML/DressUpModelFrameMixin.lua
index d4a1c9d1acf78310e6d0a16e2887aa945e365f68..942687310a048dc3c77c808205699e4a937d8ae7 100644
--- a/Interface/SharedXML/DressUpModelFrameMixin.lua
+++ b/Interface/SharedXML/DressUpModelFrameMixin.lua
@@ -129,15 +129,33 @@ end
function TransmogAndMountDressupFrameMixin:OnHide()
self.mountID = nil;
self.transmogSetID = nil;
+ self.removeWeapons = nil;
self.ShowMountCheckButton:SetChecked(false);
end
+function TransmogAndMountDressupFrameMixin:RemoveWeapons()
+ local playerActor = self.ModelScene:GetPlayerActor();
+
+ if (not playerActor) then
+ return true;
+ end
+
+ local mainHandSlotID = GetInventorySlotInfo("MAINHANDSLOT");
+ local offHandSlotID = GetInventorySlotInfo("SECONDARYHANDSLOT");
+ playerActor:UndressSlot(mainHandSlotID);
+ playerActor:UndressSlot(offHandSlotID);
+end
+
function TransmogAndMountDressupFrameMixin:CheckButtonOnClick()
if(self.ShowMountCheckButton:GetChecked()) then
DressUpMount(self.mountID);
else
local sources = C_TransmogSets.GetAllSourceIDs(self.transmogSetID);
DressUpTransmogSet(sources);
+
+ if(self.removeWeapons) then
+ self:RemoveWeapons();
+ end
end
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON);
end
diff --git a/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedEffectController.lua b/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedEffectController.lua
index ff62b7fd0da65f095914d150d4f0043fe23ba6aa..a506f2304b3fd00c601c75a33cf141757753c824 100644
--- a/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedEffectController.lua
+++ b/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedEffectController.lua
@@ -157,14 +157,15 @@ function ScriptAnimatedEffectControllerMixin:UpdateActorDynamicOffsets()
end
function ScriptAnimatedEffectControllerMixin:CancelEffect()
+ self:InternalCancelEffect();
+end
+
+function ScriptAnimatedEffectControllerMixin:InternalCancelEffect(skipRemovingController)
if not self.effectStarted then
self.cancelDelayedStart = true;
- else
- self:InternalCancelEffect();
+ return;
end
-end
-function ScriptAnimatedEffectControllerMixin:InternalCancelEffect(skipRemovingController)
if not skipRemovingController then
self.modelScene:RemoveEffectController(self);
end
diff --git a/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedModelSceneActor.lua b/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedModelSceneActor.lua
index d1d57440b0643f0c6ddfc8da919f8a4721de81ce..929c44ead910a8c6da7ee7cc8edf1e17e737a34e 100644
--- a/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedModelSceneActor.lua
+++ b/Interface/SharedXML/ScriptedAnimations/ScriptAnimatedModelSceneActor.lua
@@ -127,8 +127,7 @@ function ScriptAnimatedModelSceneActorMixin:SetEffect(effectDescription, source,
end
end
- -- We need to reset any state that may have been modified by transformations.
- self:SetAlpha(1.0);
+ self:SetAlpha(effectDescription.startingAlpha or 1.0);
self:DeltaUpdate(0);
end
diff --git a/Interface/SharedXML/ScriptedAnimations/ScriptedAnimationEffects.lua b/Interface/SharedXML/ScriptedAnimations/ScriptedAnimationEffects.lua
index 70e6a23cf92212b8b41841d38ff13a6fbe99e0ac..4945cb11918d120e125a276edc4121db6be02f54 100644
--- a/Interface/SharedXML/ScriptedAnimations/ScriptedAnimationEffects.lua
+++ b/Interface/SharedXML/ScriptedAnimations/ScriptedAnimationEffects.lua
@@ -256,6 +256,10 @@ local TrajectoryToCallback = {
-- An additional column to support an override for the particle scale, which will match the actor
-- scale by default.
-- particleOverrideScale: the override scale for particles.
+--
+-- (5) Starting alpha
+-- An additional column to support an override for the effect actor's starting alpha.
+-- startingAlpha: the effect actor's starting alpha.
Enum.ScriptedAnimationTransformation = {};
Enum.ScriptedAnimationTransformation.Alpha = 1;
@@ -348,9 +352,45 @@ local ScriptAnimationTableExtension = {
[89] = {
animation = 215,
},
+
+ -- Covenant Toast Looping Sounds.
+ [91] = {
+ loopingSoundKitID = SOUNDKIT.UI_COVENANT_CHOICE_CELEBRATION_ANIMATION,
+ },
+ [92] = {
+ loopingSoundKitID = SOUNDKIT.UI_COVENANT_CHOICE_CELEBRATION_ANIMATION,
+ },
+ [93] = {
+ loopingSoundKitID = SOUNDKIT.UI_COVENANT_CHOICE_CELEBRATION_ANIMATION,
+ },
+ [94] = {
+ loopingSoundKitID = SOUNDKIT.UI_COVENANT_CHOICE_CELEBRATION_ANIMATION,
+ },
+ [96] = {
+ loopingSoundKitID = SOUNDKIT.UI_COVENANT_CHOICE_CELEBRATION_ANIMATION,
+ },
+
[98] = {
animation = 158,
},
+
+ [119] = {
+ startingAlpha = 0.2,
+ },
+ [120] = {
+ startingAlpha = 0.3,
+ },
+ [121] = {
+ startingAlpha = 0.2,
+ },
+ [122] = {
+ startingAlpha = 0.3,
+ },
+ [123] = {
+ startingAlpha = 0.4,
+ },
+
+
};
-- Split into chunks of 10. These effects were created with old-style particle scaling,
@@ -363,7 +403,7 @@ local LegacyParticleScaleEffects = {
65, 77, 67, 68, 70, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 101,
+ 97, 101, 119, 120, 121, 122, 123
};
for i, effectID in ipairs(LegacyParticleScaleEffects) do
diff --git a/Interface/SharedXML/SharedColorConstants.lua b/Interface/SharedXML/SharedColorConstants.lua
index feaa7034f1460a859187466633db8b432376e660..200208a89aa32c6c86b93a5959eb1fa3a5fc4be7 100644
--- a/Interface/SharedXML/SharedColorConstants.lua
+++ b/Interface/SharedXML/SharedColorConstants.lua
@@ -33,8 +33,8 @@ LIGHTGRAY_FONT_COLOR = CreateColor(0.6, 0.6, 0.6);
PAPER_FRAME_EXPANDED_COLOR = CreateColor(0.929, 0.788, 0.620);
PAPER_FRAME_COLLAPSED_COLOR = CreateColor(0.827, 0.659, 0.463);
PAPER_FRAME_DARK_COLOR = CreateColor(0.25, 0.1484375, 0.02);
-PAPER_FRAME_TITLE_COLOR = CreateColor(0.1, 0.1, 0.1);
-PAPER_FRAME_TEXT_COLOR = CreateColor(.208, 0, 0);
+PAPER_FRAME_TITLE_COLOR = CreateColor(0.208, 0, 0);
+PAPER_FRAME_TEXT_COLOR = CreateColor(0.208, 0, 0);
INVALID_EQUIPMENT_COLOR = CreateColor(.598, 0, 0);
ARTIFACT_BAR_COLOR = CreateColor(0.901, 0.8, 0.601);
diff --git a/Interface/SharedXML/SharedFonts.xml b/Interface/SharedXML/SharedFonts.xml
index 1937d5ad3995740cd6b11bbdcabd06b1ec0e38b8..235810c9c630a5223437337b2d518ae697e01e5f 100644
--- a/Interface/SharedXML/SharedFonts.xml
+++ b/Interface/SharedXML/SharedFonts.xml
@@ -466,6 +466,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Interface/SharedXML/SharedUIPanelTemplates.lua b/Interface/SharedXML/SharedUIPanelTemplates.lua
index 389b70b7ea580fa42eef6e87ae517e3d2a1fa7d8..553195874a4bb737191e90cd6f5a726886ef629e 100644
--- a/Interface/SharedXML/SharedUIPanelTemplates.lua
+++ b/Interface/SharedXML/SharedUIPanelTemplates.lua
@@ -1563,17 +1563,24 @@ function SelectionPopoutButtonMixin:UpdatePopout()
end
end
+ local maxDetailsWidth = 0;
for index, selectionData in ipairs(self.selections) do
local button = self.buttonPool:Acquire();
local selectionInfo = self.selections[index];
local isSelected = (index == self.selectedIndex);
button:SetupEntry(selectionInfo, index, isSelected, numColumns > 1, hasIneligibleChoice);
- button:Show();
+ maxDetailsWidth = math.max(maxDetailsWidth, button.SelectionDetails:GetWidth());
table.insert(buttons, button);
end
+ for _, button in ipairs(buttons) do
+ button.SelectionDetails:SetWidth(maxDetailsWidth);
+ button:Layout();
+ button:Show();
+ end
+
if stride ~= self.lastStride then
self.layout = AnchorUtil.CreateGridLayout(GridLayoutMixin.Direction.TopLeftToBottomRightVertical, stride);
self.lastStride = stride;
@@ -1807,7 +1814,6 @@ function SelectionPopoutEntryMixin:SetupEntry(selectionData, index, isSelected,
self.SelectionDetails:SetupDetails(selectionData, index, isSelected, hasAFailedReq);
self.SelectionDetails:AdjustWidth(multipleColumns, 116);
- self:Layout();
end
function SelectionPopoutEntryMixin:GetTooltipText()
diff --git a/Interface/SharedXML/SharedUIPanelTemplates.xml b/Interface/SharedXML/SharedUIPanelTemplates.xml
index 755adfe881529e795ac666d443be900fa953d20c..af59016f9cb7456994ed8ae4a4a169f65c76ea91 100644
--- a/Interface/SharedXML/SharedUIPanelTemplates.xml
+++ b/Interface/SharedXML/SharedUIPanelTemplates.xml
@@ -2175,7 +2175,7 @@
-
+
diff --git a/Interface/SharedXML/SoundKitConstants.lua b/Interface/SharedXML/SoundKitConstants.lua
index 06c25fcb41b20ddbfef5f8e54a0227a84925c94a..40e08dd16afe0038aaf8cbf9c5e0c9b3517345c9 100644
--- a/Interface/SharedXML/SoundKitConstants.lua
+++ b/Interface/SharedXML/SoundKitConstants.lua
@@ -329,6 +329,9 @@ SOUNDKIT = {
MUS_80_MAIN_TITLE = 113559,
MENU_CREDITS08 = 113560,
UI_AZERITE_EMPOWERED_ITEM_LOOT_TOAST = 118238,
+ MENU_CREDITS09 = 170713,
+ MUS_90_MAIN_TITLE = 170711,
+ AMB_GLUESCREEN_SHADOWLANDS = 170714,
UI_80_AZERITEARMOR_SELECTBUFF = 114993,
UI_80_AZERITEARMOR_BUFFAVAILABLE = 116657,
@@ -459,7 +462,7 @@ SOUNDKIT = {
UI_MAW_BUFFS_ANIMA_POWERS_BUTTON = 168443,
UI_TORGHAST_WAYFINDER_OPEN_UI = 168446,
- UI_TORGHAST_WAYFINDER_SELECT_DIFFICULTY = 168448,
+ UI_TORGHAST_WAYFINDER_SELECT_DIFFICULTY = 170723,
UI_TORGHAST_WAYFINDER_OPEN_PORTAL = 168449,
UI_TORGHAST_WAYFINDER_CLOSE_UI = 168453,
UI_TORGHAST_WAYFINDER_PAGING_CLICK = 168457,
@@ -476,6 +479,23 @@ SOUNDKIT = {
UI_MAP_WAYPOINT_CHAT_SHARE = 170271,
UI_MAP_WAYPOINT_CONTROL_CLICK = 170272,
UI_MAP_WAYPOINT_REMOVE = 170273,
+
+ UI_JOURNEYS_EXPAND_HEADER = 170565,
+ UI_JOURNEYS_COLLAPSE_HEADER = 170566,
+ UI_JOURNEYS_OPEN_LORE_BOOK = 170567,
+ UI_JOURNEYS_CLOSE_LORE_BOOK = 170568,
+
+ UI_9_0_CRAFTING_CLICK_OPTIONAL_REAGENT_SLOT = 170559,
+ UI_9_0_CRAFTING_CLICK_MAT_TO_SLOT = 170562,
+ UI_9_0_CRAFTING_RIGHT_CLICK_REMOVE_REAGENT = 170563,
+ UI_9_0_CRAFTING_CLOSE_REAGENT_WINDOW = 170564,
+
+ UI_COVENANT_CHOICE_CLOSE = 170824,
+ UI_COVENANT_CHOICE_MOUSE_OVER_COVENANT = 170825,
+ UI_COVENANT_CHOICE_CLICK_BACK_BUTTON = 170827,
+ UI_COVENANT_CHOICE_CONFIRM_COVENANT = 170830,
+
+ UI_COVENANT_CHOICE_CELEBRATION_ANIMATION = 170833,
};
SOUNDKIT_ALLOW_DUPLICATES = false;
\ No newline at end of file