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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }