From f99c371a85ca8b815ae895d73a36f506a46809fb Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 21 Feb 2024 17:44:48 -0500 Subject: [PATCH] Core/Quests: Don't send update of already completed CriteriaTree objectives to the client when accepting quests Port From (https://github.com/TrinityCore/TrinityCore/commit/6ac0f7bd1c4260cc7258f23a2f69a38e5ee7606b) --- Source/Game/Entities/Player/Player.Quest.cs | 32 ++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 26099b607..d11a096d6 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -702,11 +702,6 @@ namespace Game.Entities { AddQuest(quest, questGiver); - foreach (QuestObjective obj in quest.Objectives) - if (obj.Type == QuestObjectiveType.CriteriaTree) - if (m_questObjectiveCriteriaMgr.HasCompletedObjective(obj)) - KillCreditCriteriaTreeObjective(obj); - if (CanCompleteQuest(quest.Id)) CompleteQuest(quest.Id); @@ -2229,22 +2224,27 @@ namespace Game.Entities public void AdjustQuestObjectiveProgress(Quest quest) { // adjust progress of quest objectives that rely on external counters, like items - if (quest.HasQuestObjectiveType(QuestObjectiveType.Item)) + foreach (QuestObjective obj in quest.Objectives) { - foreach (QuestObjective obj in quest.Objectives) + switch (obj.Type) { - if (obj.Type == QuestObjectiveType.Item && !obj.Flags2.HasFlag(QuestObjectiveFlags2.QuestBoundItem)) - { - uint reqItemCount = (uint)obj.Amount; - uint curItemCount = GetItemCount((uint)obj.ObjectID, true); - SetQuestObjectiveData(obj, (int)Math.Min(curItemCount, reqItemCount)); - } - else if (obj.Type == QuestObjectiveType.HaveCurrency) - { + case QuestObjectiveType.Item: + if (!obj.Flags2.HasFlag(QuestObjectiveFlags2.QuestBoundItem)) + { + uint reqItemCount = (uint)obj.Amount; + uint curItemCount = GetItemCount((uint)obj.ObjectID, true); + SetQuestObjectiveData(obj, (int)Math.Min(curItemCount, reqItemCount)); + } + break; + case QuestObjectiveType.Currency: uint reqCurrencyCount = (uint)obj.Amount; uint curCurrencyCount = GetCurrencyQuantity((uint)obj.ObjectID); SetQuestObjectiveData(obj, (int)Math.Min(reqCurrencyCount, curCurrencyCount)); - } + break; + case QuestObjectiveType.CriteriaTree: + if (m_questObjectiveCriteriaMgr.HasCompletedObjective(obj)) + SetQuestObjectiveData(obj, 1); + break; } } }