public static void HandleEnterWorld(Packet packet) { CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector4("Position"); packet.AddSniffData(StoreNameType.Map, (int) CurrentMapId, "NEW_WORLD"); }
public static void HandleEnterWorld(Packet packet) { CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector4("Position"); WoWObject character; if (Storage.Objects.TryGetValue(SessionHandler.LoginGuid, out character)) SessionHandler.LoggedInCharacter = (Player) character; packet.AddSniffData(StoreNameType.Map, (int) CurrentMapId, "NEW_WORLD"); }
public static void HandleMovementHeartbeat433(Packet packet) { packet.ReadEnum<MovementFlag>("Movement flags", 30); packet.ReadBit("HasSplineData"); var guidBytes = new byte[8]; guidBytes[0] = packet.ReadBit(); guidBytes[6] = packet.ReadBit(); guidBytes[1] = packet.ReadBit(); guidBytes[7] = packet.ReadBit(); guidBytes[2] = packet.ReadBit(); guidBytes[4] = packet.ReadBit(); guidBytes[3] = packet.ReadBit(); packet.ReadEnum<MovementFlagExtra>("Movement flags extra", 12); guidBytes[5] = packet.ReadBit(); var splineElevation = packet.ReadBit("SplineElevation"); // OR Swimming var onTransport = packet.ReadBit("OnTransport"); var transportBytes = new byte[8]; var hasInterpolatedMovement = false; var time3 = false; if (onTransport) { transportBytes = packet.StartBitStream(0, 6, 2, 5, 4, 1, 3, 7); hasInterpolatedMovement = packet.ReadBit("HasInterpolatedMovement"); time3 = packet.ReadBit("Time3"); } var swimming = packet.ReadBit("Swimming"); // OR SplineElevation var interPolatedTurning = packet.ReadBit("InterPolatedTurning"); var jumping = false; if (interPolatedTurning) jumping = packet.ReadBit("Jumping"); packet.ReadInt32("Time"); packet.ReadVector4("Position"); packet.ReadXORByte(guidBytes, 7); packet.ReadXORByte(guidBytes, 5); if (splineElevation) packet.ReadSingle("Spline Elevation"); packet.ReadXORByte(guidBytes, 1); packet.ReadXORByte(guidBytes, 6); packet.ReadXORByte(guidBytes, 4); packet.ReadXORByte(guidBytes, 3); if (onTransport) { packet.ReadByte("Transport Seat"); packet.ReadSingle("Transport Orientation"); packet.ReadVector3("Transport Position"); packet.ReadInt32("Transport Time"); if (hasInterpolatedMovement) packet.ReadInt32("Transport Time 2"); packet.ReadXORByte(transportBytes, 3); packet.ReadXORByte(transportBytes, 6); if (time3) packet.ReadInt32("Transport Time 3"); packet.ReadXORByte(transportBytes, 7); packet.ReadXORByte(transportBytes, 5); packet.ReadXORByte(transportBytes, 2); packet.ReadXORByte(transportBytes, 1); packet.ReadXORByte(transportBytes, 0); packet.ReadXORByte(transportBytes, 4); packet.WriteGuid("Transport Guid", transportBytes); } if (swimming) packet.ReadSingle("Swim Pitch"); if (interPolatedTurning) { packet.ReadInt32("Time Fallen"); packet.ReadSingle("Fall Start Velocity"); if (jumping) { packet.ReadSingle("Jump Velocity"); packet.ReadSingle("Jump Cos"); packet.ReadSingle("Jump Sin"); } } packet.ReadXORByte(guidBytes, 2); packet.ReadXORByte(guidBytes, 0); packet.WriteGuid("Guid", guidBytes); }
public static void HandleEnterWorld(Packet packet) { var mapId = packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); CurrentMapId = (uint)mapId; var position = packet.ReadVector4(); packet.Writer.WriteLine("Position: " + position); CurrentPosition = position; UpdateHandler.Objects[CurrentMapId] = new Dictionary<Guid, WoWObject>(); if (packet.Opcode != Opcodes.GetOpcode(Opcode.SMSG_LOGIN_VERIFY_WORLD)) return; Player chInfo; if (!CharacterHandler.Characters.TryGetValue(SessionHandler.LoginGuid, out chInfo)) return; SessionHandler.LoggedInCharacter = chInfo; }
public static MovementInfo ReadMovementInfo(ref Packet packet, Guid guid, int index) { string prefix = index < 0 ? string.Empty : "[" + index + "] "; var info = new MovementInfo(); info.Flags = packet.ReadEnum<MovementFlag>(prefix + "Movement Flags", TypeCode.Int32); var flagsTypeCode = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? TypeCode.Int16 : TypeCode.Byte; var flags = packet.ReadEnum<MovementFlagExtra>(prefix + "Extra Movement Flags", flagsTypeCode); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) if (packet.ReadGuid(prefix + "GUID 2") != guid) packet.Writer.WriteLine("GUIDS NOT EQUAL"); // Fo debuggingz packet.ReadInt32(prefix + "Time"); var pos = packet.ReadVector4(prefix + "Position"); info.Position = new Vector3(pos.X, pos.Y, pos.Z); info.Orientation = pos.O; if (info.Flags.HasAnyFlag(MovementFlag.OnTransport)) { if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) packet.ReadPackedGuid(prefix + "Transport GUID"); else packet.ReadGuid(prefix + "Transport GUID"); packet.ReadVector4(prefix + "Transport Position"); packet.ReadInt32(prefix + "Transport Time"); if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing)) packet.ReadByte(prefix + "Transport Seat"); if (flags.HasAnyFlag(MovementFlagExtra.InterpolateMove)) packet.ReadInt32(prefix + "Transport Time"); } if (info.Flags.HasAnyFlag(MovementFlag.Swimming | MovementFlag.Flying) || flags.HasAnyFlag(MovementFlagExtra.AlwaysAllowPitching)) packet.ReadSingle(prefix + "Swim Pitch"); if (ClientVersion.RemovedInVersion(ClientType.Cataclysm)) packet.ReadInt32(prefix + "Fall Time"); if (info.Flags.HasAnyFlag(MovementFlag.Falling)) { if (ClientVersion.AddedInVersion(ClientType.Cataclysm)) packet.ReadInt32(prefix + "Fall Time"); packet.ReadSingle(prefix + "Fall Velocity"); packet.ReadSingle(prefix + "Fall Sin angle"); packet.ReadSingle(prefix + "Fall Cos angle"); packet.ReadSingle(prefix + "Fall Speed"); } if (info.Flags.HasAnyFlag(MovementFlag.SplineElevation)) packet.ReadSingle(prefix + "Spline Elevation"); return info; }
public static void HandleUnk5(Packet packet) { packet.ReadVector4("Position"); }
public static MovementInfo ReadMovementUpdateBlock(ref Packet packet, Guid guid, int index) { var moveInfo = new MovementInfo(); var flagsTypeCode = ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767) ? TypeCode.UInt16 : TypeCode.Byte; var flags = packet.ReadEnum<UpdateFlag>("[" + index + "] Update Flags", flagsTypeCode); if (flags.HasAnyFlag(UpdateFlag.Living)) { if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_0_14333)) moveInfo = MovementHandler.ReadMovementInfo420(ref packet, guid, index); else moveInfo = MovementHandler.ReadMovementInfo(ref packet, guid, index); var moveFlags = moveInfo.Flags; var speedCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? 9 : 8; int speedShift; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914) && ClientVersion.RemovedInVersion(ClientVersionBuild.V4_2_2_14545)) speedShift = 1; // enums shifted by one else speedShift = 0; for (var i = 0; i < speedCount - speedShift; i++) { var speedType = (SpeedType)(i + speedShift); var speed = packet.ReadSingle("["+ index + "] " + speedType + " Speed"); switch (speedType) { case SpeedType.Walk: { moveInfo.WalkSpeed = speed / 2.5f; break; } case SpeedType.Run: { moveInfo.RunSpeed = speed / 7.0f; break; } } } if (moveFlags.HasAnyFlag(MovementFlag.SplineEnabled)) { var splineFlags = packet.ReadEnum<SplineFlag>("Spline Flags", TypeCode.Int32, index); if (splineFlags.HasAnyFlag(SplineFlag.FinalTarget)) packet.ReadGuid("Final Spline Target GUID", index); else if (splineFlags.HasAnyFlag(SplineFlag.FinalOrientation)) { if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadInt32(); // not sure, orientation is incorrect in 2.4.1, this int is probably involved packet.ReadSingle("Final Spline Orientation", index); } else if (splineFlags.HasAnyFlag(SplineFlag.FinalPoint)) packet.ReadVector3("Final Spline Coords", index); packet.ReadInt32("Spline Time", index); packet.ReadInt32("Spline Full Time", index); packet.ReadInt32("Spline Unk Int32 1", index); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { packet.ReadSingle("Spline Duration Multiplier", index); packet.ReadSingle("Spline Unit Interval", index); packet.ReadSingle("Spline Unk Float 2", index); packet.ReadInt32("Spline Height Time", index); } var splineCount = packet.ReadInt32(); for (var i = 0; i < splineCount; i++) packet.ReadVector3("Spline Waypoint", index, i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) packet.ReadEnum<SplineMode>("Spline Mode", TypeCode.Byte, index); packet.ReadVector3("Spline Endpoint", index); } } else // !UpdateFlag.Living { if (flags.HasAnyFlag(UpdateFlag.GOPosition)) { packet.ReadPackedGuid("[" + index + "] GO Position GUID"); moveInfo.Position = packet.ReadVector3("[" + index + "] GO Position"); packet.ReadVector3("[" + index + "] GO Transport Position"); moveInfo.Orientation = packet.ReadSingle("[" + index + "] GO Orientation"); packet.ReadSingle("[" + index + "] GO Transport Orientation"); } else if (flags.HasAnyFlag(UpdateFlag.StationaryObject)) packet.ReadVector4("[" + index + "] Stationary Position"); } if (flags.HasAnyFlag(UpdateFlag.Unknown1)) packet.ReadInt32("[" + index + "] Unk Int32"); if (flags.HasAnyFlag(UpdateFlag.LowGuid)) packet.ReadInt32("[" + index + "] Low GUID"); if (flags.HasAnyFlag(UpdateFlag.AttackingTarget)) packet.ReadPackedGuid("[" + index + "] Target GUID"); if (flags.HasAnyFlag(UpdateFlag.Transport)) packet.ReadInt32("[" + index + "] Transport Movement Time (ms)"); if (flags.HasAnyFlag(UpdateFlag.Vehicle)) { moveInfo.VehicleId = packet.ReadUInt32("[" + index + "] Vehicle ID"); packet.ReadSingle("[" + index + "] Vehicle Orientation"); } if (flags.HasAnyFlag(UpdateFlag.GORotation)) packet.ReadPackedQuaternion("[" + index + "] GO Rotation"); // Initialize fields that are not used by GOs if (guid.GetObjectType() == ObjectType.GameObject) { moveInfo.VehicleId = 0; moveInfo.WalkSpeed = 0; moveInfo.RunSpeed = 0; } return moveInfo; }
public static void HandleLoginVerifyWorld(Packet packet) { WowPacketParser.Parsing.Parsers.MovementHandler.CurrentMapId = (uint)packet.ReadInt32<MapId>("Map"); packet.ReadVector4("Position"); packet.ReadUInt32("Reason"); }
private static MovementInfo ReadMovementInfoGen(ref Packet packet, Guid guid, int index) { var info = new MovementInfo(); info.Flags = packet.ReadEnum<MovementFlag>("Movement Flags", TypeCode.Int32, index); var flagsTypeCode = ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056) ? TypeCode.Int16 : TypeCode.Byte; info.FlagsExtra = packet.ReadEnum<MovementFlagExtra>("Extra Movement Flags", flagsTypeCode, index); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) if (packet.ReadGuid("GUID 2", index) != guid) throw new InvalidDataException("Guids are not equal."); packet.ReadInt32("Time", index); info.Position = packet.ReadVector3("Position", index); info.Orientation = packet.ReadSingle("Orientation", index); if (info.Flags.HasAnyFlag(MovementFlag.OnTransport)) { if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) info.TransportGuid = packet.ReadPackedGuid("Transport GUID", index); else info.TransportGuid = packet.ReadGuid("Transport GUID", index); info.TransportOffset = packet.ReadVector4("Transport Position", index); packet.ReadInt32("Transport Time", index); if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing)) packet.ReadByte("Transport Seat", index); if (info.FlagsExtra.HasAnyFlag(MovementFlagExtra.InterpolateMove)) packet.ReadInt32("Transport Time", index); } if (info.Flags.HasAnyFlag(MovementFlag.Swimming | MovementFlag.Flying) || info.FlagsExtra.HasAnyFlag(MovementFlagExtra.AlwaysAllowPitching)) packet.ReadSingle("Swim Pitch", index); if (ClientVersion.AddedInVersion(ClientType.Cataclysm)) { if (info.FlagsExtra.HasAnyFlag(MovementFlagExtra.InterpolateTurning)) { packet.ReadInt32("Fall Time", index); packet.ReadSingle("Fall Velocity", index); if (info.Flags.HasAnyFlag(MovementFlag.Falling)) { packet.ReadSingle("Fall Sin Angle", index); packet.ReadSingle("Fall Cos Angle", index); packet.ReadSingle("Fall Speed", index); } } } else { packet.ReadInt32("Fall Time", index); if (info.Flags.HasAnyFlag(MovementFlag.Falling)) { packet.ReadSingle("Fall Velocity", index); packet.ReadSingle("Fall Sin Angle", index); packet.ReadSingle("Fall Cos Angle", index); packet.ReadSingle("Fall Speed", index); } } if (info.Flags.HasAnyFlag(MovementFlag.SplineElevation)) packet.ReadSingle("Spline Elevation", index); return info; }
private static MovementInfo ReadMovementUpdateBlock(Packet packet, WowGuid guid, object index) { var moveInfo = new MovementInfo(); packet.ResetBitReader(); packet.ReadBit("NoBirthAnim", index); packet.ReadBit("EnablePortals", index); packet.ReadBit("PlayHoverAnim", index); var hasMovementUpdate = packet.ReadBit("HasMovementUpdate", index); var hasMovementTransport = packet.ReadBit("HasMovementTransport", index); var hasStationaryPosition = packet.ReadBit("Stationary", index); var hasCombatVictim = packet.ReadBit("HasCombatVictim", index); var hasServerTime = packet.ReadBit("HasServerTime", index); var hasVehicleCreate = packet.ReadBit("HasVehicleCreate", index); var hasAnimKitCreate = packet.ReadBit("HasAnimKitCreate", index); var hasRotation = packet.ReadBit("HasRotation", index); var hasAreaTrigger = packet.ReadBit("HasAreaTrigger", index); var hasGameObject = packet.ReadBit("HasGameObject", index); var hasSmoothPhasing = packet.ReadBit("HasSmoothPhasing", index); packet.ReadBit("ThisIsYou", index); var sceneObjCreate = packet.ReadBit("SceneObjCreate", index); var playerCreateData = packet.ReadBit("HasPlayerCreateData", index); if (hasMovementUpdate) { packet.ResetBitReader(); packet.ReadPackedGuid128("MoverGUID", index); packet.ReadUInt32("MoveTime", index); moveInfo.Position = packet.ReadVector3("Position", index); moveInfo.Orientation = packet.ReadSingle("Orientation", index); packet.ReadSingle("Pitch", index); packet.ReadSingle("StepUpStartElevation", index); var removeForcesIDsCount = packet.ReadInt32(); packet.ReadInt32("MoveIndex", index); for (var i = 0; i < removeForcesIDsCount; i++) packet.ReadPackedGuid128("RemoveForcesIDs", index, i); moveInfo.Flags = packet.ReadBitsE<MovementFlag>("Movement Flags", 30, index); moveInfo.FlagsExtra = packet.ReadBitsE<MovementFlagExtra>("Extra Movement Flags", 18, index); var hasTransport = packet.ReadBit("Has Transport Data", index); var hasFall = packet.ReadBit("Has Fall Data", index); packet.ReadBit("HasSpline", index); packet.ReadBit("HeightChangeFailed", index); packet.ReadBit("RemoteTimeValid", index); if (hasTransport) { packet.ResetBitReader(); moveInfo.TransportGuid = packet.ReadPackedGuid128("Transport Guid", index); moveInfo.TransportOffset = packet.ReadVector4("Transport Position", index); packet.ReadSByte("Transport Seat", index); packet.ReadInt32("Transport Time", index); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", index); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", index); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", index); if (hasVehicleRecID) packet.ReadUInt32("VehicleRecID", index); } if (hasFall) { packet.ResetBitReader(); packet.ReadUInt32("Fall Time", index); packet.ReadSingle("JumpVelocity", index); var hasFallDirection = packet.ReadBit("Has Fall Direction", index); if (hasFallDirection) { packet.ReadVector2("Fall", index); packet.ReadSingle("Horizontal Speed", index); } } moveInfo.WalkSpeed = packet.ReadSingle("WalkSpeed", index) / 2.5f; moveInfo.RunSpeed = packet.ReadSingle("RunSpeed", index) / 7.0f; packet.ReadSingle("RunBackSpeed", index); packet.ReadSingle("SwimSpeed", index); packet.ReadSingle("SwimBackSpeed", index); packet.ReadSingle("FlightSpeed", index); packet.ReadSingle("FlightBackSpeed", index); packet.ReadSingle("TurnRate", index); packet.ReadSingle("PitchRate", index); var movementForceCount = packet.ReadInt32("MovementForceCount", index); packet.ResetBitReader(); moveInfo.HasSplineData = packet.ReadBit("HasMovementSpline", index); for (var i = 0; i < movementForceCount; ++i) { packet.ResetBitReader(); packet.ReadPackedGuid128("Id", index); packet.ReadVector3("Origin", index); packet.ReadVector3("Direction", index); packet.ReadInt32("TransportID", index); packet.ReadSingle("Magnitude", index); packet.ReadBits("Type", 2, index); } if (moveInfo.HasSplineData) { packet.ResetBitReader(); packet.ReadInt32("ID", index); packet.ReadVector3("Destination", index); var hasMovementSplineMove = packet.ReadBit("MovementSplineMove", index); if (hasMovementSplineMove) { packet.ResetBitReader(); packet.ReadUInt32E<SplineFlag434>("SplineFlags", index); packet.ReadUInt32("Elapsed", index); packet.ReadUInt32("Duration", index); packet.ReadSingle("DurationModifier", index); packet.ReadSingle("NextDurationModifier", index); var face = packet.ReadBits("Face", 2, index); var hasJumpGravity = packet.ReadBit("HasJumpGravity", index); var hasSpecialTime = packet.ReadBit("HasSpecialTime", index); var pointsCount = packet.ReadBits("PointsCount", 16, index); packet.ReadBitsE<SplineMode>("Mode", 2, index); var hasSplineFilterKey = packet.ReadBit("HasSplineFilterKey", index); var hasSpellEffectExtraData = packet.ReadBit("HasSpellEffectExtraData", index); if (hasSplineFilterKey) { packet.ResetBitReader(); var filterKeysCount = packet.ReadUInt32("FilterKeysCount", index); for (var i = 0; i < filterKeysCount; ++i) { packet.ReadSingle("In", index, i); packet.ReadSingle("Out", index, i); } packet.ReadBits("FilterFlags", 2, index); } if (face == 3) packet.ReadSingle("FaceDirection", index); if (face == 2) packet.ReadPackedGuid128("FaceGUID", index); if (face == 1) packet.ReadVector3("FaceSpot", index); if (hasJumpGravity) packet.ReadSingle("JumpGravity", index); if (hasSpecialTime) packet.ReadInt32("SpecialTime", index); for (var i = 0; i < pointsCount; ++i) packet.ReadVector3("Points", index, i); if (hasSpellEffectExtraData) { packet.ReadPackedGuid128("SpellEffectExtraGUID", index); packet.ReadUInt32("SpellEffectExtra int 1", index); packet.ReadUInt32("SpellEffectExtra int 2", index); packet.ReadUInt32("SpellEffectExtra int 3", index); } } } } var pauseTimesCount = packet.ReadUInt32("PauseTimesCount", index); if (hasStationaryPosition) { moveInfo.Position = packet.ReadVector3(); moveInfo.Orientation = packet.ReadSingle(); packet.AddValue("Stationary Position", moveInfo.Position, index); packet.AddValue("Stationary Orientation", moveInfo.Orientation, index); } if (hasCombatVictim) packet.ReadPackedGuid128("CombatVictim Guid", index); if (hasServerTime) packet.ReadUInt32("ServerTime", index); if (hasVehicleCreate) { moveInfo.VehicleId = packet.ReadUInt32("RecID", index); packet.ReadSingle("InitialRawFacing", index); } if (hasAnimKitCreate) { packet.ReadUInt16("AiID", index); packet.ReadUInt16("MovementID", index); packet.ReadUInt16("MeleeID", index); } if (hasRotation) moveInfo.Rotation = packet.ReadPackedQuaternion("GameObject Rotation", index); for (var i = 0; i < pauseTimesCount; ++i) packet.ReadInt32("PauseTimes", index, i); if (hasMovementTransport) { packet.ResetBitReader(); moveInfo.TransportGuid = packet.ReadPackedGuid128("TransportGUID", index); moveInfo.TransportOffset = packet.ReadVector4("TransportPosition", index); var seat = packet.ReadByte("VehicleSeatIndex", index); packet.ReadUInt32("MoveTime", index); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", index); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", index); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", index); if (hasVehicleRecID) packet.ReadInt32("VehicleRecID", index); if (moveInfo.TransportGuid.HasEntry() && moveInfo.TransportGuid.GetHighType() == HighGuidType.Vehicle && guid.HasEntry() && guid.GetHighType() == HighGuidType.Creature) { VehicleTemplateAccessory vehicleAccessory = new VehicleTemplateAccessory { Entry = moveInfo.TransportGuid.GetEntry(), AccessoryEntry = guid.GetEntry(), SeatId = seat }; Storage.VehicleTemplateAccessories.Add(vehicleAccessory, packet.TimeSpan); } } if (hasAreaTrigger) { packet.ResetBitReader(); // CliAreaTrigger packet.ReadInt32("ElapsedMs", index); packet.ReadVector3("RollPitchYaw1", index); packet.ReadBit("HasAbsoluteOrientation", index); packet.ReadBit("HasDynamicShape", index); packet.ReadBit("HasAttached", index); packet.ReadBit("HasFaceMovementDir", index); packet.ReadBit("HasFollowsTerrain", index); packet.ReadBit("Unk bit WoD62x", index); var hasTargetRollPitchYaw = packet.ReadBit("HasTargetRollPitchYaw", index); var hasScaleCurveID = packet.ReadBit("HasScaleCurveID", index); var hasMorphCurveID = packet.ReadBit("HasMorphCurveID", index); var hasFacingCurveID = packet.ReadBit("HasFacingCurveID", index); var hasMoveCurveID = packet.ReadBit("HasMoveCurveID", index); var unkbit4C = packet.ReadBit(); var unkbit50 = packet.ReadBit(); var unkbit58 = packet.ReadBit(); var hasAreaTriggerSphere = packet.ReadBit("HasAreaTriggerSphere", index); var hasAreaTriggerBox = packet.ReadBit("HasAreaTriggerBox", index); var hasAreaTriggerPolygon = packet.ReadBit("HasAreaTriggerPolygon", index); var hasAreaTriggerCylinder = packet.ReadBit("HasAreaTriggerCylinder", index); var hasAreaTriggerSpline = packet.ReadBit("HasAreaTriggerSpline", index); var hasAreaTriggerUnkType = packet.ReadBit("HasAreaTriggerUnkType", index); if (unkbit50) packet.ReadBit(); if (hasAreaTriggerSpline) AreaTriggerHandler.ReadAreaTriggerSpline(packet, index); if (hasTargetRollPitchYaw) packet.ReadVector3("TargetRollPitchYaw", index); if (hasScaleCurveID) packet.ReadInt32("ScaleCurveID", index); if (hasMorphCurveID) packet.ReadInt32("MorphCurveID", index); if (hasFacingCurveID) packet.ReadInt32("FacingCurveID", index); if (hasMoveCurveID) packet.ReadInt32("MoveCurveID", index); if (unkbit4C) packet.ReadInt32(); if (unkbit58) packet.ReadUInt32(); if (hasAreaTriggerSphere) { packet.ReadSingle("Radius", index); packet.ReadSingle("RadiusTarget", index); } if (hasAreaTriggerBox) { packet.ReadVector3("Extents", index); packet.ReadVector3("ExtentsTarget", index); } if (hasAreaTriggerPolygon) { var verticesCount = packet.ReadInt32("VerticesCount", index); var verticesTargetCount = packet.ReadInt32("VerticesTargetCount", index); packet.ReadSingle("Height", index); packet.ReadSingle("HeightTarget", index); for (var i = 0; i < verticesCount; ++i) packet.ReadVector2("Vertices", index, i); for (var i = 0; i < verticesTargetCount; ++i) packet.ReadVector2("VerticesTarget", index, i); } if (hasAreaTriggerCylinder) { packet.ReadSingle("Radius", index); packet.ReadSingle("RadiusTarget", index); packet.ReadSingle("Height", index); packet.ReadSingle("HeightTarget", index); packet.ReadSingle("LocationZOffset", index); packet.ReadSingle("LocationZOffsetTarget", index); } if (hasAreaTriggerUnkType) { packet.ResetBitReader(); var unk1 = packet.ReadBit("AreaTriggerUnk1"); var hasCenter = packet.ReadBit("HasCenter", index); packet.ReadBit("Unk bit 703 1", index); packet.ReadBit("Unk bit 703 2", index); packet.ReadUInt32(); packet.ReadInt32(); packet.ReadUInt32(); packet.ReadSingle("Radius", index); packet.ReadSingle("BlendFromRadius", index); packet.ReadSingle("InitialAngel", index); packet.ReadSingle("ZOffset", index); if (unk1) packet.ReadPackedGuid128("AreaTriggerUnkGUID", index); if (hasCenter) packet.ReadVector3("Center", index); } } if (hasGameObject) { packet.ResetBitReader(); packet.ReadInt32("WorldEffectID", index); var bit8 = packet.ReadBit("bit8", index); if (bit8) packet.ReadInt32("Int1", index); } if (hasSmoothPhasing) { packet.ResetBitReader(); packet.ReadBit("ReplaceActive", index); var replaceObject = packet.ReadBit(); if (replaceObject) packet.ReadGuid("ReplaceObject", index); } if (sceneObjCreate) { packet.ResetBitReader(); var hasSceneLocalScriptData = packet.ReadBit("HasSceneLocalScriptData", index); var petBattleFullUpdate = packet.ReadBit("HasPetBattleFullUpdate", index); if (hasSceneLocalScriptData) { packet.ResetBitReader(); var dataLength = packet.ReadBits(7); packet.ReadWoWString("Data", dataLength, index); } if (petBattleFullUpdate) V6_0_2_19033.Parsers.BattlePetHandler.ReadPetBattleFullUpdate(packet, index); } if (playerCreateData) { packet.ResetBitReader(); var hasSceneInstanceIDs = packet.ReadBit("ScenePendingInstances", index); var hasRuneState = packet.ReadBit("Runes", index); if (hasSceneInstanceIDs) { var sceneInstanceIDs = packet.ReadInt32("SceneInstanceIDsCount"); for (var i = 0; i < sceneInstanceIDs; ++i) packet.ReadInt32("SceneInstanceIDs", index, i); } if (hasRuneState) { packet.ReadByte("RechargingRuneMask", index); packet.ReadByte("UsableRuneMask", index); var runeCount = packet.ReadUInt32(); for (var i = 0; i < runeCount; ++i) packet.ReadByte("RuneCooldown", index, i); } } return moveInfo; }
public static void HandleMovementHeartbeat433(Packet packet) { packet.ReadEnum<MovementFlag>("Movement flags", 30); packet.ReadBit("HasSplineData"); var guidBytes = new byte[8]; guidBytes[0] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[6] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[1] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[7] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[2] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[4] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[3] = (byte)(packet.ReadBit() ? 1 : 0); packet.ReadEnum<MovementFlagExtra>("Movement flags extra", 12); guidBytes[5] = (byte)(packet.ReadBit() ? 1 : 0); var splineElevation = packet.ReadBit("SplineElevation"); // OR Swimming var onTransport = packet.ReadBit("OnTransport"); var transportBytes = new byte[8]; var hasInterpolatedMovement = false; var time3 = false; if (onTransport) { transportBytes[0] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[6] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[2] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[5] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[4] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[1] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[3] = (byte)(packet.ReadBit() ? 1 : 0); transportBytes[7] = (byte)(packet.ReadBit() ? 1 : 0); hasInterpolatedMovement = packet.ReadBit("HasInterpolatedMovement"); time3 = packet.ReadBit("Time3"); } var swimming = packet.ReadBit("Swimming"); // OR SplineElevation var interPolatedTurning = packet.ReadBit("InterPolatedTurning"); var jumping = false; if (interPolatedTurning) jumping = packet.ReadBit("Jumping"); packet.ReadInt32("Time"); packet.ReadVector4("Position"); if (guidBytes[7] != 0) guidBytes[7] ^= packet.ReadByte(); if (guidBytes[5] != 0) guidBytes[5] ^= packet.ReadByte(); if (splineElevation) packet.ReadSingle("Spline Elevation"); if (guidBytes[1] != 0) guidBytes[1] ^= packet.ReadByte(); if (guidBytes[6] != 0) guidBytes[6] ^= packet.ReadByte(); if (guidBytes[4] != 0) guidBytes[4] ^= packet.ReadByte(); if (guidBytes[3] != 0) guidBytes[3] ^= packet.ReadByte(); if (onTransport) { packet.ReadByte("Transport Seat"); packet.ReadSingle("Transport Orientation"); packet.ReadVector3("Transport Position"); packet.ReadInt32("Transport Time"); if (hasInterpolatedMovement) packet.ReadInt32("Transport Time 2"); if (transportBytes[3] != 0) transportBytes[3] ^= packet.ReadByte(); if (transportBytes[6] != 0) transportBytes[6] ^= packet.ReadByte(); if (time3) packet.ReadInt32("Transport Time 3"); if (transportBytes[7] != 0) transportBytes[7] ^= packet.ReadByte(); if (transportBytes[5] != 0) transportBytes[5] ^= packet.ReadByte(); if (transportBytes[2] != 0) transportBytes[2] ^= packet.ReadByte(); if (transportBytes[1] != 0) transportBytes[1] ^= packet.ReadByte(); if (transportBytes[0] != 0) transportBytes[0] ^= packet.ReadByte(); if (transportBytes[4] != 0) transportBytes[4] ^= packet.ReadByte(); packet.WriteLine("Transport GUID: {0}", new Guid(BitConverter.ToUInt64(transportBytes, 0))); } if (swimming) packet.ReadSingle("Swim Pitch"); if (interPolatedTurning) { packet.ReadInt32("Time Fallen"); packet.ReadSingle("Fall Start Velocity"); if (jumping) { packet.ReadSingle("Jump Velocity"); packet.ReadSingle("Jump Cos"); packet.ReadSingle("Jump Sin"); } } if (guidBytes[2] != 0) guidBytes[2] ^= packet.ReadByte(); if (guidBytes[0] != 0) guidBytes[0] ^= packet.ReadByte(); packet.WriteLine("GUID: {0}", new Guid(BitConverter.ToUInt64(guidBytes, 0))); }
public static void HandleEnterWorld(Packet packet) { CurrentMapId = (uint) packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); packet.ReadVector4("Position"); if (UpdateHandler.Objects != null && UpdateHandler.Objects.ContainsKey(CurrentMapId)) UpdateHandler.Objects[CurrentMapId] = new Dictionary<Guid, WoWObject>(); Player chInfo; if (CharacterHandler.Characters.TryGetValue(SessionHandler.LoginGuid, out chInfo)) SessionHandler.LoggedInCharacter = chInfo; packet.AddSniffData(StoreNameType.Map, (int) CurrentMapId, "NEW_WORLD"); }
public static void ReadMovementStats(Packet packet, params object[] idx) { packet.ReadPackedGuid128("MoverGUID", idx); packet.ReadUInt32("MoveIndex", idx); packet.ReadVector4("Position", idx); packet.ReadSingle("Pitch", idx); packet.ReadSingle("StepUpStartElevation", idx); var int152 = packet.ReadInt32("RemoveForcesCount", idx); packet.ReadInt32("MoveTime", idx); for (var i = 0; i < int152; i++) packet.ReadPackedGuid128("RemoveForcesIDs", idx, i); packet.ResetBitReader(); packet.ReadBitsE<MovementFlag>("MovementFlags", 30, idx); packet.ReadBitsE<MovementFlagExtra>("ExtraMovementFlags", 18, idx); var hasTransport = packet.ReadBit("HasTransportData", idx); var hasFall = packet.ReadBit("HasFallData", idx); packet.ReadBit("HasSpline", idx); packet.ReadBit("HeightChangeFailed", idx); packet.ReadBit("RemoteTimeValid", idx); if (hasTransport) V6_0_2_19033.Parsers.MovementHandler.ReadTransportData(packet, idx, "TransportData"); if (hasFall) V6_0_2_19033.Parsers.MovementHandler.ReadFallData(packet, idx, "FallData"); }
public static void ReadTransportData(Packet packet, params object[] idx) { packet.ReadPackedGuid128("TransportGuid", idx); packet.ReadVector4("TransportPosition", idx); packet.ReadByte("TransportSeat", idx); packet.ReadInt32("TransportMoveTime", idx); packet.ResetBitReader(); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", idx); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", idx); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", idx); if (hasVehicleRecID) packet.ReadUInt32("VehicleRecID", idx); }
public static void HandleMoveSetCompoundState434(Packet packet) { var guid = packet.StartBitStream(5, 0, 4, 1, 7, 6, 2, 3); var count = packet.ReadBits("Count", 23); var unk1 = new byte[count]; var unk2 = new byte[count]; var hasPosition = new byte[count]; var unk4 = new byte[count]; for (int i = 0; i < count; ++i) { unk1[i] = packet.ReadBit("Unk bit 1", i); // 36 unk2[i] = packet.ReadBit("Unk bit 2", i); // 8 hasPosition[i] = packet.ReadBit("Has position", i); // 16 unk4[i] = packet.ReadBit("Unk bit 4", i); // 44 if (unk4[i] != 0) packet.ReadBits("Unk bits", 2, i); } for (int i = 0; i < count; ++i) { if (unk4[i] != 0) packet.ReadSingle("Unk Float 1", i); if (hasPosition[i] != 0) packet.ReadVector4("Position", i); if (unk1[i] != 0) packet.ReadInt32("Unk Int32 1", i); packet.ReadInt32("Unk Int32 2", i); if (unk2[i] != 0) packet.ReadSingle("Unk Float 2", i); packet.ReadInt16("Unk Int16", i); } packet.ParseBitStream(guid, 2, 1, 4, 5, 6, 7, 0, 3); packet.WriteGuid("Guid", guid); }
private static void ReadGarrisonPlotInfo(Packet packet, params object[] indexes) { packet.ReadInt32("GarrPlotInstanceID", indexes); packet.ReadVector4("PlotPos", indexes); packet.ReadInt32("PlotType", indexes); }
private static MovementInfo ReadMovementInfo420(ref Packet packet, int index) { var info = new MovementInfo(); info.Flags = packet.ReadEnum<MovementFlag>("Movement Flags", 30, index); packet.ReadEnum<MovementFlagExtra>("Extra Movement Flags", 12, index); var onTransport = packet.ReadBit("OnTransport", index); var hasInterpolatedMovement = false; var time3 = false; if (onTransport) { hasInterpolatedMovement = packet.ReadBit("HasInterpolatedMovement", index); time3 = packet.ReadBit("Time3", index); } var swimming = packet.ReadBit("Swimming", index); var interPolatedTurning = packet.ReadBit("InterPolatedTurning", index); var jumping = false; if (interPolatedTurning) jumping = packet.ReadBit("Jumping", index); var splineElevation = packet.ReadBit("SplineElevation", index); info.HasSplineData = packet.ReadBit("HasSplineData", index); packet.ResetBitReader(); // reset bitreader packet.ReadGuid("GUID 2", index); packet.ReadInt32("Time", index); info.Position = packet.ReadVector3("Position", index); info.Orientation = packet.ReadSingle("Orientation", index); if (onTransport) { info.TransportGuid = packet.ReadGuid("Transport GUID", index); info.TransportOffset = packet.ReadVector4("Transport Position", index); packet.ReadByte("Transport Seat", index); packet.ReadInt32("Transport Time", index); if (hasInterpolatedMovement) packet.ReadInt32("Transport Time 2", index); if (time3) packet.ReadInt32("Transport Time 3", index); } if (swimming) packet.ReadSingle("Swim Pitch", index); if (interPolatedTurning) { packet.ReadInt32("Time Fallen", index); packet.ReadSingle("Fall Start Velocity", index); if (jumping) { packet.ReadSingle("Jump Sin", index); packet.ReadSingle("Jump Cos", index); packet.ReadSingle("Jump Velocity", index); } } if (splineElevation) packet.ReadSingle("Spline Elevation", index); return info; }
private static MovementInfo ReadMovementStatusData(Packet packet, object index) { var moveInfo = new MovementInfo(); packet.ReadPackedGuid128("MoverGUID", index); packet.ReadUInt32("MoveIndex", index); moveInfo.Position = packet.ReadVector3("Position", index); moveInfo.Orientation = packet.ReadSingle("Orientation", index); packet.ReadSingle("Pitch", index); packet.ReadSingle("StepUpStartElevation", index); var int152 = packet.ReadInt32("Int152", index); packet.ReadInt32("Int168", index); for (var i = 0; i < int152; i++) packet.ReadPackedGuid128("RemoveForcesIDs", index, i); packet.ResetBitReader(); packet.ReadBitsE<MovementFlag>("Movement Flags", 30, index); moveInfo.FlagsExtra = packet.ReadBitsE<MovementFlagExtra>("Extra Movement Flags", ClientVersion.AddedInVersion(ClientVersionBuild.V6_2_0_20173) ? 16 : 15, index); var hasTransport = packet.ReadBit("Has Transport Data", index); var hasFall = packet.ReadBit("Has Fall Data", index); packet.ReadBit("HasSpline", index); packet.ReadBit("HeightChangeFailed", index); packet.ReadBit("RemoteTimeValid", index); if (hasTransport) { packet.ReadPackedGuid128("Transport Guid", index); packet.ReadVector4("Transport Position", index); packet.ReadSByte("Transport Seat", index); packet.ReadInt32("Transport Time", index); packet.ResetBitReader(); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", index); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", index); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", index); if (hasVehicleRecID) packet.ReadUInt32("VehicleRecID", index); } if (hasFall) { packet.ReadUInt32("Fall Time", index); packet.ReadSingle("JumpVelocity", index); packet.ResetBitReader(); var bit20 = packet.ReadBit("Has Fall Direction", index); if (bit20) { packet.ReadVector2("Fall", index); packet.ReadSingle("Horizontal Speed", index); } } return moveInfo; }
public static void HandleNewWorld(Packet packet) { WowPacketParser.Parsing.Parsers.MovementHandler.CurrentMapId = (uint)packet.ReadInt32<MapId>("Map"); packet.ReadVector4("Position"); packet.ReadUInt32("Reason"); packet.AddSniffData(StoreNameType.Map, (int)WowPacketParser.Parsing.Parsers.MovementHandler.CurrentMapId, "NEW_WORLD"); }
private static MovementInfo ReadMovementUpdateBlock(Packet packet, WowGuid guid, object index) { var moveInfo = new MovementInfo(); packet.ResetBitReader(); packet.ReadBit("NoBirthAnim", index); packet.ReadBit("EnablePortals", index); packet.ReadBit("PlayHoverAnim", index); packet.ReadBit("IsSuppressingGreetings", index); var hasMovementUpdate = packet.ReadBit("HasMovementUpdate", index); var hasMovementTransport = packet.ReadBit("HasMovementTransport", index); var hasStationaryPosition = packet.ReadBit("Stationary", index); var hasCombatVictim = packet.ReadBit("HasCombatVictim", index); var hasServerTime = packet.ReadBit("HasServerTime", index); var hasVehicleCreate = packet.ReadBit("HasVehicleCreate", index); var hasAnimKitCreate = packet.ReadBit("HasAnimKitCreate", index); var hasRotation = packet.ReadBit("HasRotation", index); var hasAreaTrigger = packet.ReadBit("HasAreaTrigger", index); var hasGameObject = packet.ReadBit("HasGameObject", index); packet.ReadBit("ThisIsYou", index); packet.ReadBit("ReplaceActive", index); var sceneObjCreate = packet.ReadBit("SceneObjCreate", index); var scenePendingInstances = packet.ReadBit("ScenePendingInstances", index); var pauseTimesCount = packet.ReadUInt32("PauseTimesCount", index); if (hasMovementUpdate) // 392 { moveInfo = ReadMovementStatusData(packet, index); moveInfo.WalkSpeed = packet.ReadSingle("WalkSpeed", index) / 2.5f; moveInfo.RunSpeed = packet.ReadSingle("RunSpeed", index) / 7.0f; packet.ReadSingle("RunBackSpeed", index); packet.ReadSingle("SwimSpeed", index); packet.ReadSingle("SwimBackSpeed", index); packet.ReadSingle("FlightSpeed", index); packet.ReadSingle("FlightBackSpeed", index); packet.ReadSingle("TurnRate", index); packet.ReadSingle("PitchRate", index); var movementForceCount = packet.ReadInt32("MovementForceCount", index); for (var i = 0; i < movementForceCount; ++i) { packet.ReadPackedGuid128("Id", index); packet.ReadVector3("Direction", index); if (ClientVersion.AddedInVersion(ClientVersionBuild.V6_1_2_19802)) // correct? packet.ReadVector3("TransportPosition", index); packet.ReadInt32("TransportID", index); packet.ReadSingle("Magnitude", index); packet.ReadByte("Type", index); } packet.ResetBitReader(); moveInfo.HasSplineData = packet.ReadBit("HasMovementSpline", index); if (moveInfo.HasSplineData) { packet.ReadInt32("ID", index); packet.ReadVector3("Destination", index); packet.ResetBitReader(); var hasMovementSplineMove = packet.ReadBit("MovementSplineMove", index); if (hasMovementSplineMove) { packet.ResetBitReader(); packet.ReadBitsE<SplineFlag434>("SplineFlags", ClientVersion.AddedInVersion(ClientVersionBuild.V6_2_0_20173) ? 28 : 25, index); var face = packet.ReadBits("Face", 2, index); var hasJumpGravity = packet.ReadBit("HasJumpGravity", index); var hasSpecialTime = packet.ReadBit("HasSpecialTime", index); packet.ReadBitsE<SplineMode>("Mode", 2, index); var hasSplineFilterKey = packet.ReadBit("HasSplineFilterKey", index); packet.ReadUInt32("Elapsed", index); packet.ReadUInt32("Duration", index); packet.ReadSingle("DurationModifier", index); packet.ReadSingle("NextDurationModifier", index); var pointsCount = packet.ReadUInt32("PointsCount", index); if (face == 3) // FaceDirection packet.ReadSingle("FaceDirection", index); if (face == 2) // FaceGUID packet.ReadPackedGuid128("FaceGUID", index); if (face == 1) // FaceSpot packet.ReadVector3("FaceSpot", index); if (hasJumpGravity) packet.ReadSingle("JumpGravity", index); if (hasSpecialTime) packet.ReadInt32("SpecialTime", index); if (hasSplineFilterKey) { var filterKeysCount = packet.ReadUInt32("FilterKeysCount", index); for (var i = 0; i < filterKeysCount; ++i) { packet.ReadSingle("In", index, i); packet.ReadSingle("Out", index, i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V6_2_0_20173)) packet.ResetBitReader(); packet.ReadBits("FilterFlags", 2, index); } for (var i = 0; i < pointsCount; ++i) packet.ReadVector3("Points", index, i); } } } if (hasMovementTransport) // 456 { moveInfo.TransportGuid = packet.ReadPackedGuid128("TransportGUID", index); moveInfo.TransportOffset = packet.ReadVector4("TransportPosition", index); var seat = packet.ReadByte("VehicleSeatIndex", index); packet.ReadUInt32("MoveTime", index); packet.ResetBitReader(); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", index); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", index); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", index); if (hasVehicleRecID) packet.ReadInt32("VehicleRecID", index); if (moveInfo.TransportGuid.HasEntry() && moveInfo.TransportGuid.GetHighType() == HighGuidType.Vehicle && guid.HasEntry() && guid.GetHighType() == HighGuidType.Creature) { var vehicleAccessory = new VehicleTemplateAccessory { AccessoryEntry = guid.GetEntry(), SeatId = seat }; Storage.VehicleTemplateAccessorys.Add(moveInfo.TransportGuid.GetEntry(), vehicleAccessory, packet.TimeSpan); } } if (hasStationaryPosition) // 480 { moveInfo.Position = packet.ReadVector3(); moveInfo.Orientation = packet.ReadSingle(); packet.AddValue("Stationary Position", moveInfo.Position, index); packet.AddValue("Stationary Orientation", moveInfo.Orientation, index); } if (hasCombatVictim) // 504 packet.ReadPackedGuid128("CombatVictim Guid", index); if (hasServerTime) // 516 packet.ReadUInt32("ServerTime", index); if (hasVehicleCreate) // 528 { moveInfo.VehicleId = packet.ReadUInt32("RecID", index); packet.ReadSingle("InitialRawFacing", index); } if (hasAnimKitCreate) // 538 { packet.ReadUInt16("AiID", index); packet.ReadUInt16("MovementID", index); packet.ReadUInt16("MeleeID", index); } if (hasRotation) // 552 packet.ReadPackedQuaternion("GameObject Rotation", index); if (hasAreaTrigger) // 772 { // CliAreaTrigger packet.ReadInt32("ElapsedMs", index); packet.ReadVector3("RollPitchYaw1", index); packet.ResetBitReader(); packet.ReadBit("HasAbsoluteOrientation", index); packet.ReadBit("HasDynamicShape", index); packet.ReadBit("HasAttached", index); packet.ReadBit("HasFaceMovementDir", index); packet.ReadBit("HasFollowsTerrain", index); if (ClientVersion.AddedInVersion(ClientVersionBuild.V6_2_0_20173)) packet.ReadBit("Unk bit WoD62x", index); var hasTargetRollPitchYaw = packet.ReadBit("HasTargetRollPitchYaw", index); var hasScaleCurveID = packet.ReadBit("HasScaleCurveID", index); var hasMorphCurveID = packet.ReadBit("HasMorphCurveID", index); var hasFacingCurveID = packet.ReadBit("HasFacingCurveID", index); var hasMoveCurveID = packet.ReadBit("HasMoveCurveID", index); var hasAreaTriggerSphere = packet.ReadBit("HasAreaTriggerSphere", index); var hasAreaTriggerBox = packet.ReadBit("HasAreaTriggerBox", index); var hasAreaTriggerPolygon = packet.ReadBit("HasAreaTriggerPolygon", index); var hasAreaTriggerCylinder = packet.ReadBit("HasAreaTriggerCylinder", index); var hasAreaTriggerSpline = packet.ReadBit("HasAreaTriggerSpline", index); if (hasTargetRollPitchYaw) packet.ReadVector3("TargetRollPitchYaw", index); if (hasScaleCurveID) packet.ReadInt32("ScaleCurveID, index"); if (hasMorphCurveID) packet.ReadInt32("MorphCurveID", index); if (hasFacingCurveID) packet.ReadInt32("FacingCurveID", index); if (hasMoveCurveID) packet.ReadInt32("MoveCurveID", index); if (hasAreaTriggerSphere) { packet.ReadSingle("Radius", index); packet.ReadSingle("RadiusTarget", index); } if (hasAreaTriggerBox) { packet.ReadVector3("Extents", index); packet.ReadVector3("ExtentsTarget", index); } if (hasAreaTriggerPolygon) { var verticesCount = packet.ReadInt32("VerticesCount", index); var verticesTargetCount = packet.ReadInt32("VerticesTargetCount", index); packet.ReadSingle("Height", index); packet.ReadSingle("HeightTarget", index); for (var i = 0; i < verticesCount; ++i) packet.ReadVector2("Vertices", index, i); for (var i = 0; i < verticesTargetCount; ++i) packet.ReadVector2("VerticesTarget", index, i); } if (hasAreaTriggerCylinder) { packet.ReadSingle("Radius", index); packet.ReadSingle("RadiusTarget", index); packet.ReadSingle("Height", index); packet.ReadSingle("HeightTarget", index); packet.ReadSingle("Float4", index); packet.ReadSingle("Float5", index); } if (hasAreaTriggerSpline) AreaTriggerHandler.ReadAreaTriggerSpline(packet, index); } if (hasGameObject) // 788 { packet.ReadInt32("WorldEffectID", index); packet.ResetBitReader(); var bit8 = packet.ReadBit("bit8", index); if (bit8) packet.ReadInt32("Int1", index); } if (sceneObjCreate) // 1184 { packet.ResetBitReader(); var hasSceneLocalScriptData = packet.ReadBit("HasSceneLocalScriptData", index); var petBattleFullUpdate = packet.ReadBit("HasPetBattleFullUpdate", index); if (hasSceneLocalScriptData) { packet.ResetBitReader(); var dataLength = packet.ReadBits(7); packet.ReadWoWString("Data", dataLength, index); } if (petBattleFullUpdate) BattlePetHandler.ReadPetBattleFullUpdate(packet, index); } if (scenePendingInstances) // 1208 { var sceneInstanceIDs = packet.ReadInt32("SceneInstanceIDsCount"); for (var i = 0; i < sceneInstanceIDs; ++i) packet.ReadInt32("SceneInstanceIDs", index, i); } for (var i = 0; i < pauseTimesCount; ++i) packet.ReadInt32("PauseTimes", index, i); return moveInfo; }
public static void ReadMovementStats(Packet packet, params object[] idx) { packet.ReadPackedGuid128("MoverGUID", idx); packet.ReadUInt32("MoveIndex", idx); packet.ReadVector4("Position", idx); packet.ReadSingle("Pitch", idx); packet.ReadSingle("StepUpStartElevation", idx); var int152 = packet.ReadInt32("RemoveForcesCount", idx); packet.ReadInt32("MoveTime", idx); for (var i = 0; i < int152; i++) packet.ReadPackedGuid128("RemoveForcesIDs", idx, i); packet.ResetBitReader(); packet.ReadBitsE<MovementFlag>("Movement Flags", 30, idx); packet.ReadBitsE<MovementFlagExtra>("Extra Movement Flags", 15, idx); var hasTransport = packet.ReadBit("Has Transport Data", idx); var hasFall = packet.ReadBit("Has Fall Data", idx); packet.ReadBit("HasSpline", idx); packet.ReadBit("HeightChangeFailed", idx); packet.ReadBit("RemoteTimeValid", idx); if (hasTransport) { packet.ReadPackedGuid128("TransportGuid", idx); packet.ReadVector4("TransportPosition", idx); packet.ReadByte("TransportSeat", idx); packet.ReadInt32("TransportMoveTime", idx); packet.ResetBitReader(); var hasPrevMoveTime = packet.ReadBit("HasPrevMoveTime", idx); var hasVehicleRecID = packet.ReadBit("HasVehicleRecID", idx); if (hasPrevMoveTime) packet.ReadUInt32("PrevMoveTime", idx); if (hasVehicleRecID) packet.ReadUInt32("VehicleRecID", idx); } if (hasFall) { packet.ReadUInt32("FallTime", idx); packet.ReadSingle("JumpVelocity", idx); packet.ResetBitReader(); var bit20 = packet.ReadBit("HasFallDirection", idx); if (bit20) { packet.ReadVector2("Direction", idx); packet.ReadSingle("HorizontalSpeed", idx); } } }
private static MovementInfo ReadMovementInfoGen(Packet packet, WowGuid guid, object index) { var info = new MovementInfo { Flags = packet.ReadInt32E<MovementFlag>("Movement Flags", index) }; if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) info.FlagsExtra = packet.ReadInt16E<MovementFlagExtra>("Extra Movement Flags", index); else info.FlagsExtra = packet.ReadByteE<MovementFlagExtra>("Extra Movement Flags", index); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) if (packet.ReadGuid("Guid 2", index) != guid) throw new InvalidDataException("Guids are not equal."); packet.ReadUInt32("Time", index); info.Position = packet.ReadVector3("Position", index); info.Orientation = packet.ReadSingle("Orientation", index); if (info.Flags.HasAnyFlag(MovementFlag.OnTransport)) { if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) info.TransportGuid = packet.ReadPackedGuid("Transport GUID", index); else info.TransportGuid = packet.ReadGuid("Transport GUID", index); info.TransportOffset = packet.ReadVector4("Transport Position", index); packet.ReadInt32("Transport Time", index); if (ClientVersion.AddedInVersion(ClientType.WrathOfTheLichKing)) packet.ReadByte("Transport Seat", index); if (info.FlagsExtra.HasAnyFlag(MovementFlagExtra.InterpolateMove)) packet.ReadInt32("Transport Time", index); } if (info.Flags.HasAnyFlag(MovementFlag.Swimming | MovementFlag.Flying) || info.FlagsExtra.HasAnyFlag(MovementFlagExtra.AlwaysAllowPitching)) packet.ReadSingle("Swim Pitch", index); if (ClientVersion.AddedInVersion(ClientType.Cataclysm)) { if (info.FlagsExtra.HasAnyFlag(MovementFlagExtra.InterpolateTurning)) { packet.ReadInt32("Fall Time", index); packet.ReadSingle("Fall Velocity", index); if (info.Flags.HasAnyFlag(MovementFlag.Falling)) { packet.ReadSingle("Fall Sin Angle", index); packet.ReadSingle("Fall Cos Angle", index); packet.ReadSingle("Fall Speed", index); } } } else { packet.ReadInt32("Fall Time", index); if (info.Flags.HasAnyFlag(MovementFlag.Falling)) { packet.ReadSingle("Fall Velocity", index); packet.ReadSingle("Fall Sin Angle", index); packet.ReadSingle("Fall Cos Angle", index); packet.ReadSingle("Fall Speed", index); } } // HACK: "generic" movement flags are wrong for 4.2.2 if (info.Flags.HasAnyFlag(MovementFlag.SplineElevation) && ClientVersion.Build != ClientVersionBuild.V4_2_2_14545) packet.ReadSingle("Spline Elevation", index); return info; }