Exemple #1
0
        public static void ReadGossipOptionsData(uint menuId, Packet packet, params object[] idx)
        {
            GossipMenuOption gossipOption = new GossipMenuOption
            {
                MenuId = menuId
            };
            GossipMenuOptionBox gossipMenuOptionBox = new GossipMenuOptionBox
            {
                MenuId = menuId
            };

            gossipOption.OptionIndex     = gossipMenuOptionBox.OptionIndex = (uint)packet.ReadInt32("ClientOption", idx);
            gossipOption.OptionIcon      = (GossipOptionIcon?)packet.ReadByte("OptionNPC", idx);
            gossipMenuOptionBox.BoxCoded = packet.ReadByte("OptionFlags", idx) != 0;
            gossipMenuOptionBox.BoxMoney = (uint)packet.ReadInt32("OptionCost", idx);

            packet.ResetBitReader();
            uint textLen    = packet.ReadBits(12);
            uint confirmLen = packet.ReadBits(12);

            gossipOption.OptionText     = packet.ReadWoWString("Text", textLen, idx);
            gossipMenuOptionBox.BoxText = packet.ReadWoWString("Confirm", confirmLen, idx);

            List <int> boxTextList;
            List <int> optionTextList;

            if (gossipMenuOptionBox.BoxText != string.Empty && SQLDatabase.BroadcastTexts.TryGetValue(gossipMenuOptionBox.BoxText, out boxTextList))
            {
                if (boxTextList.Count == 1)
                {
                    gossipMenuOptionBox.BoxBroadcastTextId = boxTextList[0];
                }
                else
                {
                    gossipMenuOptionBox.BroadcastTextIdHelper += "BoxBroadcastTextID: ";
                    gossipMenuOptionBox.BroadcastTextIdHelper += string.Join(" - ", boxTextList);
                }
            }
            else
            {
                gossipMenuOptionBox.BoxBroadcastTextId = 0;
            }

            if (gossipOption.OptionText != string.Empty && SQLDatabase.BroadcastTexts.TryGetValue(gossipOption.OptionText, out optionTextList))
            {
                if (optionTextList.Count == 1)
                {
                    gossipOption.OptionBroadcastTextId = optionTextList[0];
                }
                else
                {
                    gossipOption.BroadcastTextIDHelper += "OptionBroadcastTextID: ";
                    gossipOption.BroadcastTextIDHelper += string.Join(" - ", optionTextList);
                }
            }
            else
            {
                gossipOption.OptionBroadcastTextId = 0;
            }


            Storage.GossipMenuOptions.Add(gossipOption, packet.TimeSpan);
            if (!gossipMenuOptionBox.IsEmpty)
            {
                Storage.GossipMenuOptionBoxes.Add(gossipMenuOptionBox, packet.TimeSpan);
            }

            if (ClientLocale.PacketLocale != LocaleConstant.enUS && gossipOption.OptionText != string.Empty)
            {
                GossipMenuOptionLocale localesGossipMenuOption = new GossipMenuOptionLocale
                {
                    MenuId      = (uint)gossipOption.MenuId,
                    OptionIndex = gossipOption.OptionIndex,
                    OptionText  = gossipOption.OptionText,
                    BoxText     = gossipMenuOptionBox.BoxText
                };
                Storage.LocalesGossipMenuOption.Add(localesGossipMenuOption, packet.TimeSpan);
            }
        }
Exemple #2
0
        public static void HandleNpcGossip(Packet packet)
        {
            GossipMenu gossip = new GossipMenu();

            WowGuid guid = packet.ReadGuid("GUID");

            gossip.ObjectType  = guid.GetObjectType();
            gossip.ObjectEntry = guid.GetEntry();

            uint menuId = packet.ReadUInt32("Menu Id");

            gossip.Entry = menuId;

            if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria))
            {
                packet.ReadUInt32("Friendship Faction");
            }

            gossip.TextID = packet.ReadUInt32("Text Id");

            uint count = packet.ReadUInt32("Amount of Options");

            for (int i = 0; i < count; i++)
            {
                GossipMenuOption gossipOption = new GossipMenuOption
                {
                    MenuId = menuId,
                };
                GossipMenuOptionBox gossipMenuOptionBox = new GossipMenuOptionBox
                {
                    MenuId = menuId
                };

                gossipOption.OptionIndex     = gossipMenuOptionBox.OptionIndex = packet.ReadUInt32("Index", i);
                gossipOption.OptionIcon      = packet.ReadByteE <GossipOptionIcon>("Icon", i);
                gossipMenuOptionBox.BoxCoded = packet.ReadBool("Box", i);
                gossipMenuOptionBox.BoxMoney = packet.ReadUInt32("Required money", i);
                gossipOption.OptionText      = packet.ReadCString("Text", i);
                gossipMenuOptionBox.BoxText  = packet.ReadCString("Box Text", i);

                Storage.GossipMenuOptions.Add(gossipOption, packet.TimeSpan);
                if (!gossipMenuOptionBox.IsEmpty)
                {
                    Storage.GossipMenuOptionBoxes.Add(gossipMenuOptionBox, packet.TimeSpan);
                }

                if (ClientLocale.PacketLocale != LocaleConstant.enUS && gossipOption.OptionText != string.Empty)
                {
                    GossipMenuOptionLocale localesGossipMenuOption = new GossipMenuOptionLocale
                    {
                        MenuId      = (uint)gossipOption.MenuId,
                        OptionIndex = gossipOption.OptionIndex,
                        OptionText  = gossipOption.OptionText,
                        BoxText     = gossipMenuOptionBox.BoxText
                    };
                    Storage.LocalesGossipMenuOption.Add(localesGossipMenuOption, packet.TimeSpan);
                }
            }

            uint questgossips = packet.ReadUInt32("Amount of Quest gossips");

            for (int i = 0; i < questgossips; i++)
            {
                packet.ReadUInt32 <QuestId>("Quest ID", i);

                packet.ReadUInt32("Icon", i);
                packet.ReadInt32("Level", i);
                packet.ReadUInt32E <QuestFlags>("Flags", i);
                if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_1_0_16309))
                {
                    packet.ReadUInt32E <QuestFlagsEx>("Flags 2", i);
                }

                packet.ReadBool("Change Icon", i);
                packet.ReadCString("Title", i);
            }

            if (guid.GetObjectType() == ObjectType.Unit)
            {
                if (Storage.Objects.ContainsKey(guid))
                {
                    ((Unit)Storage.Objects[guid].Item1).GossipId = menuId;
                }
            }

            Storage.Gossips.Add(gossip, packet.TimeSpan);
            if (LastGossipOption.HasSelection)
            {
                Storage.GossipMenuOptionActions.Add(new GossipMenuOptionAction {
                    MenuId = LastGossipOption.MenuId, OptionIndex = LastGossipOption.OptionIndex, ActionMenuId = menuId
                }, packet.TimeSpan);
            }

            packet.AddSniffData(StoreNameType.Gossip, (int)menuId, guid.GetEntry().ToString(CultureInfo.InvariantCulture));
        }