aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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.cpp46
4 files changed, 38 insertions, 27 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 8dc0ea6e352..1a7fa91e4f5 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -437,7 +437,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
Quest::AddQuestLevelToTitle(packet.QuestTitle, quest->GetQuestLevel());
packet.QuestGiverGUID = npcGUID;
- packet.InformUnit = _session->GetPlayer()->GetDivider();
+ packet.InformUnit = _session->GetPlayer()->GetPlayerSharingQuest();
packet.QuestID = quest->GetQuestId();
packet.PortraitGiver = quest->GetQuestGiverPortrait();
packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 21e37b2b624..0ef75e6c17c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -24182,6 +24182,14 @@ void Player::SendInitialPacketsAfterAddToMap()
_garrison->SendRemoteInfo();
UpdateItemLevelAreaBasedScaling();
+
+ if (!GetPlayerSharingQuest().IsEmpty())
+ {
+ if (Quest const* quest = sObjectMgr->GetQuestTemplate(GetSharedQuestID()))
+ PlayerTalkClass->SendQuestGiverQuestDetails(quest, GetGUID(), true, false);
+ else
+ ClearQuestSharingInfo();
+ }
}
void Player::SendUpdateToOutOfRangeGroupMembers()
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 8516fb71611..773cae4e538 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1430,8 +1430,10 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const;
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; }
@@ -2532,7 +2534,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 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();
}
}