diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index aab1d2785..e20476107 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -376,23 +376,28 @@ namespace Game [WorldPacketHandler(ClientOpcodes.QuestGiverRequestReward, Processing = PacketProcessing.Inplace)] void HandleQuestgiverRequestReward(QuestGiverRequestReward packet) { - WorldObject obj = Global.ObjAccessor.GetObjectByTypeMask(GetPlayer(), packet.QuestGiverGUID, TypeMask.Unit | TypeMask.GameObject); - if (obj == null || !obj.HasInvolvedQuest(packet.QuestID)) + Quest quest = Global.ObjectMgr.GetQuestTemplate(packet.QuestID); + if (quest == null) return; - // some kind of WPE protection - if (!GetPlayer().CanInteractWithQuestGiver(obj)) - return; + if (!quest.HasFlag(QuestFlags.AutoComplete)) + { + WorldObject obj = Global.ObjAccessor.GetObjectByTypeMask(_player, packet.QuestGiverGUID, TypeMask.Unit | TypeMask.GameObject); + if (obj == null || !obj.HasInvolvedQuest(packet.QuestID)) + return; + + // some kind of WPE protection + if (!_player.CanInteractWithQuestGiver(obj)) + return; + } if (GetPlayer().CanCompleteQuest(packet.QuestID)) GetPlayer().CompleteQuest(packet.QuestID); if (GetPlayer().GetQuestStatus(packet.QuestID) != QuestStatus.Complete) return; - - Quest quest = Global.ObjectMgr.GetQuestTemplate(packet.QuestID); - if (quest != null) - GetPlayer().PlayerTalkClass.SendQuestGiverOfferReward(quest, packet.QuestGiverGUID, true); + + GetPlayer().PlayerTalkClass.SendQuestGiverOfferReward(quest, packet.QuestGiverGUID, true); } [WorldPacketHandler(ClientOpcodes.QuestLogRemoveQuest, Processing = PacketProcessing.Inplace)]