├── .gitignore ├── ImplementedOpcode.txt ├── README ├── WoWTools.sln ├── libs ├── MySql.Data.dll └── System.Data.SQLite.dll └── src ├── Core ├── BinaryReaderExtensions.cs ├── Core.csproj ├── Guid.cs ├── Movement │ ├── Coords.cs │ ├── MovementBlock.cs │ ├── MovementFlags.cs │ ├── MovementInfo.cs │ ├── RegularMovementPacket.cs │ ├── SplineFlags.cs │ ├── SplineInfo.cs │ └── TransportInfo.cs ├── Opcode │ ├── OpcodeDB.cs │ └── Opcodes.cs ├── Packet.cs ├── Parser │ ├── Parser.cs │ └── ParserAttribute.cs ├── Properties │ └── AssemblyInfo.cs ├── UpdateFields.cs ├── Utility.cs ├── WoWObject.cs └── WoWObjectUpdate.cs ├── UpdatePacketParser ├── FilterForm.Designer.cs ├── FilterForm.cs ├── FilterForm.resx ├── FrmMain.Designer.cs ├── FrmMain.cs ├── FrmMain.resx ├── Packet.cs ├── Parser.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Readers │ ├── IzidorPackerReader.cs │ ├── PacketReader.cs │ ├── SniffitztPacketReader.cs │ ├── SqLitePacketReader.cs │ └── WowCorePacketReader.cs ├── UpdatePacketParser.csproj ├── UpdatePacketParser.csproj.user └── updatefields │ ├── 10026.dat │ ├── 10048.dat │ ├── 10072.dat │ ├── 10083.dat │ ├── 10116.dat │ ├── 10128.dat │ ├── 10147.dat │ ├── 10170.dat │ ├── 10179.dat │ ├── 10192.dat │ ├── 10257.dat │ ├── 10314.dat │ ├── 10357.dat │ ├── 10371.dat │ ├── 10392.dat │ ├── 10433.dat │ ├── 10505.dat │ ├── 10522.dat │ ├── 10554.dat │ ├── 10571.dat │ ├── 10596.dat │ ├── 10623.dat │ ├── 10676.dat │ ├── 10712.dat │ ├── 10747.dat │ ├── 11159.dat │ ├── 11403.dat │ ├── 11685.dat │ ├── 11723.dat │ ├── 12025.dat │ ├── 12340.dat │ ├── 12479.dat │ ├── 7799.dat │ ├── 8089.dat │ ├── 8125.dat │ ├── 8278.dat │ ├── 8606.dat │ ├── 8634.dat │ ├── 8681.dat │ ├── 8714.dat │ ├── 8770.dat │ ├── 8788.dat │ ├── 8820.dat │ ├── 8885.dat │ ├── 8905.dat │ ├── 8926.dat │ ├── 8962.dat │ ├── 8970.dat │ ├── 8982.dat │ ├── 9014.dat │ ├── 9038.dat │ ├── 9061.dat │ ├── 9095.dat │ ├── 9135.dat │ ├── 9138.dat │ ├── 9149.dat │ ├── 9155.dat │ ├── 9183.dat │ ├── 9506.dat │ ├── 9551.dat │ ├── 9614.dat │ ├── 9626.dat │ ├── 9637.dat │ ├── 9767.dat │ ├── 9806.dat │ ├── 9835.dat │ ├── 9855.dat │ ├── 9868.dat │ ├── 9901.dat │ └── 9947.dat └── WoWPacketViewer ├── Forms ├── FrmChangeOpcode.Designer.cs ├── FrmChangeOpcode.cs ├── FrmChangeOpcode.resx ├── FrmMain.Designer.cs ├── FrmMain.cs ├── FrmMain.resx ├── FrmSearch.Designer.cs ├── FrmSearch.cs ├── FrmSearch.resx ├── FrmSettings.Designer.cs ├── FrmSettings.cs ├── FrmSettings.resx ├── FrmWardenDebug.Designer.cs ├── FrmWardenDebug.cs ├── FrmWardenDebug.resx ├── ListViewEx.cs ├── PacketViewTab.Designer.cs ├── PacketViewTab.cs └── PacketViewTab.resx ├── ISupportFind.cs ├── ParserCompiler.cs ├── ParserFactory.cs ├── Parsers ├── Enums │ ├── AIReaction.cs │ ├── AccountDataType.cs │ ├── ActionButtonType.cs │ ├── AmmoType.cs │ ├── AttackerStateFlags.cs │ ├── AuraFlag.cs │ ├── AuraType.cs │ ├── BagFamilyMask.cs │ ├── BillingFlag.cs │ ├── CalendarResponseResult.cs │ ├── CastFlag.cs │ ├── ChannelFlag.cs │ ├── ChannelMemberFlag.cs │ ├── Character.cs │ ├── CharacterFlag.cs │ ├── ChatMessageType.cs │ ├── ChatNotificationType.cs │ ├── ChatTag.cs │ ├── ClassMask.cs │ ├── ClientType.cs │ ├── ContactEntryFlag.cs │ ├── ContactListFlag.cs │ ├── ContactResult.cs │ ├── ContactStatus.cs │ ├── CooldownMask.cs │ ├── CreatureFamily.cs │ ├── CreatureRank.cs │ ├── CreatureType.cs │ ├── CreatureTypeFlag.cs │ ├── CustomizationFlag.cs │ ├── DamageType.cs │ ├── DifficultyChangeType.cs │ ├── EquipmentSetState.cs │ ├── FactionFlag.cs │ ├── GameObjectDynamicFlag.cs │ ├── GameObjectFlag.cs │ ├── GameObjectType.cs │ ├── GossipPoiIcon.cs │ ├── GroupMemberStatusFlag.cs │ ├── GroupTypeFlag.cs │ ├── GroupUpdateFlag.cs │ ├── Holiday.cs │ ├── InstanceResetWarningType.cs │ ├── InstanceStatus.cs │ ├── InventoryType.cs │ ├── ItemBonding.cs │ ├── ItemClass.cs │ ├── ItemFlag.cs │ ├── ItemFlagExtra.cs │ ├── ItemModType.cs │ ├── ItemQuality.cs │ ├── ItemSocketColor.cs │ ├── ItemSpellTriggerType.cs │ ├── KickReason.cs │ ├── Language.cs │ ├── LfgEntryCheckResult.cs │ ├── LfgError.cs │ ├── LfgJoinResult.cs │ ├── LfgRoleCheckResult.cs │ ├── LfgRoleCheckStatus.cs │ ├── LfgRoleFlag.cs │ ├── LfgState.cs │ ├── LfgUpdateFlag.cs │ ├── LfgUpdateType.cs │ ├── LootMethod.cs │ ├── MapDifficulty.cs │ ├── Material.cs │ ├── MiscConstants.cs │ ├── Miscellaneous.cs │ ├── MovementAnimationState.cs │ ├── MovementFlag.cs │ ├── MovementFlagExtra.cs │ ├── NPCFlags.cs │ ├── ObjectType.cs │ ├── PageMaterial.cs │ ├── PetTameFailureReason.cs │ ├── PlayerFieldBytesMiscFlags.cs │ ├── PlayerFlags.cs │ ├── PowerType.cs │ ├── QuestFlag.cs │ ├── QuestMethod.cs │ ├── QuestSort.cs │ ├── QuestType.cs │ ├── RaceMask.cs │ ├── ReputationRank.cs │ ├── SheathType.cs │ ├── SpeedType.cs │ ├── SpellCastFailureReason.cs │ ├── SpellMechanics.cs │ ├── SpellMissType.cs │ ├── SpellMod.cs │ ├── SplineFlag.cs │ ├── SplineMode.cs │ ├── SplineType.cs │ ├── StatType.cs │ ├── TargetFlag.cs │ ├── TargetFlags.cs │ ├── TeamType.cs │ ├── TotemCategory.cs │ ├── TrainerSpellState.cs │ ├── TrainerType.cs │ ├── TransferAbortReason.cs │ ├── TypeMask.cs │ ├── UnitDynamicFlags.cs │ ├── UnitFlags.cs │ ├── UnitFlags2.cs │ ├── UpdateField.cs │ ├── UpdateFlag.cs │ ├── UpdateType.cs │ ├── VehicleFlags.cs │ ├── WardenCheckType.cs │ └── WardenOpcode.cs ├── Grouped │ ├── AccountHandler.cs │ ├── AchievementHandler.cs │ ├── ActionBarHandler.cs │ ├── AuctionHandler.cs │ ├── BattlegroundHandler.cs │ ├── CalendarHandler.cs │ ├── ChannelHandler.cs │ ├── CharacterHandler.cs │ ├── ChatHandler.cs │ ├── CombatHandler.cs │ ├── ContactHandler.cs │ ├── CorpseHandler.cs │ ├── EmptyPackets.cs │ ├── EquipmentSetHandler.cs │ ├── GameObjectHandler.cs │ ├── GroupHandler.cs │ ├── GuildHandler.cs │ ├── InstanceHandler.cs │ ├── ItemHandler.cs │ ├── MailHandler.cs │ ├── MiscellaneousHandler.cs │ ├── NpcHandler.cs │ ├── PetHandler.cs │ ├── QueryHandler.cs │ ├── QuestHandler.cs │ ├── ReputationHandler.cs │ ├── SessionHandler.cs │ ├── SpellHandler.cs │ ├── TalentHandler.cs │ ├── TradeHandler.cs │ ├── VoiceChatHandler.cs │ └── WorldStateHandler.cs ├── Movement │ ├── MSG_MOVE_.cs │ ├── MSG_MOVE_FALL_LAND.cs │ ├── MSG_MOVE_HEARTBEAT.cs │ ├── MSG_MOVE_JUMP.cs │ ├── MSG_MOVE_ROOT.cs │ ├── MSG_MOVE_SET_FACING.cs │ ├── MSG_MOVE_SET_PITCH.cs │ ├── MSG_MOVE_START_ASCEND.cs │ ├── MSG_MOVE_START_BACKWARD.cs │ ├── MSG_MOVE_START_DESCEND.cs │ ├── MSG_MOVE_START_FORWARD.cs │ ├── MSG_MOVE_START_STRAFE_LEFT.cs │ ├── MSG_MOVE_START_STRAFE_RIGHT.cs │ ├── MSG_MOVE_START_SWIM.cs │ ├── MSG_MOVE_START_TURN_LEFT.cs │ ├── MSG_MOVE_START_TURN_RIGHT.cs │ ├── MSG_MOVE_STOP.cs │ ├── MSG_MOVE_STOP_ASCEND.cs │ ├── MSG_MOVE_STOP_STRAFE.cs │ ├── MSG_MOVE_STOP_TURN.cs │ ├── SMSG_MONSTER_MOVE.cs │ └── SMSG_PLAYER_MOVE.cs ├── SMSG_CHAR_ENUM.cs ├── SMSG_INSPECT_RESULTS.cs ├── SMSG_LFG_SEARCH_RESULTS.cs ├── SMSG_LOAD_EQUIPMENT_SET.cs ├── SMSG_UPDATE_OBJECT.cs ├── UnknownPacketParser.cs └── Warden │ ├── CMSG_WARDEN_DATA.cs │ ├── SMSG_WARDEN_DATA.cs │ └── WardenHelpers │ ├── CheckInfo.cs │ ├── CheckType.cs │ └── WardenData.cs ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── Readers ├── IPacketReader.cs ├── IzidorPackerReader.cs ├── PacketReaderFactory.cs ├── SniffitztPacketReader.cs ├── SqLitePacketReader.cs └── WowCorePacketReader.cs ├── WoWPacketViewer.csproj └── app.config /.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | *.suo 3 | obj 4 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This is a WoW Packet Viewer with a set of packet parsers. 2 | Target version is 4.2.0. 3 | Supported input formats include PKT and Izidor. 4 | Opcodes are loaded from a MySQL DB table. 5 | The base structure and content for OpcodesDB: https://github.com/ProjectSkyfire/SkyFireEMU_420/blob/master/sql/opcodes/emuopcodes.sql 6 | And current updates: https://github.com/ProjectSkyfire/SkyFireEMU_420/blob/master/sql/OpcodesUpdates4.2.0.sql 7 | 8 | UpdatePacketParser project is not updated for 4.2 yet. 9 | 10 | The project was originally written by TOM_RUS and is forked from https://github.com/tomrus88/WoWTools 11 | It incldes updates by Chameleon and Singlem as well as code/parsers from: 12 | * SilinoronParser (https://github.com/silinoron/SilinoronParser) 13 | * Kaelima's parser (https://github.com/kaelima/WowPacketParser) 14 | * Zor's parser (https://bitbucket.org/XTZGZoReX/wowpacketparser) 15 | * LordJZ 16 | * and others. -------------------------------------------------------------------------------- /WoWTools.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WoWPacketViewer", "src\WoWPacketViewer\WoWPacketViewer.csproj", "{9E80DAFC-44D7-4C9E-8AE9-515A78B13232}" 5 | EndProject 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdatePacketParser", "src\UpdatePacketParser\UpdatePacketParser.csproj", "{89E7C4DB-8056-47A3-897E-9D8D4A70C305}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "src\Core\Core.csproj", "{F403FF24-95D3-442C-A620-6F19CAE22059}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Debug|x86 = Debug|x86 14 | Release|Any CPU = Release|Any CPU 15 | Release|x86 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Debug|x86.ActiveCfg = Debug|x86 21 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Debug|x86.Build.0 = Debug|x86 22 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Release|Any CPU.Build.0 = Release|Any CPU 24 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Release|x86.ActiveCfg = Release|x86 25 | {9E80DAFC-44D7-4C9E-8AE9-515A78B13232}.Release|x86.Build.0 = Release|x86 26 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Debug|x86.ActiveCfg = Debug|x86 29 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Debug|x86.Build.0 = Debug|x86 30 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Release|x86.ActiveCfg = Release|x86 33 | {89E7C4DB-8056-47A3-897E-9D8D4A70C305}.Release|x86.Build.0 = Release|x86 34 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 35 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Debug|Any CPU.Build.0 = Debug|Any CPU 36 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Debug|x86.ActiveCfg = Debug|x86 37 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Debug|x86.Build.0 = Debug|x86 38 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Release|Any CPU.ActiveCfg = Release|Any CPU 39 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Release|Any CPU.Build.0 = Release|Any CPU 40 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Release|x86.ActiveCfg = Release|x86 41 | {F403FF24-95D3-442C-A620-6F19CAE22059}.Release|x86.Build.0 = Release|x86 42 | EndGlobalSection 43 | GlobalSection(SolutionProperties) = preSolution 44 | HideSolutionNode = FALSE 45 | EndGlobalSection 46 | EndGlobal 47 | -------------------------------------------------------------------------------- /libs/MySql.Data.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SkyFire/PacketViewer/976dfe3558c079a5118ace5745061370e4af247d/libs/MySql.Data.dll -------------------------------------------------------------------------------- /libs/System.Data.SQLite.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SkyFire/PacketViewer/976dfe3558c079a5118ace5745061370e4af247d/libs/System.Data.SQLite.dll -------------------------------------------------------------------------------- /src/Core/Movement/Coords.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | 3 | namespace WowTools.Core 4 | { 5 | /// 6 | /// Represents a coordinates of WoW object without orientation. 7 | /// 8 | public struct Coords3 9 | { 10 | public float X; 11 | public float Y; 12 | public float Z; 13 | 14 | /// 15 | /// Converts the numeric values of this instance to its equivalent string representations, separator is space. 16 | /// 17 | public override string ToString() 18 | { 19 | return string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", X, Y, Z); 20 | } 21 | } 22 | 23 | /// 24 | /// Represents a coordinates of WoW object with specified orientation. 25 | /// 26 | public struct Coords4 27 | { 28 | public float X; 29 | public float Y; 30 | public float Z; 31 | public float O; 32 | 33 | /// 34 | /// Converts the numeric values of this instance to its equivalent string representations, separator is space. 35 | /// 36 | public override string ToString() 37 | { 38 | return string.Format(CultureInfo.InvariantCulture, "{0} {1} {2} {3}", X, Y, Z, O); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Core/Movement/MovementFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WowTools.Core 4 | { 5 | [Flags] 6 | public enum MovementFlags : uint 7 | { 8 | NONE = 0x00000000, 9 | FORWARD = 0x00000001, 10 | BACKWARD = 0x00000002, 11 | STRAFELEFT = 0x00000004, 12 | STRAFERIGHT = 0x00000008, 13 | TURNLEFT = 0x00000010, 14 | TURNRIGHT = 0x00000020, 15 | PITCHUP = 0x00000040, 16 | PITCHDOWN = 0x00000080, 17 | WALKMODE = 0x00000100, 18 | ONTRANSPORT = 0x00000200, 19 | LEVITATING = 0x00000400, 20 | ROOT = 0x00000800, 21 | FALLING = 0x00001000, 22 | FALLINGFAR = 0x00002000, 23 | PENDINGSTOP = 0x00004000, 24 | PENDINGSTRAFESTOP = 0x00008000, 25 | PENDINGFORWARD = 0x00010000, 26 | PENDINGBACKWARD = 0x00020000, 27 | PENDINGSTRAFELEFT = 0x00040000, 28 | PENDINGSTRAFERIGHT = 0x00080000, 29 | PENDINGROOT = 0x00100000, 30 | SWIMMING = 0x00200000, 31 | ASCENDING = 0x00400000, 32 | DESCENDING = 0x00800000, 33 | CAN_FLY = 0x01000000, 34 | FLYING = 0x02000000, 35 | SPLINEELEVATION = 0x04000000, 36 | SPLINEENABLED = 0x08000000, 37 | WATERWALKING = 0x10000000, 38 | SAFEFALL = 0x20000000, 39 | HOVER = 0x40000000 40 | }; 41 | 42 | [Flags] 43 | public enum MovementFlags2 : ushort 44 | { 45 | None = 0x0000, 46 | Unknown1 = 0x0001, 47 | Unknown2 = 0x0002, 48 | Unknown3 = 0x0004, 49 | FullSpeedTurning = 0x0008, 50 | FullSpeedPitching = 0x0010, 51 | AlwaysAllowPitching = 0x0020, 52 | Unknown4 = 0x0040, 53 | Unknown5 = 0x0080, 54 | Unknown6 = 0x0100, 55 | Unknown7 = 0x0200, 56 | InterpolatedPlayerMovement = 0x0400, 57 | InterpolatedPlayerTurning = 0x0800, 58 | InterpolatedPlayerPitching = 0x1000, 59 | Unknown8 = 0x2000, 60 | Unknown9 = 0x4000, 61 | Unknown10 = 0x8000 62 | }; 63 | } 64 | -------------------------------------------------------------------------------- /src/Core/Movement/SplineFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WowTools.Core 4 | { 5 | [Flags] 6 | public enum SplineFlags : uint 7 | { 8 | NONE = 0x00000000, 9 | FORWARD = 0x00000001, 10 | BACKWARD = 0x00000002, 11 | STRAFELEFT = 0x00000004, 12 | STRAFERIGHT = 0x00000008, 13 | TURNLEFT = 0x00000010, 14 | TURNRIGHT = 0x00000020, 15 | PITCHUP = 0x00000040, 16 | PITCHDOWN = 0x00000080, 17 | DONE = 0x00000100, 18 | FALLING = 0x00000200, 19 | NOSPLINE = 0x00000400, 20 | TRAJECTORY = 0x00000800, 21 | WALKMODE = 0x00001000, 22 | FLYING = 0x00002000, 23 | KNOCKBACK = 0x00004000, 24 | FINALPOINT = 0x00008000, 25 | FINALTARGET = 0x00010000, 26 | FINALORIENT = 0x00020000, 27 | CATMULLROM = 0x00040000, 28 | UNK1 = 0x00080000, 29 | UNK2 = 0x00100000, 30 | UNK3 = 0x00200000, 31 | UNK4 = 0x00400000, 32 | UNK5 = 0x00800000, 33 | UNK6 = 0x01000000, 34 | UNK7 = 0x02000000, 35 | UNK8 = 0x04000000, 36 | UNK9 = 0x08000000, 37 | UNK10 = 0x10000000, 38 | UNK11 = 0x20000000, 39 | UNK12 = 0x40000000, 40 | UNK13 = 0x80000000, 41 | }; 42 | 43 | public enum SplineMode : byte 44 | { 45 | Linear = 0, 46 | CatmullRom = 1, 47 | Bezier3 = 2 48 | } 49 | 50 | public enum SplineType : byte 51 | { 52 | Normal = 0, 53 | Stop = 1, 54 | FacingSpot = 2, 55 | FacingTarget = 3, 56 | FacingAngle = 4 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/Core/Movement/SplineInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | 4 | namespace WowTools.Core 5 | { 6 | public class SplineInfo 7 | { 8 | public SplineFlags Flags { get; private set; } 9 | public Coords3 Point { get; private set; } 10 | public ulong Guid { get; private set; } 11 | public float Rotation { get; private set; } 12 | public uint CurrentTime { get; private set; } 13 | public uint FullTime { get; private set; } 14 | public uint Unknown1 { get; private set; } 15 | public float DurationMultiplier { get; private set; } 16 | public float UnknownFloat2 { get; private set; } 17 | public float UnknownFloat3 { get; private set; } 18 | public uint Unknown2 { get; private set; } 19 | public uint Count { get; private set; } 20 | private readonly List splines = new List(); 21 | public SplineMode SplineMode { get; private set; } 22 | public Coords3 EndPoint { get; private set; } 23 | 24 | public List Splines 25 | { 26 | get { return splines; } 27 | } 28 | 29 | public static SplineInfo Read(BinaryReader gr) 30 | { 31 | var spline = new SplineInfo(); 32 | spline.Flags = (SplineFlags)gr.ReadUInt32(); 33 | 34 | if (spline.Flags.HasFlag(SplineFlags.FINALPOINT)) 35 | { 36 | spline.Point = gr.ReadCoords3(); 37 | } 38 | 39 | if (spline.Flags.HasFlag(SplineFlags.FINALTARGET)) 40 | { 41 | spline.Guid = gr.ReadUInt64(); 42 | } 43 | 44 | if (spline.Flags.HasFlag(SplineFlags.FINALORIENT)) 45 | { 46 | spline.Rotation = gr.ReadSingle(); 47 | } 48 | 49 | spline.CurrentTime = gr.ReadUInt32(); 50 | spline.FullTime = gr.ReadUInt32(); 51 | spline.Unknown1 = gr.ReadUInt32(); 52 | 53 | spline.DurationMultiplier = gr.ReadSingle(); 54 | spline.UnknownFloat2 = gr.ReadSingle(); 55 | spline.UnknownFloat3 = gr.ReadSingle(); 56 | 57 | spline.Unknown2 = gr.ReadUInt32(); 58 | 59 | spline.Count = gr.ReadUInt32(); 60 | 61 | for (uint i = 0; i < spline.Count; ++i) 62 | { 63 | spline.splines.Add(gr.ReadCoords3()); 64 | } 65 | 66 | spline.SplineMode = (SplineMode)gr.ReadByte(); 67 | 68 | spline.EndPoint = gr.ReadCoords3(); 69 | return spline; 70 | } 71 | }; 72 | } 73 | -------------------------------------------------------------------------------- /src/Core/Movement/TransportInfo.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Text; 3 | 4 | namespace WowTools.Core 5 | { 6 | public class TransportInfo 7 | { 8 | public ulong Guid { get; set; } 9 | public Coords3 Position { get; set; } 10 | public float Facing { get; set; } 11 | public uint Time { get; set; } 12 | public byte Seat { get; set; } 13 | public uint Time2 { get; set; } 14 | 15 | public static TransportInfo Read(BinaryReader reader, MovementFlags2 flags2) 16 | { 17 | var tInfo = new TransportInfo(); 18 | tInfo.Guid = reader.ReadPackedGuid(); 19 | tInfo.Position = reader.ReadCoords3(); 20 | tInfo.Facing = reader.ReadSingle(); 21 | tInfo.Time = reader.ReadUInt32(); 22 | tInfo.Seat = reader.ReadByte(); 23 | if (flags2.HasFlag(MovementFlags2.InterpolatedPlayerMovement)) 24 | tInfo.Time2 = reader.ReadUInt32(); 25 | return tInfo; 26 | } 27 | 28 | public override string ToString() 29 | { 30 | var sb = new StringBuilder(); 31 | sb.AppendFormat("Transport Guid: 0x{0:X16}", Guid).AppendLine(); 32 | sb.AppendFormat("Transport Position: {0}", Position).AppendLine(); 33 | sb.AppendFormat("Transport Facing: {0}", Facing).AppendLine(); 34 | sb.AppendFormat("Transport TimeStamp: {0}", Time).AppendLine(); 35 | sb.AppendFormat("Transport Seat: {0}", Seat).AppendLine(); 36 | sb.AppendFormat("Transport TimeStamp2: {0}", Time2).AppendLine(); 37 | return sb.ToString(); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Core/Packet.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace WowTools.Core 4 | { 5 | public enum Direction 6 | { 7 | Client = 0x00, // from client 8 | Server = 0x01 // from server 9 | } 10 | 11 | public class Packet 12 | { 13 | public Direction Direction { get; private set; } 14 | 15 | public uint OpcodeNumber { get; private set; } 16 | public OpCodes Code { get { return OpcodeDB.GetOpcode(OpcodeNumber); } } 17 | public string Name { get { return OpcodeDB.GetName(OpcodeNumber); } } 18 | 19 | public byte[] Data { get; private set; } 20 | 21 | public uint UnixTime { get; private set; } 22 | 23 | public uint TicksCount { get; private set; } 24 | 25 | public Packet(Direction direction, uint opcode, byte[] data, uint unixtime, uint tickscount) 26 | { 27 | Direction = direction; 28 | OpcodeNumber = opcode; 29 | Data = data; 30 | UnixTime = unixtime; 31 | TicksCount = tickscount; 32 | } 33 | 34 | public BinaryReader CreateReader() 35 | { 36 | return new BinaryReader(new MemoryStream(Data)); 37 | } 38 | 39 | public void DecompressDataAndSetOpcode(OpCodes opcode) 40 | { 41 | Data = Data.Decompress(); 42 | OpcodeNumber = OpcodeDB.GetOpcode(opcode); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Core/Parser/ParserAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WowTools.Core 4 | { 5 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] 6 | public class ParserAttribute : Attribute 7 | { 8 | public ParserAttribute(OpCodes code) 9 | { 10 | Code = code; 11 | } 12 | 13 | public OpCodes Code { get; private set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Core/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("WowTools.Core")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("WowTools.Core")] 13 | [assembly: AssemblyCopyright("Copyright © 2009")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("7ae081cc-94b9-4915-bafd-7f6dc7074b15")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/Core/WoWObject.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WowTools.Core; 3 | 4 | namespace WowTools.Core 5 | { 6 | /// 7 | /// WoW Object Class 8 | /// 9 | public class WoWObject : WoWObjectUpdate 10 | { 11 | private readonly List updates = new List(); 12 | 13 | public WoWObject(ObjectTypes typeId, MovementBlock movement, IDictionary data) 14 | : base(data) 15 | { 16 | TypeId = typeId; 17 | Movement = movement; 18 | } 19 | 20 | public ObjectTypes TypeId { get; private set; } 21 | 22 | public IEnumerable Updates 23 | { 24 | get { return updates; } 25 | } 26 | 27 | public MovementBlock Movement { get; private set; } 28 | 29 | public void AddUpdate(WoWObjectUpdate update) 30 | { 31 | updates.Add(update); 32 | } 33 | 34 | public uint GetGUIDHigh() 35 | { 36 | return GetUInt32Value(1); // OBJECT_FIELD_GUID (high) 37 | } 38 | 39 | public new ObjectTypeMask GetType() 40 | { 41 | return (ObjectTypeMask)GetUInt32Value(2); // OBJECT_FIELD_TYPE 42 | } 43 | 44 | private uint GetUInt32Value(int index) 45 | { 46 | uint result; 47 | Data.TryGetValue(index, out result); 48 | return result; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Core/WoWObjectUpdate.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | 5 | namespace WowTools.Core 6 | { 7 | public class WoWObjectUpdate 8 | { 9 | public IDictionary Data { get; private set; } 10 | 11 | protected WoWObjectUpdate(IDictionary data) 12 | { 13 | Data = data; 14 | } 15 | 16 | public static WoWObjectUpdate Read(BinaryReader gr) 17 | { 18 | byte blocksCount = gr.ReadByte(); 19 | var updatemask = new int[blocksCount]; 20 | 21 | for (int i = 0; i < updatemask.Length; ++i) 22 | updatemask[i] = gr.ReadInt32(); 23 | 24 | var mask = new BitArray(updatemask); 25 | 26 | var values = new Dictionary(); 27 | 28 | for (int i = 0; i < mask.Count; ++i) 29 | if (mask[i]) 30 | values[i] = gr.ReadUInt32(); 31 | 32 | return new WoWObjectUpdate(values); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/FilterForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using WowTools.Core; 4 | 5 | namespace UpdatePacketParser 6 | { 7 | [Flags] 8 | public enum CustomFilterMask 9 | { 10 | CUSTOM_FILTER_NONE = 0, 11 | CUSTOM_FILTER_UNITS = 1, 12 | CUSTOM_FILTER_PETS = 2, 13 | CUSTOM_FILTER_VEHICLES = 4, 14 | CUSTOM_FILTER_OBJECTS = 8, 15 | CUSTOM_FILTER_TRANSPORT = 16, 16 | CUSTOM_FILTER_MO_TRANSPORT = 32 17 | }; 18 | 19 | public partial class FilterForm : Form 20 | { 21 | public FilterForm() 22 | { 23 | InitializeComponent(); 24 | } 25 | 26 | private void button2_Click(object sender, EventArgs e) 27 | { 28 | Close(); 29 | } 30 | 31 | private void button1_Click(object sender, EventArgs e) 32 | { 33 | var mask = ObjectTypeMask.TYPEMASK_NONE; 34 | 35 | if (checkBox1.Checked) 36 | mask |= ObjectTypeMask.TYPEMASK_ITEM; 37 | 38 | if (checkBox2.Checked) 39 | mask |= ObjectTypeMask.TYPEMASK_CONTAINER; 40 | 41 | if (checkBox3.Checked) 42 | mask |= ObjectTypeMask.TYPEMASK_UNIT; 43 | 44 | if (checkBox4.Checked) 45 | mask |= ObjectTypeMask.TYPEMASK_PLAYER; 46 | 47 | if (checkBox5.Checked) 48 | mask |= ObjectTypeMask.TYPEMASK_GAMEOBJECT; 49 | 50 | if (checkBox6.Checked) 51 | mask |= ObjectTypeMask.TYPEMASK_DYNAMICOBJECT; 52 | 53 | if (checkBox7.Checked) 54 | mask |= ObjectTypeMask.TYPEMASK_CORPSE; 55 | 56 | var customMask = CustomFilterMask.CUSTOM_FILTER_NONE; 57 | 58 | if (checkBox8.Checked) 59 | customMask |= CustomFilterMask.CUSTOM_FILTER_TRANSPORT; 60 | 61 | if (checkBox9.Checked) 62 | customMask |= CustomFilterMask.CUSTOM_FILTER_PETS; 63 | 64 | if (checkBox10.Checked) 65 | customMask |= CustomFilterMask.CUSTOM_FILTER_VEHICLES; 66 | 67 | if (checkBox11.Checked) 68 | customMask |= CustomFilterMask.CUSTOM_FILTER_MO_TRANSPORT; 69 | 70 | if (checkBox12.Checked) 71 | customMask |= CustomFilterMask.CUSTOM_FILTER_UNITS; 72 | 73 | if (checkBox13.Checked) 74 | customMask |= CustomFilterMask.CUSTOM_FILTER_OBJECTS; 75 | 76 | ((FrmMain)Owner).PrintObjectType(mask, customMask); 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Packet.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using WowTools.Core; 3 | 4 | namespace UpdatePacketParser 5 | { 6 | public class Packet 7 | { 8 | public int Size { get; set; } 9 | public uint OpcodeNumber; 10 | public OpCodes Code 11 | { 12 | get { return OpcodeDB.GetOpcode(OpcodeNumber); } 13 | } 14 | public byte[] Data { get; set; } 15 | 16 | public BinaryReader CreateReader() 17 | { 18 | return new BinaryReader(new MemoryStream(Data)); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace UpdatePacketParser 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// The main entry point for the application. 10 | /// 11 | [STAThread] 12 | static void Main() 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new FrmMain()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("UpdatePacketParser")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("UpdatePacketParser")] 13 | [assembly: AssemblyCopyright("Copyright © 2007")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("48a7a499-27a0-440e-a776-56716de1eba7")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace UpdatePacketParser.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UpdatePacketParser.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace UpdatePacketParser.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Readers/IzidorPackerReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Text; 5 | using WowTools.Core; 6 | 7 | namespace UpdatePacketParser 8 | { 9 | public class IzidorPacketReader : IPacketReader 10 | { 11 | private string FileName; 12 | 13 | public IzidorPacketReader(string filename) 14 | { 15 | FileName = filename; 16 | ushort build = 14333; // assume the latest build cause the format doesn't contain it 17 | UpdateFieldsLoader.LoadUpdateFields(build); 18 | } 19 | 20 | public virtual IEnumerable ReadPackets() 21 | { 22 | var packets = new List(); 23 | using (TextReader tr = new StreamReader(FileName)) 24 | { 25 | while (tr.Peek() != -1) 26 | { 27 | Packet p = new Packet(); 28 | string line = tr.ReadLine(); 29 | string[] data = line.Split('<', '>', '"'); 30 | p.OpcodeNumber = UInt16.Parse(data[6]); 31 | string directdata = data[8]; 32 | p.Data = ParseHex(directdata); 33 | p.Size = p.Data.Length; 34 | 35 | packets.Add(p); 36 | } 37 | } 38 | return packets; 39 | } 40 | 41 | public static byte[] ParseHex(string hex) 42 | { 43 | int offset = hex.StartsWith("0x") ? 2 : 0; 44 | if ((hex.Length % 2) != 0) 45 | { 46 | throw new ArgumentException("Invalid length: " + hex.Length); 47 | } 48 | byte[] ret = new byte[(hex.Length - offset) / 2]; 49 | 50 | for (int i = 0; i < ret.Length; i++) 51 | { 52 | ret[i] = (byte)((ParseNybble(hex[offset]) << 4) 53 | | ParseNybble(hex[offset + 1])); 54 | offset += 2; 55 | } 56 | return ret; 57 | } 58 | 59 | static int ParseNybble(char c) 60 | { 61 | if (c >= '0' && c <= '9') 62 | { 63 | return c - '0'; 64 | } 65 | if (c >= 'A' && c <= 'F') 66 | { 67 | return c - 'A' + 10; 68 | } 69 | if (c >= 'a' && c <= 'f') 70 | { 71 | return c - 'a' + 10; 72 | } 73 | throw new ArgumentException("Invalid hex digit: " + c); 74 | } 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Readers/PacketReader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace UpdatePacketParser 4 | { 5 | public interface IPacketReader 6 | { 7 | IEnumerable ReadPackets(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Readers/SniffitztPacketReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Xml; 4 | using WowTools.Core; 5 | 6 | namespace UpdatePacketParser 7 | { 8 | public class SniffitztPacketReader : IPacketReader 9 | { 10 | private readonly XmlDocument _document; 11 | private readonly XmlNodeList _packets; 12 | private int _readPackets; 13 | 14 | public SniffitztPacketReader(string filename) 15 | { 16 | _document = new XmlDocument(); 17 | _document.Load(filename); 18 | 19 | var build = Convert.ToUInt32(_document.GetElementsByTagName("header")[0].Attributes["clientBuild"].Value); 20 | 21 | _packets = _document.GetElementsByTagName("packet"); 22 | 23 | UpdateFieldsLoader.LoadUpdateFields(build); 24 | } 25 | 26 | public Packet ReadPacket() 27 | { 28 | if (_readPackets >= _packets.Count) 29 | { 30 | return null; 31 | } 32 | 33 | var element = _packets[_readPackets]; 34 | 35 | var data = element.InnerText; 36 | 37 | var len = data.Length / 2; 38 | 39 | var bytes = new byte[len]; 40 | 41 | for (var i = 0; i < len; ++i) 42 | { 43 | var pos = i * 2; 44 | var str = data[pos].ToString(); 45 | str += data[pos + 1]; 46 | bytes[i] = byte.Parse(str, System.Globalization.NumberStyles.HexNumber); 47 | } 48 | 49 | var packet = new Packet(); 50 | packet.Size = len; 51 | packet.OpcodeNumber = Convert.ToUInt32(element.Attributes["opcode"].Value); 52 | packet.Data = bytes; 53 | 54 | _readPackets++; 55 | return packet; 56 | } 57 | 58 | public virtual IEnumerable ReadPackets() 59 | { 60 | var packets = new List(); 61 | Packet packet; 62 | while ((packet = ReadPacket()) != null) 63 | { 64 | packets.Add(packet); 65 | } 66 | return packets; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/Readers/SqLitePacketReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data.Common; 4 | using WowTools.Core; 5 | 6 | namespace UpdatePacketParser 7 | { 8 | public class SqLitePacketReader : IPacketReader 9 | { 10 | private static readonly DbProviderFactory factory = System.Data.SQLite.SQLiteFactory.Instance; 11 | private readonly DbDataReader _reader; 12 | 13 | public SqLitePacketReader(string filename) 14 | { 15 | var connection = factory.CreateConnection(); 16 | connection.ConnectionString = "Data Source=" + filename; 17 | connection.Open(); 18 | 19 | //TODO: Добавить определение билда! 20 | var command = connection.CreateCommand(); 21 | command.CommandText = "SELECT opcode, data FROM packets WHERE opcode=169 OR opcode=502 ORDER BY id;"; 22 | command.Prepare(); 23 | 24 | _reader = command.ExecuteReader(); 25 | 26 | //TODO: Добавить определение билда! 27 | UpdateFieldsLoader.LoadUpdateFields(10026); 28 | } 29 | 30 | public Packet ReadPacket() 31 | { 32 | if (!_reader.Read()) 33 | { 34 | _reader.Close(); 35 | return null; 36 | } 37 | 38 | var packet = new Packet(); 39 | packet.OpcodeNumber = (uint)_reader.GetInt32(0); 40 | packet.Data = (byte[])_reader.GetValue(1); 41 | packet.Size = packet.Data.Length; 42 | return packet; 43 | } 44 | 45 | public virtual IEnumerable ReadPackets() 46 | { 47 | var packets = new List(); 48 | Packet packet; 49 | while ((packet = ReadPacket()) != null) 50 | { 51 | packets.Add(packet); 52 | } 53 | return packets; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/UpdatePacketParser/UpdatePacketParser.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Forms/FrmSearch.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | public partial class FrmSearch : Form 7 | { 8 | public PacketViewTab CurrentTab { get; set; } 9 | 10 | public FrmSearch() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | private void button2_Click(object sender, EventArgs e) 16 | { 17 | Close(); 18 | } 19 | 20 | private void button1_Click(object sender, EventArgs e) 21 | { 22 | FindNext(); 23 | } 24 | 25 | public void FindNext() 26 | { 27 | var viewTab = CurrentTab as ISupportFind; 28 | var opcode = textBox1.Text; 29 | if (viewTab != null && !String.IsNullOrEmpty(opcode)) 30 | viewTab.Search(opcode, radioButton1.Checked, !checkBox1.Checked); 31 | } 32 | 33 | private void FrmSearch_FormClosing(object sender, FormClosingEventArgs e) 34 | { 35 | if (e.CloseReason == CloseReason.UserClosing) 36 | { 37 | e.Cancel = true; 38 | Owner.Activate(); 39 | Hide(); 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Forms/FrmSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using WoWPacketViewer.Properties; 10 | 11 | namespace WoWPacketViewer 12 | { 13 | public partial class FrmSettings : Form 14 | { 15 | bool canClose = false; 16 | 17 | public FrmSettings() 18 | { 19 | InitializeComponent(); 20 | } 21 | 22 | private void FrmSettings_Load(object sender, EventArgs e) 23 | { 24 | edtHost.Text = Settings.Default.Host; 25 | edtPort.Text = Settings.Default.Port; 26 | edtUser.Text = Settings.Default.User; 27 | edtPass.Text = Settings.Default.Pass; 28 | edtOpcodeDBName.Text = Settings.Default.OpcodeDBName; 29 | } 30 | 31 | private void BtnStave_Click(object sender, EventArgs e) 32 | { 33 | canClose = true; 34 | Settings.Default.Host = edtHost.Text; 35 | Settings.Default.Port = edtPort.Text; 36 | Settings.Default.User = edtUser.Text; 37 | Settings.Default.Pass = edtPass.Text; 38 | Settings.Default.OpcodeDBName = edtOpcodeDBName.Text; 39 | Settings.Default.Save(); 40 | Settings.Default.Reload(); 41 | this.Close(); 42 | } 43 | 44 | private void FrmSettings_FormClosing(object sender, FormClosingEventArgs e) 45 | { 46 | if (!canClose) 47 | BtnStave.PerformClick(); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Forms/ListViewEx.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | public class ListViewEx : ListView 6 | { 7 | public ListViewEx() 8 | : base() 9 | { 10 | DoubleBuffered = true; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/ISupportFind.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public interface ISupportFind 4 | { 5 | void Search(string text, bool searchUp, bool ignoreCase); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/AIReaction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public enum AIReaction 8 | { 9 | Alert = 0, 10 | Friendly = 1, 11 | Hostile = 2, 12 | Afraid = 3, 13 | Destroy = 4 14 | } 15 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/AccountDataType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public enum AccountDataType : uint 8 | { 9 | GLOBAL_CONFIG_CACHE = 0, // 0x01 g 10 | PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p 11 | GLOBAL_BINDINGS_CACHE = 2, // 0x04 g 12 | PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p 13 | GLOBAL_MACROS_CACHE = 4, // 0x10 g 14 | PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p 15 | PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p 16 | PER_CHARACTER_CHAT_CACHE = 7, // 0x80 p 17 | }; 18 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ActionButtonType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public enum ActionButtonType 8 | { 9 | Spell = 0, 10 | Click = 1, 11 | EquipSet = 32, 12 | Macro = 64, 13 | Item = 128 14 | }; 15 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/AmmoType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum AmmoType 4 | { 5 | Arrows = 2, 6 | Bullets = 3, 7 | Thrown = 4 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/AttackerStateFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum AttackerStateFlags 7 | { 8 | None = 0, 9 | Unk1 = 0x1, 10 | PlayWoundAnimation = 0x2, 11 | OffHand = 0x4, 12 | Miss = 0x10, 13 | AbsorbType1 = 0x20, 14 | AbsorbType2 = 0x40, 15 | ResistType1 = 0x80, 16 | ResistType2 = 0x100, 17 | Critical = 0x200, 18 | 19 | Block = 0x2000, 20 | HideWorldTextForNoDamage = 0x4000, 21 | BloodSpurtInBack = 0x8000, 22 | Glancing = 0x10000, 23 | Crushing = 0x20000, 24 | Ignore = 0x40000, 25 | ModifyPredictedPower = 0x800000, 26 | ForceShowBloodSpurt = 0x1000000, 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/AuraFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum AuraFlag 7 | { 8 | None = 0x00, 9 | EffectIndex0 = 0x01, 10 | EffectIndex1 = 0x02, 11 | EffectIndex2 = 0x04, 12 | NotCaster = 0x08, 13 | Positive = 0x10, 14 | Duration = 0x20, 15 | Unknown = 0x40, 16 | Negative = 0x80 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/BagFamilyMask.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum BagFamilyMask 4 | { 5 | None = 0x00000000, 6 | Arrows = 0x00000001, 7 | Bullets = 0x00000002, 8 | Soulshards = 0x00000004, 9 | LeatherworkingSupplies = 0x00000008, 10 | InscriptionSupplies = 0x00000010, 11 | Herbs = 0x00000020, 12 | EnchantingSupplies = 0x00000040, 13 | EngineeringSupplies = 0x00000080, 14 | Keys = 0x00000100, 15 | Gems = 0x00000200, 16 | MiningSupplies = 0x00000400, 17 | SoulboundEquipment = 0x00000800, 18 | VanityPets = 0x00001000, 19 | CurrencyTokens = 0x00002000, 20 | QuestItems = 0x00004000 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/BillingFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum BillingFlag 7 | { 8 | None = 0x00, 9 | Unused = 0x01, 10 | RecurringBilling = 0x02, 11 | Trial1 = 0x04, 12 | Igr = 0x08, 13 | Usage = 0x10, 14 | TimeMixture = 0x20, 15 | Restricted = 0x40, 16 | EnableCais = 0x80 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CalendarResponseResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public enum CalendarResponseResult : uint 8 | { 9 | CALENDAR_ERROR_GUILD_EVENTS_EXCEEDED = 1, 10 | CALENDAR_ERROR_EVENTS_EXCEEDED = 2, // max of 20 (?) exceeded 11 | CALENDAR_ERROR_SELF_INVITES_EXCEEDED = 3, 12 | CALENDAR_ERROR_OTHER_INVITES_EXCEEDED = 4, // std::string 13 | CALENDAR_ERROR_PERMISSIONS = 5, 14 | CALENDAR_ERROR_EVENT_INVALID = 6, // Event not found. 15 | CALENDAR_ERROR_NOT_INVITED = 7, 16 | CALENDAR_ERROR_INTERNAL = 8, 17 | CALENDAR_ERROR_GUILD_PLAYER_NOT_IN_GUILD = 9, 18 | CALENDAR_ERROR_ALREADY_INVITED_TO_EVENT_S = 10, // std::string 19 | CALENDAR_ERROR_PLAYER_NOT_FOUND = 11, 20 | CALENDAR_ERROR_NOT_ALLIED = 12, 21 | CALENDAR_ERROR_IGNORING_YOU_S = 13, // std::string 22 | CALENDAR_ERROR_INVITES_EXCEEDED = 14, 23 | // 15 ? 24 | CALENDAR_ERROR_INVALID_DATE = 16, 25 | CALENDAR_ERROR_INVALID_TIME = 17, 26 | // 18 ? 27 | CALENDAR_ERROR_NEEDS_TITLE = 19, 28 | CALENDAR_ERROR_EVENT_PASSED = 20, 29 | CALENDAR_ERROR_EVENT_LOCKED = 21, 30 | CALENDAR_ERROR_DELETE_CREATOR_FAILED = 22, 31 | CALENDAR_ERROR_SYSTEM_DISABLED = 24, 32 | CALENDAR_ERROR_RESTRICTED_ACCOUNT = 25, 33 | CALENDAR_ERROR_ARENA_EVENTS_EXCEEDED = 26, 34 | CALENDAR_ERROR_RESTRICTED_LEVEL = 27, 35 | CALENDAR_ERROR_USER_SQUELCHED = 28, 36 | CALENDAR_ERROR_NO_INVITE = 29, 37 | // 30-35 ? 38 | CALENDAR_ERROR_EVENT_WRONG_SERVER = 36, 39 | CALENDAR_ERROR_INVITE_WRONG_SERVER = 37, 40 | CALENDAR_ERROR_NO_GUILD_INVITES = 38, 41 | CALENDAR_ERROR_INVALID_SIGNUP = 39, 42 | CALENDAR_ERROR_NO_MODERATOR = 40, 43 | }; 44 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CastFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum CastFlag 7 | { 8 | None = 0x00000000, 9 | PendingCast = 0x00000001, // 4.x NoCombatLog 10 | Unknown1 = 0x00000002, 11 | Unknown2 = 0x00000004, 12 | Unknown3 = 0x00000008, 13 | Unknown4 = 0x00000010, 14 | Projectile = 0x00000020, 15 | Unknown5 = 0x00000040, 16 | Unknown6 = 0x00000080, 17 | Unknown7 = 0x00000100, 18 | Unknown8 = 0x00000200, 19 | Unknown9 = 0x00000400, 20 | PredictedPower = 0x00000800, 21 | Unknown10 = 0x00001000, 22 | Unknown11 = 0x00002000, 23 | Unknown12 = 0x00004000, 24 | Unknown13 = 0x00008000, 25 | Unknown14 = 0x00010000, 26 | AdjustMissile = 0x00020000, // 4.x 27 | Unknown16 = 0x00040000, 28 | VisualChain = 0x00080000, // 4.x 29 | Unknown18 = 0x00100000, 30 | RuneInfo = 0x00200000, // 4.x PredictedRunes 31 | Unknown19 = 0x00400000, 32 | Unknown20 = 0x00800000, 33 | Unknown21 = 0x01000000, 34 | Unknown22 = 0x02000000, 35 | Immunity = 0x04000000 // 4.x 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ChannelFlag.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ChannelFlag 4 | { 5 | None = 0x00, 6 | Custom = 0x01, 7 | Unknown1 = 0x02, 8 | Trade = 0x04, 9 | NotLfg = 0x08, 10 | General = 0x10, 11 | City = 0x20, 12 | Lfg = 0x40, 13 | Voice = 0x80 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ChannelMemberFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ChannelMemberFlag 7 | { 8 | None = 0x00, 9 | Owner = 0x01, 10 | Moderator = 0x02, 11 | Voiced = 0x04, 12 | Muted = 0x08, 13 | Custom = 0x10, 14 | MicMuted = 0x20, 15 | Unknown1 = 0x40, 16 | Unknown2 = 0x80 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CharacterFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum CharacterFlag 7 | { 8 | None = 0x00000000, 9 | TransferLock = 0x00000001, 10 | Unknown1 = 0x00000002, 11 | Unknown2 = 0x00000004, 12 | Unknown3 = 0x00000008, 13 | Unknown4 = 0x00000010, 14 | Unknown5 = 0x00000020, 15 | Unknown6 = 0x00000040, 16 | Unknown7 = 0x00000080, 17 | Unknown8 = 0x00000100, 18 | Unknown9 = 0x00000200, 19 | HideHelm = 0x00000400, 20 | HideCloak = 0x00000800, 21 | Unknown11 = 0x00001000, 22 | Ghost = 0x00002000, 23 | Rename = 0x00004000, 24 | Unknown13 = 0x00008000, 25 | Unknown14 = 0x00010000, 26 | Unknown15 = 0x00020000, 27 | Unknown16 = 0x00040000, 28 | Unknown17 = 0x00080000, 29 | Unknown18 = 0x00100000, 30 | Unknown19 = 0x00200000, 31 | Unknown20 = 0x00400000, 32 | Unknown21 = 0x00800000, 33 | BillingLock = 0x01000000, 34 | Declined = 0x02000000, 35 | Unknown22 = 0x04000000, 36 | Unknown23 = 0x08000000, 37 | Unknown24 = 0x10000000, 38 | Unknown25 = 0x20000000, 39 | Unknown26 = 0x40000000 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ChatMessageType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ChatMessageType : uint 4 | { 5 | System = 0, 6 | Say = 1, 7 | Party = 2, 8 | Raid = 3, 9 | Guild = 4, 10 | Officer = 5, 11 | Yell = 6, 12 | Whisper = 7, 13 | WhisperForeign = 8, 14 | WhisperInform = 9, 15 | Emote = 10, 16 | TextEmote = 11, 17 | MonsterSay = 12, 18 | MonsterParty = 13, 19 | MonsterYell = 14, 20 | MonsterWhisper = 15, 21 | MonsterEmote = 16, 22 | Channel = 17, 23 | ChannelJoin = 18, 24 | ChannelLeave = 19, 25 | ChannelList = 20, 26 | ChannelNotice = 21, 27 | ChannelNoticeUser = 22, 28 | Afk = 23, 29 | Dnd = 24, 30 | Ignored = 25, 31 | Skill = 26, 32 | Loot = 27, 33 | Money = 28, 34 | Opening = 29, 35 | Tradeskills = 30, 36 | PetInfo = 31, 37 | CombatMiscInfo = 32, 38 | CombatXPGain = 33, 39 | CombatHonorGain = 34, 40 | CombatFactionChange = 35, 41 | BattlegroundNeutral = 36, 42 | BattlegroundAlliance = 37, 43 | BattlegroundHorde = 38, 44 | RaidLeader = 39, 45 | RaidWarning = 40, 46 | RaidBossEmote = 41, 47 | RaidBossWhisper = 42, 48 | Filtered = 43, 49 | Battleground = 44, 50 | BattlegroundLeader = 45, 51 | Restricted = 46, 52 | BattleNet = 47, 53 | Achievement = 48, 54 | GuildAchievement = 49, 55 | ArenaPoints = 50, 56 | PartyLeader = 51, 57 | Addon = uint.MaxValue 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ChatNotificationType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ChatNotificationType 4 | { 5 | Joined = 0x00, 6 | Left = 0x01, 7 | YouJoined = 0x02, 8 | YouLeft = 0x03, 9 | WrongPassword = 0x04, 10 | NotMember = 0x05, 11 | NotModerator = 0x06, 12 | PasswordChanged = 0x07, 13 | OwnerChanged = 0x08, 14 | PlayerNotFound = 0x09, 15 | NotOwner = 0x0A, 16 | ChannelOwner = 0x0B, 17 | ModeChange = 0x0C, 18 | AnnouncementsOn = 0x0D, 19 | AnnouncementsOff = 0x0E, 20 | ModerationOn = 0x0F, 21 | ModerationOff = 0x10, 22 | Muted = 0x11, 23 | PlayerKicked = 0x12, 24 | Banned = 0x13, 25 | PlayerBanned = 0x14, 26 | PlayerUnbanned = 0x15, 27 | PlayerNotBanned = 0x16, 28 | PlayerAlreadyMember = 0x17, 29 | Invite = 0x18, 30 | InviteWrongFaction = 0x19, 31 | WrongFaction = 0x1A, 32 | InvalidName = 0x1B, 33 | NotModerated = 0x1C, 34 | PlayerInvited = 0x1D, 35 | PlayerInviteBanned = 0x1E, 36 | Throttled = 0x1F, 37 | NotInArea = 0x20, 38 | NotInLfg = 0x21, 39 | VoiceOn = 0x22, 40 | VoiceOff = 0x23 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ChatTag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ChatTag 7 | { 8 | None = 0x0, 9 | Afk = 0x1, 10 | Dnd = 0x2, 11 | Gm = 0x4, 12 | Unknown = 0x8 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ClassMask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ClassMask 7 | { 8 | None = 0x0000, 9 | Warrior = 0x0001, 10 | Paladin = 0x0002, 11 | Hunter = 0x0004, 12 | Rogue = 0x0008, 13 | Priest = 0x0010, 14 | DeathKnight = 0x0020, 15 | Shaman = 0x0040, 16 | Mage = 0x0080, 17 | Warlock = 0x0100, 18 | Druid = 0x0400, 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ClientType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ClientType 4 | { 5 | WorldOfWarcraft = 0, 6 | TheBurningCrusade = 1, 7 | WrathOfTheLichKing = 2, 8 | Cataclysm = 3 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ContactEntryFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ContactEntryFlag 7 | { 8 | None = 0x00, 9 | Friend = 0x01, 10 | Ignored = 0x02, 11 | Muted = 0x04, 12 | RecruitAFriend = 0x08 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ContactListFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ContactListFlag 7 | { 8 | None = 0x00, 9 | Unknown1 = 0x01, 10 | Unknown2 = 0x02, 11 | Unknown3 = 0x04 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ContactResult.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ContactResult 4 | { 5 | DBError = 0, 6 | FriendListFull = 1, 7 | Online = 2, 8 | Offline = 3, 9 | FriendNotFound = 4, 10 | FriendRemoved = 5, 11 | FriendAddedOnline = 6, 12 | FriendAddedOffline = 7, 13 | AlreadyOnFriendList = 8, 14 | CannotBefriendSelf = 9, 15 | IsEnemy = 10, 16 | IgnoreListFull = 11, 17 | CannotIgnoreSelf = 12, 18 | IgnoreNotFound = 13, 19 | AlreadyOnIgnoreList = 14, 20 | IgnoreAdded = 15, 21 | IgnoreRemoved = 16, 22 | IgnoreNameAmbiguous = 17, 23 | MuteListFull = 18, 24 | CannotMuteSelf = 19, 25 | MuteNotFound = 20, 26 | AlreadyOnMuteList = 21, 27 | MuteAdded = 22, 28 | MuteRemoved = 23, 29 | MuteNameAmbiguous = 24, 30 | Unknown1 = 25, 31 | Unknown2 = 26 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ContactStatus.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ContactStatus : byte 4 | { 5 | Offline = 0, 6 | Online = 1, 7 | Afk = 2, 8 | Unknown = 4, 9 | Dnd = 5 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CooldownMask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum CooldownMask : byte 7 | { 8 | RUNE_NONE = 0, 9 | RUNE_BLOOD_0 = 1, 10 | RUNE_BLOOD_1 = 2, 11 | RUNE_UNHOLY_0 = 4, 12 | RUNE_UNHOLY_1 = 8, 13 | RUNE_FROST_0 = 16, 14 | RUNE_FROST_1 = 32 15 | } 16 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CreatureFamily.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum CreatureFamily 4 | { 5 | None = 0, 6 | Wolf = 1, 7 | Cat = 2, 8 | Spider = 3, 9 | Bear = 4, 10 | Boar = 5, 11 | Crocolisk = 6, 12 | CarrionBird = 7, 13 | Crab = 8, 14 | Gorilla = 9, 15 | HorseCustom = 10, 16 | Raptor = 11, 17 | Tallstrider = 12, 18 | Felhunter = 15, 19 | Voidwalker = 16, 20 | Succubus = 17, 21 | Doomguard = 19, 22 | Scorpid = 20, 23 | Turtle = 21, 24 | Imp = 23, 25 | Bat = 24, 26 | Hyena = 25, 27 | BirdOfPrey = 26, 28 | WindSerpent = 27, 29 | RemoteControl = 28, 30 | Felguard = 29, 31 | Dragonhawk = 30, 32 | Ravager = 31, 33 | WarpStalker = 32, 34 | Sporebat = 33, 35 | NetherRay = 34, 36 | Serpent = 35, 37 | Moth = 37, 38 | Chimaera = 38, 39 | Devilsaur = 39, 40 | Ghoul = 40, 41 | Silithid = 41, 42 | Worm = 42, 43 | Rhino = 43, 44 | Wasp = 44, 45 | CoreHound = 45, 46 | SpiritBeast = 46 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CreatureRank.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum CreatureRank 4 | { 5 | Normal = 0, 6 | Elite = 1, 7 | RareElite = 2, 8 | WorldBoss = 3, 9 | Rare = 4, 10 | Unknown = 5 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CreatureType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum CreatureType 4 | { 5 | Beast = 1, 6 | Dragonkin = 2, 7 | Demon = 3, 8 | Elemental = 4, 9 | Giant = 5, 10 | Undead = 6, 11 | Humanoid = 7, 12 | Critter = 8, 13 | Mechanical = 9, 14 | NotSpecified = 10, 15 | Totem = 11, 16 | NonCombatPet = 12, 17 | GasCloud = 13 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CreatureTypeFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum CreatureTypeFlag 7 | { 8 | None = 0x00000000, 9 | TameablePet = 0x00000001, // 4.x name 10 | GhostVisible = 0x00000002, 11 | BossMob = 0x00000004, // 4.x name 12 | DoNotPlayWoundParryAnimation = 0x00000008, // 4.x 13 | HideFactionTooltip = 0x00000010, // 4.x 14 | Unknown4 = 0x00000020, // sound related 15 | SpellAttackable = 0x00000040, 16 | CanInteractWhileDead = 0x00000080, // 4.x name 17 | HerbSkinningSkill = 0x00000100, // 4.x name 18 | MiningSkinningSkill = 0x00000200, // 4.x name 19 | DoNotLogDeath = 0x00000400, // 4.x 20 | MountedCombatAllowed = 0x000800, // 4.x name 21 | CanAssist = 0x00001000, 22 | IsPetBarUsed = 0x00002000, // 4.x name 23 | MaskUID = 0x00004000, // 4.x 24 | EngineeringSkinningSkill = 0x00008000, // 4.x name 25 | ExoticPet = 0x00010000, // 4.x name 26 | UseDefaultCollisionBox = 0x00020000, // 4.x 27 | IsSiegeWeapon = 0x00040000, 28 | DoesNotCollideWithMissiles = 0x00080000, // 4.x 29 | HideNamePlate = 0x00100000, // 4.x 30 | DoNotPlayMountedAnimations = 0x00200000, // 4.x 31 | IsLinkAll = 0x00400000, // 4.x 32 | InteractOnlyWithCreator = 0x00800000, // 4.x 33 | DoNotPlayUnitEventSounds = 0x01000000, // 4.x 34 | HasNoShadowBlob = 0x02000000, // 4.x 35 | TreatAsRaidUnit = 0x04000000, // 4.x 36 | ForceGossip = 0x08000000, // 4.x 37 | DoNotSheathe = 0x10000000, // 4.x 38 | DoNotTargetOnInteraction = 0x20000000, // 4.x 39 | DoNotRenderObjectName = 0x40000000, // 4.x 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/CustomizationFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum CustomizationFlag 7 | { 8 | None = 0x00000000, 9 | Customize = 0x00000001, 10 | Unknown1 = 0x00000002, 11 | Unknown2 = 0x00000004, 12 | Unknown3 = 0x00000008, 13 | Unknown4 = 0x00000010, 14 | Unknown5 = 0x00000020, 15 | Unknown6 = 0x00000040, 16 | Unknown7 = 0x00000080, 17 | Unknown8 = 0x00000100, 18 | Unknown9 = 0x00000200, 19 | Unknown10 = 0x00000400, 20 | Unknown20 = 0x00000800, 21 | Unknown21 = 0x00001000, 22 | Unknown22 = 0x00002000, 23 | Unknown23 = 0x00004000, 24 | Unknown24 = 0x00008000, 25 | Faction = 0x00010000, 26 | Unknown25 = 0x00020000, 27 | Unknown26 = 0x00040000, 28 | Unknown27 = 0x00080000, 29 | Race = 0x00100000, 30 | Unknown28 = 0x00200000, 31 | Unknown29 = 0x00400000, 32 | Unknown30 = 0x00800000, 33 | Unknown31 = 0x01000000, 34 | Unknown32 = 0x02000000, 35 | Unknown33 = 0x04000000, 36 | Unknown34 = 0x08000000, 37 | Unknown35 = 0x10000000 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/DamageType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum DamageType 4 | { 5 | Physical = 0, 6 | Holy = 1, 7 | Fire = 2, 8 | Nature = 3, 9 | Frost = 4, 10 | Shadow = 5, 11 | Arcane = 6 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/DifficultyChangeType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum DifficultyChangeType 4 | { 5 | PlayerDifficulty1 = 0, 6 | SpellDuration = 1, 7 | WorldState = 2, 8 | Encounter = 3, 9 | Combat = 4, 10 | Unknown1 = 5, 11 | Time = 6, 12 | Unknown2 = 7, 13 | MapDifficulty = 8, 14 | PlayerDifficulty2 = 9, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/EquipmentSetState.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum EquipmentSetState 4 | { 5 | Unchanged = 0, 6 | Changed = 1, 7 | New = 2, 8 | Deleted = 3 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/FactionFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum FactionFlag 7 | { 8 | None = 0x00, 9 | Visible = 0x01, 10 | AtWar = 0x02, 11 | Hidden = 0x04, 12 | Inivisible = 0x08, 13 | Peace = 0x10, 14 | Inactive = 0x20, 15 | Rival = 0x40 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GameObjectDynamicFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum GameObjectDynamicFlag // 4.x 7 | { 8 | ConditionalUseOk = 0x01, 9 | LoAnimate = 0x02, 10 | DisableUse = 0x04, 11 | PassiveHighlight = 0x08, 12 | WaitAtCurrentLocation = 0x10, 13 | BlockUse = 0x20, 14 | MoveBackwards = 0x40, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GameObjectFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum GameObjectFlag 7 | { 8 | None = 0x00000000, 9 | InUse = 0x00000001, 10 | Locked = 0x00000002, 11 | InteractionCondition = 0x00000004, 12 | Transport = 0x00000008, 13 | ExclusiveUse = 0x00000010, // 4.x 14 | NeverDespawn = 0x00000020, 15 | Triggered = 0x00000040, 16 | Unknown2 = 0x00000080, 17 | Unknown3 = 0x00000100, 18 | Damaged = 0x00000200, 19 | Destroyed = 0x00000400, 20 | DestructableState3 = 0x00000800, // 4.x 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GameObjectType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum GameObjectType 4 | { 5 | Door = 0, 6 | Button = 1, 7 | QuestGiver = 2, 8 | Chest = 3, 9 | Binder = 4, 10 | Generic = 5, 11 | Trap = 6, 12 | Chair = 7, 13 | SpellFocus = 8, 14 | Text = 9, 15 | Goober = 10, 16 | Transport = 11, 17 | AreaDamage = 12, 18 | Camera = 13, 19 | MapObject = 14, 20 | MOTransport = 15, 21 | DuelFlag = 16, 22 | FishingNode = 17, 23 | SummoningRitual = 18, 24 | Mailbox = 19, 25 | DoNotUse1 = 20, 26 | GuardPost = 21, 27 | SpellCaster = 22, 28 | MeetingStone = 23, 29 | FlagStand = 24, 30 | FishingHole = 25, 31 | FlagDrop = 26, 32 | MiniGame = 27, 33 | DoNotUse2 = 28, 34 | CapturePoint = 29, 35 | AuraGenerator = 30, 36 | DungeonDifficulty = 31, 37 | BarberChair = 32, 38 | DestructibleBuilding = 33, 39 | GuildBank = 34, 40 | TrapDoor = 35 41 | } 42 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GossipPoiIcon.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum GossipPoiIcon 4 | { 5 | Blank = 0, 6 | GreyAlteracValleyMine = 1, 7 | RedAlteracValleyMine = 2, 8 | BlueAlteracValleyMine = 3, 9 | BlueAndWhiteTombstone = 4, 10 | SmallHouse = 5, 11 | GreyTower = 6, 12 | RedFlag = 7, 13 | Tombstone = 8, 14 | BlueAndWhiteTower = 9, 15 | RedTower = 10, 16 | BlueTower = 11, 17 | RedAndWhiteTower = 12, 18 | RedTombstone = 13, 19 | RedAndWhiteTombstone = 14, 20 | BlueTombstone = 15, 21 | Grey1 = 16, 22 | BlueAndWhite1 = 17, 23 | Blue1 = 18, 24 | RedAndWhite1 = 19, 25 | Red1 = 20, 26 | GreyWoodLogs = 21, 27 | BlueAndWhiteWoodLogs = 22, 28 | BlueWoodLogs = 23, 29 | RedAndWhiteWoodLogs = 24, 30 | RedWoodLogs = 25, 31 | Grey2 = 26, 32 | BlueAndWhite2 = 27, 33 | Blue2 = 28, 34 | RedAndWhite2 = 29, 35 | Red2 = 30, 36 | GreyHouse = 31, 37 | BlueAndWhiteHouse = 32, 38 | BlueHouse = 33, 39 | RedAndWhiteHouse = 34, 40 | RedHouse = 35, 41 | GreyHorse = 36, 42 | BlueAndWhiteHorse = 37, 43 | BlueHorse = 38, 44 | RedAndWhiteHorse = 39, 45 | RedHorse = 40 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GroupMemberStatusFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum GroupMemberStatusFlag 7 | { 8 | Offline = 0x0000, 9 | Online = 0x0001, 10 | Pvp = 0x0002, 11 | Dead = 0x0004, 12 | Ghost = 0x0008, 13 | Unknown1 = 0x0010, 14 | Unknown2 = 0x0020, 15 | Unknown3 = 0x0040, 16 | Unknown4 = 0x0080 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GroupTypeFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum GroupTypeFlag 7 | { 8 | Normal = 0x00, 9 | Battleground = 0x01, 10 | Raid = 0x02, 11 | Unknown1 = 0x04, 12 | LookingForDungeon = 0x08, 13 | Unknown2 = 0x10 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/GroupUpdateFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum GroupUpdateFlag 7 | { 8 | None = 0x00000000, 9 | Status = 0x00000001, 10 | CurrentHealth = 0x00000002, 11 | MaxHealth = 0x00000004, 12 | PowerType = 0x00000008, 13 | CurrentPower = 0x00000010, 14 | MaxPower = 0x00000020, 15 | Level = 0x00000040, 16 | Zone = 0x00000080, 17 | Position = 0x00000100, 18 | Auras = 0x00000200, 19 | PetGuid = 0x00000400, 20 | PetName = 0x00000800, 21 | PetModelId = 0x00001000, 22 | PetCurrentHealth = 0x00002000, 23 | PetMaxHealth = 0x00004000, 24 | PetPowerType = 0x00008000, 25 | PetCurrentPower = 0x00010000, 26 | PetMaxPower = 0x00020000, 27 | PetAuras = 0x00040000, 28 | VehicleSeat = 0x00080000 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/Holiday.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum Holiday 4 | { 5 | None = 0, 6 | FireworksSpectacular = 62, 7 | FeastOfWinterVeil = 141, 8 | Noblegarden = 181, 9 | ChildrensWeek = 201, 10 | CallToArmsAlteracValley = 283, 11 | CallToArmsWarsongGulch = 284, 12 | CallToArmsArathiBasin = 285, 13 | FishingExtravaganza = 301, 14 | HarvestFestival = 321, 15 | HallowsEnd = 324, 16 | LunarFestival = 327, 17 | LoveIsInTheAir = 335, 18 | FireFestival = 341, 19 | CallToArmsEyeOfTheStorm = 353, 20 | Brewfest = 372, 21 | DarkmoonFaireElwynn = 374, 22 | DarkmoonFaireThunder = 375, 23 | DarkmoonFaireShattrath = 376, 24 | PiratesDay = 398, 25 | CallToArmsStrandOfTheAncients = 400, 26 | PilgrimsBounty = 404, 27 | WrathOfTheLichKingLaunch = 406, 28 | DayOfTheDead = 409, 29 | CallToArmsIsleOfConquest = 420 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/InstanceResetWarningType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum InstanceResetWarningType 4 | { 5 | Hours = 1, 6 | Minutes = 2, 7 | MinutesSoon = 3, 8 | Welcome = 4, 9 | Expired = 5 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/InstanceStatus.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum InstanceStatus 4 | { 5 | NotSaved = 0, 6 | Saved = 1, 7 | Completed = 2 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/InventoryType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum InventoryType 4 | { 5 | NonEquip = 0, 6 | Head = 1, 7 | Neck = 2, 8 | Shoulders = 3, 9 | Body = 4, 10 | Chest = 5, 11 | Waist = 6, 12 | Legs = 7, 13 | Feet = 8, 14 | Wrists = 9, 15 | Hands = 10, 16 | Finger = 11, 17 | Trinket = 12, 18 | Weapon = 13, 19 | Shield = 14, 20 | Ranged = 15, 21 | Cloak = 16, 22 | TwoHandedWeapon = 17, 23 | Bag = 18, 24 | Tabard = 19, 25 | Robe = 20, 26 | MainHandWeapon = 21, 27 | OffHandWeapon = 22, 28 | Holdable = 23, 29 | Ammo = 24, 30 | Thrown = 25, 31 | RangedRight = 26, 32 | Quiver = 27, 33 | Relic = 28 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemBonding.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemBonding 4 | { 5 | None = 0, 6 | WhenPickedUp = 1, 7 | WhenEquipped = 2, 8 | WhenUsed = 3, 9 | QuestItem = 4 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemClass.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemClass 4 | { 5 | Consumable = 0, 6 | Container = 1, 7 | Weapon = 2, 8 | Gem = 3, 9 | Armor = 4, 10 | Reagent = 5, 11 | Projectile = 6, 12 | TradeGoods = 7, 13 | Generic = 8, 14 | Recipe = 9, 15 | Money = 10, 16 | Quiver = 11, 17 | Quest = 12, 18 | Key = 13, 19 | Permanent = 14, 20 | Miscellaneous = 15, 21 | Glyph = 16 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ItemFlag : uint 7 | { 8 | None = 0x00000000, 9 | Bound = 0x00000001, 10 | Conjured = 0x00000002, 11 | Openable = 0x00000004, 12 | Wrapped = 0x00000008, 13 | Heroic = 0x00000008, 14 | Broken = 0x00000010, 15 | Indestructible = 0x00000020, 16 | Usable = 0x00000040, 17 | NoEquipCooldown = 0x00000080, 18 | Wrapper = 0x00000200, 19 | IgnoreBagSpace = 0x00000400, 20 | PartyLoot = 0x00000800, 21 | Refundable = 0x00001000, 22 | Charter = 0x00002000, 23 | Unknown = 0x00008000, 24 | Prospectable = 0x00040000, 25 | UniqueEquipped = 0x00080000, 26 | UsableInArena = 0x00200000, 27 | Throwable = 0x00400000, 28 | SpecialUse = 0x00800000, 29 | AccountBound = 0x08000000, 30 | EnchantmentScroll = 0x10000000, 31 | Millable = 0x20000000, 32 | BindOnPickUpTradable = 0x80000000 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemFlagExtra.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum ItemFlagExtra 7 | { 8 | None = 0x0000, 9 | HordeOnly = 0x0001, 10 | AllianceOnly = 0x0002, 11 | Refundable = 0x0004, 12 | Unknown1 = 0x0008, 13 | Unknown2 = 0x0010, 14 | Unknown3 = 0x0020, 15 | Unknown4 = 0x0040, 16 | Unknown5 = 0x0080, 17 | NeedRollDisabled = 0x0100 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemModType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemModType 4 | { 5 | Mana = 0, 6 | Health = 1, 7 | Agility = 3, 8 | Strength = 4, 9 | Intellect = 5, 10 | Spirit = 6, 11 | Stamina = 7, 12 | DefenseSkillRating = 12, 13 | DodgeRating = 13, 14 | ParryRating = 14, 15 | BlockRating = 15, 16 | MeleeHitRating = 16, 17 | RangedHitRating = 17, 18 | SpellHitRating = 18, 19 | MeleeCritRating = 19, 20 | RangedCritRating = 20, 21 | SpellCritRating = 21, 22 | MeleeHitTakenRating = 22, 23 | RangedHitTakenRating = 23, 24 | SpellHitTakenRating = 24, 25 | MeleeCritTakenRating = 25, 26 | RangedCritTakenRating = 26, 27 | SpellCritTakenRating = 27, 28 | MeleeHasteRating = 28, 29 | RangedHasteRating = 29, 30 | SpellHasteRating = 30, 31 | HitRating = 31, 32 | CritRating = 32, 33 | HitTakenRating = 33, 34 | CritTakenRating = 34, 35 | ResilienceRating = 35, 36 | HasteRating = 36, 37 | ExpertiseRating = 37, 38 | AttackPower = 38, 39 | RangedAttackPower = 39, 40 | FeralAttackPowerOld = 40, 41 | SpellHealingDoneOld = 41, 42 | SpellDamageDoneOld = 42, 43 | ManaRegeneration = 43, 44 | ArmorPenetrationRating = 44, 45 | SpellPower = 45, 46 | HealthRegeneration = 46, 47 | SpellPenetration = 47, 48 | BlockValue = 48, 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemQuality.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemQuality 4 | { 5 | Poor = 0, 6 | Normal = 1, 7 | Uncommon = 2, 8 | Rare = 3, 9 | Epic = 4, 10 | Legendary = 5, 11 | Artifact = 6, 12 | Heirloom = 7 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemSocketColor.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemSocketColor 4 | { 5 | Meta = 1, 6 | Red = 2, 7 | Yellow = 4, 8 | Blue = 8 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ItemSpellTriggerType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ItemSpellTriggerType 4 | { 5 | OnUse = 0, 6 | OnEquip = 1, 7 | ChanceOnHit = 2, 8 | Soulstone = 4, 9 | OnNoDelayUse = 5, 10 | LearnSpellId = 6 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/KickReason.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum KickReason 4 | { 5 | NoGenericReason = 0, 6 | DuplicateSession = 1, 7 | NoGameTime = 2, 8 | AccountBanned = 3, 9 | ParentalControl = 4 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/Language.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum Language : uint 4 | { 5 | Universal = 0, 6 | Orcish = 1, 7 | Darnassian = 2, 8 | Taurahe = 3, 9 | Dwarvish = 6, 10 | Common = 7, 11 | Demonic = 8, 12 | Titan = 9, 13 | Thalassian = 10, 14 | Draconic = 11, 15 | Kalimag = 12, 16 | Gnomish = 13, 17 | Troll = 14, 18 | Gutterspeak = 33, 19 | Draenei = 35, 20 | Zombie = 36, 21 | GnomishBinary = 37, 22 | GoblinBinary = 38, 23 | Addon = uint.MaxValue 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgEntryCheckResult.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgEntryCheckResult 4 | { 5 | InsufficientExpansion = 1, 6 | TooLowLevel = 2, 7 | TooHighLevel = 3, 8 | TooLowGearScore = 4, 9 | TooHighGearScore = 5, 10 | RaidLocked = 6, 11 | AttunementTooLowLevel = 1001, 12 | AttunementTooHighLevel = 1002, 13 | QuestNotCompleted = 1022, 14 | MissingItem = 1025, 15 | NotInSeason = 1031 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgError.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgError 4 | { 5 | Unknown1 = 0, 6 | PlayerDead = 1, 7 | Falling = 2, 8 | Unknown2 = 3, 9 | Fatigue = 4, 10 | Unknown3 = 5, 11 | InvalidTeleportLocation = 6, 12 | Unknown4 = 7, 13 | Unknown5 = 8 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgJoinResult.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgJoinResult 4 | { 5 | Initiating = 0, 6 | Failed = 1, 7 | Success = 2 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgRoleCheckResult.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgRoleCheckResult 4 | { 5 | Success = 1, 6 | Initiating = 2, 7 | MissingRole = 3, 8 | NoInstance = 4, 9 | Aborted = 5, 10 | Unknown = 6 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgRoleCheckStatus.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgRoleCheckStatus 4 | { 5 | Success = 1, 6 | Initiating = 2, 7 | MissingRole = 3, 8 | NoInstance = 4, 9 | Aborted = 5, 10 | Unknown = 6 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgRoleFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum LfgRoleFlag 7 | { 8 | None = 0x0, 9 | Leader = 0x1, 10 | Tank = 0x2, 11 | Healer = 0x4, 12 | Damage = 0x8 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgState.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgState 4 | { 5 | Initiating = 0, 6 | Failed = 1, 7 | Success = 2 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgUpdateFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum LfgUpdateFlag 7 | { 8 | None = 0x00, 9 | CharacterInfo = 0x01, 10 | Comment = 0x02, 11 | Unknown1 = 0x04, 12 | Guid = 0x08, 13 | Roles = 0x10, 14 | Unknown2 = 0x20, 15 | Unknown3 = 0x40, 16 | Unknown4 = 0x80 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LfgUpdateType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LfgUpdateType 4 | { 5 | GroupLeader = 1, 6 | Unknown1 = 2, 7 | Unknown2 = 3, 8 | RoleCheckAborted = 4, 9 | JoinProposal = 5, 10 | RoleCheckFailed = 6, 11 | RemovedFromQueue = 7, 12 | ProposalFailed = 8, 13 | ProposalDeclined = 9, 14 | GroupFound = 10, 15 | Unknown3 = 11, 16 | AddedToQueue = 12, 17 | ProposalFound = 13, 18 | ClearLockList = 14, 19 | GroupMemberOffline = 15, 20 | GroupDisbanded = 16 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/LootMethod.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum LootMethod 4 | { 5 | FreeForAll = 0, 6 | RoundRobin = 1, 7 | MasterLooter = 2, 8 | GroupLoot = 3, 9 | NeedBeforeGreed = 4 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/MapDifficulty.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum MapDifficulty 4 | { 5 | NormalOrNormal10Man = 0, 6 | HeroicOrNormal25Man = 1, 7 | EpicOrHeroic10Man = 2, 8 | EpicHeroicOrHeroic25Man = 3 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/Material.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum Material 4 | { 5 | Consumable = -1, 6 | None = 0, 7 | Metal = 1, 8 | Wood = 2, 9 | Liquid = 3, 10 | Jewelry = 4, 11 | Chain = 5, 12 | Plate = 6, 13 | Cloth = 7, 14 | Leather = 8 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/MiscConstants.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum MiscConstants 4 | { 5 | MaxDeclinedNameCases = 5, 6 | CreatureMaxSpells = 8, 7 | PetSpellsOffset = 8, 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/Miscellaneous.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | using WowTools.Core; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | public enum RealmSplitState 7 | { 8 | Normal = 0, 9 | Split = 1, 10 | Pending = 2 11 | } 12 | 13 | public enum WeatherState 14 | { 15 | Fine = 0, 16 | LightRain = 3, 17 | MediumRain = 4, 18 | HeavyRain = 5, 19 | LightSnow = 6, 20 | MediumSnow = 7, 21 | HeavySnow = 8, 22 | LightSandstorm = 22, 23 | MediumSandstorm = 41, 24 | HeavySandstorm = 42, 25 | Thunder = 86, 26 | BlackRain = 90 27 | } 28 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/MovementAnimationState.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum MovementAnimationState 4 | { 5 | OnGround = 0, 6 | Swimming = 1, 7 | Hover = 2, 8 | Flying = 3 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/MovementFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum MovementFlag 7 | { 8 | None = 0x00000000, 9 | Forward = 0x00000001, 10 | Backward = 0x00000002, 11 | StrafeLeft = 0x00000004, 12 | StrafeRight = 0x00000008, 13 | TurnLeft = 0x00000010, 14 | TurnRight = 0x00000020, 15 | PitchUp = 0x00000040, 16 | PitchDown = 0x00000080, 17 | WalkMode = 0x00000100, 18 | OnTransport = 0x00000200, 19 | DisableGravity = 0x00000400, // 4.x 20 | Root = 0x00000800, 21 | Falling = 0x00001000, 22 | FallingFar = 0x00002000, 23 | PendingStop = 0x00004000, 24 | PendingStrafeStop = 0x00008000, 25 | PendingForward = 0x00010000, 26 | PendingBackward = 0x00020000, 27 | PendingStrafeLeft = 0x00040000, 28 | PendingStrafeRight = 0x00080000, 29 | PendingRoot = 0x00100000, 30 | Swimming = 0x00200000, 31 | Ascending = 0x00400000, 32 | Descending = 0x00800000, 33 | CanFly = 0x01000000, 34 | Flying = 0x02000000, 35 | SplineElevation = 0x04000000, 36 | SplineEnabled = 0x08000000, 37 | Waterwalking = 0x10000000, 38 | CanSafeFall = 0x20000000, // 4.x name 39 | Hover = 0x40000000, 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/MovementFlagExtra.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum MovementFlagExtra 7 | { 8 | None = 0x0000, 9 | PreventStrafe = 0x0001, // 4.x 10 | PreventJumping = 0x0002, // 4.x 11 | DisableCollision = 0x0004, // 4.x 12 | FullSpeedTurning = 0x0008, 13 | FullSpeedPitching = 0x0010, 14 | AlwaysAllowPitching = 0x0020, 15 | IsVehicleExitVoluntary = 0x0040, // 4.x 16 | IsJumpSplineInAir = 0x0080, // 4.x 17 | IsAnimTierInTrans = 0x0100, // 4.x 18 | PreventChangePitch = 0x0200, // 4.x 19 | InterpolateMove = 0x0400, // 4.x (Interpolation is player only) 20 | InterpolateTurning = 0x0800, 21 | InterpolatePitching = 0x1000, 22 | VehiclePassengerIsTransitionAllowed = 0x2000, // 4.x 23 | CanTransitionBetweenSwimAndFly = 0x4000, // 4.x 24 | Unknown10 = 0x8000 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/NPCFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum NPCFlags // 4.x 7 | { 8 | None = 0x00000000, 9 | Gossip = 0x00000001, 10 | QuestGiver = 0x00000002, 11 | Unknown1 = 0x00000004, 12 | Unknown2 = 0x00000008, 13 | Trainer = 0x00000010, 14 | ClassTrainer = 0x00000020, 15 | ProfessionTrainer = 0x00000040, 16 | Vendor = 0x00000080, 17 | AmmoVendor = 0x00000100, 18 | FoodVendor = 0x00000200, 19 | PoisonVendor = 0x00000400, 20 | ReagentVendor = 0x00000800, 21 | Repair = 0x00001000, 22 | FlightMaster = 0x00002000, 23 | SpiritHealer = 0x00004000, 24 | SpiritGuide = 0x00008000, 25 | InnKeeper = 0x00010000, 26 | Banker = 0x00020000, 27 | Petitioner = 0x00040000, 28 | TabardDesigner = 0x00080000, 29 | BattleMaster = 0x00100000, 30 | Auctioneer = 0x00200000, 31 | StableMaster = 0x00400000, 32 | GuildBanker = 0x00800000, 33 | SpellClick = 0x01000000, 34 | PlayerVehicle = 0x02000000, 35 | MailObject = 0x04000000, 36 | ForgeMaster = 0x08000000 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ObjectType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ObjectType 4 | { 5 | Object = 0, 6 | Item = 1, 7 | Container = 2, 8 | Unit = 3, 9 | Player = 4, 10 | GameObject = 5, 11 | DynamicObject = 6, 12 | Corpse = 7 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/PageMaterial.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum PageMaterial 4 | { 5 | Parchment = 1, 6 | Stone = 2, 7 | Marble = 3, 8 | Silver = 4, 9 | Bronze = 5, 10 | Valentive = 6, 11 | Illidan = 7 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/PetTameFailureReason.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum PetTameFailureReason 4 | { 5 | InvalidCreature = 0, 6 | TooMany = 1, 7 | CreatureAlreadyOwned = 2, 8 | NotTameable = 3, 9 | AnotherSummonActive = 4, 10 | UnitsCannotTame = 5, 11 | NoPetAvailable = 6, 12 | InternalError = 7, 13 | TooHighLevel = 8, 14 | Dead = 9, 15 | NotDead = 10, 16 | CannotControlExotic = 11, 17 | UnknownError = 12 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/PlayerFieldBytesMiscFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum PlayerFieldBytesMiscFlags // 4.x - first byte of PLAYER_FIELD_BYTES 7 | { 8 | Unk1 = 0x1, 9 | TrackStealthed = 0x2, 10 | Unk2 = 0x4, 11 | UseReleaseSpiritTimer = 0x8, 12 | PreventReleaseSpiritAtDeath = 0x10, 13 | HasTempPetBar = 0x20, 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/PlayerFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum PlayerFlags // 4.x 7 | { 8 | GroupLeader = 0x00000001, 9 | AFK = 0x00000002, 10 | DND = 0x00000004, 11 | GameMaster = 0x00000008, 12 | Ghost = 0x00000010, 13 | Resting = 0x00000020, 14 | Unk7 = 0x00000040, 15 | Unk8 = 0x00000080, 16 | ContestedPvP = 0x00000100, 17 | InPvP = 0x00000200, 18 | HideHelm = 0x00000400, 19 | HideCloak = 0x00000800, 20 | PlayedLongTime = 0x00001000, 21 | PlayedTooLong = 0x00002000, 22 | OutOfBounds = 0x00004000, 23 | Developer = 0x00008000, 24 | EnableLowLevelRaid = 0x00010000, 25 | TaxiBenchmark = 0x00020000, 26 | PvPTimerActive = 0x00040000, 27 | Commentator = 0x00080000, 28 | Unk21 = 0x00100000, 29 | Unk22 = 0x00200000, 30 | CommentatorUber = 0x00400000, 31 | AllowOnlyAbility = 0x00800000, 32 | Unk25 = 0x01000000, 33 | NoXPGain = 0x02000000, 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/PowerType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum PowerType 4 | { 5 | Health = -2, 6 | Mana = 0, 7 | Rage = 1, 8 | Focus = 2, 9 | Energy = 3, 10 | Happiness = 4, 11 | Rune = 5, 12 | RunicPower = 6 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/QuestFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum QuestFlag 7 | { 8 | None = 0x00000000, 9 | StayAlive = 0x00000001, 10 | PartyAccept = 0x00000002, 11 | Exploration = 0x00000004, 12 | Sharable = 0x00000008, 13 | None2 = 0x00000010, 14 | Epic = 0x00000020, 15 | Raid = 0x00000040, 16 | TBC = 0x00000080, 17 | DeliverMore = 0x00000100, 18 | HiddenRewards = 0x00000200, 19 | AutoRewarded = 0x00000400, 20 | TBCRaces = 0x00000800, 21 | Daily = 0x00001000, 22 | Pvp = 0x00002000, 23 | Unavailable = 0x00004000, 24 | Weekly = 0x00008000, 25 | AutoComplete = 0x00010000, 26 | SpecialItem = 0x00020000, 27 | ObjText = 0x00040000, 28 | AutoAccept = 0x00080000 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/QuestMethod.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum QuestMethod 4 | { 5 | AutoComplete = 0, 6 | Unknown = 1, 7 | Normal = 2 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/QuestSort.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum QuestSort 4 | { 5 | Epic = 1, 6 | WailingCavernsOld = 21, 7 | Seasonal = 22, 8 | UndercityOld = 23, 9 | Herbalism = 24, 10 | Battlegrounds = 25, 11 | UldamanOld = 41, 12 | Warlock = 61, 13 | Warrior = 81, 14 | Shaman = 82, 15 | Fishing = 101, 16 | Blacksmithing = 121, 17 | Paladin = 141, 18 | Mage = 161, 19 | Rogue = 162, 20 | Alchemy = 181, 21 | Leatherworking = 182, 22 | Engineering = 201, 23 | TreasureMap = 221, 24 | SunkenTempleOld = 241, 25 | Hunter = 261, 26 | Priest = 262, 27 | Druid = 263, 28 | Tailoring = 264, 29 | Special = 284, 30 | Cooking = 304, 31 | FirstAid = 324, 32 | Legendary = 344, 33 | DarkmoonFaire = 364, 34 | AhnQirajWar = 365, 35 | LunarFestival = 366, 36 | Reputation = 367, 37 | Invasion = 368, 38 | Midsummer = 369, 39 | Brewfest = 370, 40 | Inscription = 371, 41 | DeathKnight = 372, 42 | Jewelcrafting = 373 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/QuestType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum QuestType 4 | { 5 | Elite = 1, 6 | Life = 21, 7 | PvP = 41, 8 | Raid = 62, 9 | Dungeon = 81, 10 | WorldEvent = 82, 11 | Legendary = 83, 12 | Escort = 84, 13 | Heroic = 85, 14 | Raid10 = 88, 15 | Raid25 = 89 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/RaceMask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum RaceMask 7 | { 8 | None = 0x00000000, 9 | Human = 0x00000001, 10 | Orc = 0x00000002, 11 | Dwarf = 0x00000004, 12 | NightElf = 0x00000008, 13 | Undead = 0x00000010, 14 | Tauren = 0x00000020, 15 | Gnome = 0x00000040, 16 | Troll = 0x00000080, 17 | Goblin = 0x00000100, 18 | BloodElf = 0x00000200, 19 | Draenei = 0x00000400, 20 | FelOrc = 0x00000800, 21 | Naga = 0x00001000, 22 | Broken = 0x00002000, 23 | Skeleton = 0x00004000 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/ReputationRank.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum ReputationRank 4 | { 5 | Hated = 0, 6 | Hostile = 1, 7 | Unfriendly = 2, 8 | Neutral = 3, 9 | Friendly = 4, 10 | Honored = 5, 11 | Revered = 6, 12 | Exalted = 7 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SheathType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SheathType 4 | { 5 | None = 0, 6 | MainHand = 1, 7 | OffHand = 2, 8 | LargeWeaponLeft = 3, 9 | LargeWeaponRight = 4, 10 | HighWeaponLeft = 5, 11 | HighWeaponRight = 6, 12 | Shield = 7 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SpeedType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SpeedType 4 | { 5 | Walk = 0, 6 | Run = 1, 7 | RunBack = 2, 8 | Swim = 3, 9 | SwimBack = 4, 10 | Turn = 5, 11 | Fly = 6, 12 | FlyBack = 7, 13 | Pitch = 8 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SpellMechanics.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SpellMechanics 4 | { 5 | None = 0, 6 | Charm = 1, 7 | Disoriented = 2, 8 | Disarm = 3, 9 | Distract = 4, 10 | Fear = 5, 11 | Grip = 6, 12 | Root = 7, 13 | SlowAttack = 8, 14 | Silence = 9, 15 | Sleep = 10, 16 | Snare = 11, 17 | Stun = 12, 18 | Freeze = 13, 19 | Knockout = 14, 20 | Bleed = 15, 21 | Bandage = 16, 22 | Polymorph = 17, 23 | Banish = 18, 24 | Shield = 19, 25 | Shackle = 20, 26 | Mount = 21, 27 | Infected = 22, 28 | Turn = 23, 29 | Horror = 24, 30 | Invulnerability = 25, 31 | Interrupt = 26, 32 | Daze = 27, 33 | Discovery = 28, 34 | ImmuneShield = 29, 35 | Sapped = 30, 36 | Enraged = 31 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SpellMissType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SpellMissType 4 | { 5 | None = 0, 6 | Miss = 1, 7 | Resist = 2, 8 | Dodge = 3, 9 | Parry = 4, 10 | Block = 5, 11 | Evade = 6, 12 | Immune1 = 7, 13 | Immune2 = 8, 14 | Deflect = 9, 15 | Absorb = 10, 16 | Reflect = 11 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SpellMod.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | enum SpellMod : byte 4 | { 5 | Damage = 0, 6 | Duration = 1, 7 | Threat = 2, 8 | Effect1 = 3, 9 | Charges = 4, 10 | Range = 5, 11 | Radius = 6, 12 | CriticalChance = 7, 13 | AllEffects = 8, 14 | NotLoseCastingTime = 9, 15 | CastingTime = 10, 16 | Cooldown = 11, 17 | Effect2 = 12, 18 | IgnoreArmor = 13, 19 | Cost = 14, 20 | CritDamageBonus = 15, 21 | ResistMissChance = 16, 22 | JumpTargets = 17, 23 | ChanceOfSuccess = 18, 24 | ActivationTime = 19, 25 | DamageMultiplier = 20, 26 | GlobalCooldown = 21, 27 | Dot = 22, 28 | Effect3 = 23, 29 | BonusMultiplier = 24, 30 | // Spellmod 25 31 | ProcPerMinute = 26, 32 | ValueMultiplier = 27, 33 | ResistDispelChance = 28, 34 | CritDamageBonus2 = 29, //One Not Used Spell 35 | SpellCostRefundOnFail = 30 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SplineFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum SplineFlag 7 | { 8 | None = 0x00000000, 9 | Forward = 0x00000001, 10 | Backward = 0x00000002, 11 | StrafeLeft = 0x00000004, 12 | Straferight = 0x00000008, 13 | TurnLeft = 0x00000010, 14 | TurnRight = 0x00000020, 15 | PitchUp = 0x00000040, 16 | PitchDown = 0x00000080, 17 | Done = 0x00000100, 18 | Falling = 0x00000200, 19 | NoSpline = 0x00000400, 20 | Trajectory = 0x00000800, 21 | WalkMode = 0x00001000, 22 | Flying = 0x00002000, 23 | Knockback = 0x00004000, 24 | FinalPoint = 0x00008000, 25 | FinalTarget = 0x00010000, 26 | FinalOrientation = 0x00020000, 27 | CatmullRom = 0x00040000, 28 | Cyclic = 0x00080000, // 4.x 29 | EnterCicle = 0x00100000, // 4.x 30 | AnimationTier = 0x00200000, // 4.x 31 | Frozen = 0x00400000, // 4.x 32 | Unknown5 = 0x00800000, 33 | Unknown6 = 0x01000000, 34 | Unknown7 = 0x02000000, 35 | Unknown8 = 0x04000000, 36 | Unknown9 = 0x08000000, 37 | UsePathSmoothing = 0x10000000, // 4.x 38 | Animation = 0x20000000, 39 | UncompressedPath = 0x40000000 // 4.x 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SplineMode.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SplineMode 4 | { 5 | Linear = 0, 6 | CatmullRom = 1, 7 | Smooth = 2 // 4.x 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/SplineType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum SplineType 4 | { 5 | Normal = 0, 6 | Stop = 1, 7 | FacingSpot = 2, 8 | FacingTarget = 3, 9 | FacingAngle = 4 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/StatType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum StatType 4 | { 5 | Strength = 0, 6 | Agility = 1, 7 | Stamina = 2, 8 | Intellect = 3, 9 | Spirit = 4 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TargetFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum TargetFlag 7 | { 8 | Self = 0x00000000, 9 | SpellDynamic1 = 0x00000001, 10 | Unit = 0x00000002, 11 | SpellDynamic2 = 0x00000004, 12 | SpellDynamic3 = 0x00000008, 13 | Item = 0x00000010, 14 | SourceLocation = 0x00000020, 15 | DestinationLocation = 0x00000040, 16 | ObjectSelfTarget = 0x00000080, 17 | UnitSelfTarget = 0x00000100, 18 | PvpCorpse = 0x00000200, 19 | UnitCorpse = 0x00000400, 20 | Object = 0x00000800, 21 | TradeItem = 0x00001000, 22 | NameString = 0x00002000, 23 | OpenLock = 0x00004000, 24 | Corpse = 0x00008000, 25 | SpellDynamic4 = 0x00010000, 26 | Glyph = 0x00020000, 27 | Unknown4 = 0x00040000, 28 | ExtraTargets = 0x00080000 // 4.x VisualChain 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TargetFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum TargetFlags : uint 7 | { 8 | TARGET_FLAG_SELF = 0x00000000, 9 | TARGET_FLAG_UNUSED1 = 0x00000001, // not used in any spells as of 3.0.3 (can be set dynamically) 10 | TARGET_FLAG_UNIT = 0x00000002, // pguid 11 | TARGET_FLAG_UNUSED2 = 0x00000004, // not used in any spells as of 3.0.3 (can be set dynamically) 12 | TARGET_FLAG_UNUSED3 = 0x00000008, // not used in any spells as of 3.0.3 (can be set dynamically) 13 | TARGET_FLAG_ITEM = 0x00000010, // pguid 14 | TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // 3 float 15 | TARGET_FLAG_DEST_LOCATION = 0x00000040, // 3 float 16 | TARGET_FLAG_OBJECT_UNK = 0x00000080, // used in 7 spells only 17 | TARGET_FLAG_UNIT_UNK = 0x00000100, // looks like self target (480 spells) 18 | TARGET_FLAG_PVP_CORPSE = 0x00000200, // pguid 19 | TARGET_FLAG_UNIT_CORPSE = 0x00000400, // 10 spells (gathering professions) 20 | TARGET_FLAG_OBJECT = 0x00000800, // pguid, 2 spells 21 | TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid, 0 spells 22 | TARGET_FLAG_STRING = 0x00002000, // string, 0 spells 23 | TARGET_FLAG_UNK1 = 0x00004000, // 199 spells, opening object/lock 24 | TARGET_FLAG_CORPSE = 0x00008000, // pguid, resurrection spells 25 | TARGET_FLAG_UNK2 = 0x00010000, // pguid, not used in any spells as of 3.0.3 (can be set dynamically) 26 | TARGET_FLAG_GLYPH = 0x00020000 // used in glyph spells 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TeamType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum TeamType 4 | { 5 | Horde = 67, 6 | SteamwheedleCartel = 169, 7 | Alliance = 469, 8 | AllianceForces = 891, 9 | HordeForces = 892, 10 | Sanctuary = 936, 11 | Outland = 980 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TotemCategory.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum TotemCategory 4 | { 5 | SkinningSkifeOld = 1, 6 | EarthTotem = 2, 7 | AirTotem = 3, 8 | FireTotem = 4, 9 | WaterTotem = 5, 10 | CopperRod = 6, 11 | SilverRod = 7, 12 | GoldenRod = 8, 13 | TruesilverRod = 9, 14 | ArcaniteRod = 10, 15 | MiningPickOld = 11, 16 | PhilosophersStone = 12, 17 | BlacksmithHammerOld = 13, 18 | ArclightSpanner = 14, 19 | GyromaticMA = 15, 20 | MasterTotem = 21, 21 | FelIronRod = 41, 22 | AdamantiteRod = 62, 23 | EterniumRod = 63, 24 | HollowQuill = 81, 25 | RunedAzuriteRod = 101, 26 | VirtuosoInkingSet = 121, 27 | Drums = 141, 28 | GnomishArmyKnife = 161, 29 | BlacksmithHammer = 162, 30 | MiningPick = 165, 31 | SkinningKnife = 166, 32 | HammerPick = 167, 33 | BladedPickaxe = 168, 34 | FlintAndTinder = 169, 35 | RunedCobaltRod = 189, 36 | RunedTitaniumRod = 190 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TrainerSpellState.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum TrainerSpellState 4 | { 5 | Green = 0, 6 | Red = 1, 7 | Grey = 2 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TrainerType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum TrainerType 4 | { 5 | Class = 0, 6 | Mounts = 1, 7 | Tradeskills = 2, 8 | Pets = 3 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TransferAbortReason.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum TransferAbortReason 4 | { 5 | None = 0, 6 | Error = 1, 7 | MaxPlayers = 2, 8 | InstanceNotFound1 = 3, 9 | TooManyInstances = 4, 10 | Unknown = 5, 11 | ZoneInCombat = 6, 12 | InsufficientExpansion = 7, 13 | DifficultyUnavailable = 8, 14 | UniqueMessage = 9, 15 | TooManyRealmInstances = 10, 16 | GroupRequired = 11, 17 | InstanceNotFound3 = 12, 18 | InstanceNotFound4 = 13, 19 | InstanceNotFound5 = 14, 20 | RealmOnly = 15, 21 | MapNotAllowed = 16 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/TypeMask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | public enum TypeMask 7 | { 8 | None = 0x0000, 9 | Object = 0x0001, 10 | Item = 0x0002, 11 | Container = 0x0004, 12 | Unit = 0x0008, 13 | Player = 0x0010, 14 | GameObject = 0x0020, 15 | DynamicObject = 0x0040, 16 | Corpse = 0x0080 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/UnitDynamicFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum UnitDynamicFlags // 4.x 7 | { 8 | None = 0x0000, 9 | Lootable = 0x0001, 10 | TrackUnit = 0x0002, 11 | Tapped = 0x0004, 12 | TappedByPlayer = 0x0008, 13 | EmpathyInfo = 0x0010, 14 | AppearDead = 0x0020, 15 | ReferAFriendLinked = 0x0040, 16 | TappedByAllThreatList = 0x0080 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/UnitFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum UnitFlags // 4.x 7 | { 8 | None = 0, 9 | NotClientControlled = 0x1, 10 | PlayerCannotAttack = 0x2, 11 | RemoveClientControl = 0x4, 12 | PlayerControlled = 0x8, 13 | Unk4 = 0x10, 14 | Preparation = 0x20, 15 | Unk6 = 0x40, 16 | NoAttack = 0x80, 17 | NotAttackbleByPlayerControlled = 0x100, 18 | OnlyAttackableByPlayerControlled = 0x200, 19 | Looting = 0x400, 20 | PetIsAttackingTarget = 0x800, 21 | PVP = 0x1000, 22 | Silenced = 0x2000, 23 | CannotSwim = 0x4000, 24 | OnlySwim = 0x8000, 25 | NoAttack2 = 0x10000, 26 | Pacified = 0x20000, 27 | Stunned = 0x40000, 28 | AffectingCombat = 0x80000, 29 | OnTaxi = 0x100000, 30 | MainHandDisarmed = 0x200000, 31 | Confused = 0x400000, 32 | Feared = 0x800000, 33 | PossessedByPlayer = 0x1000000, 34 | NotSelectable = 0x2000000, 35 | Skinnable = 0x4000000, 36 | Mount = 0x8000000, 37 | PreventKneelingWhenLooting = 0x10000000, 38 | PreventEmotes = 0x20000000, 39 | Sheath = 0x40000000, 40 | // Unk31 = 0x80000000, 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/UnitFlags2.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum UnitFlags2 // 4.x 7 | { 8 | AppearDead = 0x1, 9 | Unk1 = 0x2, 10 | IgnoreReputation = 0x4, // ? 11 | ComprehendLanguages = 0x8, 12 | MirrorImage = 0x10, 13 | DoNotFadeIn = 0x20, 14 | ForceMovement = 0x40, 15 | OffHandDisarmed = 0x80, 16 | DisablePredictedStats = 0x100, 17 | RangedDisarm = 0x400, 18 | RegeneratePower = 0x800, 19 | RestrictInteractionToPartyOrRaid = 0x1000, 20 | PreventSpellClick = 0x2000, 21 | CanInteractEvenIfHostile = 0x4000, 22 | CannotTurn = 0x8000, 23 | Unk2 = 0x10000, 24 | PlayDeathAnimationOnDeath = 0x20000, 25 | AllowCastingCheatSpells = 0x40000, 26 | 27 | NoActions = 0x800000, 28 | SwimPrevent = 0x1000000, 29 | HideInCombatLog = 0x2000000, 30 | CannotSwitchTargets = 0x4000000, 31 | IgnoreSpellMinRangeRestrictions = 0x8000000, 32 | Unk3 = 0x10000000, 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/UpdateFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum UpdateFlag 7 | { 8 | None = 0x000, 9 | Self = 0x001, 10 | Transport = 0x002, 11 | AttackingTarget = 0x004, 12 | Unknown1 = 0x008, 13 | LowGuid = 0x010, 14 | Living = 0x020, 15 | StationaryObject = 0x040, 16 | Vehicle = 0x080, 17 | GOPosition = 0x100, 18 | GORotation = 0x200, 19 | Unknown2 = 0x400, 20 | AnimKits = 0x800, // 4.x 21 | TransportUnkArray = 0x1000, // 4.x 22 | EnablePortals = 0x2000, // 4.x 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/UpdateType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | enum UpdateType 4 | { 5 | Values = 0, 6 | Movement = 1, 7 | CreateObject1 = 2, 8 | CreateObject2 = 3, 9 | FarObjects = 4, 10 | NearObjects = 5 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/VehicleFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | [Flags] 6 | enum VehicleFlags // 4.x 7 | { 8 | NoStrafe = 0x00000001, 9 | NoJumping = 0x00000002, 10 | FullSpeedTurning = 0x00000004, 11 | 12 | AllowPitching = 0x00000010, 13 | FullSpeedPitching = 0x00000020, 14 | CustomPitch = 0x00000040, 15 | AdjustAimAngle = 0x00000400, 16 | AdjustAimPower = 0x00000800, 17 | } 18 | 19 | [Flags] 20 | enum VehicleSeatFlags // 4.x 21 | { 22 | HasLowerAnimForEnter = 0x1, 23 | HasLowerAnimForRide = 0x2, 24 | 25 | ShouldUseVehicleSeatExitAnimationOnVoluntaryExit = 0x8, 26 | 27 | HidePassanger = 0x200, 28 | AllowsTurning = 0x400, 29 | CanControl = 0x800, 30 | Uncontrolled = 0x2000, 31 | CanAttack = 0x4000, 32 | ShouldUseVehicleSeatExitAnimationOnForcedExit = 0x8000, 33 | Unk1 = 0x20000, 34 | HasVehicleExitAnimForVoluntaryExit = 0x40000, 35 | HasVehicleExitAnimForForcedExit = 0x80000, 36 | Unk2 = 0x200000, 37 | RecHasVehicleEnterAnim = 0x400000, 38 | EnableVehicleZoom = 0x1000000, 39 | CanEnterOrExit = 0x2000000, 40 | CanSwitchFromSeat = 0x4000000, 41 | HasStartWaitingForVehicleTransitionAnimEnter = 0x8000000, 42 | HasStartWaitingForVehicleTransitionAnimExit = 0x10000000, 43 | HasVehicleUI = 0x20000000, 44 | // AllowsInteraction = 0x80000000 45 | } 46 | 47 | [Flags] 48 | enum VehicleSeatFlagsB // 4.x 49 | { 50 | None = 0x00000000, 51 | UsableForced = 0x00000002, 52 | TargetsInRaidUI = 0x00000008, 53 | Ejectable = 0x00000020, 54 | UsableForced2 = 0x00000040, 55 | UsableForced3 = 0x00000100, 56 | 57 | CanSwitch = 0x04000000, 58 | 59 | // VehiclePlayerFrameUI = 0x80000000, 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/WardenCheckType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum WardenCheckType 4 | { 5 | Memoty = 0, 6 | PageA = 1, 7 | PageB = 2, 8 | Mpq = 3, 9 | LuaString = 4, 10 | Driver = 5, 11 | Timing = 6, 12 | Process = 7, 13 | Module = 8 14 | } 15 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Enums/WardenOpcode.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public enum WardenServerOpcode 4 | { 5 | ModuleInfo = 0, 6 | ModuleChunk = 1, 7 | CheatChecks = 2, 8 | Data = 3, 9 | Seed = 5 10 | } 11 | 12 | public enum WardenClientOpcode 13 | { 14 | ModuleLoadFailed = 0, 15 | ModuleLoaded = 1, 16 | CheatCheckResults = 2, 17 | TransformedSeed = 4 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/AccountHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class AccountHandler : Parser 8 | { 9 | private const int NUM_ACCOUNT_DATA_TYPES = 8; 10 | 11 | [Parser(OpCodes.SMSG_ACCOUNT_DATA_TIMES)] 12 | public void AccountDataTimes(Parser packet) 13 | { 14 | Time("Time"); 15 | Byte("Unk(byte)"); 16 | 17 | int mask = packet.ReadInt32("Mask"); 18 | for (int i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i) 19 | { 20 | if ((mask & (1 << i)) != 0) 21 | packet.ReadTime(((AccountDataType)i).ToString()); 22 | } 23 | } 24 | 25 | [Parser(OpCodes.CMSG_REQUEST_ACCOUNT_DATA)] 26 | public void AccountDataRequest(Parser packet) 27 | { 28 | ReadEnum("Type"); 29 | } 30 | 31 | [Parser(OpCodes.SMSG_UPDATE_ACCOUNT_DATA)] 32 | public void AccountUpdateData(Parser packet) 33 | { 34 | UTF8Encoding encoder = new System.Text.UTF8Encoding(); 35 | 36 | UInt64("GUID: {0:X16}"); 37 | ReadEnum("Type"); 38 | Time("Time"); 39 | 40 | byte[] compressedData = Reader.ReadBytes((int)Reader.BaseStream.Length - (int)Reader.BaseStream.Position); 41 | byte[] data = compressedData.Decompress(); 42 | AppendFormatLine("Data: {0}", encoder.GetString(data)); 43 | } 44 | 45 | [Parser(OpCodes.CMSG_UPDATE_ACCOUNT_DATA)] 46 | public void AccountDataUpdate(Parser packet) 47 | { 48 | UTF8Encoding encoder = new System.Text.UTF8Encoding(); 49 | 50 | ReadEnum("Type"); 51 | Time("Time"); 52 | 53 | byte[] compressedData = Reader.ReadBytes((int)Reader.BaseStream.Length - (int)Reader.BaseStream.Position); 54 | byte[] data = compressedData.Decompress(); 55 | AppendFormatLine("Data: {0}", encoder.GetString(data)); 56 | } 57 | 58 | [Parser(OpCodes.SMSG_UPDATE_ACCOUNT_DATA_COMPLETE)] 59 | public void HandleUpdateAccountDataComplete(Parser packet) 60 | { 61 | ReadEnum("Type"); 62 | UInt32("unk"); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/AchievementHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class AchievementHandler : Parser 8 | { 9 | [Parser(OpCodes.SMSG_ACHIEVEMENT_DELETED)] 10 | [Parser(OpCodes.SMSG_CRITERIA_DELETED)] 11 | public void HandleDeleted(Parser packet) 12 | { 13 | UInt32("ID"); 14 | } 15 | 16 | [Parser(OpCodes.SMSG_SERVER_FIRST_ACHIEVEMENT)] 17 | public void HandleServerFirstAchievement(Parser packet) 18 | { 19 | CString("PlayerName"); 20 | ReadGuid("PlayerGUID"); 21 | UInt32("Achievement"); 22 | UInt32("LinkedName"); 23 | } 24 | 25 | [Parser(OpCodes.SMSG_ACHIEVEMENT_EARNED)] 26 | public void HandleAchievementEarned(Parser packet) 27 | { 28 | ReadPackedGuid("PlayerGUID"); 29 | UInt32("Achievement"); 30 | PackedTime("Time"); 31 | UInt32("unk"); 32 | } 33 | 34 | [Parser(OpCodes.SMSG_CRITERIA_UPDATE)] 35 | public void HandleCriteriaUpdate(Parser packet) 36 | { 37 | UInt32("CriteriaID"); 38 | ReadPackedGuid("CriteriaCounter"); 39 | ReadPackedGuid("PlayerGUID"); 40 | UInt32("unk"); 41 | ReadPackedTime("CriteriaTime"); 42 | 43 | for (var i = 0; i < 2; i++) 44 | UInt32("Timer"); 45 | } 46 | 47 | [Parser(OpCodes.SMSG_ALL_ACHIEVEMENT_DATA)] 48 | public void HandleAllAchievementData(Parser packet) 49 | { 50 | UInt32("Achievements"); 51 | 52 | //FINISH THIS 53 | } 54 | 55 | [Parser(OpCodes.CMSG_QUERY_INSPECT_ACHIEVEMENTS)] 56 | public void HandleInspectAchievementData(Parser packet) 57 | { 58 | ReadPackedGuid("GUID"); 59 | } 60 | 61 | [Parser(OpCodes.SMSG_RESPOND_INSPECT_ACHIEVEMENTS)] 62 | public void HandleInspectAchievementDataResponse(Parser packet) 63 | { 64 | ReadPackedGuid("PlayerGUID"); 65 | 66 | UInt32("AchievementID"); 67 | ReadPackedTime("AchievementTime"); 68 | 69 | UInt32("CriteriaID"); 70 | ReadPackedGuid("CriteriaCounter"); 71 | ReadPackedGuid("PlayerGUID"); 72 | UInt32("unk"); 73 | PackedTime("CriteriaTime"); 74 | 75 | for (var i = 0; i < 2; i++) 76 | { 77 | UInt32("Timer"); 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/ActionBarHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class ActionBarHandler : Parser 8 | { 9 | [Parser(OpCodes.SMSG_ACTION_BUTTONS)] 10 | public void HandleInitialButtons() 11 | { 12 | Byte("TalentSpec"); 13 | 14 | for (var i = 0; i < 144; i++) 15 | { 16 | var packed = Int32(); 17 | 18 | if (packed == 0) 19 | continue; 20 | 21 | var action = packed & 0x00FFFFFF; 22 | 23 | var type = (ActionButtonType)((packed & 0xFF000000) >> 24); 24 | WriteLine("{0}: {1} - {2}", i, type, action); 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/AuctionHandler.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | public class AuctionHandler : Parser 6 | { 7 | [Parser(OpCodes.SMSG_AUCTION_LIST_PENDING_SALES)] 8 | public void AuctionListPendingSalesHandler(Parser packet) 9 | { 10 | For(Reader.ReadInt32(), i => 11 | { 12 | ReadCString("Sale {0}: string {1}", i); 13 | ReadCString("Sale {0}: string {1}", i); 14 | ReadUInt32("Sale {0}: uint {1}", i); 15 | ReadUInt32("Sale {0}: uint {1}", i); 16 | ReadSingle("Sale {0}: float {1}", i); 17 | }); 18 | } 19 | 20 | [Parser(OpCodes.SMSG_AUCTION_BIDDER_NOTIFICATION)] 21 | public void AuctionBidderNothificationHandler(Parser packet) 22 | { 23 | UInt32("location"); 24 | UInt32("AuctionID"); 25 | UInt64("Bidder"); 26 | UInt32("BidSum"); 27 | UInt32("Diff"); 28 | UInt32("item_template"); 29 | UInt32("unk(uint32)"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/BattlegroundHandler.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | public class BattlegroundHandler : Parser 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/ChannelHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class ChannelHandler : Parser 8 | { 9 | [Parser(OpCodes.CMSG_CHANNEL_VOICE_ON)] 10 | [Parser(OpCodes.CMSG_CHANNEL_VOICE_OFF)] 11 | public void HandleChannelSetVoice(Parser packet) 12 | { 13 | CString("ChannelName"); 14 | } 15 | 16 | [Parser(OpCodes.CMSG_CHANNEL_SILENCE_VOICE)] 17 | [Parser(OpCodes.CMSG_CHANNEL_UNSILENCE_VOICE)] 18 | [Parser(OpCodes.CMSG_CHANNEL_SILENCE_ALL)] 19 | [Parser(OpCodes.CMSG_CHANNEL_UNSILENCE_ALL)] 20 | public void HandleChannelSilencing(Parser packet) 21 | { 22 | CString("ChannelName"); 23 | CString("PlayerName"); 24 | } 25 | 26 | [Parser(OpCodes.CMSG_JOIN_CHANNEL)] 27 | public void HandleChannelJoin(Parser packet) 28 | { 29 | UInt8("unk"); 30 | UInt8("unk"); 31 | UInt32("Channel_ID"); 32 | CString("ChannelName"); 33 | CString("Pass"); 34 | } 35 | 36 | [Parser(OpCodes.CMSG_LEAVE_CHANNEL)] 37 | public void HandleChannelLeave(Parser packet) 38 | { 39 | UInt32("Channel_ID"); 40 | CString("ChannelName"); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/CombatHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class CombatHandler : Parser 8 | { 9 | [Parser(OpCodes.SMSG_AI_REACTION)] 10 | public void HandleAIReaction(Parser packet) 11 | { 12 | UInt64("GUID"); 13 | ReadEnum("Reaction"); 14 | } 15 | 16 | [Parser(OpCodes.SMSG_UPDATE_COMBO_POINTS)] 17 | public void HandleUpdateComboPoints(Parser packet) 18 | { 19 | ReadPackedGuid("GUID"); 20 | Byte("Combo Points"); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/ContactHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | 5 | 6 | namespace WoWPacketViewer 7 | { 8 | public class ContactHandler : Parser 9 | { 10 | public void ReadSingleContactBlock(Parser packet, bool onlineCheck) 11 | { 12 | var status = (ContactStatus)packet.ReadByte(); 13 | WriteLine("Status: " + status); 14 | 15 | if (onlineCheck && status != ContactStatus.Online) 16 | return; 17 | 18 | UInt32("AreaID"); 19 | UInt32("Level"); 20 | 21 | var clss = (Class)packet.ReadInt32(); 22 | WriteLine("Class: " + clss); 23 | } 24 | 25 | [Parser(OpCodes.SMSG_CONTACT_LIST)] 26 | public void HandleContactList(Parser packet) 27 | { 28 | var flags = (ContactListFlag)packet.ReadInt32(); 29 | WriteLine("List Flags: " + flags); 30 | 31 | var count = packet.ReadInt32(); 32 | WriteLine("Count: " + count); 33 | 34 | for (var i = 0; i < count; i++) 35 | { 36 | var guid = packet.ReadGuid(); 37 | WriteLine("GUID: " + guid); 38 | 39 | var cflags = (ContactEntryFlag)packet.ReadInt32(); 40 | WriteLine("Flags: " + cflags); 41 | 42 | var note = packet.ReadCString(); 43 | WriteLine("Note: " + note); 44 | 45 | if (!cflags.HasFlag(ContactEntryFlag.Friend)) 46 | continue; 47 | 48 | ReadSingleContactBlock(packet, true); 49 | } 50 | } 51 | 52 | [Parser(OpCodes.SMSG_FRIEND_STATUS)] 53 | public void HandleFriendStatus(Parser packet) 54 | { 55 | var result = (ContactResult)packet.ReadByte(); 56 | WriteLine("Result: " + result); 57 | 58 | var guid = packet.ReadGuid(); 59 | WriteLine("GUID: " + guid); 60 | 61 | switch (result) 62 | { 63 | case ContactResult.FriendAddedOnline: 64 | case ContactResult.FriendAddedOffline: 65 | case ContactResult.Online: 66 | { 67 | if (result != ContactResult.Online) 68 | { 69 | var note = packet.ReadCString(); 70 | WriteLine("Note: " + note); 71 | } 72 | 73 | ReadSingleContactBlock(packet, false); 74 | break; 75 | } 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/CorpseHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class CorpseHandler : Parser 8 | { 9 | [Parser(OpCodes.CMSG_CORPSE_MAP_POSITION_QUERY)] 10 | public void HandleCorpseMapPositionQuery(Parser packet) 11 | { 12 | UInt32("LowGUID"); 13 | } 14 | 15 | [Parser(OpCodes.SMSG_CORPSE_RECLAIM_DELAY)] 16 | public void HandleCorpseReclaimDelay(Parser packet) 17 | { 18 | UInt32("Delay"); 19 | } 20 | 21 | [Parser(OpCodes.CMSG_RECLAIM_CORPSE)] 22 | public void HandleReclaimCorpse(Parser packet) 23 | { 24 | ReadGuid("CorpseGUID"); 25 | } 26 | 27 | [Parser(OpCodes.SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE)] 28 | public void HandleCorpseMapPositionResponse(Parser packet) 29 | { 30 | var curr = Reader.ReadCoords3(); 31 | WriteLine("Corpse Position: {0}", curr); 32 | 33 | ReadSingle("Unk(Single)"); 34 | } 35 | 36 | [Parser(OpCodes.MSG_CORPSE_QUERY)] 37 | public void HandleCorpseQuery(Parser packet) 38 | { 39 | if (Packet.Direction != Direction.Server) 40 | { 41 | WriteLine("MSG Packet that wants response from server"); 42 | return; 43 | } 44 | 45 | var found = UInt8("Found"); 46 | if (found == 0) return; 47 | UInt32("MapID"); 48 | ReadCoords3("Corpse Position"); 49 | UInt32("CorpseMapID"); 50 | UInt32("CorpseLowGuid"); 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/EmptyPackets.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | public class EmptyPackets : Parser 7 | { 8 | [Parser(OpCodes.CMSG_CANCEL_TRADE)] 9 | [Parser(OpCodes.CMSG_WORLD_STATE_UI_TIMER_UPDATE)] 10 | [Parser(OpCodes.CMSG_CALENDAR_GET_CALENDAR)] 11 | [Parser(OpCodes.CMSG_ATTACKSTOP)] 12 | [Parser(OpCodes.CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY)] 13 | [Parser(OpCodes.CMSG_READY_FOR_ACCOUNT_DATA_TIMES)] 14 | [Parser(OpCodes.CMSG_CHAR_ENUM)] 15 | [Parser(OpCodes.CMSG_REQUEST_RAID_INFO)] 16 | [Parser(OpCodes.CMSG_GMTICKET_GETTICKET)] 17 | [Parser(OpCodes.CMSG_CALENDAR_GET_NUM_PENDING)] 18 | [Parser(OpCodes.CMSG_KEEP_ALIVE)] 19 | [Parser(OpCodes.CMSG_BATTLEFIELD_STATUS)] 20 | [Parser(OpCodes.CMSG_MEETINGSTONE_INFO)] 21 | public void HandleEmptyCMSGPacket(Parser packet) 22 | { 23 | packet.WriteLine("CMSG Packet that wants response from server"); 24 | } 25 | 26 | [Parser(OpCodes.SMSG_FORCE_SEND_QUEUED_PACKETS)] 27 | public void HandleEmptySMSGPacket(Parser packet) 28 | { 29 | packet.WriteLine("SMSG Packet that wants response from client"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/EquipmentSetHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class EquipmentSetHandler : Parser 8 | { 9 | public static void ReadSetInfo(Parser packet) 10 | { 11 | packet.ReadPackedGuid("SetID"); 12 | packet.ReadInt32("Index"); 13 | packet.ReadString("SetName"); 14 | packet.ReadString("SetIcon"); 15 | 16 | for (var j = 0; j < 19; j++) 17 | packet.ReadPackedGuid("Item GUID"); 18 | } 19 | 20 | [Parser(OpCodes.SMSG_EQUIPMENT_SET_LIST)] 21 | public void HandleEquipmentSetList(Parser packet) 22 | { 23 | var count = packet.ReadInt32("Count"); 24 | for (var i = 0; i < count; i++) 25 | ReadSetInfo(packet); 26 | } 27 | 28 | [Parser(OpCodes.CMSG_EQUIPMENT_SET_SAVE)] 29 | public void HandleEquipmentSetSave(Parser packet) 30 | { 31 | ReadSetInfo(packet); 32 | } 33 | 34 | [Parser(OpCodes.SMSG_EQUIPMENT_SET_SAVED)] 35 | public void HandleReclaimCorpse(Parser packet) 36 | { 37 | UInt32("Index"); 38 | ReadPackedGuid("SetID"); 39 | } 40 | 41 | [Parser(OpCodes.CMSG_EQUIPMENT_SET_USE)] 42 | public void HandleEquipmentSetUse(Parser packet) 43 | { 44 | for (var i = 0; i < 19; i++) 45 | { 46 | ReadPackedGuid("ItemGUID"); 47 | Byte("SourceBag"); 48 | Byte("SourceSlot"); 49 | } 50 | } 51 | 52 | [Parser(OpCodes.SMSG_EQUIPMENT_SET_USE_RESULT)] 53 | public void HandleEquipmentSetUseResult(Parser packet) 54 | { 55 | Byte("Result"); 56 | } 57 | 58 | [Parser(OpCodes.CMSG_EQUIPMENT_SET_DELETE)] 59 | public void HandleEquipmentSetDelete(Parser packet) 60 | { 61 | ReadPackedGuid("SetID"); 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/InstanceHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | 5 | 6 | namespace WoWPacketViewer 7 | { 8 | public class InstanceHandler : Parser 9 | { 10 | [Parser(OpCodes.MSG_SET_DUNGEON_DIFFICULTY)] 11 | [Parser(OpCodes.MSG_SET_RAID_DIFFICULTY)] 12 | public void HandleSetDifficulty(Parser packet) 13 | { 14 | var difficulty = (MapDifficulty)packet.ReadInt32(); 15 | WriteLine("Difficulty: " + difficulty); 16 | 17 | if (Packet.Direction != Direction.Server) 18 | return; 19 | 20 | var unkByte = packet.ReadInt32(); 21 | WriteLine("Unk Int32 1: " + unkByte); 22 | 23 | var inGroup = packet.ReadInt32(); 24 | WriteLine("In Group: " + inGroup); 25 | } 26 | 27 | [Parser(OpCodes.SMSG_INSTANCE_DIFFICULTY)] 28 | public void HandleInstanceDifficulty(Parser packet) 29 | { 30 | var diff = (MapDifficulty)packet.ReadInt32(); 31 | WriteLine("Instance Difficulty: " + diff); 32 | 33 | var unk2 = packet.ReadInt32(); 34 | WriteLine("Player Difficulty: " + unk2); 35 | } 36 | 37 | [Parser(OpCodes.SMSG_PLAYER_DIFFICULTY_CHANGE)] 38 | public void HandlePlayerChangeDifficulty(Parser packet) 39 | { 40 | var type = (DifficultyChangeType)packet.ReadInt32(); 41 | WriteLine("Change Type: " + type); 42 | 43 | switch (type) 44 | { 45 | case DifficultyChangeType.PlayerDifficulty1: 46 | { 47 | var difficulty = packet.ReadByte(); 48 | WriteLine("Player Difficulty: " + difficulty); 49 | break; 50 | } 51 | case DifficultyChangeType.SpellDuration: 52 | { 53 | var duration = packet.ReadInt32(); 54 | WriteLine("Spell Duration: " + duration); 55 | break; 56 | } 57 | case DifficultyChangeType.Time: 58 | { 59 | var time = packet.ReadInt32(); 60 | WriteLine("Time: " + time); 61 | break; 62 | } 63 | case DifficultyChangeType.MapDifficulty: 64 | { 65 | var difficulty = (MapDifficulty)packet.ReadInt32(); 66 | WriteLine("Map Difficulty: " + difficulty); 67 | break; 68 | } 69 | } 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/ReputationHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | 5 | 6 | namespace WoWPacketViewer 7 | { 8 | public class ReputationHandler : Parser 9 | { 10 | [Parser(OpCodes.SMSG_INITIALIZE_FACTIONS)] 11 | public void HandleInitializeFactions(Parser packet) 12 | { 13 | var flags = packet.ReadInt32(); 14 | WriteLine("Flags: 0x" + flags.ToString("X8")); 15 | 16 | for (var i = 0; i < 128; i++) 17 | { 18 | var sFlags = (FactionFlag)packet.ReadByte(); 19 | WriteLine("Faction Flags " + i + ": " + sFlags); 20 | 21 | var sStand = packet.ReadInt32(); 22 | WriteLine("Faction Standing " + i + ": " + sStand); 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/TalentHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | 5 | 6 | namespace WoWPacketViewer 7 | { 8 | public class TalentHandler : Parser 9 | { 10 | [Parser(OpCodes.SMSG_TALENTS_INVOLUNTARILY_RESET)] 11 | public void HandleTalentsInvoluntarilyReset(Parser packet) 12 | { 13 | var unk = packet.ReadByte(); 14 | WriteLine("Unk Byte: " + unk); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/TradeHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class TradeHandler : Parser 8 | { 9 | [Parser(OpCodes.SMSG_TRADE_STATUS)] 10 | public void HandleTradeStatus(Parser packet) 11 | { 12 | UInt8("Unk(uint8)"); 13 | UInt64("Unk(uint64)"); 14 | UInt32("Unk(uint32)"); 15 | UInt32("Status"); 16 | UInt32("Unk(uint32)"); 17 | UInt8("Unk(uint8)"); 18 | UInt32("Unk(uint32)"); 19 | UInt32("Unk(uint32)"); 20 | UInt32("Unk(uint32)"); 21 | } 22 | 23 | [Parser(OpCodes.SMSG_TRADE_STATUS_EXTENDED)] 24 | public void HandleTradeStatusExtended(Parser packet) 25 | { 26 | UInt32("Unk(uint32)"); 27 | UInt32("Unk(uint32)"); 28 | UInt8("Unk(uint8)"); 29 | UInt32("Unk(uint32)"); 30 | UInt32("Unk(uint32)"); 31 | UInt32("Unk(uint32)"); 32 | var count = UInt32("SlotCount"); 33 | UInt64("Money"); 34 | UInt32("Unk(uint32)"); 35 | 36 | for (int i = 0; i < count; ++i) 37 | { 38 | UInt32("Unk(uint32)"); 39 | UInt64("Unk(uint64)"); 40 | UInt32("Unk(uint32)"); 41 | UInt32("ID"); 42 | UInt32("Unk(uint32)"); 43 | UInt32("Unk(uint32)"); 44 | UInt32("Unk(uint32)"); 45 | UInt8("Unk(uint8)"); 46 | UInt64("Unk(uint64)"); 47 | UInt32("Unk(uint32)"); 48 | UInt8("SlotNumber"); 49 | UInt32("Unk(uint32)"); 50 | UInt32("Unk(uint32)"); 51 | UInt32("Unk(uint32)"); 52 | UInt32("Unk(uint32)"); 53 | UInt32("Unk(uint32)"); 54 | UInt32("Unk(uint32)"); 55 | UInt32("Unk(uint32)"); 56 | } 57 | } 58 | 59 | [Parser(OpCodes.CMSG_SET_TRADE_ITEM)] 60 | public void HandleSetTradeItem(Parser packet) 61 | { 62 | UInt8("Slot"); 63 | UInt8("Bag"); 64 | UInt8("TradeSlot"); 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Grouped/WorldStateHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WowTools.Core; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | public class WorldStateHandler : Parser 7 | { 8 | //[Parser(OpCodes.SMSG_INIT_WORLD_STATES)] 9 | public void SMSG_INIT_WORLD_STATES(Parser packet) 10 | { 11 | var mapId = packet.ReadInt32(); 12 | WriteLine("Map ID: " + mapId); 13 | 14 | var zoneId = packet.ReadInt32(); 15 | WriteLine("Zone ID: " + zoneId); 16 | 17 | var areaId = packet.ReadInt32(); 18 | WriteLine("Area ID: " + areaId); 19 | 20 | var numFields = packet.ReadInt16(); 21 | WriteLine("Field Count: " + numFields); 22 | 23 | for (var i = 0; i < numFields; i++) 24 | ReadWorldStateBlock(packet); 25 | } 26 | 27 | public void ReadWorldStateBlock(Parser packet) 28 | { 29 | var fieldId = packet.ReadInt32(); 30 | WriteLine(" Field: " + fieldId); 31 | 32 | var fieldVal = packet.ReadInt32(); 33 | WriteLine(" Value: " + fieldVal); 34 | WriteLine(""); 35 | } 36 | 37 | [Parser(OpCodes.SMSG_UPDATE_WORLD_STATE)] 38 | public void HandleUpdateWorldState(Parser packet) 39 | { 40 | ReadWorldStateBlock(packet); 41 | UInt8("unk(always 0)"); 42 | } 43 | 44 | [Parser(OpCodes.SMSG_WORLD_STATE_UI_TIMER_UPDATE)] 45 | public void HandleUpdateUITimer(Parser packet) 46 | { 47 | var time = packet.ReadTime(); 48 | WriteLine("Time: " + time); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser((OpCodes))] 6 | class Movement : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | 14 | }; 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_FALL_LAND.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_FALL_LAND)] 6 | class MovementFallLandParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte5, 14 | MovementStatusElements.GuidByte6, 15 | MovementStatusElements.GuidByte4, 16 | MovementStatusElements.GuidByte1, 17 | MovementStatusElements.GuidByte2, 18 | MovementStatusElements.HaveSpline, 19 | MovementStatusElements.Flags2, 20 | MovementStatusElements.GuidByte7, 21 | MovementStatusElements.GuidByte3, 22 | MovementStatusElements.GuidByte0, 23 | MovementStatusElements.Flags, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HavePitch, 38 | MovementStatusElements.HaveSplineElev, 39 | MovementStatusElements.Timestamp, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte7_2, 45 | MovementStatusElements.GuidByte2_2, 46 | MovementStatusElements.GuidByte3_2, 47 | MovementStatusElements.GuidByte0_2, 48 | MovementStatusElements.GuidByte1_2, 49 | MovementStatusElements.GuidByte5_2, 50 | MovementStatusElements.FallVerticalSpeed, 51 | MovementStatusElements.FallTime, 52 | MovementStatusElements.FallHorizontalSpeed, 53 | MovementStatusElements.FallCosAngle, 54 | MovementStatusElements.FallSinAngle, 55 | MovementStatusElements.TransportTime, 56 | MovementStatusElements.TransportPositionX, 57 | MovementStatusElements.TransportPositionY, 58 | MovementStatusElements.TransportPositionZ, 59 | MovementStatusElements.TransportPositionO, 60 | MovementStatusElements.TransportSeat, 61 | MovementStatusElements.TransportGuidByte3_2, 62 | MovementStatusElements.TransportGuidByte1_2, 63 | MovementStatusElements.TransportTime3, 64 | MovementStatusElements.TransportGuidByte6_2, 65 | MovementStatusElements.TransportGuidByte0_2, 66 | MovementStatusElements.TransportGuidByte5_2, 67 | MovementStatusElements.TransportTime2, 68 | MovementStatusElements.TransportGuidByte7_2, 69 | MovementStatusElements.TransportGuidByte4_2, 70 | MovementStatusElements.TransportGuidByte2_2, 71 | MovementStatusElements.Pitch, 72 | MovementStatusElements.SplineElev, 73 | MovementStatusElements.GuidByte6_2, 74 | MovementStatusElements.GuidByte4_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_HEARTBEAT.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_HEARTBEAT)] 6 | class MovementHeartBeatParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte1, 14 | MovementStatusElements.GuidByte5, 15 | MovementStatusElements.GuidByte2, 16 | MovementStatusElements.Flags2, 17 | MovementStatusElements.GuidByte3, 18 | MovementStatusElements.GuidByte4, 19 | MovementStatusElements.HaveSpline, 20 | MovementStatusElements.Flags, 21 | MovementStatusElements.GuidByte0, 22 | MovementStatusElements.GuidByte6, 23 | MovementStatusElements.GuidByte7, 24 | MovementStatusElements.HaveTransportData, 25 | MovementStatusElements.TransportGuidByte6, 26 | MovementStatusElements.TransportGuidByte3, 27 | MovementStatusElements.TransportGuidByte7, 28 | MovementStatusElements.TransportGuidByte4, 29 | MovementStatusElements.TransportGuidByte1, 30 | MovementStatusElements.TransportGuidByte0, 31 | MovementStatusElements.TransportGuidByte2, 32 | MovementStatusElements.TransportGuidByte5, 33 | MovementStatusElements.TransportHaveTime3, 34 | MovementStatusElements.TransportHaveTime2, 35 | MovementStatusElements.HavePitch, 36 | MovementStatusElements.HaveSplineElev, 37 | MovementStatusElements.HaveFallData, 38 | MovementStatusElements.HaveFallDirection, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.GuidByte6_2, 45 | MovementStatusElements.TransportTime, 46 | MovementStatusElements.TransportPositionX, 47 | MovementStatusElements.TransportPositionY, 48 | MovementStatusElements.TransportPositionZ, 49 | MovementStatusElements.TransportPositionO, 50 | MovementStatusElements.TransportSeat, 51 | MovementStatusElements.TransportGuidByte3_2, 52 | MovementStatusElements.TransportGuidByte1_2, 53 | MovementStatusElements.TransportTime3, 54 | MovementStatusElements.TransportGuidByte6_2, 55 | MovementStatusElements.TransportGuidByte0_2, 56 | MovementStatusElements.TransportGuidByte5_2, 57 | MovementStatusElements.TransportTime2, 58 | MovementStatusElements.TransportGuidByte7_2, 59 | MovementStatusElements.TransportGuidByte4_2, 60 | MovementStatusElements.TransportGuidByte2_2, 61 | MovementStatusElements.Pitch, 62 | MovementStatusElements.SplineElev, 63 | MovementStatusElements.FallVerticalSpeed, 64 | MovementStatusElements.FallTime, 65 | MovementStatusElements.FallHorizontalSpeed, 66 | MovementStatusElements.FallCosAngle, 67 | MovementStatusElements.FallSinAngle, 68 | MovementStatusElements.GuidByte5_2, 69 | MovementStatusElements.GuidByte1_2, 70 | MovementStatusElements.GuidByte7_2, 71 | MovementStatusElements.GuidByte0_2, 72 | MovementStatusElements.GuidByte2_2, 73 | MovementStatusElements.GuidByte4_2, 74 | MovementStatusElements.GuidByte3_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_JUMP.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_JUMP)] 6 | class MovementJumpParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte5, 14 | MovementStatusElements.GuidByte1, 15 | MovementStatusElements.GuidByte6, 16 | MovementStatusElements.Flags, 17 | MovementStatusElements.GuidByte2, 18 | MovementStatusElements.HaveSpline, 19 | MovementStatusElements.GuidByte3, 20 | MovementStatusElements.Flags2, 21 | MovementStatusElements.GuidByte4, 22 | MovementStatusElements.GuidByte0, 23 | MovementStatusElements.GuidByte7, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HaveSplineElev, 38 | MovementStatusElements.HavePitch, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.GuidByte1_2, 45 | MovementStatusElements.FallVerticalSpeed, 46 | MovementStatusElements.FallTime, 47 | MovementStatusElements.FallHorizontalSpeed, 48 | MovementStatusElements.FallCosAngle, 49 | MovementStatusElements.FallSinAngle, 50 | MovementStatusElements.TransportTime, 51 | MovementStatusElements.TransportPositionX, 52 | MovementStatusElements.TransportPositionY, 53 | MovementStatusElements.TransportPositionZ, 54 | MovementStatusElements.TransportPositionO, 55 | MovementStatusElements.TransportSeat, 56 | MovementStatusElements.TransportGuidByte3_2, 57 | MovementStatusElements.TransportGuidByte1_2, 58 | MovementStatusElements.TransportTime3, 59 | MovementStatusElements.TransportGuidByte6_2, 60 | MovementStatusElements.TransportGuidByte0_2, 61 | MovementStatusElements.TransportGuidByte5_2, 62 | MovementStatusElements.TransportTime2, 63 | MovementStatusElements.TransportGuidByte7_2, 64 | MovementStatusElements.TransportGuidByte4_2, 65 | MovementStatusElements.TransportGuidByte2_2, 66 | MovementStatusElements.GuidByte6_2, 67 | MovementStatusElements.GuidByte4_2, 68 | MovementStatusElements.SplineElev, 69 | MovementStatusElements.GuidByte0_2, 70 | MovementStatusElements.Pitch, 71 | MovementStatusElements.GuidByte5_2, 72 | MovementStatusElements.GuidByte3_2, 73 | MovementStatusElements.GuidByte7_2, 74 | MovementStatusElements.GuidByte2_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_SET_FACING.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_SET_FACING)] 6 | class MovementSetFacingParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte3, 14 | MovementStatusElements.GuidByte1, 15 | MovementStatusElements.GuidByte0, 16 | MovementStatusElements.GuidByte7, 17 | MovementStatusElements.Flags2, 18 | MovementStatusElements.HaveSpline, 19 | MovementStatusElements.GuidByte4, 20 | MovementStatusElements.Flags, 21 | MovementStatusElements.GuidByte6, 22 | MovementStatusElements.GuidByte5, 23 | MovementStatusElements.GuidByte2, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HavePitch, 38 | MovementStatusElements.HaveSplineElev, 39 | MovementStatusElements.PositionX, 40 | MovementStatusElements.PositionY, 41 | MovementStatusElements.PositionZ, 42 | MovementStatusElements.PositionO, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.FallVerticalSpeed, 45 | MovementStatusElements.FallTime, 46 | MovementStatusElements.FallHorizontalSpeed, 47 | MovementStatusElements.FallCosAngle, 48 | MovementStatusElements.FallSinAngle, 49 | MovementStatusElements.GuidByte2_2, 50 | MovementStatusElements.GuidByte4_2, 51 | MovementStatusElements.TransportTime, 52 | MovementStatusElements.TransportPositionX, 53 | MovementStatusElements.TransportPositionY, 54 | MovementStatusElements.TransportPositionZ, 55 | MovementStatusElements.TransportPositionO, 56 | MovementStatusElements.TransportSeat, 57 | MovementStatusElements.TransportGuidByte3_2, 58 | MovementStatusElements.TransportGuidByte1_2, 59 | MovementStatusElements.TransportTime3, 60 | MovementStatusElements.TransportGuidByte6_2, 61 | MovementStatusElements.TransportGuidByte0_2, 62 | MovementStatusElements.TransportGuidByte5_2, 63 | MovementStatusElements.TransportTime2, 64 | MovementStatusElements.TransportGuidByte7_2, 65 | MovementStatusElements.TransportGuidByte4_2, 66 | MovementStatusElements.TransportGuidByte2_2, 67 | MovementStatusElements.GuidByte3_2, 68 | MovementStatusElements.GuidByte7_2, 69 | MovementStatusElements.Pitch, 70 | MovementStatusElements.GuidByte5_2, 71 | MovementStatusElements.GuidByte1_2, 72 | MovementStatusElements.GuidByte6_2, 73 | MovementStatusElements.SplineElev, 74 | MovementStatusElements.GuidByte0_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_SET_PITCH.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_SET_PITCH)] 6 | class MovementSetPitchParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte4, 14 | MovementStatusElements.GuidByte6, 15 | MovementStatusElements.GuidByte2, 16 | MovementStatusElements.Flags2, 17 | MovementStatusElements.GuidByte1, 18 | MovementStatusElements.GuidByte7, 19 | MovementStatusElements.GuidByte5, 20 | MovementStatusElements.GuidByte3, 21 | MovementStatusElements.HaveSpline, 22 | MovementStatusElements.GuidByte0, 23 | MovementStatusElements.Flags, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HaveSplineElev, 38 | MovementStatusElements.HavePitch, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.Timestamp, 41 | MovementStatusElements.PositionX, 42 | MovementStatusElements.PositionY, 43 | MovementStatusElements.PositionZ, 44 | MovementStatusElements.GuidByte2_2, 45 | MovementStatusElements.GuidByte6_2, 46 | MovementStatusElements.GuidByte5_2, 47 | MovementStatusElements.FallVerticalSpeed, 48 | MovementStatusElements.FallTime, 49 | MovementStatusElements.FallHorizontalSpeed, 50 | MovementStatusElements.FallCosAngle, 51 | MovementStatusElements.FallSinAngle, 52 | MovementStatusElements.GuidByte3_2, 53 | MovementStatusElements.TransportTime, 54 | MovementStatusElements.TransportPositionX, 55 | MovementStatusElements.TransportPositionY, 56 | MovementStatusElements.TransportPositionZ, 57 | MovementStatusElements.TransportPositionO, 58 | MovementStatusElements.TransportSeat, 59 | MovementStatusElements.TransportGuidByte3_2, 60 | MovementStatusElements.TransportGuidByte1_2, 61 | MovementStatusElements.TransportTime3, 62 | MovementStatusElements.TransportGuidByte6_2, 63 | MovementStatusElements.TransportGuidByte0_2, 64 | MovementStatusElements.TransportGuidByte5_2, 65 | MovementStatusElements.TransportTime2, 66 | MovementStatusElements.TransportGuidByte7_2, 67 | MovementStatusElements.TransportGuidByte4_2, 68 | MovementStatusElements.TransportGuidByte2_2, 69 | MovementStatusElements.GuidByte0_2, 70 | MovementStatusElements.GuidByte1_2, 71 | MovementStatusElements.SplineElev, 72 | MovementStatusElements.GuidByte7_2, 73 | MovementStatusElements.GuidByte4_2, 74 | MovementStatusElements.Pitch, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_ASCEND.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_ASCEND)] 6 | class MovementStartAscendParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte2, 14 | MovementStatusElements.GuidByte3, 15 | MovementStatusElements.GuidByte6, 16 | MovementStatusElements.GuidByte4, 17 | MovementStatusElements.GuidByte0, 18 | MovementStatusElements.HaveSpline, 19 | MovementStatusElements.GuidByte1, 20 | MovementStatusElements.GuidByte5, 21 | MovementStatusElements.Flags, 22 | MovementStatusElements.Flags2, 23 | MovementStatusElements.GuidByte7, 24 | MovementStatusElements.HaveTransportData, 25 | MovementStatusElements.TransportGuidByte6, 26 | MovementStatusElements.TransportGuidByte3, 27 | MovementStatusElements.TransportGuidByte7, 28 | MovementStatusElements.TransportGuidByte4, 29 | MovementStatusElements.TransportGuidByte1, 30 | MovementStatusElements.TransportGuidByte0, 31 | MovementStatusElements.TransportGuidByte2, 32 | MovementStatusElements.TransportGuidByte5, 33 | MovementStatusElements.TransportHaveTime3, 34 | MovementStatusElements.TransportHaveTime2, 35 | MovementStatusElements.HaveFallData, 36 | MovementStatusElements.HaveFallDirection, 37 | MovementStatusElements.HavePitch, 38 | MovementStatusElements.HaveSplineElev, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.TransportTime, 45 | MovementStatusElements.TransportPositionX, 46 | MovementStatusElements.TransportPositionY, 47 | MovementStatusElements.TransportPositionZ, 48 | MovementStatusElements.TransportPositionO, 49 | MovementStatusElements.TransportSeat, 50 | MovementStatusElements.TransportGuidByte3_2, 51 | MovementStatusElements.TransportGuidByte1_2, 52 | MovementStatusElements.TransportTime3, 53 | MovementStatusElements.TransportGuidByte6_2, 54 | MovementStatusElements.TransportGuidByte0_2, 55 | MovementStatusElements.TransportGuidByte5_2, 56 | MovementStatusElements.TransportTime2, 57 | MovementStatusElements.TransportGuidByte7_2, 58 | MovementStatusElements.TransportGuidByte4_2, 59 | MovementStatusElements.TransportGuidByte2_2, 60 | MovementStatusElements.GuidByte5_2, 61 | MovementStatusElements.GuidByte3_2, 62 | MovementStatusElements.GuidByte4_2, 63 | MovementStatusElements.FallVerticalSpeed, 64 | MovementStatusElements.FallTime, 65 | MovementStatusElements.FallHorizontalSpeed, 66 | MovementStatusElements.FallCosAngle, 67 | MovementStatusElements.FallSinAngle, 68 | MovementStatusElements.GuidByte0_2, 69 | MovementStatusElements.GuidByte2_2, 70 | MovementStatusElements.Pitch, 71 | MovementStatusElements.GuidByte6_2, 72 | MovementStatusElements.SplineElev, 73 | MovementStatusElements.GuidByte7_2, 74 | MovementStatusElements.GuidByte1_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_BACKWARD.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_BACKWARD)] 6 | class MovementStartBackwardParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte4, 14 | MovementStatusElements.GuidByte1, 15 | MovementStatusElements.GuidByte5, 16 | MovementStatusElements.Flags2, 17 | MovementStatusElements.GuidByte3, 18 | MovementStatusElements.GuidByte6, 19 | MovementStatusElements.GuidByte0, 20 | MovementStatusElements.GuidByte2, 21 | MovementStatusElements.GuidByte7, 22 | MovementStatusElements.Flags, 23 | MovementStatusElements.HaveSpline, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HavePitch, 38 | MovementStatusElements.HaveSplineElev, 39 | MovementStatusElements.PositionX, 40 | MovementStatusElements.PositionY, 41 | MovementStatusElements.PositionZ, 42 | MovementStatusElements.Timestamp, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte0_2, 45 | MovementStatusElements.GuidByte5_2, 46 | MovementStatusElements.FallVerticalSpeed, 47 | MovementStatusElements.FallTime, 48 | MovementStatusElements.FallHorizontalSpeed, 49 | MovementStatusElements.FallCosAngle, 50 | MovementStatusElements.FallSinAngle, 51 | MovementStatusElements.GuidByte4_2, 52 | MovementStatusElements.GuidByte2_2, 53 | MovementStatusElements.TransportTime, 54 | MovementStatusElements.TransportPositionX, 55 | MovementStatusElements.TransportPositionY, 56 | MovementStatusElements.TransportPositionZ, 57 | MovementStatusElements.TransportPositionO, 58 | MovementStatusElements.TransportSeat, 59 | MovementStatusElements.TransportGuidByte3_2, 60 | MovementStatusElements.TransportGuidByte1_2, 61 | MovementStatusElements.TransportTime3, 62 | MovementStatusElements.TransportGuidByte6_2, 63 | MovementStatusElements.TransportGuidByte0_2, 64 | MovementStatusElements.TransportGuidByte5_2, 65 | MovementStatusElements.TransportTime2, 66 | MovementStatusElements.TransportGuidByte7_2, 67 | MovementStatusElements.TransportGuidByte4_2, 68 | MovementStatusElements.TransportGuidByte2_2, 69 | MovementStatusElements.GuidByte6_2, 70 | MovementStatusElements.Pitch, 71 | MovementStatusElements.GuidByte3_2, 72 | MovementStatusElements.SplineElev, 73 | MovementStatusElements.GuidByte1_2, 74 | MovementStatusElements.GuidByte7_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_DESCEND.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_DESCEND)] 6 | class MovementStartDescendParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte7, 14 | MovementStatusElements.GuidByte0, 15 | MovementStatusElements.GuidByte2, 16 | MovementStatusElements.GuidByte1, 17 | MovementStatusElements.GuidByte6, 18 | MovementStatusElements.GuidByte4, 19 | MovementStatusElements.GuidByte5, 20 | MovementStatusElements.HaveSpline, 21 | MovementStatusElements.GuidByte3, 22 | MovementStatusElements.Flags2, 23 | MovementStatusElements.Flags, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HavePitch, 27 | MovementStatusElements.HaveSplineElev, 28 | MovementStatusElements.HaveTransportData, 29 | MovementStatusElements.TransportGuidByte6, 30 | MovementStatusElements.TransportGuidByte3, 31 | MovementStatusElements.TransportGuidByte7, 32 | MovementStatusElements.TransportGuidByte4, 33 | MovementStatusElements.TransportGuidByte1, 34 | MovementStatusElements.TransportGuidByte0, 35 | MovementStatusElements.TransportGuidByte2, 36 | MovementStatusElements.TransportGuidByte5, 37 | MovementStatusElements.TransportHaveTime3, 38 | MovementStatusElements.TransportHaveTime2, 39 | MovementStatusElements.Timestamp, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte3_2, 45 | MovementStatusElements.GuidByte4_2, 46 | MovementStatusElements.GuidByte2_2, 47 | MovementStatusElements.FallVerticalSpeed, 48 | MovementStatusElements.FallTime, 49 | MovementStatusElements.FallHorizontalSpeed, 50 | MovementStatusElements.FallCosAngle, 51 | MovementStatusElements.FallSinAngle, 52 | MovementStatusElements.Pitch, 53 | MovementStatusElements.GuidByte5_2, 54 | MovementStatusElements.SplineElev, 55 | MovementStatusElements.TransportTime, 56 | MovementStatusElements.TransportPositionX, 57 | MovementStatusElements.TransportPositionY, 58 | MovementStatusElements.TransportPositionZ, 59 | MovementStatusElements.TransportPositionO, 60 | MovementStatusElements.TransportSeat, 61 | MovementStatusElements.TransportGuidByte3_2, 62 | MovementStatusElements.TransportGuidByte1_2, 63 | MovementStatusElements.TransportTime3, 64 | MovementStatusElements.TransportGuidByte6_2, 65 | MovementStatusElements.TransportGuidByte0_2, 66 | MovementStatusElements.TransportGuidByte5_2, 67 | MovementStatusElements.TransportTime2, 68 | MovementStatusElements.TransportGuidByte7_2, 69 | MovementStatusElements.TransportGuidByte4_2, 70 | MovementStatusElements.TransportGuidByte2_2, 71 | MovementStatusElements.GuidByte1_2, 72 | MovementStatusElements.GuidByte0_2, 73 | MovementStatusElements.GuidByte7_2, 74 | MovementStatusElements.GuidByte6_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_FORWARD.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_FORWARD)] 6 | class MovementStartForwardParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte0, 14 | MovementStatusElements.HaveSpline, 15 | MovementStatusElements.GuidByte5, 16 | MovementStatusElements.GuidByte3, 17 | MovementStatusElements.GuidByte4, 18 | MovementStatusElements.GuidByte2, 19 | MovementStatusElements.GuidByte7, 20 | MovementStatusElements.Flags2, 21 | MovementStatusElements.Flags, 22 | MovementStatusElements.GuidByte6, 23 | MovementStatusElements.GuidByte1, 24 | MovementStatusElements.HavePitch, 25 | MovementStatusElements.HaveFallData, 26 | MovementStatusElements.HaveFallDirection, 27 | MovementStatusElements.HaveTransportData, 28 | MovementStatusElements.TransportGuidByte6, 29 | MovementStatusElements.TransportGuidByte3, 30 | MovementStatusElements.TransportGuidByte7, 31 | MovementStatusElements.TransportGuidByte4, 32 | MovementStatusElements.TransportGuidByte1, 33 | MovementStatusElements.TransportGuidByte0, 34 | MovementStatusElements.TransportGuidByte2, 35 | MovementStatusElements.TransportGuidByte5, 36 | MovementStatusElements.TransportHaveTime3, 37 | MovementStatusElements.TransportHaveTime2, 38 | MovementStatusElements.HaveSplineElev, 39 | MovementStatusElements.Timestamp, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte7_2, 45 | MovementStatusElements.Pitch, 46 | MovementStatusElements.GuidByte1_2, 47 | MovementStatusElements.GuidByte2_2, 48 | MovementStatusElements.FallVerticalSpeed, 49 | MovementStatusElements.FallTime, 50 | MovementStatusElements.FallHorizontalSpeed, 51 | MovementStatusElements.FallCosAngle, 52 | MovementStatusElements.FallSinAngle, 53 | MovementStatusElements.GuidByte3_2, 54 | MovementStatusElements.GuidByte5_2, 55 | MovementStatusElements.GuidByte0_2, 56 | MovementStatusElements.GuidByte6_2, 57 | MovementStatusElements.TransportTime, 58 | MovementStatusElements.TransportPositionX, 59 | MovementStatusElements.TransportPositionY, 60 | MovementStatusElements.TransportPositionZ, 61 | MovementStatusElements.TransportPositionO, 62 | MovementStatusElements.TransportSeat, 63 | MovementStatusElements.TransportGuidByte3_2, 64 | MovementStatusElements.TransportGuidByte1_2, 65 | MovementStatusElements.TransportTime3, 66 | MovementStatusElements.TransportGuidByte6_2, 67 | MovementStatusElements.TransportGuidByte0_2, 68 | MovementStatusElements.TransportGuidByte5_2, 69 | MovementStatusElements.TransportTime2, 70 | MovementStatusElements.TransportGuidByte7_2, 71 | MovementStatusElements.TransportGuidByte4_2, 72 | MovementStatusElements.TransportGuidByte2_2, 73 | MovementStatusElements.GuidByte4_2, 74 | MovementStatusElements.SplineElev, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_SWIM.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_SWIM)] 6 | class MovementStartSwimParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte1, 14 | MovementStatusElements.GuidByte5, 15 | MovementStatusElements.Flags, 16 | MovementStatusElements.GuidByte2, 17 | MovementStatusElements.HaveSpline, 18 | MovementStatusElements.GuidByte6, 19 | MovementStatusElements.Flags2, 20 | MovementStatusElements.GuidByte4, 21 | MovementStatusElements.GuidByte7, 22 | MovementStatusElements.GuidByte0, 23 | MovementStatusElements.GuidByte3, 24 | MovementStatusElements.HavePitch, 25 | MovementStatusElements.HaveSplineElev, 26 | MovementStatusElements.HaveFallData, 27 | MovementStatusElements.HaveFallDirection, 28 | MovementStatusElements.HaveTransportData, 29 | MovementStatusElements.TransportGuidByte6, 30 | MovementStatusElements.TransportGuidByte3, 31 | MovementStatusElements.TransportGuidByte7, 32 | MovementStatusElements.TransportGuidByte4, 33 | MovementStatusElements.TransportGuidByte1, 34 | MovementStatusElements.TransportGuidByte0, 35 | MovementStatusElements.TransportGuidByte2, 36 | MovementStatusElements.TransportGuidByte5, 37 | MovementStatusElements.TransportHaveTime3, 38 | MovementStatusElements.TransportHaveTime2, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.Pitch, 45 | MovementStatusElements.GuidByte4_2, 46 | MovementStatusElements.SplineElev, 47 | MovementStatusElements.FallVerticalSpeed, 48 | MovementStatusElements.FallTime, 49 | MovementStatusElements.FallHorizontalSpeed, 50 | MovementStatusElements.FallCosAngle, 51 | MovementStatusElements.FallSinAngle, 52 | MovementStatusElements.GuidByte0_2, 53 | MovementStatusElements.GuidByte7_2, 54 | MovementStatusElements.TransportTime, 55 | MovementStatusElements.TransportPositionX, 56 | MovementStatusElements.TransportPositionY, 57 | MovementStatusElements.TransportPositionZ, 58 | MovementStatusElements.TransportPositionO, 59 | MovementStatusElements.TransportSeat, 60 | MovementStatusElements.TransportGuidByte3_2, 61 | MovementStatusElements.TransportGuidByte1_2, 62 | MovementStatusElements.TransportTime3, 63 | MovementStatusElements.TransportGuidByte6_2, 64 | MovementStatusElements.TransportGuidByte0_2, 65 | MovementStatusElements.TransportGuidByte5_2, 66 | MovementStatusElements.TransportTime2, 67 | MovementStatusElements.TransportGuidByte7_2, 68 | MovementStatusElements.TransportGuidByte4_2, 69 | MovementStatusElements.TransportGuidByte2_2, 70 | MovementStatusElements.GuidByte6_2, 71 | MovementStatusElements.GuidByte5_2, 72 | MovementStatusElements.GuidByte2_2, 73 | MovementStatusElements.GuidByte1_2, 74 | MovementStatusElements.GuidByte3_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_START_TURN_LEFT.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_START_TURN_LEFT)] 6 | class MovementStartTurnLeftParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.Flags, 14 | MovementStatusElements.GuidByte3, 15 | MovementStatusElements.GuidByte5, 16 | MovementStatusElements.GuidByte7, 17 | MovementStatusElements.Flags2, 18 | MovementStatusElements.GuidByte6, 19 | MovementStatusElements.HaveSpline, 20 | MovementStatusElements.GuidByte0, 21 | MovementStatusElements.GuidByte2, 22 | MovementStatusElements.GuidByte1, 23 | MovementStatusElements.GuidByte4, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveSplineElev, 27 | MovementStatusElements.HavePitch, 28 | MovementStatusElements.HaveTransportData, 29 | MovementStatusElements.TransportGuidByte6, 30 | MovementStatusElements.TransportGuidByte3, 31 | MovementStatusElements.TransportGuidByte7, 32 | MovementStatusElements.TransportGuidByte4, 33 | MovementStatusElements.TransportGuidByte1, 34 | MovementStatusElements.TransportGuidByte0, 35 | MovementStatusElements.TransportGuidByte2, 36 | MovementStatusElements.TransportGuidByte5, 37 | MovementStatusElements.TransportHaveTime3, 38 | MovementStatusElements.TransportHaveTime2, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.Timestamp, 41 | MovementStatusElements.PositionX, 42 | MovementStatusElements.PositionY, 43 | MovementStatusElements.PositionZ, 44 | MovementStatusElements.GuidByte2_2, 45 | MovementStatusElements.GuidByte6_2, 46 | MovementStatusElements.FallVerticalSpeed, 47 | MovementStatusElements.FallTime, 48 | MovementStatusElements.FallHorizontalSpeed, 49 | MovementStatusElements.FallCosAngle, 50 | MovementStatusElements.FallSinAngle, 51 | MovementStatusElements.GuidByte4_2, 52 | MovementStatusElements.SplineElev, 53 | MovementStatusElements.GuidByte0_2, 54 | MovementStatusElements.GuidByte7_2, 55 | MovementStatusElements.Pitch, 56 | MovementStatusElements.GuidByte1_2, 57 | MovementStatusElements.GuidByte5_2, 58 | MovementStatusElements.GuidByte3_2, 59 | MovementStatusElements.TransportTime, 60 | MovementStatusElements.TransportPositionX, 61 | MovementStatusElements.TransportPositionY, 62 | MovementStatusElements.TransportPositionZ, 63 | MovementStatusElements.TransportPositionO, 64 | MovementStatusElements.TransportSeat, 65 | MovementStatusElements.TransportGuidByte3_2, 66 | MovementStatusElements.TransportGuidByte1_2, 67 | MovementStatusElements.TransportTime3, 68 | MovementStatusElements.TransportGuidByte6_2, 69 | MovementStatusElements.TransportGuidByte0_2, 70 | MovementStatusElements.TransportGuidByte5_2, 71 | MovementStatusElements.TransportTime2, 72 | MovementStatusElements.TransportGuidByte7_2, 73 | MovementStatusElements.TransportGuidByte4_2, 74 | MovementStatusElements.TransportGuidByte2_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_STOP.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_STOP)] 6 | class MovementStopParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte4, 14 | MovementStatusElements.GuidByte3, 15 | MovementStatusElements.Flags, 16 | MovementStatusElements.GuidByte5, 17 | MovementStatusElements.GuidByte6, 18 | MovementStatusElements.GuidByte0, 19 | MovementStatusElements.GuidByte1, 20 | MovementStatusElements.GuidByte2, 21 | MovementStatusElements.GuidByte7, 22 | MovementStatusElements.HaveSpline, 23 | MovementStatusElements.Flags2, 24 | MovementStatusElements.HavePitch, 25 | MovementStatusElements.HaveSplineElev, 26 | MovementStatusElements.HaveFallData, 27 | MovementStatusElements.HaveFallDirection, 28 | MovementStatusElements.HaveTransportData, 29 | MovementStatusElements.TransportGuidByte6, 30 | MovementStatusElements.TransportGuidByte3, 31 | MovementStatusElements.TransportGuidByte7, 32 | MovementStatusElements.TransportGuidByte4, 33 | MovementStatusElements.TransportGuidByte1, 34 | MovementStatusElements.TransportGuidByte0, 35 | MovementStatusElements.TransportGuidByte2, 36 | MovementStatusElements.TransportGuidByte5, 37 | MovementStatusElements.TransportHaveTime3, 38 | MovementStatusElements.TransportHaveTime2, 39 | MovementStatusElements.Timestamp, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte6_2, 45 | MovementStatusElements.GuidByte5_2, 46 | MovementStatusElements.GuidByte1_2, 47 | MovementStatusElements.GuidByte3_2, 48 | MovementStatusElements.Pitch, 49 | MovementStatusElements.GuidByte2_2, 50 | MovementStatusElements.SplineElev, 51 | MovementStatusElements.GuidByte4_2, 52 | MovementStatusElements.GuidByte0_2, 53 | MovementStatusElements.GuidByte7_2, 54 | MovementStatusElements.FallVerticalSpeed, 55 | MovementStatusElements.FallTime, 56 | MovementStatusElements.FallHorizontalSpeed, 57 | MovementStatusElements.FallCosAngle, 58 | MovementStatusElements.FallSinAngle, 59 | MovementStatusElements.TransportTime, 60 | MovementStatusElements.TransportPositionX, 61 | MovementStatusElements.TransportPositionY, 62 | MovementStatusElements.TransportPositionZ, 63 | MovementStatusElements.TransportPositionO, 64 | MovementStatusElements.TransportSeat, 65 | MovementStatusElements.TransportGuidByte3_2, 66 | MovementStatusElements.TransportGuidByte1_2, 67 | MovementStatusElements.TransportTime3, 68 | MovementStatusElements.TransportGuidByte6_2, 69 | MovementStatusElements.TransportGuidByte0_2, 70 | MovementStatusElements.TransportGuidByte5_2, 71 | MovementStatusElements.TransportTime2, 72 | MovementStatusElements.TransportGuidByte7_2, 73 | MovementStatusElements.TransportGuidByte4_2, 74 | MovementStatusElements.TransportGuidByte2_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_STOP_ASCEND.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_STOP_ASCEND)] 6 | class MovementStopAscendParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.HaveSpline, 14 | MovementStatusElements.GuidByte5, 15 | MovementStatusElements.GuidByte3, 16 | MovementStatusElements.GuidByte1, 17 | MovementStatusElements.Flags, 18 | MovementStatusElements.GuidByte4, 19 | MovementStatusElements.GuidByte7, 20 | MovementStatusElements.GuidByte2, 21 | MovementStatusElements.Flags2, 22 | MovementStatusElements.GuidByte6, 23 | MovementStatusElements.GuidByte0, 24 | MovementStatusElements.HavePitch, 25 | MovementStatusElements.HaveSplineElev, 26 | MovementStatusElements.HaveFallData, 27 | MovementStatusElements.HaveFallDirection, 28 | MovementStatusElements.HaveTransportData, 29 | MovementStatusElements.TransportGuidByte6, 30 | MovementStatusElements.TransportGuidByte3, 31 | MovementStatusElements.TransportGuidByte7, 32 | MovementStatusElements.TransportGuidByte4, 33 | MovementStatusElements.TransportGuidByte1, 34 | MovementStatusElements.TransportGuidByte0, 35 | MovementStatusElements.TransportGuidByte2, 36 | MovementStatusElements.TransportGuidByte5, 37 | MovementStatusElements.TransportHaveTime3, 38 | MovementStatusElements.TransportHaveTime2, 39 | MovementStatusElements.Timestamp, 40 | MovementStatusElements.PositionX, 41 | MovementStatusElements.PositionY, 42 | MovementStatusElements.PositionZ, 43 | MovementStatusElements.PositionO, 44 | MovementStatusElements.GuidByte5_2, 45 | MovementStatusElements.GuidByte2_2, 46 | MovementStatusElements.GuidByte0_2, 47 | MovementStatusElements.GuidByte7_2, 48 | MovementStatusElements.Pitch, 49 | MovementStatusElements.GuidByte3_2, 50 | MovementStatusElements.GuidByte4_2, 51 | MovementStatusElements.GuidByte1_2, 52 | MovementStatusElements.SplineElev, 53 | MovementStatusElements.FallVerticalSpeed, 54 | MovementStatusElements.FallTime, 55 | MovementStatusElements.FallHorizontalSpeed, 56 | MovementStatusElements.FallCosAngle, 57 | MovementStatusElements.FallSinAngle, 58 | MovementStatusElements.GuidByte6_2, 59 | MovementStatusElements.TransportTime, 60 | MovementStatusElements.TransportPositionX, 61 | MovementStatusElements.TransportPositionY, 62 | MovementStatusElements.TransportPositionZ, 63 | MovementStatusElements.TransportPositionO, 64 | MovementStatusElements.TransportSeat, 65 | MovementStatusElements.TransportGuidByte3_2, 66 | MovementStatusElements.TransportGuidByte1_2, 67 | MovementStatusElements.TransportTime3, 68 | MovementStatusElements.TransportGuidByte6_2, 69 | MovementStatusElements.TransportGuidByte0_2, 70 | MovementStatusElements.TransportGuidByte5_2, 71 | MovementStatusElements.TransportTime2, 72 | MovementStatusElements.TransportGuidByte7_2, 73 | MovementStatusElements.TransportGuidByte4_2, 74 | MovementStatusElements.TransportGuidByte2_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_STOP_STRAFE.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_STOP_STRAFE)] 6 | class MovementStopStrafeParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte3, 14 | MovementStatusElements.Flags, 15 | MovementStatusElements.HaveSpline, 16 | MovementStatusElements.GuidByte4, 17 | MovementStatusElements.GuidByte0, 18 | MovementStatusElements.Flags2, 19 | MovementStatusElements.GuidByte5, 20 | MovementStatusElements.GuidByte6, 21 | MovementStatusElements.GuidByte7, 22 | MovementStatusElements.GuidByte1, 23 | MovementStatusElements.GuidByte2, 24 | MovementStatusElements.HaveTransportData, 25 | MovementStatusElements.TransportGuidByte6, 26 | MovementStatusElements.TransportGuidByte3, 27 | MovementStatusElements.TransportGuidByte7, 28 | MovementStatusElements.TransportGuidByte4, 29 | MovementStatusElements.TransportGuidByte1, 30 | MovementStatusElements.TransportGuidByte0, 31 | MovementStatusElements.TransportGuidByte2, 32 | MovementStatusElements.TransportGuidByte5, 33 | MovementStatusElements.TransportHaveTime3, 34 | MovementStatusElements.TransportHaveTime2, 35 | MovementStatusElements.HaveSplineElev, 36 | MovementStatusElements.HavePitch, 37 | MovementStatusElements.HaveFallData, 38 | MovementStatusElements.HaveFallDirection, 39 | MovementStatusElements.PositionX, 40 | MovementStatusElements.PositionY, 41 | MovementStatusElements.PositionZ, 42 | MovementStatusElements.PositionO, 43 | MovementStatusElements.Timestamp, 44 | MovementStatusElements.GuidByte2_2, 45 | MovementStatusElements.GuidByte7_2, 46 | MovementStatusElements.GuidByte5_2, 47 | MovementStatusElements.TransportTime, 48 | MovementStatusElements.TransportPositionX, 49 | MovementStatusElements.TransportPositionY, 50 | MovementStatusElements.TransportPositionZ, 51 | MovementStatusElements.TransportPositionO, 52 | MovementStatusElements.TransportSeat, 53 | MovementStatusElements.TransportGuidByte3_2, 54 | MovementStatusElements.TransportGuidByte1_2, 55 | MovementStatusElements.TransportTime3, 56 | MovementStatusElements.TransportGuidByte6_2, 57 | MovementStatusElements.TransportGuidByte0_2, 58 | MovementStatusElements.TransportGuidByte5_2, 59 | MovementStatusElements.TransportTime2, 60 | MovementStatusElements.TransportGuidByte7_2, 61 | MovementStatusElements.TransportGuidByte4_2, 62 | MovementStatusElements.TransportGuidByte2_2, 63 | MovementStatusElements.GuidByte0_2, 64 | MovementStatusElements.SplineElev, 65 | MovementStatusElements.Pitch, 66 | MovementStatusElements.FallVerticalSpeed, 67 | MovementStatusElements.FallTime, 68 | MovementStatusElements.FallHorizontalSpeed, 69 | MovementStatusElements.FallCosAngle, 70 | MovementStatusElements.FallSinAngle, 71 | MovementStatusElements.GuidByte1_2, 72 | MovementStatusElements.GuidByte3_2, 73 | MovementStatusElements.GuidByte4_2, 74 | MovementStatusElements.GuidByte6_2, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Movement/MSG_MOVE_STOP_TURN.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer.Parsers.Movement 4 | { 5 | [Parser(OpCodes.MSG_MOVE_STOP_TURN)] 6 | class MovementStopTurnParser : RegularMovementPacket 7 | { 8 | protected override MovementStatusElements[] Elements 9 | { 10 | get 11 | { 12 | return new MovementStatusElements[] { 13 | MovementStatusElements.GuidByte3, 14 | MovementStatusElements.GuidByte5, 15 | MovementStatusElements.GuidByte4, 16 | MovementStatusElements.GuidByte2, 17 | MovementStatusElements.Flags2, 18 | MovementStatusElements.GuidByte0, 19 | MovementStatusElements.GuidByte7, 20 | MovementStatusElements.GuidByte6, 21 | MovementStatusElements.GuidByte1, 22 | MovementStatusElements.HaveSpline, 23 | MovementStatusElements.Flags, 24 | MovementStatusElements.HaveFallData, 25 | MovementStatusElements.HaveFallDirection, 26 | MovementStatusElements.HaveTransportData, 27 | MovementStatusElements.TransportGuidByte6, 28 | MovementStatusElements.TransportGuidByte3, 29 | MovementStatusElements.TransportGuidByte7, 30 | MovementStatusElements.TransportGuidByte4, 31 | MovementStatusElements.TransportGuidByte1, 32 | MovementStatusElements.TransportGuidByte0, 33 | MovementStatusElements.TransportGuidByte2, 34 | MovementStatusElements.TransportGuidByte5, 35 | MovementStatusElements.TransportHaveTime3, 36 | MovementStatusElements.TransportHaveTime2, 37 | MovementStatusElements.HaveSplineElev, 38 | MovementStatusElements.HavePitch, 39 | MovementStatusElements.PositionO, 40 | MovementStatusElements.Timestamp, 41 | MovementStatusElements.PositionX, 42 | MovementStatusElements.PositionY, 43 | MovementStatusElements.PositionZ, 44 | MovementStatusElements.GuidByte4_2, 45 | MovementStatusElements.GuidByte2_2, 46 | MovementStatusElements.GuidByte5_2, 47 | MovementStatusElements.FallVerticalSpeed, 48 | MovementStatusElements.FallTime, 49 | MovementStatusElements.FallHorizontalSpeed, 50 | MovementStatusElements.FallCosAngle, 51 | MovementStatusElements.FallSinAngle, 52 | MovementStatusElements.GuidByte0_2, 53 | MovementStatusElements.GuidByte7_2, 54 | MovementStatusElements.GuidByte6_2, 55 | MovementStatusElements.TransportTime, 56 | MovementStatusElements.TransportPositionX, 57 | MovementStatusElements.TransportPositionY, 58 | MovementStatusElements.TransportPositionZ, 59 | MovementStatusElements.TransportPositionO, 60 | MovementStatusElements.TransportSeat, 61 | MovementStatusElements.TransportGuidByte3_2, 62 | MovementStatusElements.TransportGuidByte1_2, 63 | MovementStatusElements.TransportTime3, 64 | MovementStatusElements.TransportGuidByte6_2, 65 | MovementStatusElements.TransportGuidByte0_2, 66 | MovementStatusElements.TransportGuidByte5_2, 67 | MovementStatusElements.TransportTime2, 68 | MovementStatusElements.TransportGuidByte7_2, 69 | MovementStatusElements.TransportGuidByte4_2, 70 | MovementStatusElements.TransportGuidByte2_2, 71 | MovementStatusElements.SplineElev, 72 | MovementStatusElements.GuidByte1_2, 73 | MovementStatusElements.GuidByte3_2, 74 | MovementStatusElements.Pitch, 75 | }; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/SMSG_CHAR_ENUM.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | //[Parser(OpCodes.SMSG_CHAR_ENUM)] 4 | class SMSG_CHAR_ENUM : Parser 5 | { 6 | public override void Parse() 7 | { 8 | const int INVENTORY_SLOT_BAG_END = 23; 9 | 10 | For(ReadUInt8("Characters count: {0}"), i => 11 | { 12 | ReadUInt64("Character {0} GUID: {1:X16}", i); 13 | ReadCString("Character {0} Name: {1}", i); 14 | ReadUInt8("Character {0} Race: {1}", i); 15 | ReadUInt8("Character {0} Class: {1}", i); 16 | ReadUInt8("Character {0} Gender: {1}", i); 17 | ReadUInt8("Character {0} Skin: {1}", i); 18 | ReadUInt8("Character {0} Face: {1}", i); 19 | ReadUInt8("Character {0} Hair Style: {1}", i); 20 | ReadUInt8("Character {0} Hair Color: {1}", i); 21 | ReadUInt8("Character {0} Facial Hair: {1}", i); 22 | ReadUInt8("Character {0} Level: {1}", i); 23 | ReadUInt32("Character {0} Zone: {1}", i); 24 | ReadUInt32("Character {0} Map: {1}", i); 25 | ReadSingle("Character {0} X: {1}", i); 26 | ReadSingle("Character {0} Y: {1}", i); 27 | ReadSingle("Character {0} Z: {1}", i); 28 | ReadUInt32("Character {0} Guild Id: {1}", i); 29 | ReadUInt32("Character {0} Flags: 0x{1:X8}", i); 30 | ReadUInt32("Character {0} Customize Flags: 0x{1:X8}", i); 31 | ReadUInt8("Character {0} First Login?: {1}", i); 32 | ReadUInt32("Character {0} Pet Display Id: {1}", i); 33 | ReadUInt32("Character {0} Pet Level: {1}", i); 34 | ReadUInt32("Character {0} Pet Family: {1}", i); 35 | 36 | For(INVENTORY_SLOT_BAG_END, j => 37 | { 38 | ReadUInt32("Character {0} Item {1} Display Id: {2}", i, j); 39 | ReadUInt8("Character {0} Item {1} Inventory Type: {2}", i, j); 40 | ReadUInt32("Character {0} Item {1} Enchant Aura: {2}", i, j); 41 | }); 42 | }); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/SMSG_INSPECT_RESULTS.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | //[Parser(OpCodes.SMSG_INSPECT_RESULTS)] 6 | class InspectTalentParser : Parser 7 | { 8 | public override void Parse() 9 | { 10 | AppendFormatLine("GUID: {0:X16}", Reader.ReadPackedGuid()); 11 | AppendFormatLine("Free talent points: {0}", Reader.ReadUInt32()); 12 | var talentGroupsCount = Reader.ReadByte(); 13 | AppendFormatLine("Talent groups count: {0}", talentGroupsCount); 14 | AppendFormatLine("Talent group index: {0}", Reader.ReadByte()); 15 | 16 | if (talentGroupsCount > 0) 17 | { 18 | var talentsCount = Reader.ReadByte(); 19 | AppendFormatLine("Talents count {0}", talentsCount); 20 | 21 | for (var i = 0; i < talentsCount; ++i) 22 | { 23 | AppendFormatLine("Talent {0}: id {1}, rank {2}", i, Reader.ReadUInt32(), Reader.ReadByte()); 24 | } 25 | 26 | var glyphsCount = Reader.ReadByte(); 27 | AppendFormatLine("Glyphs count {0}", glyphsCount); 28 | 29 | for (var i = 0; i < glyphsCount; ++i) 30 | { 31 | AppendFormatLine("Glyph {0}: id {1}", i, Reader.ReadUInt16()); 32 | } 33 | } 34 | 35 | var slotUsedMask = Reader.ReadUInt32(); 36 | 37 | for (var i = 0; i < 19; ++i) // max equip slot 38 | { 39 | if (((1 << i) & slotUsedMask) != 0) 40 | { 41 | AppendFormatLine("Item {0}: entry {1}", i, Reader.ReadUInt32()); 42 | 43 | var enchantmentMask = Reader.ReadUInt16(); 44 | 45 | for (var j = 0; j < 12; ++j) // max enchantments 46 | { 47 | if (((1 << j) & enchantmentMask) != 0) 48 | { 49 | AppendFormatLine("Item {0}: enchant {1}, id {2}", i, j, Reader.ReadUInt16()); 50 | } 51 | } 52 | 53 | AppendFormatLine("Item {0}: unk1 {1:X4}", i, Reader.ReadUInt16()); 54 | AppendFormatLine("Item {0}: unk2 {1:X16}", i, Reader.ReadPackedGuid()); 55 | AppendFormatLine("Item {0}: unk3 {1:X8}", i, Reader.ReadUInt32()); 56 | } 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/SMSG_LOAD_EQUIPMENT_SET.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | //[Parser(OpCodes.SMSG_LOAD_EQUIPMENT_SET)] 6 | class EquipmentSetListParser : Parser 7 | { 8 | public override void Parse() 9 | { 10 | var count = Reader.ReadUInt32(); 11 | AppendFormatLine("Count: {0}", count); 12 | 13 | for (var i = 0; i < count; ++i) 14 | { 15 | var setguid = Reader.ReadPackedGuid(); 16 | var setindex = Reader.ReadUInt32(); 17 | var name = Reader.ReadCString(); 18 | var iconname = Reader.ReadCString(); 19 | 20 | AppendFormatLine("EquipmentSet {0}: guid {1}, index {2}, name {3}, iconname {4}", i, setguid, setindex, name, iconname); 21 | 22 | for (var j = 0; j < 19; ++j) 23 | AppendFormatLine("EquipmentSetItem {0}: guid {1}", j, Reader.ReadPackedGuid().ToString("X16")); 24 | 25 | AppendLine(); 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/UnknownPacketParser.cs: -------------------------------------------------------------------------------- 1 | using WowTools.Core; 2 | 3 | namespace WoWPacketViewer 4 | { 5 | class UnknownPacketParser : Parser 6 | { 7 | public override void Parse() { } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Warden/WardenHelpers/CheckInfo.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | struct CheckInfo 4 | { 5 | public int m_length; 6 | public CheckType m_type; 7 | 8 | public CheckInfo(CheckType type, int len) 9 | { 10 | m_type = type; 11 | m_length = len; // for MEM_CHECK result 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Warden/WardenHelpers/CheckType.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | enum CheckType 4 | { 5 | MEM_CHECK = 0, // byte strIndex + uint Offset + byte Len (checks to ensure memory isn't modified?) 6 | PAGE_CHECK_A = 1, // uint Seed + byte[20] SHA1 + uint Addr + byte Len 7 | PAGE_CHECK_B = 2, // uint Seed + byte[20] SHA1 + uint Addr + byte Len 8 | MPQ_CHECK = 3, // byte strIndex (checks to ensure MPQ file isn't modified?) 9 | LUA_STR_CHECK = 4, // byte strIndex (checks to ensure global LUA string isn't used?) 10 | DRIVER_CHECK = 5, // uint Seed + byte[20] SHA1 + byte strIndex (checks to ensure driver isn't loaded?) 11 | TIMING_CHECK = 6, // empty (checks to ensure TickCount isn't detoured?) 12 | PROC_CHECK = 7, // uint Seed + byte[20] SHA1 + byte strIndex1 + byte strIndex2 + uint Offset + byte Len (checks to ensure proc isn't detoured?) 13 | MODULE_CHECK = 8 // uint Seed + byte[20] SHA1 (checks to ensure module isn't loaded) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Parsers/Warden/WardenHelpers/WardenData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Security.Cryptography; 4 | using System.Text; 5 | using WowTools.Core; 6 | 7 | namespace WoWPacketViewer 8 | { 9 | static class WardenData 10 | { 11 | public static IList CheckInfos = new List(); 12 | public static IDictionary CheckTypes = new Dictionary(); 13 | private static FrmWardenDebug wardenDebugForm; 14 | public static bool Enabled { get; set; } 15 | 16 | public static void InitCheckTypes() 17 | { 18 | if (wardenDebugForm == null || wardenDebugForm.IsDisposed) 19 | return; 20 | CheckTypes = wardenDebugForm.CheckTypes; 21 | } 22 | 23 | public static void ShowForm(IEnumerable strings, byte[] checks, byte checkByte, long position) 24 | { 25 | if (!Enabled) 26 | return; 27 | 28 | if (wardenDebugForm == null || wardenDebugForm.IsDisposed) 29 | wardenDebugForm = new FrmWardenDebug(); 30 | 31 | wardenDebugForm.XorByte = checks[checks.Length - 1]; 32 | 33 | wardenDebugForm.Text = String.Format("Warden Debug: 0x{0:X2}", checkByte); 34 | 35 | wardenDebugForm.SetInfo(CreateTextInfo(strings, checks), position); 36 | 37 | wardenDebugForm.CheckTypes = CheckTypes; 38 | 39 | if (!wardenDebugForm.Visible) 40 | wardenDebugForm.Show(); 41 | } 42 | 43 | private static string CreateTextInfo(IEnumerable strings, byte[] checks) 44 | { 45 | var sb = new StringBuilder(); 46 | sb.Append(checks.HexLike(0, checks.Length)); 47 | foreach (string s in strings) 48 | sb.AppendLine(s); 49 | return sb.ToString(); 50 | } 51 | 52 | public static string ValidateCheckSum(uint checkSum, byte[] data) 53 | { 54 | var hash = new SHA1CryptoServiceProvider().ComputeHash(data); 55 | var res = new uint[5]; 56 | 57 | for (var i = 0; i < 5; ++i) 58 | res[i] = BitConverter.ToUInt32(hash, 4 * i); 59 | 60 | var newCheckSum = res[0] ^ res[1] ^ res[2] ^ res[3] ^ res[4]; 61 | 62 | if (checkSum != newCheckSum) 63 | return "is not valid!"; 64 | else 65 | return "is valid!"; 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | internal static class Program 7 | { 8 | [STAThread] 9 | private static void Main() 10 | { 11 | Application.EnableVisualStyles(); 12 | Application.SetCompatibleTextRenderingDefault(false); 13 | Application.Run(new FrmMain()); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SkyFire/PacketViewer/976dfe3558c079a5118ace5745061370e4af247d/src/WoWPacketViewer/Properties/AssemblyInfo.cs -------------------------------------------------------------------------------- /src/WoWPacketViewer/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WoWPacketViewer.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WoWPacketViewer.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | MediumSeaGreen 7 | 8 | 9 | WindowText 10 | 11 | 12 | Window 13 | 14 | 15 | WindowText 16 | 17 | 18 | Window 19 | 20 | 21 | WindowText 22 | 23 | 24 | localhost 25 | 26 | 27 | 3306 28 | 29 | 30 | root 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | False 40 | 41 | 42 | 43 | 44 | 45 | True 46 | 47 | 48 | 49 | 50 | 51 | True 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Readers/IPacketReader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using WowTools.Core; 3 | 4 | namespace WoWPacketViewer 5 | { 6 | public interface IPacketReader 7 | { 8 | uint Build { get; } 9 | IEnumerable ReadPackets(string file); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Readers/IzidorPackerReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Text; 5 | using WowTools.Core; 6 | 7 | namespace WoWPacketViewer 8 | { 9 | public class IzidorPacketReader : IPacketReader 10 | { 11 | public uint Build { get; private set; } 12 | 13 | public IEnumerable ReadPackets(string file) 14 | { 15 | Build = 14333; // unknown. not stored 16 | var packets = new List(); 17 | using (TextReader tr = new StreamReader(file)) 18 | { 19 | while (tr.Peek() != -1) 20 | { 21 | string line = tr.ReadLine(); 22 | string[] data = line.Split('<', '>', '"'); 23 | uint unixtime = 0; // not stored 24 | uint tickcount = UInt32.Parse(data[2]); 25 | var direction = data[4] == "StoC" ? Direction.Server : Direction.Client; 26 | var opcode = UInt16.Parse(data[6]); 27 | string directdata = data[8]; 28 | byte[] byteData = ParseHex(directdata); 29 | packets.Add(new Packet(direction, opcode, byteData, unixtime, tickcount)); 30 | } 31 | } 32 | return packets; 33 | } 34 | 35 | public static byte[] ParseHex(string hex) 36 | { 37 | int offset = hex.StartsWith("0x") ? 2 : 0; 38 | if ((hex.Length % 2) != 0) 39 | { 40 | throw new ArgumentException("Invalid length: " + hex.Length); 41 | } 42 | byte[] ret = new byte[(hex.Length - offset) / 2]; 43 | 44 | for (int i = 0; i < ret.Length; i++) 45 | { 46 | ret[i] = (byte)((ParseNybble(hex[offset]) << 4) 47 | | ParseNybble(hex[offset + 1])); 48 | offset += 2; 49 | } 50 | return ret; 51 | } 52 | 53 | static int ParseNybble(char c) 54 | { 55 | if (c >= '0' && c <= '9') 56 | { 57 | return c - '0'; 58 | } 59 | if (c >= 'A' && c <= 'F') 60 | { 61 | return c - 'A' + 10; 62 | } 63 | if (c >= 'a' && c <= 'f') 64 | { 65 | return c - 'a' + 10; 66 | } 67 | throw new ArgumentException("Invalid hex digit: " + c); 68 | } 69 | 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Readers/PacketReaderFactory.cs: -------------------------------------------------------------------------------- 1 | namespace WoWPacketViewer 2 | { 3 | public static class PacketReaderFactory 4 | { 5 | public static IPacketReader Create(string extension) 6 | { 7 | switch (extension) 8 | { 9 | case ".pkt": 10 | case ".bin": 11 | return new WowCorePacketReader(); 12 | case ".sqlite": 13 | return new SqLitePacketReader(); 14 | case ".xml": 15 | return new SniffitztPacketReader(); 16 | case ".izi": 17 | case "": // Noname sniffer outputs files in Izi format with no extension 18 | return new IzidorPacketReader(); 19 | default: 20 | return null; 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Readers/SniffitztPacketReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Xml.Linq; 5 | using System.Xml.XPath; 6 | using WowTools.Core; 7 | 8 | namespace WoWPacketViewer 9 | { 10 | public class SniffitztPacketReader : IPacketReader 11 | { 12 | public uint Build 13 | { 14 | get { return 0; } 15 | } 16 | 17 | public IEnumerable ReadPackets(string file) 18 | { 19 | var packets = new List(); 20 | var uri = new Uri(Path.GetFullPath(file)).ToString(); 21 | var doc = XDocument.Load(uri); 22 | foreach (var packet in doc.XPathSelectElements("*/packet")) 23 | { 24 | var direction = (string)packet.Attribute("direction") == "S2C" ? Direction.Server : Direction.Client; 25 | var opcode = (uint)packet.Attribute("opcode"); 26 | packets.Add(new Packet(direction, opcode, packet.Value.ToByteArray(), 0, 0)); 27 | } 28 | return packets; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/Readers/SqLitePacketReader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Data.SQLite; 3 | using WowTools.Core; 4 | 5 | namespace WoWPacketViewer 6 | { 7 | public class SqLitePacketReader : IPacketReader 8 | { 9 | public uint Build 10 | { 11 | get { return 0; } 12 | } 13 | 14 | public IEnumerable ReadPackets(string file) 15 | { 16 | using (var connection = new SQLiteConnection("Data Source=" + file)) 17 | { 18 | var packets = new List(); 19 | 20 | connection.Open(); 21 | 22 | SQLiteCommand command = connection.CreateCommand(); 23 | command.CommandText = "SELECT COUNT(*) FROM packets;"; 24 | command.Prepare(); 25 | 26 | var rows = (long)command.ExecuteScalar(); 27 | 28 | command.CommandText = "SELECT direction, opcode, data FROM packets ORDER BY id;"; 29 | command.Prepare(); 30 | 31 | SQLiteDataReader reader = command.ExecuteReader(); 32 | 33 | while (reader.Read()) 34 | { 35 | //worker.ReportProgress((int)((float)m_packets.Count / (float)rows * 100.0f)); 36 | try 37 | { 38 | var direction = (Direction)reader.GetByte(0); 39 | var opcode = (uint)reader.GetInt16(1); 40 | var data = (byte[])reader.GetValue(2); 41 | 42 | packets.Add(new Packet(direction, opcode, data, 0, 0)); 43 | } 44 | catch 45 | { 46 | } 47 | } 48 | return packets; 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/WoWPacketViewer/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | MediumSeaGreen 12 | 13 | 14 | WindowText 15 | 16 | 17 | Window 18 | 19 | 20 | WindowText 21 | 22 | 23 | Window 24 | 25 | 26 | WindowText 27 | 28 | 29 | localhost 30 | 31 | 32 | 3306 33 | 34 | 35 | root 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | False 45 | 46 | 47 | True 48 | 49 | 50 | 51 | 52 | 53 | True 54 | 55 | 56 | 57 | --------------------------------------------------------------------------------