Core/Quests: Don't send update of already completed CriteriaTree objectives to the client when accepting quests (#29665)

This commit is contained in:
Meji
2024-02-11 15:24:18 +01:00
committed by GitHub
parent 99bce5be73
commit 6ac0f7bd1c

View File

@@ -14748,11 +14748,6 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver)
{
AddQuest(quest, questGiver);
for (QuestObjective const& obj : quest->GetObjectives())
if (obj.Type == QUEST_OBJECTIVE_CRITERIA_TREE)
if (m_questObjectiveCriteriaMgr->HasCompletedObjective(&obj))
KillCreditCriteriaTreeObjective(obj);
if (CanCompleteQuest(quest->GetQuestId()))
CompleteQuest(quest->GetQuestId());
@@ -16375,22 +16370,31 @@ uint16 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const
void Player::AdjustQuestObjectiveProgress(Quest const* quest)
{
// adjust progress of quest objectives that rely on external counters, like items
if (quest->HasQuestObjectiveType(QUEST_OBJECTIVE_ITEM))
for (QuestObjective const& obj : quest->GetObjectives())
{
for (QuestObjective const& obj : quest->GetObjectives())
switch (obj.Type)
{
if (obj.Type == QUEST_OBJECTIVE_ITEM && !(obj.Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM))
{
uint32 reqItemCount = obj.Amount;
uint32 curItemCount = GetItemCount(obj.ObjectID, true);
SetQuestObjectiveData(obj, std::min(curItemCount, reqItemCount));
}
else if (obj.Type == QUEST_OBJECTIVE_HAVE_CURRENCY)
case QUEST_OBJECTIVE_ITEM:
if (!(obj.Flags2 & QUEST_OBJECTIVE_FLAG_2_QUEST_BOUND_ITEM))
{
uint32 reqItemCount = obj.Amount;
uint32 curItemCount = GetItemCount(obj.ObjectID, true);
SetQuestObjectiveData(obj, std::min(curItemCount, reqItemCount));
}
break;
case QUEST_OBJECTIVE_HAVE_CURRENCY:
{
uint32 reqCurrencyCount = obj.Amount;
uint32 curCurrencyCount = GetCurrencyQuantity(obj.ObjectID);
SetQuestObjectiveData(obj, std::min(reqCurrencyCount, curCurrencyCount));
break;
}
case QUEST_OBJECTIVE_CRITERIA_TREE:
if (m_questObjectiveCriteriaMgr->HasCompletedObjective(&obj))
SetQuestObjectiveData(obj, 1);
break;
default:
break;
}
}
}