diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 9 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 44 |
4 files changed, 37 insertions, 26 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 5e055583d22..0c395eb8cad 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -403,7 +403,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU WorldPacket data(SMSG_QUESTGIVER_QUEST_DETAILS, 100); // guess size data << uint64(npcGUID); - data << uint64(_session->GetPlayer()->GetDivider()); + data << uint64(_session->GetPlayer()->GetPlayerSharingQuest()); data << uint32(quest->GetQuestId()); data << questTitle; data << questDetails; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d689ca86b68..c2094cf85b9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22643,6 +22643,14 @@ void Player::SendInitialPacketsAfterAddToMap() } else if (GetRaidDifficulty() != GetStoredRaidDifficulty()) SendRaidDifficulty(GetGroup() != NULL); + + if (GetPlayerSharingQuest()) + { + if (Quest const* quest = sObjectMgr->GetQuestTemplate(GetSharedQuestID())) + PlayerTalkClass->SendQuestGiverQuestDetails(quest, GetGUID(), true); + else + ClearQuestSharingInfo(); + } } void Player::SendUpdateToOutOfRangeGroupMembers() diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index eb11aae59d5..f1a68827bbf 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1432,8 +1432,10 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendQuestUpdateAddPlayer(Quest const* quest, uint16 oldCount, uint16 addCount); void SendQuestGiverStatusMultiple(); - ObjectGuid GetDivider() const { return m_divider; } - void SetDivider(ObjectGuid guid) { m_divider = guid; } + uint32 GetSharedQuestID() const { return m_sharedQuestId; } + ObjectGuid GetPlayerSharingQuest() const { return m_playerSharingQuest; } + void SetQuestSharingInfo(ObjectGuid guid, uint32 id) { m_playerSharingQuest = guid; m_sharedQuestId = id; } + void ClearQuestSharingInfo() { m_playerSharingQuest = ObjectGuid::Empty; m_sharedQuestId = 0; } uint32 GetInGameTime() const { return m_ingametime; } void SetInGameTime(uint32 time) { m_ingametime = time; } @@ -2337,7 +2339,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> QuestSet m_monthlyquests; SeasonalEventQuestMap m_seasonalquests; - ObjectGuid m_divider; + ObjectGuid m_playerSharingQuest; + uint32 m_sharedQuestId; uint32 m_ingametime; /*********************************************************/ diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 24f2a442998..1cff4d27279 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -114,29 +114,29 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) else object = ObjectAccessor::FindPlayer(guid); -#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() && _player->GetDivider() != guid) || !playerQuestObject->CanShareQuest(questId)) + if ((_player->GetPlayerSharingQuest() && _player->GetPlayerSharingQuest() != guid) || !playerQuestObject->CanShareQuest(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; } } @@ -144,7 +144,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) { if (!object->hasQuest(questId)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } } @@ -152,7 +152,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) // some kind of WPE protection if (!_player->CanInteractWithQuestGiver(object)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } @@ -161,17 +161,17 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) // 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_PARTY_MSG_ACCEPT_QUEST); - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } } @@ -192,7 +192,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) if (player->CanTakeQuest(quest, true)) { - player->SetDivider(_player->GetGUID()); + player->SetQuestSharingInfo(_player->GetGUID(), questId); // need confirmation that any gossip window will close player->PlayerTalkClass->SendCloseGossip(); @@ -212,9 +212,9 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) } } - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); -#undef CLOSE_GOSSIP_CLEAR_DIVIDER +#undef CLOSE_GOSSIP_CLEAR_SHARING_INFO } void WorldSession::HandleQuestgiverQueryQuestOpcode(WorldPacket& recvData) @@ -459,7 +459,7 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) if (!quest->HasFlag(QUEST_FLAGS_PARTY_ACCEPT)) return; - Player* originalPlayer = ObjectAccessor::FindPlayer(_player->GetDivider()); + Player* originalPlayer = ObjectAccessor::FindPlayer(_player->GetPlayerSharingQuest()); if (!originalPlayer) return; @@ -481,7 +481,7 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) } } - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData) @@ -596,7 +596,7 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) continue; } - if (receiver->GetDivider()) + if (receiver->GetPlayerSharingQuest()) { sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_BUSY); continue; @@ -611,7 +611,7 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) receiver->PlayerTalkClass->SendQuestGiverRequestItems(quest, sender->GetGUID(), receiver->CanCompleteRepeatableQuest(quest), true); else { - receiver->SetDivider(sender->GetGUID()); + receiver->SetQuestSharingInfo(sender->GetGUID(), questId); receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, receiver->GetGUID(), true); } } @@ -626,17 +626,17 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: Received MSG_QUEST_PUSH_RESULT"); - if (!_player->GetDivider()) + if (!_player->GetPlayerSharingQuest()) return; - if (_player->GetDivider() == guid) + if (_player->GetPlayerSharingQuest() == guid) { Player* player = ObjectAccessor::FindPlayer(guid); if (player) player->SendPushToPartyResponse(_player, msg); } - _player->SetDivider(ObjectGuid::Empty); + _player->ClearQuestSharingInfo(); } void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket*/) |