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); } } }
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--; } } } }
static void DumpUpdatePackets(string inputFile, string outputFile, bool isSingleBlocks) { FieldRenderUtil.IsOldEntity = false; FieldRenderUtil.Init(); ParsedUpdatePacket.DumpToFile(inputFile, false, isSingleBlocks, Path.Combine(OutputDir, outputFile)); }
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)); //} } } }
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); } }
/// <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(); }
/// <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 } } } }
/// <summary> /// /// </summary> /// <param name="packet"></param> private void HandleUpdatePackets(ParsedUpdatePacket packet) { packet.Dump(m_output.Writer); m_output.Writer.WriteLine(); m_output.Writer.Flush(); }