aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Player/Player.h9
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp44
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*/)