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)
This commit is contained in:
hondacrx
2024-02-21 17:44:48 -05:00
parent 1806eb52a3
commit f99c371a85
+16 -16
View File
@@ -702,11 +702,6 @@ namespace Game.Entities
{ {
AddQuest(quest, questGiver); 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)) if (CanCompleteQuest(quest.Id))
CompleteQuest(quest.Id); CompleteQuest(quest.Id);
@@ -2229,22 +2224,27 @@ namespace Game.Entities
public void AdjustQuestObjectiveProgress(Quest quest) public void AdjustQuestObjectiveProgress(Quest quest)
{ {
// adjust progress of quest objectives that rely on external counters, like items // 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)) case QuestObjectiveType.Item:
{ if (!obj.Flags2.HasFlag(QuestObjectiveFlags2.QuestBoundItem))
uint reqItemCount = (uint)obj.Amount; {
uint curItemCount = GetItemCount((uint)obj.ObjectID, true); uint reqItemCount = (uint)obj.Amount;
SetQuestObjectiveData(obj, (int)Math.Min(curItemCount, reqItemCount)); uint curItemCount = GetItemCount((uint)obj.ObjectID, true);
} SetQuestObjectiveData(obj, (int)Math.Min(curItemCount, reqItemCount));
else if (obj.Type == QuestObjectiveType.HaveCurrency) }
{ break;
case QuestObjectiveType.Currency:
uint reqCurrencyCount = (uint)obj.Amount; uint reqCurrencyCount = (uint)obj.Amount;
uint curCurrencyCount = GetCurrencyQuantity((uint)obj.ObjectID); uint curCurrencyCount = GetCurrencyQuantity((uint)obj.ObjectID);
SetQuestObjectiveData(obj, (int)Math.Min(reqCurrencyCount, curCurrencyCount)); SetQuestObjectiveData(obj, (int)Math.Min(reqCurrencyCount, curCurrencyCount));
} break;
case QuestObjectiveType.CriteriaTree:
if (m_questObjectiveCriteriaMgr.HasCompletedObjective(obj))
SetQuestObjectiveData(obj, 1);
break;
} }
} }
} }