aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorCannix <connex-castle@gmx.de>2017-06-15 01:27:37 +0200
committerTreeston <treeston.mmoc@gmail.com>2017-06-15 01:27:37 +0200
commitc14b448d6334e3a74f2ea44c2d9ae15ac8cbc3da (patch)
tree889edf6f407e192f2668374b63ee3005fee348da /src/server/game/Entities
parent23f2646adf3987b349196f2765e89a6061c17a29 (diff)
Core/Player: Keep shared quests through map changes instead of getting stuck in busy state (#19821)
Diffstat (limited to 'src/server/game/Entities')
-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
3 files changed, 15 insertions, 4 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;
/*********************************************************/