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 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); } }