diff options
author | Cannix <connex-castle@gmx.de> | 2017-06-15 01:27:37 +0200 |
---|---|---|
committer | Carbenium <carbenium@outlook.com> | 2020-07-16 22:00:29 +0200 |
commit | c12ee97f122acfd77bd81cf178a77d5054c312b6 (patch) | |
tree | def96b7214e6b67d99faa4ea1071de069ffd1f10 /src/server/game/Handlers/QuestHandler.cpp | |
parent | 23a113756e65a953e80a3b03d72e3d11bd373a43 (diff) |
Core/Player: Keep shared quests through map changes instead of getting stuck in busy state (#19821)
(cherry picked from commit c14b448d6334e3a74f2ea44c2d9ae15ac8cbc3da)
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 1819e5bea1d..dc6b482e9d8 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -108,29 +108,29 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG else object = ObjectAccessor::FindPlayer(packet.QuestGiverGUID); -#define CLOSE_GOSSIP_CLEAR_DIVIDER() \ +#define CLOSE_GOSSIP_CLEAR_SHARING_INFO() \ do { \ _player->PlayerTalkClass->SendCloseGossip(); \ - _player->SetDivider(ObjectGuid::Empty); \ + _player->ClearQuestSharingInfo(); \ } while (0) // no or incorrect quest giver if (!object) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } if (Player* playerQuestObject = object->ToPlayer()) { - if ((_player->GetDivider().IsEmpty() && _player->GetDivider() != packet.QuestGiverGUID) || !playerQuestObject->CanShareQuest(packet.QuestID)) + if ((_player->GetPlayerSharingQuest().IsEmpty() && _player->GetPlayerSharingQuest() != packet.QuestGiverGUID) || !playerQuestObject->CanShareQuest(packet.QuestID)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } if (!_player->IsInSameRaidWith(playerQuestObject)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } } @@ -138,7 +138,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG { if (!object->hasQuest(packet.QuestID)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } } @@ -146,7 +146,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG // some kind of WPE protection if (!_player->CanInteractWithQuestGiver(object)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } @@ -155,17 +155,17 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG // prevent cheating if (!GetPlayer()->CanTakeQuest(quest, true)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } - if (!_player->GetDivider().IsEmpty()) + if (!_player->GetPlayerSharingQuest().IsEmpty()) { - Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); + Player* player = ObjectAccessor::FindPlayer(_player->GetPlayerSharingQuest()); if (player) { player->SendPushToPartyResponse(_player, QUEST_PUSH_ACCEPTED); - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } } @@ -186,7 +186,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG if (player->CanTakeQuest(quest, true)) { - player->SetDivider(_player->GetGUID()); + player->SetQuestSharingInfo(_player->GetGUID(), quest->GetQuestId()); // need confirmation that any gossip window will close player->PlayerTalkClass->SendCloseGossip(); @@ -203,9 +203,9 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG } } - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); -#undef CLOSE_GOSSIP_CLEAR_DIVIDER +#undef CLOSE_GOSSIP_CLEAR_SHARING_INFO } void WorldSession::HandleQuestgiverQueryQuestOpcode(WorldPackets::Quest::QuestGiverQueryQuest& packet) @@ -482,7 +482,7 @@ void WorldSession::HandleQuestConfirmAccept(WorldPackets::Quest::QuestConfirmAcc if (!quest->HasFlag(QUEST_FLAGS_PARTY_ACCEPT)) return; - Player* originalPlayer = ObjectAccessor::FindPlayer(_player->GetDivider()); + Player* originalPlayer = ObjectAccessor::FindPlayer(_player->GetPlayerSharingQuest()); if (!originalPlayer) return; @@ -504,7 +504,7 @@ void WorldSession::HandleQuestConfirmAccept(WorldPackets::Quest::QuestConfirmAcc } } - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } void WorldSession::HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiverCompleteQuest& packet) @@ -626,7 +626,7 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& continue; } - if (!receiver->GetDivider().IsEmpty()) + if (!receiver->GetPlayerSharingQuest().IsEmpty()) { sender->SendPushToPartyResponse(receiver, QUEST_PUSH_BUSY); continue; @@ -641,7 +641,7 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& receiver->PlayerTalkClass->SendQuestGiverRequestItems(quest, sender->GetGUID(), receiver->CanCompleteRepeatableQuest(quest), true); else { - receiver->SetDivider(sender->GetGUID()); + receiver->SetQuestSharingInfo(sender->GetGUID(), quest->GetQuestId()); receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, receiver->GetGUID(), true, false); } } @@ -649,13 +649,13 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& void WorldSession::HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet) { - if (!_player->GetDivider().IsEmpty()) + if (!_player->GetPlayerSharingQuest().IsEmpty()) { - if (_player->GetDivider() == packet.SenderGUID) - if (Player* player = ObjectAccessor::FindPlayer(_player->GetDivider())) + if (_player->GetPlayerSharingQuest() == packet.SenderGUID) + if (Player* player = ObjectAccessor::FindPlayer(_player->GetPlayerSharingQuest())) player->SendPushToPartyResponse(_player, static_cast<QuestPushReason>(packet.Result)); - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } } |