diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index babe8b2bf..825c87946 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -429,7 +429,7 @@ namespace Game.Misc } packet.QuestGiverGUID = npcGUID; - packet.InformUnit = _session.GetPlayer().GetDivider(); + packet.InformUnit = _session.GetPlayer().GetPlayerSharingQuest(); packet.QuestID = quest.Id; packet.PortraitGiver = quest.QuestGiverPortrait; packet.PortraitGiverMount = quest.QuestGiverPortraitMount; diff --git a/Source/Game/Entities/Player/Player.Fields.cs b/Source/Game/Entities/Player/Player.Fields.cs index cbf76201e..5d1c72eed 100644 --- a/Source/Game/Entities/Player/Player.Fields.cs +++ b/Source/Game/Entities/Player/Player.Fields.cs @@ -252,7 +252,8 @@ namespace Game.Entities uint m_PlayedTimeLevel; Dictionary m_actionButtons = new Dictionary(); - ObjectGuid m_divider; + ObjectGuid m_playerSharingQuest; + uint m_sharedQuestId; uint m_ingametime; PlayerCommandStates _activeCheats; diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 2ffdc9e1e..74d44c7d7 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -33,9 +33,11 @@ namespace Game.Entities { public partial class Player { - public ObjectGuid GetDivider() { return m_divider; } - public void SetDivider(ObjectGuid guid) { m_divider = guid; } - + public uint GetSharedQuestID() { return m_sharedQuestId; } + public ObjectGuid GetPlayerSharingQuest() { return m_playerSharingQuest; } + public void SetQuestSharingInfo(ObjectGuid guid, uint id) { m_playerSharingQuest = guid; m_sharedQuestId = id; } + public void ClearQuestSharingInfo() { m_playerSharingQuest = ObjectGuid.Empty; m_sharedQuestId = 0; } + uint GetInGameTime() { return m_ingametime; } public void SetInGameTime(uint time) { m_ingametime = time; } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 479e5d125..2209b0e4e 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -5806,6 +5806,15 @@ namespace Game.Entities _garrison.SendRemoteInfo(); UpdateItemLevelAreaBasedScaling(); + + if (!GetPlayerSharingQuest().IsEmpty()) + { + Quest quest = Global.ObjectMgr.GetQuestTemplate(GetSharedQuestID()); + if (quest != null) + PlayerTalkClass.SendQuestGiverQuestDetails(quest, GetGUID(), true, false); + else + ClearQuestSharingInfo(); + } } public void RemoveSocial() diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index 7bd4171de..a8a3904fa 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -91,30 +91,30 @@ namespace Game else obj = Global.ObjAccessor.FindPlayer(packet.QuestGiverGUID); - var CLOSE_GOSSIP_CLEAR_DIVIDER = new System.Action(() => + var CLOSE_GOSSIP_CLEAR_SHARING_INFO = new System.Action(() => { GetPlayer().PlayerTalkClass.SendCloseGossip(); - GetPlayer().SetDivider(ObjectGuid.Empty); + GetPlayer().ClearQuestSharingInfo(); }); // no or incorrect quest giver if (obj == null) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } Player playerQuestObject = obj.ToPlayer(); if (playerQuestObject) { - 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; } } @@ -122,7 +122,7 @@ namespace Game { if (!obj.HasQuest(packet.QuestID)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } } @@ -130,7 +130,7 @@ namespace Game // some kind of WPE protection if (!_player.CanInteractWithQuestGiver(obj)) { - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); return; } @@ -140,17 +140,17 @@ namespace Game // 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 = Global.ObjAccessor.FindPlayer(_player.GetDivider()); + Player player = Global.ObjAccessor.FindPlayer(_player.GetPlayerSharingQuest()); if (player != null) { player.SendPushToPartyResponse(_player, QuestPushReason.Accepted); - _player.SetDivider(ObjectGuid.Empty); + _player.ClearQuestSharingInfo(); } } @@ -172,7 +172,7 @@ namespace Game if (player.CanTakeQuest(quest, true)) { - player.SetDivider(_player.GetGUID()); + player.SetQuestSharingInfo(_player.GetGUID(), quest.Id); //need confirmation that any gossip window will close player.PlayerTalkClass.SendCloseGossip(); @@ -189,7 +189,7 @@ namespace Game } } - CLOSE_GOSSIP_CLEAR_DIVIDER(); + CLOSE_GOSSIP_CLEAR_SHARING_INFO(); } [WorldPacketHandler(ClientOpcodes.QuestGiverQueryQuest)] @@ -456,7 +456,7 @@ namespace Game if (!quest.HasFlag(QuestFlags.PartyAccept)) return; - Player originalPlayer = Global.ObjAccessor.FindPlayer(GetPlayer().GetDivider()); + Player originalPlayer = Global.ObjAccessor.FindPlayer(GetPlayer().GetPlayerSharingQuest()); if (originalPlayer == null) return; @@ -478,7 +478,7 @@ namespace Game } } - GetPlayer().SetDivider(ObjectGuid.Empty); + GetPlayer().ClearQuestSharingInfo(); } [WorldPacketHandler(ClientOpcodes.QuestGiverCompleteQuest)] @@ -600,7 +600,7 @@ namespace Game continue; } - if (!receiver.GetDivider().IsEmpty()) + if (!receiver.GetPlayerSharingQuest().IsEmpty()) { sender.SendPushToPartyResponse(receiver, QuestPushReason.Busy); continue; @@ -615,7 +615,7 @@ namespace Game receiver.PlayerTalkClass.SendQuestGiverRequestItems(quest, sender.GetGUID(), receiver.CanCompleteRepeatableQuest(quest), true); else { - receiver.SetDivider(sender.GetGUID()); + receiver.SetQuestSharingInfo(sender.GetGUID(), quest.Id); receiver.PlayerTalkClass.SendQuestGiverQuestDetails(quest, receiver.GetGUID(), true, false); } } @@ -624,16 +624,16 @@ namespace Game [WorldPacketHandler(ClientOpcodes.QuestPushResult)] void HandleQuestPushResult(QuestPushResult packet) { - if (!GetPlayer().GetDivider().IsEmpty()) + if (!GetPlayer().GetPlayerSharingQuest().IsEmpty()) { - if (_player.GetDivider() == packet.SenderGUID) + if (_player.GetPlayerSharingQuest() == packet.SenderGUID) { - Player player = Global.ObjAccessor.FindPlayer(_player.GetDivider()); + Player player = Global.ObjAccessor.FindPlayer(_player.GetPlayerSharingQuest()); if (player) player.SendPushToPartyResponse(_player, packet.Result); } - _player.SetDivider(ObjectGuid.Empty); + _player.ClearQuestSharingInfo(); } }