From ce3b99471dd2d8080fbbc40cb45dc03add74a8fa Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 26 Dec 2021 19:32:56 -0500 Subject: [PATCH] Core/Quest: do not send SMSG_QUESTGIVER_OFFER_REWARD right after SMSG_QUESTGIVER_QUEST_FAILED. Port From (https://github.com/TrinityCore/TrinityCore/commit/ecce30a8072fd9352edae378a182f6bf6619d412) --- Source/Game/Entities/Player/Player.Quest.cs | 4 ---- Source/Game/Handlers/QuestHandler.cs | 21 ++++++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 75359c21d..2588ac6d7 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -574,10 +574,6 @@ namespace Game.Entities public bool CanRewardQuest(Quest quest, LootItemType rewardType, uint rewardId, bool msg) { - // prevent receive reward with quest items in bank or for not completed quest - if (!CanRewardQuest(quest, msg)) - return false; - List dest = new(); if (quest.GetRewChoiceItemsCount() > 0) { diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index 8be4a4148..af431fe9f 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -350,14 +350,16 @@ namespace Game return; } - if (GetPlayer().CanRewardQuest(quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID, true)) + if (GetPlayer().CanRewardQuest(quest, true)) // First, check if player is allowed to turn the quest in (all objectives completed). If not, we send players to the offer reward screen { - GetPlayer().RewardQuest(quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID, obj); - - switch (obj.GetTypeId()) + if (GetPlayer().CanRewardQuest(quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID, true)) // Then check if player can receive the reward item (if inventory is not full, if player doesn't have too many unique items, and so on). If not, the client will close the gossip window { - case TypeId.Unit: - case TypeId.Player: + GetPlayer().RewardQuest(quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID, obj); + + switch (obj.GetTypeId()) + { + case TypeId.Unit: + case TypeId.Player: { //For AutoSubmition was added plr case there as it almost same exclute AI script cases. // Send next quest @@ -380,7 +382,7 @@ namespace Game creatureQGiver.GetAI().QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID); break; } - case TypeId.GameObject: + case TypeId.GameObject: { GameObject questGiver = obj.ToGameObject(); // Send next quest @@ -401,8 +403,9 @@ namespace Game questGiver.GetAI().QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID); break; } - default: - break; + default: + break; + } } } else