From 725aa27d7e3c3f82ea9efdb26fe970bc86f3c021 Mon Sep 17 00:00:00 2001 From: "Julio A. Leyva Osorio" Date: Mon, 27 Feb 2023 11:13:19 -0500 Subject: [PATCH] fix(Core/Quests): Fix exploit in icc reputation rings (#15092) --- src/server/game/Entities/Player/PlayerQuest.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index d4453d2ab..83adc2eeb 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -664,16 +664,22 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { - if (sObjectMgr->GetItemTemplate(quest->RequiredItemId[i])) + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i])) { - DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true, true); + if (quest->RequiredItemCount[i] > 0 && itemTemplate->Bonding == BIND_QUEST_ITEM && !quest->IsRepeatable() && !HasQuestForItem(quest->RequiredItemId[i], quest_id, true)) + DestroyItemCount(quest->RequiredItemId[i], 9999, true); + else + DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true); } } for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) { - if (sObjectMgr->GetItemTemplate(quest->ItemDrop[i])) + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->ItemDrop[i])) { - DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true, true); + if (quest->ItemDropQuantity[i] > 0 && itemTemplate->Bonding == BIND_QUEST_ITEM && !quest->IsRepeatable() && !HasQuestForItem(quest->ItemDrop[i], quest_id)) + DestroyItemCount(quest->ItemDrop[i], 9999, true); + else + DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true); } }