public void HandleNpcGossip(Parser packet)
        {
            var guid = packet.ReadGuid();
            WriteLine("GUID: " + guid);

            var entry = packet.ReadUInt32();
            WriteLine("Menu id: " + entry);

            var textid = packet.ReadUInt32();
            WriteLine("Text id: " + textid);

            var count = packet.ReadUInt32();
            WriteLine("- Amount of Options: " + count);

            for (var i = 0; i < count; i++)
            {
                if (i != 0)
                    WriteLine("\t--");

                var index = packet.ReadUInt32();
                WriteLine("\tIndex: " + index);

                var icon = packet.ReadByte();
                WriteLine("\tIcon: " + icon);

                var box = packet.ReadBoolean();
                WriteLine("\tBox: " + box);

                var boxMoney = packet.ReadUInt32();
                if (box) // Only print if there's a box. avaliable.
                    WriteLine("\tRequired money: " + boxMoney);

                var text = packet.ReadCString();
                WriteLine("\tText: " + text);

                var boxText = packet.ReadCString();
                if (box) // Only print if there's a box avaliable.
                    WriteLine("\tBox text: " + boxText);
            }

            var questgossips = packet.ReadUInt32();
            WriteLine("- Amount of Quest gossips: " + questgossips);

            for (var i = 0; i < questgossips; i++)
            {
                if (i != 0)
                    WriteLine("\t--");

                var questID = packet.ReadUInt32();
                WriteLine("\tQuest ID: " + questID);

                var questicon = packet.ReadUInt32();
                WriteLine("\tIcon: " + questicon);

                var questlevel = packet.ReadInt32();
                WriteLine("\tLevel: " + questlevel);

                var flags = (QuestFlag)(packet.ReadUInt32() | 0xFFFF);
                WriteLine("\tFlags: " + flags);

                var unk1 = packet.ReadBoolean();
                WriteLine("\tUnknown bool: " + unk1);

                var title = packet.ReadCString();
                WriteLine("\tTitle: " + title);
            }
        }
        public void HandleThreatlistUpdate(Parser packet)
        {
            var guid = packet.ReadPackedGuid();
            WriteLine("GUID: " + guid);

            if (Packet.Code == OpCodes.SMSG_HIGHEST_THREAT_UPDATE)
            {
                var newhigh = packet.ReadPackedGuid();
                WriteLine("New Highest: " + newhigh);
            }

            var count = packet.ReadUInt32();
            WriteLine("Size: " + count);
            for (int i = 0; i < count; i++)
            {
                var unit = packet.ReadPackedGuid();
                WriteLine("Hostile: " + unit);
                var threat = packet.ReadUInt32();
                // No idea why, but this is in core.
                /*if (packet.GetOpcode() == Opcode.SMSG_THREAT_UPDATE)
                    threat *= 100;*/
                WriteLine("Threat: " + threat);
            }
        }