Ejemplo n.º 1
0
        protected virtual void DoParse(ParsablePacketInfo info, LogHandler handler)
        {
            var rawPacket = info.Packet;

            if (rawPacket.PacketId.IsUpdatePacket)
            {
                var len   = rawPacket.Length - rawPacket.HeaderSize;
                var bytes = rawPacket.ReadBytes(len);
                if (bytes.Length != len)
                {
                    log.Warn("BinaryReader.ReadBytes failed: {0} / {1}", bytes.Length, len);
                    return;
                }
                var updatePacket = ParsedUpdatePacket.Create(info.Timestamp,
                                                             bytes,
                                                             false,
                                                             rawPacket.PacketId == RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT);

                if (handler.UpdatePacketHandler != null)
                {
                    handler.UpdatePacketHandler(updatePacket);
                }
            }
            else
            {
                var parser = new PacketParser(info);
                parser.Parse();

                if (handler.NormalPacketHandler != null)
                {
                    handler.NormalPacketHandler(parser);
                }
            }
        }
Ejemplo n.º 2
0
        private static void ExtractVehicleIds(ParsedUpdatePacket packet)
        {
            foreach (var block in packet.Blocks)
            {
                if (block.Type == UpdateType.Create)
                {
                    var movement = block.Movement;
                    if ((movement.UpdateFlags & UpdateFlags.Vehicle) != 0)
                    {
                        var    isChar = block.EntityId.High == HighId.Player;
                        string suffix;
                        if (isChar)
                        {
                            suffix = "";
                        }
                        else
                        {
                            suffix = string.Format(" {0} ({1})", block.EntityId.Entry, (int)block.EntityId.Entry);
                        }

                        writer.WriteLine("{0}{1}", isChar ? "Player" : "NPC", suffix);
                        writer.IndentLevel++;
                        writer.WriteLine("VehicleId: " + movement.VehicleId);
                        writer.WriteLine("VehicleAimAdjustment: " + movement.VehicleAimAdjustment);
                        writer.WriteLine("Hoverheight: " + block.GetFloat(UnitFields.HOVERHEIGHT));
                        writer.IndentLevel--;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        static void DumpUpdatePackets(string inputFile, string outputFile, bool isSingleBlocks)
        {
            FieldRenderUtil.IsOldEntity = false;
            FieldRenderUtil.Init();

            ParsedUpdatePacket.DumpToFile(inputFile, false, isSingleBlocks,
                                          Path.Combine(OutputDir, outputFile));
        }
Ejemplo n.º 4
0
 static void HandleUpdates(ParsedUpdatePacket packet)
 {
     foreach (var block in packet.Blocks)
     {
         if (block.EntityId.High == HighId.Unit &&
             block.Values != null &&
             block.IsSet(UnitFields.FACTIONTEMPLATE))
         {
             var factionTemplate = block.GetUInt(UnitFields.FACTIONTEMPLATE);
             //var factionIndex =
             //if (!InfosByEntity.Contains(factionIndex))
             //{
             //    InfosByEntity.Add(GetInfo(factionIndex));
             //}
         }
     }
 }
Ejemplo n.º 5
0
        public void AddRealmSMSG(PacketIn packet)
        {
            if (PacketUtil.GetUpdatePackets &&
                (packet.PacketId == RealmServerOpCode.SMSG_UPDATE_OBJECT ||
                 packet.PacketId == RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT))
            {
                var parsedPacket = new ParsedUpdatePacket(packet);

                // check if all bytes were read - if not, the submitted update-count was too small
                //Assert.AreEqual(0, parsedPacket.RemainingLength, "Count in UpdatePacket does not match with actual packet-size");

                UpdatePackets.Add(parsedPacket);
            }
            else
            {
                AddRealmPacket(SMSGPackets, PacketSender.Server, packet, this);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Renders a single WoW - Packet
        /// </summary>
        public static void Dump(ParsablePacketInfo info, IndentTextWriter writer)
        {
            var packet = info.Packet;

            if (packet.PacketId.IsUpdatePacket)
            {
                ParsedUpdatePacket.Dump(info.Timestamp, packet.ReadBytes(packet.Length - packet.HeaderSize), false, writer,
                                        packet.PacketId.RawId == (uint)RealmServerOpCode.SMSG_COMPRESSED_UPDATE_OBJECT);
            }
            else
            {
                var parser = new PacketParser(info);
                parser.Parse();
                parser.Dump(writer);
            }

            writer.WriteLine();
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Write human-readable version of log to ParsedQuestOutput.txt
 /// </summary>
 /// <param name="packet">Any kind of Update-packet</param>
 public static void HandleUpdatePackets(ParsedUpdatePacket packet)
 {
     // iterate over all Creation-UpdateBlocks in the UpdatePacket
     foreach (var block in packet.GetBlocks(UpdateType.Create))
     {
         // We only want NPC-information
         if (block.ObjectType == ObjectTypeId.Unit)
         {
             // write all NPCs that I encountered and have Level > 80 to a file
             // add a "u" (for unsigned in uint) to the number, since the Level is a uint
             if (block.GetUInt(UnitFields.LEVEL) > 80u)
             {
                 packet.Dump(level80MobsWriter);
                 level80MobsWriter.WriteLine();                                  // empty line in between entries
             }
         }
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="packet"></param>
 private void HandleUpdatePackets(ParsedUpdatePacket packet)
 {
     packet.Dump(m_output.Writer);
     m_output.Writer.WriteLine();
     m_output.Writer.Flush();
 }