public static void HandleQuestRequestItems(Packet packet) { packet.ReadPackedGuid128("QuestGiverGUID"); packet.ReadInt32("QuestGiverCreatureID"); int id = packet.ReadInt32("QuestID"); int delay = packet.ReadInt32("EmoteDelay"); int emote = packet.ReadInt32("EmoteType"); for (int i = 0; i < 2; i++) { packet.ReadInt32("QuestFlags", i); } packet.ReadInt32("SuggestPartyMembers"); packet.ReadInt32("MoneyToGet"); int int44 = packet.ReadInt32("QuestObjectiveCollectCount"); int int60 = packet.ReadInt32("QuestCurrencyCount"); QuestStatusFlags statusFlags = packet.ReadInt32E <QuestStatusFlags>("StatusFlags"); bool isComplete = (statusFlags & (QuestStatusFlags.Complete)) == QuestStatusFlags.Complete; bool noRequestOnComplete = (statusFlags & QuestStatusFlags.NoRequestOnComplete) != 0; for (int i = 0; i < int44; i++) { packet.ReadInt32("ObjectID", i); packet.ReadInt32("Amount", i); } for (int i = 0; i < int60; i++) { packet.ReadInt32("CurrencyID", i); packet.ReadInt32("Amount", i); } packet.ResetBitReader(); packet.ReadBit("AutoLaunched"); packet.ResetBitReader(); uint bits3016 = packet.ReadBits(9); uint bits16 = packet.ReadBits(12); packet.ReadWoWString("QuestTitle", bits3016); string completionText = packet.ReadWoWString("CompletionText", bits16); CoreParsers.QuestHandler.QuestRequestItemHelper(id, completionText, delay, emote, isComplete, packet, noRequestOnComplete); if (ClientLocale.PacketLocale != LocaleConstant.enUS && completionText != string.Empty) { QuestRequestItemsLocale localesQuestRequestItems = new QuestRequestItemsLocale { ID = (uint)id, CompletionText = completionText }; Storage.LocalesQuestRequestItems.Add(localesQuestRequestItems, packet.TimeSpan); } }
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 if (!quest.HasSpecialFlag(QuestSpecialFlags.Deliver) && canComplete) { SendQuestGiverOfferReward(quest, npcGUID, true); return; } QuestGiverRequestItems packet = new QuestGiverRequestItems(); packet.QuestTitle = quest.LogTitle; packet.CompletionText = quest.RequestItemsText; Locale locale = _session.GetSessionDbLocaleIndex(); if (locale != Locale.enUS) { QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id); if (localeData != null) { ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref packet.QuestTitle); } QuestRequestItemsLocale questRequestItemsLocale = Global.ObjectMgr.GetQuestRequestItemsLocale(quest.Id); if (questRequestItemsLocale != null) { ObjectManager.GetLocaleString(questRequestItemsLocale.CompletionText, locale, ref packet.CompletionText); } } packet.QuestGiverGUID = npcGUID; // Is there a better way? what about game objects? Creature creature = ObjectAccessor.GetCreature(_session.GetPlayer(), npcGUID); if (creature) { packet.QuestGiverCreatureID = creature.GetCreatureTemplate().Entry; } packet.QuestID = quest.Id; if (canComplete) { packet.CompEmoteDelay = quest.EmoteOnCompleteDelay; packet.CompEmoteType = quest.EmoteOnComplete; } else { packet.CompEmoteDelay = quest.EmoteOnIncompleteDelay; packet.CompEmoteType = quest.EmoteOnIncomplete; } packet.QuestFlags[0] = (uint)quest.Flags; packet.QuestFlags[1] = (uint)quest.FlagsEx; packet.SuggestPartyMembers = quest.SuggestedPlayers; // incomplete: FD // incomplete quest with item objective but item objective is complete DD packet.StatusFlags = canComplete ? 0xFF : 0xFD; packet.MoneyToGet = 0; foreach (QuestObjective obj in quest.Objectives) { switch (obj.Type) { case QuestObjectiveType.Item: packet.Collect.Add(new QuestObjectiveCollect((uint)obj.ObjectID, obj.Amount, (uint)obj.Flags)); break; case QuestObjectiveType.Currency: packet.Currency.Add(new QuestCurrency((uint)obj.ObjectID, obj.Amount)); break; case QuestObjectiveType.Money: packet.MoneyToGet += obj.Amount; break; default: break; } } packet.AutoLaunched = autoLaunched; _session.SendPacket(packet); }
public static void HandleQuestGiverRequestItems(Packet packet) { packet.ReadPackedGuid128("QuestGiverGUID"); packet.ReadInt32("QuestGiverCreatureID"); int id = packet.ReadInt32("QuestID"); QuestRequestItems questRequestItems = new QuestRequestItems { ID = (uint)id }; questRequestItems.EmoteOnCompleteDelay = (uint)packet.ReadInt32("CompEmoteDelay"); questRequestItems.EmoteOnComplete = (uint)packet.ReadInt32("CompEmoteType"); for (int i = 0; i < 2; i++) { packet.ReadInt32("QuestFlags", i); } packet.ReadInt32("SuggestPartyMembers"); packet.ReadInt32("MoneyToGet"); int collectCount = packet.ReadInt32("CollectCount"); int currencyCount = packet.ReadInt32("CurrencyCount"); packet.ReadInt32("StatusFlags"); for (int i = 0; i < collectCount; i++) { packet.ReadInt32("ObjectID", i); packet.ReadInt32("Amount", i); packet.ReadUInt32("Flags", i); } for (int i = 0; i < currencyCount; i++) { packet.ReadInt32("CurrencyID", i); packet.ReadInt32("Amount", i); } packet.ResetBitReader(); packet.ReadBit("AutoLaunched"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_2_0_23826)) { packet.ReadBit("CanIgnoreQuest"); packet.ReadBit("IsQuestIgnored"); } packet.ResetBitReader(); uint questTitleLen = packet.ReadBits(9); uint completionTextLen = packet.ReadBits(12); packet.ReadWoWString("QuestTitle", questTitleLen); questRequestItems.CompletionText = packet.ReadWoWString("CompletionText", completionTextLen); Storage.QuestRequestItems.Add(questRequestItems, packet.TimeSpan); if (ClientLocale.PacketLocale != LocaleConstant.enUS && questRequestItems.CompletionText != string.Empty) { QuestRequestItemsLocale localesQuestRequestItems = new QuestRequestItemsLocale { ID = (uint)id, CompletionText = questRequestItems.CompletionText }; Storage.LocalesQuestRequestItems.Add(localesQuestRequestItems, packet.TimeSpan); } }
public static void HandleQuestRequestItems(Packet packet) { packet.ReadPackedGuid128("QuestGiverGUID"); packet.ReadInt32("QuestGiverCreatureID"); int id = packet.ReadInt32("QuestID"); QuestRequestItems questRequestItems = new QuestRequestItems { ID = (uint)id }; questRequestItems.EmoteOnCompleteDelay = (uint)packet.ReadInt32("CompEmoteDelay"); questRequestItems.EmoteOnComplete = (uint)packet.ReadInt32("CompEmoteType"); for (int i = 0; i < 2; i++) { packet.ReadInt32("QuestFlags", i); } packet.ReadInt32("SuggestPartyMembers"); packet.ReadInt32("MoneyToGet"); int int44 = packet.ReadInt32("QuestObjectiveCollectCount"); int int60 = packet.ReadInt32("QuestCurrencyCount"); packet.ReadInt32("StatusFlags"); for (int i = 0; i < int44; i++) { packet.ReadInt32("ObjectID", i); packet.ReadInt32("Amount", i); } for (int i = 0; i < int60; i++) { packet.ReadInt32("CurrencyID", i); packet.ReadInt32("Amount", i); } packet.ResetBitReader(); packet.ReadBit("AutoLaunched"); packet.ResetBitReader(); uint bits3016 = packet.ReadBits(9); uint bits16 = packet.ReadBits(12); packet.ReadWoWString("QuestTitle", bits3016); questRequestItems.CompletionText = packet.ReadWoWString("CompletionText", bits16); Storage.QuestRequestItems.Add(questRequestItems, packet.TimeSpan); if (ClientLocale.PacketLocale != LocaleConstant.enUS && questRequestItems.CompletionText != string.Empty) { QuestRequestItemsLocale localesQuestRequestItems = new QuestRequestItemsLocale { ID = (uint)id, CompletionText = questRequestItems.CompletionText }; Storage.LocalesQuestRequestItems.Add(localesQuestRequestItems, packet.TimeSpan); } }
public static void HandleQuestGiverRequestItems(Packet packet) { var questgiverGUID = packet.ReadPackedGuid128("QuestGiverGUID"); var requestItems = packet.Holder.QuestGiverRequestItems = new(); requestItems.QuestGiver = questgiverGUID; requestItems.QuestGiverEntry = (uint)packet.ReadInt32("QuestGiverCreatureID"); int id = packet.ReadInt32("QuestID"); int delay = requestItems.EmoteDelay = packet.ReadInt32("EmoteDelay"); int emote = requestItems.EmoteType = packet.ReadInt32("EmoteType"); requestItems.QuestId = (uint)id; CoreParsers.QuestHandler.AddQuestEnder(questgiverGUID, (uint)id); for (int i = 0; i < 2; i++) { var flags = packet.ReadInt32("QuestFlags", i); if (i == 0) { requestItems.QuestFlags = (uint)flags; } else if (i == 1) { requestItems.QuestFlags2 = (uint)flags; } } requestItems.SuggestedPartyMembers = packet.ReadInt32("SuggestPartyMembers"); requestItems.MoneyToGet = packet.ReadInt32("MoneyToGet"); uint collectCount = requestItems.CollectCount = packet.ReadUInt32("CollectCount"); uint currencyCount = requestItems.CurrencyCount = packet.ReadUInt32("CurrencyCount"); QuestStatusFlags statusFlags = packet.ReadInt32E <QuestStatusFlags>("StatusFlags"); requestItems.StatusFlags = (PacketQuestStatusFlags)statusFlags; bool isComplete = (statusFlags & (QuestStatusFlags.Complete)) == QuestStatusFlags.Complete; bool noRequestOnComplete = (statusFlags & QuestStatusFlags.NoRequestOnComplete) != 0; for (int i = 0; i < collectCount; i++) { var objectId = packet.ReadInt32("ObjectID", i); var amount = packet.ReadInt32("Amount", i); var flags = packet.ReadUInt32("Flags", i); requestItems.Collect.Add(new QuestCollect() { Id = objectId, Count = amount, Flags = flags }); } for (int i = 0; i < currencyCount; i++) { var currencyId = packet.ReadInt32("CurrencyID", i); var amount = packet.ReadInt32("Amount", i); requestItems.Currencies.Add(new Currency() { Id = (uint)currencyId, Count = (uint)amount }); } packet.ResetBitReader(); requestItems.AutoLaunched = packet.ReadBit("AutoLaunched"); packet.ResetBitReader(); uint questTitleLen = 0; uint completionTextLen = 0; if (ClientVersion.RemovedInVersion(ClientVersionBuild.V8_1_5_29683)) { questTitleLen = packet.ReadBits(10); } else { questTitleLen = packet.ReadBits(9); } completionTextLen = packet.ReadBits(12); requestItems.QuestTitle = packet.ReadWoWString("QuestTitle", questTitleLen); string completionText = requestItems.CompletionText = packet.ReadWoWString("CompletionText", completionTextLen); CoreParsers.QuestHandler.QuestRequestItemHelper(id, completionText, delay, emote, isComplete, packet, noRequestOnComplete); if (ClientLocale.PacketLocale != LocaleConstant.enUS && completionText != string.Empty) { QuestRequestItemsLocale localesQuestRequestItems = new QuestRequestItemsLocale { ID = (uint)id, CompletionText = completionText }; Storage.LocalesQuestRequestItems.Add(localesQuestRequestItems, packet.TimeSpan); } }
public static void HandleQuestGiverRequestItems(Packet packet) { var requestItems = packet.Holder.QuestGiverRequestItems = new(); requestItems.QuestGiver = packet.ReadPackedGuid128("QuestGiverGUID"); requestItems.QuestGiverEntry = (uint)packet.ReadInt32("QuestGiverCreatureID"); int id = packet.ReadInt32("QuestID"); requestItems.QuestId = (uint)id; int delay = packet.ReadInt32("EmoteDelay"); int emote = packet.ReadInt32("EmoteType"); for (int i = 0; i < 2; i++) { packet.ReadInt32("QuestFlags", i); } packet.ReadInt32("SuggestPartyMembers"); packet.ReadInt32("MoneyToGet"); int collectCount = packet.ReadInt32("CollectCount"); int currencyCount = packet.ReadInt32("CurrencyCount"); QuestStatusFlags statusFlags = packet.ReadInt32E <QuestStatusFlags>("StatusFlags"); bool isComplete = (statusFlags & (QuestStatusFlags.Complete)) == QuestStatusFlags.Complete; bool noRequestOnComplete = (statusFlags & QuestStatusFlags.NoRequestOnComplete) != 0; for (int i = 0; i < collectCount; i++) { packet.ReadInt32("ObjectID", i); packet.ReadInt32("Amount", i); packet.ReadUInt32("Flags", i); } for (int i = 0; i < currencyCount; i++) { packet.ReadInt32("CurrencyID", i); packet.ReadInt32("Amount", i); } packet.ResetBitReader(); packet.ReadBit("AutoLaunched"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_2_0_23826)) { packet.ReadBit("CanIgnoreQuest"); packet.ReadBit("IsQuestIgnored"); } packet.ResetBitReader(); uint questTitleLen = packet.ReadBits(9); uint completionTextLen = packet.ReadBits(12); packet.ReadWoWString("QuestTitle", questTitleLen); string completionText = requestItems.RequestItemsText = packet.ReadWoWString("CompletionText", completionTextLen); CoreParsers.QuestHandler.QuestRequestItemHelper(id, completionText, delay, emote, isComplete, packet, noRequestOnComplete); if (ClientLocale.PacketLocale != LocaleConstant.enUS && completionText != string.Empty) { QuestRequestItemsLocale localesQuestRequestItems = new QuestRequestItemsLocale { ID = (uint)id, CompletionText = completionText }; Storage.LocalesQuestRequestItems.Add(localesQuestRequestItems, packet.TimeSpan); } }