From 819e0b704826d72475964937a90db762344f86d0 Mon Sep 17 00:00:00 2001 From: TOM_RUS Date: Thu, 5 Nov 2020 05:00:43 +0300 Subject: [PATCH] WOW-36512patch9.0.2_Beta --- .../CovenantPreviewDocumentation.lua | 1 + .../CurrencyConstantsDocumentation.lua | 4 +- .../GarrisonConstantsDocumentation.lua | 8 ---- .../GarrisonInfoDocumentation.lua | 10 +++++ .../PlayerMentorshipDocumentation.lua | 5 +++ .../ScenarioInfoDocumentation.lua | 5 ++- .../AM_MissionDataProvider.lua | 2 +- .../Blizzard_BarberShopUI.lua | 2 + .../Blizzard_BindingUI/Blizzard_BindingUI.lua | 4 ++ .../AddOns/Blizzard_Channels/ChannelFrame.lua | 39 ++++++++++++----- .../Blizzard_CharacterCreate.lua | 15 ++++--- .../Blizzard_Communities/ClubFinder.lua | 2 +- .../Blizzard_Communities/CommunitiesList.lua | 3 +- .../Blizzard_CovenantPreviewUI.lua | 11 +++++ .../Blizzard_CovenantRenown.lua | 7 ++- .../Blizzard_CovenantRenownToast.lua | 18 +++++--- .../Blizzard_EncounterJournal.lua | 4 +- .../Blizzard_FlightMap/Blizzard_FlightMap.lua | 11 ++++- .../FM_FlightPathDataProvider.lua | 15 +++++-- .../Blizzard_CovenantMissionTemplates.lua | 20 +++++---- .../Blizzard_GarrisonMissionTemplates.lua | 9 +++- .../Blizzard_GarrisonSharedTemplates.lua | 2 +- .../Blizzard_AdventuresBoard.lua | 17 ++++++-- .../Blizzard_AdventuresCompleteScreen.lua | 2 +- .../Blizzard_AdventuresPuck.lua | 11 +++++ .../Blizzard_AdventuresRewardsScreen.lua | 20 ++++++--- .../Blizzard_CovenantMissionUI.lua | 22 +++++++++- .../Blizzard_CovenantMissionUI.xml | 2 +- .../Blizzard_GarrisonMissionUI.lua | 7 ++- .../Blizzard_HybridMinimap.lua | 4 +- .../Blizzard_HybridMinimap.xml | 8 ++-- .../Blizzard_TutorialHelper.lua | 6 +-- .../Blizzard_TutorialLogic.lua | 4 +- .../Blizzard_TutorialPointerFrame.lua | 3 ++ .../Blizzard_TutorialSteps.lua | 43 +++++++++++++++---- .../Blizzard_PVPMatch/PVPMatchResults.lua | 2 +- .../AddOns/Blizzard_PVPUI/Blizzard_PVPUI.lua | 32 ++++++++++---- .../Blizzard_PlayerChoiceUI.lua | 2 +- .../Blizzard_RuneforgeItemSlot.lua | 13 ++++-- Interface/FrameXML/ExtraAbilityContainer.lua | 6 ++- Interface/FrameXML/ExtraActionBar.lua | 6 +-- Interface/FrameXML/ExtraActionBar.xml | 2 +- Interface/FrameXML/ItemDisplay.lua | 7 +-- Interface/FrameXML/LevelUpDisplay.lua | 1 + Interface/FrameXML/MainMenuBarBagButtons.xml | 4 +- .../FrameXML/MainMenuBarMicroButtons.xml | 12 +++--- Interface/FrameXML/OverrideActionBar.lua | 6 +-- Interface/FrameXML/PVPUITemplates.lua | 13 ++---- Interface/FrameXML/QuickJoinToast.xml | 4 +- Interface/FrameXML/QuickKeybind.lua | 25 ++++++++++- Interface/FrameXML/QuickKeybind.xml | 3 +- Interface/FrameXML/UI.xsd | 2 + .../FrameXML/UnitPositionFrameTemplates.lua | 22 +++++++--- Interface/FrameXML/ZoneAbility.xml | 2 +- Interface/SharedXML/BindingUtil.lua | 8 ++-- 55 files changed, 368 insertions(+), 150 deletions(-) diff --git a/Interface/AddOns/Blizzard_APIDocumentation/CovenantPreviewDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/CovenantPreviewDocumentation.lua index 503ec415..2b41a63d 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/CovenantPreviewDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/CovenantPreviewDocumentation.lua @@ -105,6 +105,7 @@ local CovenantPreview = { Name = "uiTextureKit", Type = "string", Nilable = false }, { Name = "name", Type = "string", Nilable = false }, { Name = "description", Type = "string", Nilable = false }, + { Name = "sortOrder", Type = "number", Nilable = false }, }, }, }, diff --git a/Interface/AddOns/Blizzard_APIDocumentation/CurrencyConstantsDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/CurrencyConstantsDocumentation.lua index bf7b86bf..46d6e70e 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/CurrencyConstantsDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/CurrencyConstantsDocumentation.lua @@ -146,8 +146,8 @@ local CurrencyConstants = { Name = "GarrisonTalentTreeReset", Type = "CurrencySource", EnumValue = 44 }, { Name = "DailyReset", Type = "CurrencySource", EnumValue = 45 }, { Name = "AddConduitToCollection", Type = "CurrencySource", EnumValue = 46 }, - { Name = "Last", Type = "CurrencySource", EnumValue = 47 }, - { Name = "Barbershop", Type = "CurrencySource", EnumValue = 48 }, + { Name = "Barbershop", Type = "CurrencySource", EnumValue = 47 }, + { Name = "Last", Type = "CurrencySource", EnumValue = 48 }, }, }, { diff --git a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonConstantsDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonConstantsDocumentation.lua index f534fdfa..5b5d20ad 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonConstantsDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonConstantsDocumentation.lua @@ -357,14 +357,6 @@ local GarrisonConstants = { Name = "Type_9_0", Type = "GarrisonType", EnumValue = 111 }, }, }, - { - Name = "GarrisonConstsExposed", - Type = "Constants", - Values = - { - { Name = "GARRISON_AUTO_COMBATANT_FULL_HEAL_COST", Type = "number", Value = 100 }, - }, - }, }, }; diff --git a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua index b910d247..ab86d302 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/GarrisonInfoDocumentation.lua @@ -560,6 +560,15 @@ local GarrisonInfo = { Name = "followerDurability", Type = "number", Nilable = false }, }, }, + { + Name = "GarrisonFollowerHealed", + Type = "Event", + LiteralName = "GARRISON_FOLLOWER_HEALED", + Payload = + { + { Name = "followerID", Type = "string", Nilable = false }, + }, + }, { Name = "GarrisonFollowerListUpdate", Type = "Event", @@ -1086,6 +1095,7 @@ local GarrisonInfo = { Name = "maxHealth", Type = "number", Nilable = false }, { Name = "attack", Type = "number", Nilable = false }, { Name = "healingTimestamp", Type = "number", Nilable = false }, + { Name = "healCost", Type = "number", Nilable = false }, }, }, { diff --git a/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua index 98d8dd04..d6a3625f 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/PlayerMentorshipDocumentation.lua @@ -60,6 +60,11 @@ local PlayerMentorship = Events = { + { + Name = "MentorshipStatusChanged", + Type = "Event", + LiteralName = "MENTORSHIP_STATUS_CHANGED", + }, { Name = "NewcomerGraduation", Type = "Event", diff --git a/Interface/AddOns/Blizzard_APIDocumentation/ScenarioInfoDocumentation.lua b/Interface/AddOns/Blizzard_APIDocumentation/ScenarioInfoDocumentation.lua index c8b38f10..9bc86473 100644 --- a/Interface/AddOns/Blizzard_APIDocumentation/ScenarioInfoDocumentation.lua +++ b/Interface/AddOns/Blizzard_APIDocumentation/ScenarioInfoDocumentation.lua @@ -89,9 +89,9 @@ local ScenarioInfo = { Name = "JailersTowerType", Type = "Enumeration", - NumValues = 11, + NumValues = 12, MinValue = 0, - MaxValue = 10, + MaxValue = 11, Fields = { { Name = "TwistingCorridors", Type = "JailersTowerType", EnumValue = 0 }, @@ -105,6 +105,7 @@ local ScenarioInfo = { Name = "TormentChamberJaina", Type = "JailersTowerType", EnumValue = 8 }, { Name = "TormentChamberThrall", Type = "JailersTowerType", EnumValue = 9 }, { Name = "TormentChamberAnduin", Type = "JailersTowerType", EnumValue = 10 }, + { Name = "AdamantVaults", Type = "JailersTowerType", EnumValue = 11 }, }, }, }, diff --git a/Interface/AddOns/Blizzard_AdventureMap/AM_MissionDataProvider.lua b/Interface/AddOns/Blizzard_AdventureMap/AM_MissionDataProvider.lua index 7393d010..719d9f7d 100644 --- a/Interface/AddOns/Blizzard_AdventureMap/AM_MissionDataProvider.lua +++ b/Interface/AddOns/Blizzard_AdventureMap/AM_MissionDataProvider.lua @@ -28,7 +28,7 @@ function AdventureMap_MissionDataProviderMixin:OnEvent(event, ...) end elseif event == "GARRISON_MISSION_LIST_UPDATE" then local followerType = ...; - if followerType == Enum.GarrisonFollowerType.FollowerType_7_0 then + if followerType == Enum.GarrisonFollowerType.FollowerType_7_0 or followerType == Enum.GarrisonFollowerType.FollowerType_9_0 then self:RefreshAllData(); end elseif event == "GARRISON_MISSION_FINISHED" then diff --git a/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua b/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua index 668fb65b..0060b1e1 100644 --- a/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua +++ b/Interface/AddOns/Blizzard_BarbershopUI/Blizzard_BarberShopUI.lua @@ -173,11 +173,13 @@ function BarberShopMixin:ResetCharacterRotation() end function BarberShopMixin:SetViewingAlteredForm(viewingAlteredForm, resetCategory) + self:RegisterEvent("BARBER_SHOP_CAMERA_VALUES_UPDATED"); C_BarberShop.SetViewingAlteredForm(viewingAlteredForm); self:UpdateCharCustomizationFrame(resetCategory); end function BarberShopMixin:SetViewingShapeshiftForm(formID) + self:RegisterEvent("BARBER_SHOP_CAMERA_VALUES_UPDATED"); C_BarberShop.SetViewingShapeshiftForm(formID); self.Sexes:SetShown(formID == nil); end diff --git a/Interface/AddOns/Blizzard_BindingUI/Blizzard_BindingUI.lua b/Interface/AddOns/Blizzard_BindingUI/Blizzard_BindingUI.lua index ecc86e2e..5605e359 100644 --- a/Interface/AddOns/Blizzard_BindingUI/Blizzard_BindingUI.lua +++ b/Interface/AddOns/Blizzard_BindingUI/Blizzard_BindingUI.lua @@ -757,6 +757,8 @@ end QuickKeybindFrameMixin = {}; function QuickKeybindFrameMixin:OnShow() + EventRegistry:TriggerEvent("QuickKeybindFrame.QuickKeybindModeEnabled"); + self.characterSpecificButton:SetChecked(KeyBindingFrame.characterSpecificButton:GetChecked()); self.mouseOverButton = nil; Enable_BagButtons(); @@ -769,6 +771,8 @@ function QuickKeybindFrameMixin:OnShow() end function QuickKeybindFrameMixin:OnHide() + EventRegistry:TriggerEvent("QuickKeybindFrame.QuickKeybindModeDisabled"); + KeybindFrames_ClearOutputText(); if ( not GameMenuFrame:IsShown() ) then ShowUIPanel(KeyBindingFrame); diff --git a/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua b/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua index aff7fe22..987aed1c 100644 --- a/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua +++ b/Interface/AddOns/Blizzard_Channels/ChannelFrame.lua @@ -166,6 +166,8 @@ function ChannelFrameMixin:OnEvent(event, ...) self:MarkDirty("UpdateChannelList"); elseif event == "CHAT_MSG_CHANNEL_NOTICE" then self:OnChannelNotice(...); + elseif event == "MENTORSHIP_STATUS_CHANGED" then + self:OnMentorshipStatusChanged(); end end @@ -638,16 +640,33 @@ function ChannelFrameMixin:OnChannelNotice(...) 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 + self:CheckNewcomerChannelJoin(channelIndex); + end +end + +function ChannelFrameMixin:OnMentorshipStatusChanged() + if self.pendingNewcomerChannelIndex then + local channelIndex = self.pendingNewcomerChannelIndex; + self.pendingNewcomerChannelIndex = nil; + self:UnregisterEvent("MENTORSHIP_STATUS_CHANGED"); + self:CheckNewcomerChannelJoin(channelIndex); + end +end + +function ChannelFrameMixin:CheckNewcomerChannelJoin(channelIndex) + 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)); + elseif IsActivePlayerMentor() then + -- 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)); + else + self.pendingNewcomerChannelIndex = channelIndex; + self:RegisterEvent("MENTORSHIP_STATUS_CHANGED"); end end diff --git a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua index 2f6566d3..7e617090 100644 --- a/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua +++ b/Interface/AddOns/Blizzard_CharacterCreate/Blizzard_CharacterCreate.lua @@ -195,7 +195,7 @@ local rafHelpTipInfo = { function CharacterCreateMixin:UpdateRecruitInfo() local active, faction = C_RecruitAFriend.GetRecruitInfo(); - if active and not self.paidServiceType and C_CharacterCreation.IsNewPlayerRestricted() then + if active and not self.paidServiceType and C_CharacterCreation.UseBeginnerMode() then local recruiterIsHorde = (PLAYER_FACTION_GROUP[faction] == "Horde"); rafHelpTipInfo.text = recruiterIsHorde and RECRUIT_A_FRIEND_FACTION_SUGGESTION_HORDE or RECRUIT_A_FRIEND_FACTION_SUGGESTION_ALLIANCE; rafHelpTipInfo.targetPoint = recruiterIsHorde and HelpTip.Point.RightEdgeCenter or HelpTip.Point.LeftEdgeCenter; @@ -448,7 +448,7 @@ function CharacterCreateMixin:SetMode(mode, instantRotate) ClassTrialSpecs:SetShown(mode == CHAR_CREATE_MODE_CUSTOMIZE and (C_CharacterCreation.GetCharacterCreateType() == Enum.CharacterCreateType.TrialBoost)); NameChoiceFrame:SetShown(mode == CHAR_CREATE_MODE_CUSTOMIZE); ZoneChoiceFrame:SetShown(mode == CHAR_CREATE_MODE_ZONE_CHOICE); - NewPlayerTutorial:SetShown(mode == CHAR_CREATE_MODE_CUSTOMIZE and C_CharacterCreation.IsNewPlayerRestricted()); + NewPlayerTutorial:SetShown(mode == CHAR_CREATE_MODE_CUSTOMIZE and C_CharacterCreation.UseBeginnerMode()); self.currentMode = mode; self.creatingCharacter = false; @@ -747,7 +747,7 @@ function CharacterCreateClassButtonMixin:SetClass(classData, selectedClassID) local validAllianceRaceNames = {}; local validHordeRaceNames = {}; for _, raceData in ipairs(validRaces) do - if not raceData.isAlliedRace or not C_CharacterCreation.IsNewPlayerRestricted() then + if not raceData.isAlliedRace or not C_CharacterCreation.UseBeginnerMode() then if raceData.isNeutralRace or (raceData.factionInternalName == "Alliance") then tinsert(validAllianceRaceNames, raceData.name); end @@ -865,10 +865,10 @@ function CharacterCreateRaceButtonMixin:SetRace(raceData, selectedSexID, selecte end self.RaceName.Text:SetText(raceData.name); - self.RaceName:SetShown(C_CharacterCreation.IsNewPlayerRestricted()); + self.RaceName:SetShown(C_CharacterCreation.UseBeginnerMode()); if not raceData.isAlliedRace then - if C_CharacterCreation.IsNewPlayerRestricted() then + if C_CharacterCreation.UseBeginnerMode() then self.tooltipXOffset = 16; else self.tooltipXOffset = 113; @@ -1021,8 +1021,9 @@ end function CharacterCreateRaceAndClassMixin:OnShow() local isNewPlayerRestricted = C_CharacterCreation.IsNewPlayerRestricted(); - self.AllianceAlliedRaces:SetShown(not isNewPlayerRestricted); - self.HordeAlliedRaces:SetShown(not isNewPlayerRestricted); + local useNewPlayerMode = C_CharacterCreation.UseBeginnerMode(); + self.AllianceAlliedRaces:SetShown(not useNewPlayerMode); + self.HordeAlliedRaces:SetShown(not useNewPlayerMode); self.ClassTrialCheckButton:ClearTooltipLines(); self.ClassTrialCheckButton:AddTooltipLine(CHARACTER_TYPE_FRAME_TRIAL_BOOST_CHARACTER_TOOLTIP:format(C_CharacterCreation.GetTrialBoostStartingLevel())); diff --git a/Interface/AddOns/Blizzard_Communities/ClubFinder.lua b/Interface/AddOns/Blizzard_Communities/ClubFinder.lua index 5b1f162a..11cfb442 100644 --- a/Interface/AddOns/Blizzard_Communities/ClubFinder.lua +++ b/Interface/AddOns/Blizzard_Communities/ClubFinder.lua @@ -1231,7 +1231,7 @@ end function CardRightClickOptionsMenuInitialize(self, level) - if(self:GetParent():IsReported()) then + if(self:GetParent():IsReported() or not self:GetParent().cardInfo) then return; end diff --git a/Interface/AddOns/Blizzard_Communities/CommunitiesList.lua b/Interface/AddOns/Blizzard_Communities/CommunitiesList.lua index b097477f..7b38c14c 100644 --- a/Interface/AddOns/Blizzard_Communities/CommunitiesList.lua +++ b/Interface/AddOns/Blizzard_Communities/CommunitiesList.lua @@ -362,8 +362,9 @@ function CommunitiesListMixin:OnCommunitiesFrameDisplayModeChanged() end function CommunitiesListMixin:OnCommunityInviteDeclined(invitationId, clubId) + local communitiesFrame = self:GetCommunitiesFrame(); self.declinedInvitationIds[#self.declinedInvitationIds + 1] = invitationId; - communitiesFrame:UpdateClubSelection(); + self:GetCommunitiesFrame():UpdateClubSelection(); self:UpdateInvitations(); self:Update(); end diff --git a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua index 7855f9e4..a9e0f234 100644 --- a/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua +++ b/Interface/AddOns/Blizzard_CovenantPreviewUI/Blizzard_CovenantPreviewUI.lua @@ -169,6 +169,13 @@ function CovenantPreviewFrameMixin:TryShow(covenantInfo) end); end + + if (covenantInfo.covenantSoulbinds and #covenantInfo.covenantSoulbinds > 1) then + table.sort(covenantInfo.covenantSoulbinds, function(a, b) + return CovenantPreviewSortFunction(a.sortOrder, b.sortOrder); + end); + end + self:SetupAbilityButtons(covenantInfo.covenantAbilities); self:SetupSoulbindButtons(covenantInfo.covenantSoulbinds); self:SetupCovenantInfoPanel(covenantInfo); @@ -248,6 +255,7 @@ end CovenantAbilityButtonMixin = { }; function CovenantAbilityButtonMixin:OnEnter() + EmbeddedItemTooltip:Hide(); GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(self.spellID); GameTooltip:Show(); @@ -274,6 +282,7 @@ function CovenantFeatureButtonMixin:Setup(covenantFeatureInfo) end function CovenantFeatureButtonMixin:OnEnter() + EmbeddedItemTooltip:Hide(); GameTooltip:SetOwner(self, "ANCHOR_RIGHT", -30, -30); GameTooltip_AddHighlightLine(GameTooltip, self.name); GameTooltip_AddNormalLine(GameTooltip, self.description); @@ -296,6 +305,8 @@ function CovenantSoulbindButtonMixin:OnEnter() return; end + GameTooltip:Hide(); + local spell = Spell:CreateFromSpellID(self.spellID); spell:ContinueOnSpellLoad(function() EmbeddedItemTooltip:SetOwner(self, "ANCHOR_RIGHT", -12, -10); diff --git a/Interface/AddOns/Blizzard_CovenantRenown/Blizzard_CovenantRenown.lua b/Interface/AddOns/Blizzard_CovenantRenown/Blizzard_CovenantRenown.lua index ba847c44..a36b75df 100644 --- a/Interface/AddOns/Blizzard_CovenantRenown/Blizzard_CovenantRenown.lua +++ b/Interface/AddOns/Blizzard_CovenantRenown/Blizzard_CovenantRenown.lua @@ -486,8 +486,8 @@ CovenantRenownTrackFrameMixin = { elementTemplate = "CovenantRenownLevelTemplate", scrollStartSound = SOUNDKIT.UI_COVENANT_RENOWN_SLIDE_START, - scrollLoopSound = SOUNDKIT.UI_COVENANT_RENOWN_SLIDE_LOOP, scrollStopSound = SOUNDKIT.UI_COVENANT_RENOWN_SLIDE_STOP, + scrollCenterChangeSound = SOUNDKIT.UI_COVENANT_RENOWN_SLIDE_START, }; function CovenantRenownTrackFrameMixin:OnLoad() @@ -588,6 +588,9 @@ function CovenantRenownTrackFrameMixin:RefreshView() local leftIndex = math.max(1, centerIndex - self.numElementsPerHalf); local rightIndex = math.min(centerIndex + self.numElementsPerHalf, self.numElements); self:GetParent():OnTrackUpdate(leftIndex, centerIndex, rightIndex, self.moving); + if self.moving and self.scrollCenterChangeSound then + PlaySound(self.scrollCenterChangeSound, nil, SOUNDKIT_ALLOW_DUPLICATES); + end end self.LeftButton:SetEnabled(self.offset > 0); @@ -680,7 +683,7 @@ function CovenantRenownTrackButtonMixin:OnMouseDown() local track = self:GetParent(); track:StartScroll(self.direction); if track.scrollStartSound then - PlaySound(track.scrollStartSound); + PlaySound(track.scrollStartSound, nil, SOUNDKIT_ALLOW_DUPLICATES); end end end diff --git a/Interface/AddOns/Blizzard_CovenantToasts/Blizzard_CovenantRenownToast.lua b/Interface/AddOns/Blizzard_CovenantToasts/Blizzard_CovenantRenownToast.lua index 21a3d968..f04d9abb 100644 --- a/Interface/AddOns/Blizzard_CovenantToasts/Blizzard_CovenantRenownToast.lua +++ b/Interface/AddOns/Blizzard_CovenantToasts/Blizzard_CovenantRenownToast.lua @@ -86,10 +86,10 @@ end local SOUND_KIT_BY_TEXTURE_KIT = { - Kyrian = { default = 172612, [20] = 172613, [40] = 172614, }, - Venthyr = { default = 172642, [20] = 172645, [40] = 172649, }, - NightFae = { default = 172643, [20] = 172646, [40] = 172650, }, - Necrolord = { default = 172644, [20] = 172648, [40] = 172651, }, + Kyrian = { default = 172612, milestone = 172613, final = 172614, }, + Venthyr = { default = 172642, milestone = 172645, final = 172649, }, + NightFae = { default = 172643, milestone = 172646, final = 172650, }, + Necrolord = { default = 172644, milestone = 172648, final = 172651, }, }; function CovenantRenownToastMixin:PlayBanner(data) @@ -118,7 +118,15 @@ function CovenantRenownToastMixin:PlayBanner(data) self:SetupRewardVisuals(data.covenantID, data.renownLevel); local soundKitData = SOUND_KIT_BY_TEXTURE_KIT[data.textureKit] - PlaySound(soundKitData[data.renownLevel] or soundKitData.default) + local levels = C_CovenantSanctumUI.GetRenownLevels(data.covenantID); + local levelInfo = levels[data.renownLevel]; + local soundID = soundKitData.default; + if data.renownLevel == #levels then + soundID = soundKitData.final; + elseif levelInfo.isMilestone then + soundID = soundKitData.milestone; + end + PlaySound(soundID); self.bannerData = data; diff --git a/Interface/AddOns/Blizzard_EncounterJournal/Blizzard_EncounterJournal.lua b/Interface/AddOns/Blizzard_EncounterJournal/Blizzard_EncounterJournal.lua index a5cd22e2..c44ae61e 100644 --- a/Interface/AddOns/Blizzard_EncounterJournal/Blizzard_EncounterJournal.lua +++ b/Interface/AddOns/Blizzard_EncounterJournal/Blizzard_EncounterJournal.lua @@ -1806,7 +1806,7 @@ function EncounterJournal_SetLootButton(item) if itemInfo.weaponTypeError then item.armorType:SetText(INVALID_EQUIPMENT_COLOR:WrapTextInColorCode(itemInfo.armorType)); else - item.armorType:SetText(itemInfo.slot); + item.armorType:SetText(itemInfo.armorType); end local numEncounters = EJ_GetNumEncountersForLootByIndex(item.index); @@ -2843,7 +2843,7 @@ end function EJSuggestFrame_OnEvent(self, event, ...) if ( event == "AJ_REFRESH_DISPLAY" ) then - if self:GetParent().selectedTab == self.id then + if self:GetParent().selectedTab == EncounterJournal.instanceSelect.suggestTab.id then EJSuggestFrame_RefreshDisplay(); local newAdventureNotice = ...; if ( newAdventureNotice ) then diff --git a/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua b/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua index de188bd0..1b9abf4e 100644 --- a/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua +++ b/Interface/AddOns/Blizzard_FlightMap/Blizzard_FlightMap.lua @@ -3,12 +3,19 @@ UIPanelWindows["FlightMapFrame"] = { area = "center", pushable = 1, showFailedFu FlightMapMixin = {}; function FlightMapMixin:SetupTitle() - self.BorderFrame.TitleText:SetText(FLIGHT_MAP); self.BorderFrame.Bg:SetColorTexture(0, 0, 0, 1); self.BorderFrame.Bg:SetParent(self); self.BorderFrame.TopTileStreaks:Hide(); + self:ResetTitleAndPortraitIcon(); +end + +function FlightMapMixin:ResetTitleAndPortraitIcon() + self:UpdateTitleAndPortraitIcon(FLIGHT_MAP, [[Interface/Icons/icon_petfamily_flying]]); +end - self.BorderFrame:SetPortraitToAsset([[Interface/Icons/icon_petfamily_flying]]); +function FlightMapMixin:UpdateTitleAndPortraitIcon(titleText, portraitIcon) + self.BorderFrame.TitleText:SetText(titleText); + self.BorderFrame:SetPortraitToAsset(portraitIcon); end function FlightMapMixin:OnLoad() diff --git a/Interface/AddOns/Blizzard_FlightMap/FM_FlightPathDataProvider.lua b/Interface/AddOns/Blizzard_FlightMap/FM_FlightPathDataProvider.lua index 93a0397e..6d69534d 100644 --- a/Interface/AddOns/Blizzard_FlightMap/FM_FlightPathDataProvider.lua +++ b/Interface/AddOns/Blizzard_FlightMap/FM_FlightPathDataProvider.lua @@ -7,6 +7,7 @@ end function FlightMap_FlightPathDataProviderMixin:RemoveAllData() self:GetMap():RemoveAllPinsByTemplate("FlightMap_FlightPointPinTemplate"); + self:GetMap():ResetTitleAndPortraitIcon(); if self.highlightLinePool then self.highlightLinePool:ReleaseAll(); end @@ -22,10 +23,19 @@ function FlightMap_FlightPathDataProviderMixin:RefreshAllData(fromOnShow) self:CalculateLineThickness(); + local bastionNodeFound = false; local mapID = self:GetMap():GetMapID(); local taxiNodes = C_TaxiMap.GetAllTaxiNodes(mapID); for i, taxiNodeData in ipairs(taxiNodes) do self:AddFlightNode(taxiNodeData); + + if taxiNodeData.textureKit == "FlightMaster_Bastion" then + bastionNodeFound = true; + end + end + + if bastionNodeFound then + self:GetMap():UpdateTitleAndPortraitIcon(FLIGHT_MAP_BASTION, [[Interface/Icons/achievement_guildperk_havegroup willtravel]]); end self:ShowBackgroundRoutesFromCurrent(); @@ -171,9 +181,6 @@ FlightMap_FlightPointPinMixin = CreateFromMixins(MapCanvasPinMixin); function FlightMap_FlightPointPinMixin:OnLoad() self:SetScalingLimits(1.25, 0.9625, 1.275); - -- Flight points nudge other pins away. - self:SetNudgeSourceRadius(1); - self:UseFrameLevelType("PIN_FRAME_LEVEL_FLIGHT_POINT"); end @@ -256,8 +263,8 @@ end function FlightMap_FlightPointPinMixin:SetFlightPathStyle(textureKit, taxiNodeType) self.textureKit = textureKit; - self:SetNudgeSourceMagnitude(nil, nil); self:SetNudgeSourceRadius(1); + self:SetNudgeSourceMagnitude(1, 2); if textureKit then self.atlasFormat = textureKit.."-%s"; diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua index e74453c3..32842f54 100644 --- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua +++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_CovenantMissionTemplates.lua @@ -100,11 +100,6 @@ end function CovenantFollowerTabMixin:UpdateValidSpellHighlightOnAbilityFrame() end -function CovenantFollowerTabMixin:CalculateHealCost() - local followerStats = self.followerInfo.autoCombatantStats; - return math.ceil(((followerStats.maxHealth - followerStats.currentHealth) / followerStats.maxHealth) * Constants.GarrisonConstsExposed.GARRISON_AUTO_COMBATANT_FULL_HEAL_COST); -end - function CovenantFollowerTabMixin:UpdateHealCost() self.HealFollowerFrame.HealFollowerButton.tooltip = nil; self:HideHealFollowerTutorial(); @@ -114,16 +109,23 @@ function CovenantFollowerTabMixin:UpdateHealCost() return; end - local buttonCost = self:CalculateHealCost(); - self.HealFollowerFrame.CostFrame.Cost:SetText(buttonCost); + local buttonCost = self.followerInfo.autoCombatantStats.healCost; if (buttonCost == 0) then + self.HealFollowerFrame.CostFrame.Cost:SetText(buttonCost); self.HealFollowerFrame.HealFollowerButton:SetEnabled(false); self.HealFollowerFrame.HealFollowerButton.tooltip = COVENANT_MISSIONS_HEAL_ERROR_FULL_HEALTH; StaticPopup_Hide("COVENANT_MISSIONS_HEAL_CONFIRMATION"); else local _, secondaryCurrency = C_Garrison.GetCurrencyTypes(GarrisonFollowerOptions[self.followerInfo.followerTypeID].garrisonType); local currencyInfo = C_CurrencyInfo.GetCurrencyInfo(secondaryCurrency); + + if (currencyInfo.quantity < buttonCost) then + self.HealFollowerFrame.CostFrame.Cost:SetText(RED_FONT_COLOR_CODE..buttonCost..FONT_COLOR_CODE_CLOSE); + else + self.HealFollowerFrame.CostFrame.Cost:SetText(buttonCost); + end + if (buttonCost > currencyInfo.quantity) then self.HealFollowerFrame.HealFollowerButton:SetEnabled(false); self.HealFollowerFrame.HealFollowerButton.tooltip = COVENANT_MISSIONS_HEAL_ERROR_RESOURCES; @@ -703,8 +705,8 @@ function CovenantPortraitMixin:SetupPortrait(followerInfo) self.HealthBar:Show(); self.HealthBar:SetScale(0.7); self.LevelText:SetText(followerInfo.level); - self.HealthBar:SetMaxHealth(followerInfo.autoCombatantStats.maxHealth); - self.HealthBar:SetHealth(followerInfo.autoCombatantStats.currentHealth); + self.HealthBar:SetMaxHealth(followerInfo.autoCombatantStats and followerInfo.autoCombatantStats.maxHealth or 1); + self.HealthBar:SetHealth(followerInfo.autoCombatantStats and followerInfo.autoCombatantStats.currentHealth or 1); self.HealthBar:SetRole(followerInfo.role); local puckBorderAtlas = followerInfo.isAutoTroop and "Adventurers-Followers-Frame-Troops" or "Adventurers-Followers-Frame"; self.PuckBorder:SetAtlas(puckBorderAtlas); diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.lua b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.lua index fab3dd27..fc0e06af 100644 --- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.lua +++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonMissionTemplates.lua @@ -149,7 +149,7 @@ function GarrisonMission:ShowMission(missionInfo) self:SetEnvironmentTexture(missionDeploymentInfo.environmentTexture) - missionPage.Stage.MissionEnvIcon.Texture:SetTexture(environmentTexture); + missionPage.Stage.MissionEnvIcon.Texture:SetTexture(missionDeploymentInfo.environmentTexture); local locTextureKit = missionDeploymentInfo.locTextureKit; if ( locTextureKit ) then @@ -621,6 +621,10 @@ function GarrisonMission:UpdateStartButton(missionPage) end end + if (not disableError) then + disableError = self:GetSystemSpecificStartMissionFailureMessage(); + end + local startButton = missionPage.StartMissionButton; if ( disableError ) then startButton:SetEnabled(false); @@ -635,6 +639,9 @@ function GarrisonMission:UpdateStartButton(missionPage) end end +function GarrisonMission:GetSystemSpecificStartMissionFailureMessage() +end + function GarrisonMission:CloseMission() self:GetMissionPage():Hide(); self:ClearParty(); diff --git a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua index 79ce4311..b27b74b4 100644 --- a/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua +++ b/Interface/AddOns/Blizzard_GarrisonTemplates/Blizzard_GarrisonSharedTemplates.lua @@ -198,7 +198,7 @@ function GarrisonFollowerList:OnEvent(event, ...) self:ShowFollower(self.followerTab.followerID); end - if (self:IsVisible()) then + if (self:IsVisible() or event == "GARRISON_FOLLOWER_LIST_UPDATE") then self:DirtyList(); self:UpdateFollowers(); end diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresBoard.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresBoard.lua index 8823447c..0063f089 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresBoard.lua +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresBoard.lua @@ -199,7 +199,9 @@ function AdventuresBoardMixin:GetAnimFrameByAuraType(frame, previewType) if bit.band(previewType, Enum.GarrAutoPreviewTargetType.Damage) == Enum.GarrAutoPreviewTargetType.Damage then return frame.EnemyTargetingIndicatorFrame; elseif bit.band(previewType, Enum.GarrAutoPreviewTargetType.Buff) == Enum.GarrAutoPreviewTargetType.Buff or bit.band(previewType, Enum.GarrAutoPreviewTargetType.Heal) == Enum.GarrAutoPreviewTargetType.Heal then - frame.FriendlyTargetingIndicatorFrame.SupportColorationAnimator:SetPreviewTargets(previewType, {frame.FriendlyTargetingIndicatorFrame.TargetMarker}); + if frame.FriendlyTargetingIndicatorFrame then + frame.FriendlyTargetingIndicatorFrame.SupportColorationAnimator:SetPreviewTargets(previewType, {frame.FriendlyTargetingIndicatorFrame.TargetMarker}); + end return frame.FriendlyTargetingIndicatorFrame; end @@ -308,6 +310,15 @@ function AdventuresBoardMixin:HideHealthValues() end end +function AdventuresBoardMixin:UpdateHealedFollower(followerID) + for followerFrame in self.followerFramePool:EnumerateActive() do + if followerFrame:GetFollowerGUID() == followerID then + followerFrame:UpdateStats(); + return; + end + end +end + AdventuresBoardCombatMixin = CreateFromMixins(AdventuresBoardMixin); function AdventuresBoardCombatMixin:OnLoad() @@ -512,8 +523,8 @@ function AdventuresSocketMixin:SetBoardPreviewState(auraType) onHideCallback = function(acknowledged, closeFlag) self:GetBoard():GetMainFrame():ProcessTutorials(); end; checkCVars = true, } - - self:GetBoard():GetMainFrame():QueueTutorial(self.AuraContainer, helpTipInfo); + local mainFrame = self:GetBoard():GetMainFrame(); + mainFrame:QueueTutorial(mainFrame, helpTipInfo, self.AuraContainer); end self:UpdateAuraVisibility(); diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.lua index 160b4d44..6ebabba0 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.lua +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresCompleteScreen.lua @@ -88,7 +88,6 @@ function AdventuresCompleteScreenMixin:SetCurrentMission(mission) end self:ResetMissionDisplay(); - self.RewardsScreen:PopulateFollowerInfo(self.followerGUIDToInfo, mission); self.MissionInfo.EncounterIcon:SetEncounterInfo(mission.encounterIconInfo); self.AdventuresCombatLog.environmentEffect = C_Garrison.GetAutoMissionEnvironmentEffect(mission.missionID); @@ -156,6 +155,7 @@ function AdventuresCompleteScreenMixin:StartMissionReplay() self.replayTimeElapsed = 0; self.replayRoundIndex = 1; self:SetScript("OnUpdate", AdventuresCompleteScreenMixin.UpdateMissionReplay); + self.RewardsScreen:PopulateFollowerInfo(self.followerGUIDToInfo, self.currentMission, self.autoCombatResult.winner); local roundIndex = 1; self:StartReplayRound(roundIndex); diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua index abf6bbf0..f2ae3c16 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresPuck.lua @@ -278,6 +278,17 @@ function AdventuresFollowerPuckMixin:GetSupportPreviewTypeForPuck() return previewType; end +function AdventuresFollowerPuckMixin:UpdateStats() + local followerID = self:GetFollowerGUID(); + + if followerID and self.info then + self.info.autoCombatantStats = C_Garrison.GetFollowerAutoCombatStats(followerID); + + self.HealthBar:SetMaxHealth(self.info.autoCombatantStats.maxHealth); + self.HealthBar:SetHealth(self.info.autoCombatantStats.currentHealth); + end +end + AdventuresEnemyPuckMixin = {}; function AdventuresEnemyPuckMixin:OnLoad() diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua index 668b8cf3..e712f3e8 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_AdventuresRewardsScreen.lua @@ -94,22 +94,32 @@ function AdventuresRewardsScreenMixin:SetRewards(rewards, victoryState) end end - self.FinalRewardsPanel.SpoilsFrame.RewardsEarnedFrame:Layout(); - self.FinalRewardsPanel.SpoilsFrame:Layout(); - self.FinalRewardsPanel.RewardsEarnedLabel:SetPoint("BOTTOM", self.FinalRewardsPanel.SpoilsFrame.RewardsEarnedFrame, "TOP", 0, 0); + self.FinalRewardsPanel.SpoilsFrame.RewardsEarnedFrame:Layout(); + self.FinalRewardsPanel.SpoilsFrame:Layout(); + self.FinalRewardsPanel.RewardsEarnedLabel:SetPoint("BOTTOM", self.FinalRewardsPanel.SpoilsFrame.RewardsEarnedFrame, "TOP", 0, 0); end -function AdventuresRewardsScreenMixin:PopulateFollowerInfo(followerInfo, missionInfo) +function AdventuresRewardsScreenMixin:PopulateFollowerInfo(followerInfo, missionInfo, winner) self.followerPool:ReleaseAll(); self.FinalRewardsPanel.FollowerProgressLabel:Hide(); self.hasExperienceRewards = false; local layoutIndex = 1; + local bonusXP = 0; + + if winner then + for _, reward in pairs(missionInfo.rewards) do + if reward.followerXP then + bonusXP = bonusXP + reward.followerXP; + end + end + end + for guid, info in pairs(followerInfo) do --Don't show followers that don't have experience to gain if info.maxXP and info.maxXP ~= 0 then local followerFrame = self.followerPool:Acquire(); followerFrame.layoutIndex = layoutIndex; - followerFrame.RewardsFollower:SetFollowerInfo(info, missionInfo.xp); + followerFrame.RewardsFollower:SetFollowerInfo(info, missionInfo.xp + bonusXP); followerFrame:Show(); layoutIndex = layoutIndex + 1; diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.lua b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.lua index ee259f23..5396b5b1 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.lua +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.lua @@ -149,6 +149,7 @@ local COVENANT_MISSION_EVENTS = { "CURRENT_SPELL_CAST_CHANGED", "GARRISON_FOLLOWER_XP_CHANGED", "ADVENTURE_MAP_CLOSE", + "GARRISON_FOLLOWER_HEALED", }; local COVENANT_MISSION_STATIC_POPUPS = { @@ -160,6 +161,10 @@ local COVENANT_MISSION_STATIC_POPUPS = { function CovenantMission:OnEventMainFrame(event, ...) if event == "ADVENTURE_MAP_CLOSE" then self.CloseButton:Click(); + elseif event == "GARRISON_FOLLOWER_HEALED" then + local followerID = ...; + local missionPage = self:GetMissionPage(); + missionPage.Board:UpdateHealedFollower(followerID); else GarrisonFollowerMission.OnEventMainFrame(self, event, ...); end @@ -215,6 +220,7 @@ function CovenantMission:SelectTab(id) GarrisonFollowerMission.SelectTab(self, id); self.BackgroundTile:SetShown(id ~= 3); self:HideStaticPopups(); + self:ClearQueuedTutorials(); end function CovenantMission:CloseMission() @@ -922,6 +928,14 @@ function CovenantMission:ClearStrategicPositioningTutorials() HelpTip:Acknowledge(self, COVENANT_MISSIONS_TUTORIAL_STRATEGY1); HelpTip:Acknowledge(self, COVENANT_MISSIONS_TUTORIAL_STRATEGY2); end + +function CovenantMission:GetSystemSpecificStartMissionFailureMessage() + for followerFrame in self:GetMissionPage().Board:EnumerateFollowers() do + if followerFrame.info and followerFrame.info.autoCombatantStats.currentHealth == 0 then + return COVENANT_MISSIONS_COMPANIONS_MISSING_HEALTH; + end + end +end --------------------------------------------------------------------------------- --- Mission Page Follower Mixin --- --------------------------------------------------------------------------------- @@ -1044,8 +1058,12 @@ function CovenantFollowerListMixin:CalculateHealAllFollowersCost() for _, follower in ipairs(self.followers) do if follower.status ~= GARRISON_FOLLOWER_ON_MISSION then - local followerStats = follower.autoCombatantStats; - healAllCost = healAllCost + math.ceil(((followerStats.maxHealth - followerStats.currentHealth) / followerStats.maxHealth) * Constants.GarrisonConstsExposed.GARRISON_AUTO_COMBATANT_FULL_HEAL_COST); + --Get the most recent status + if (follower.autoCombatantStats.maxHealth ~= follower.autoCombatantStats.currentHealth) then + follower.autoCombatantStats = C_Garrison.GetFollowerAutoCombatStats(follower.followerID); + end + + healAllCost = healAllCost + follower.autoCombatantStats.healCost; end end diff --git a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.xml b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.xml index fbc03eac..f308254b 100644 --- a/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.xml +++ b/Interface/AddOns/Blizzard_GarrisonUI/Blizzard_CovenantMissionUI.xml @@ -461,7 +461,7 @@ -