From f746940f33609c1b72db75a4a17ce75589e9779b Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 18 May 2019 03:07:02 +0200 Subject: [PATCH] Core/Quests: fixed sending a correct information to close the current quest menu after rewarding quests when the player is not enligible for the next rewarded quest --- src/server/game/Entities/Player/Player.cpp | 11 ++++++++--- src/server/game/Entities/Player/Player.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index cfcdcc04e44..22b9ebd63f0 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16968,7 +16968,7 @@ void Player::SendQuestComplete(Quest const* quest) const } } -void Player::SendQuestReward(Quest const* quest, uint32 XP) const +void Player::SendQuestReward(Quest const* quest, uint32 XP) { uint32 questId = quest->GetQuestId(); sGameEventMgr->HandleQuestComplete(questId); @@ -16996,8 +16996,13 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) const data << uint32(questId); data << uint32(quest->GetRewardSkillId()); // 4.x bonus skill id - data.WriteBit(0); // FIXME: unknown bits, common values sent - data.WriteBit(1); + bool canTakeNextRewardQuest = false; + if (uint32 nextQuestId = quest->GetNextQuestInChain()) + if (Quest const* quest = sObjectMgr->GetQuestTemplate(nextQuestId)) + canTakeNextRewardQuest = CanTakeQuest(quest, false); + + data.WriteBit(0); // FIXME: unknown bit, common values sent + data.WriteBit(canTakeNextRewardQuest); // Can take next reward quest data.FlushBits(); SendDirectMessage(&data); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1cf0c542506..08a29fc89cb 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1441,7 +1441,7 @@ class TC_GAME_API Player : public Unit, public GridObject bool CanShareQuest(uint32 questId) const; void SendQuestComplete(Quest const* quest) const; - void SendQuestReward(Quest const* quest, uint32 XP) const; + void SendQuestReward(Quest const* quest, uint32 XP); void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK) const; void SendQuestTimerFailed(uint32 questId) const; void SendCanTakeQuestResponse(QuestFailedReason msg) const;