diff --git a/Source/Game/AI/SmartScripts/SmartScript.cs b/Source/Game/AI/SmartScripts/SmartScript.cs index 4a6a554db..11503127a 100644 --- a/Source/Game/AI/SmartScripts/SmartScript.cs +++ b/Source/Game/AI/SmartScripts/SmartScript.cs @@ -319,7 +319,7 @@ namespace Game.AI if (session) { PlayerMenu menu = new PlayerMenu(session); - menu.SendQuestGiverQuestDetails(q, me.GetGUID(), true); + menu.SendQuestGiverQuestDetails(q, me.GetGUID(), true, false); Log.outDebug(LogFilter.ScriptsAi, "SmartScript.ProcessAction:: SMART_ACTION_OFFER_QUEST: Player {0} - offering quest {1}", pTarget.GetGUID().ToString(), e.Action.questOffer.questId); } } diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index 1f3880044..88ed566c1 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -394,7 +394,7 @@ namespace Game.Misc _session.SendPacket(packet); } - public void SendQuestGiverQuestDetails(Quest quest, ObjectGuid npcGUID, bool activateAccept) + public void SendQuestGiverQuestDetails(Quest quest, ObjectGuid npcGUID, bool autoLaunched, bool displayPopup) { QuestGiverQuestDetails packet = new QuestGiverQuestDetails(); @@ -427,7 +427,8 @@ namespace Game.Misc packet.QuestID = quest.Id; packet.PortraitGiver = quest.QuestGiverPortrait; packet.PortraitTurnIn = quest.QuestTurnInPortrait; - packet.AutoLaunched = activateAccept; + packet.AutoLaunched = autoLaunched; + packet.DisplayPopup = displayPopup; packet.QuestFlags[0] = (uint)quest.Flags; packet.QuestFlags[1] = (uint)quest.FlagsEx; packet.SuggestedPartyMembers = quest.SuggestedPlayers; @@ -596,7 +597,7 @@ namespace Game.Misc _session.SendPacket(packet); } - public void SendQuestGiverOfferReward(Quest quest, ObjectGuid npcGUID, bool enableNext) + public void SendQuestGiverOfferReward(Quest quest, ObjectGuid npcGUID, bool autoLaunched) { QuestGiverOfferRewardMessage packet = new QuestGiverOfferRewardMessage(); @@ -636,7 +637,7 @@ namespace Game.Misc offer.QuestGiverCreatureID = creature.GetCreatureTemplate().Entry; offer.QuestID = quest.Id; - offer.AutoLaunched = enableNext; + offer.AutoLaunched = autoLaunched; offer.SuggestedPartyMembers = quest.SuggestedPlayers; for (uint i = 0; i < SharedConst.QuestEmoteCount && quest.OfferRewardEmote[i] != 0; ++i) @@ -654,7 +655,7 @@ namespace Game.Misc _session.SendPacket(packet); } - public void SendQuestGiverRequestItems(Quest quest, ObjectGuid npcGUID, bool canComplete, bool closeOnCancel) + public void SendQuestGiverRequestItems(Quest quest, ObjectGuid npcGUID, bool canComplete, bool autoLaunched) { // We can always call to RequestItems, but this packet only goes out if there are actually // items. Otherwise, we'll skip straight to the OfferReward @@ -729,7 +730,7 @@ namespace Game.Misc } } - packet.AutoLaunched = closeOnCancel; + packet.AutoLaunched = autoLaunched; _session.SendPacket(packet); } diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 04166fd10..9a8c0395a 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -314,7 +314,7 @@ namespace Game.Entities if (quest.IsAutoComplete() && quest.IsRepeatable() && !quest.IsDailyOrWeekly()) PlayerTalkClass.SendQuestGiverRequestItems(quest, guid, CanCompleteRepeatableQuest(quest), true); else - PlayerTalkClass.SendQuestGiverQuestDetails(quest, guid, true); + PlayerTalkClass.SendQuestGiverQuestDetails(quest, guid, true, false); return; } } diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index 1ab1805d8..bc3ba9655 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -217,7 +217,7 @@ namespace Game if (quest.IsAutoComplete()) GetPlayer().PlayerTalkClass.SendQuestGiverRequestItems(quest, obj.GetGUID(), GetPlayer().CanCompleteQuest(quest.Id), true); else - GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(quest, obj.GetGUID(), true); + GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(quest, obj.GetGUID(), true, false); } } @@ -347,7 +347,7 @@ namespace Game if (nextQuest.IsAutoAccept() && GetPlayer().CanAddQuest(nextQuest, true)) GetPlayer().AddQuestAndCheckCompletion(nextQuest, obj); - GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true); + GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); } } @@ -370,7 +370,7 @@ namespace Game if (nextQuest.IsAutoAccept() && GetPlayer().CanAddQuest(nextQuest, true)) GetPlayer().AddQuestAndCheckCompletion(nextQuest, obj); - GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true); + GetPlayer().PlayerTalkClass.SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); } } @@ -606,7 +606,7 @@ namespace Game else { receiver.SetDivider(sender.GetGUID()); - receiver.PlayerTalkClass.SendQuestGiverQuestDetails(quest, receiver.GetGUID(), true); + receiver.PlayerTalkClass.SendQuestGiverQuestDetails(quest, receiver.GetGUID(), true, false); } } } diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index c3ebf840e..f1c391dc9 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -4904,16 +4904,19 @@ namespace Game.Spells if (!player) return; - Quest qInfo = Global.ObjectMgr.GetQuestTemplate((uint)effectInfo.MiscValue); - if (qInfo != null) + Quest quest = Global.ObjectMgr.GetQuestTemplate((uint)effectInfo.MiscValue); + if (quest != null) { - if (!player.CanTakeQuest(qInfo, false)) + if (!player.CanTakeQuest(quest, false)) return; - if (qInfo.IsAutoAccept() && player.CanAddQuest(qInfo, false)) - player.AddQuestAndCheckCompletion(qInfo, null); - - player.PlayerTalkClass.SendQuestGiverQuestDetails(qInfo, player.GetGUID(), true); + if (quest.IsAutoAccept() && player.CanAddQuest(quest, false)) + { + player.AddQuestAndCheckCompletion(quest, null); + player.PlayerTalkClass.SendQuestGiverQuestDetails(quest, player.GetGUID(), true, true); + } + else + player.PlayerTalkClass.SendQuestGiverQuestDetails(quest, player.GetGUID(), true, false); } }