private static void ReadCreateObjectBlock(Packet packet, WowGuid guid, uint map, object index) { var objType = packet.ReadByteE<ObjectType>("Object Type", index); var moves = ReadMovementUpdateBlock(packet, guid, index); var updates = CoreParsers.UpdateHandler.ReadValuesUpdateBlock(packet, objType, index, true); WoWObject obj; switch (objType) { case ObjectType.Unit: obj = new Unit(); break; case ObjectType.GameObject: obj = new GameObject(); break; case ObjectType.Item: obj = new Item(); break; case ObjectType.Player: obj = new Player(); break; default: obj = new WoWObject(); break; } obj.Type = objType; obj.Movement = moves; obj.UpdateFields = updates; obj.Map = map; obj.Area = CoreParsers.WorldStateHandler.CurrentAreaId; obj.PhaseMask = (uint)CoreParsers.MovementHandler.CurrentPhaseMask; obj.Phases = new HashSet<ushort>(CoreParsers.MovementHandler.ActivePhases); // If this is the second time we see the same object (same guid, // same position) update its phasemask if (Storage.Objects.ContainsKey(guid)) { var existObj = Storage.Objects[guid].Item1; CoreParsers.UpdateHandler.ProcessExistingObject(ref existObj, obj, guid); // can't do "ref Storage.Objects[guid].Item1 directly } else Storage.Objects.Add(guid, obj, packet.TimeSpan); if (guid.HasEntry() && (objType == ObjectType.Unit || objType == ObjectType.GameObject)) packet.AddSniffData(Utilities.ObjectTypeToStore(objType), (int)guid.GetEntry(), "SPAWN"); }
private static void ReadCreateObjectBlock(ref Packet packet, Guid guid, uint map, int index) { var objType = packet.ReadEnum<ObjectType>("Object Type", TypeCode.Byte, index); var moves = ReadMovementUpdateBlock(ref packet, guid, index); var updates = ReadValuesUpdateBlock(ref packet, objType, index); WoWObject obj; switch (objType) { case ObjectType.Unit: obj = new Unit(); break; case ObjectType.GameObject: obj = new GameObject(); break; case ObjectType.Item: obj = new Item(); break; case ObjectType.Player: obj = new Player(); break; default: obj = new WoWObject(); break; } obj.Type = objType; obj.Movement = moves; obj.UpdateFields = updates; obj.Map = map; obj.Area = WorldStateHandler.CurrentAreaId; obj.PhaseMask = (uint) MovementHandler.CurrentPhaseMask; Storage.Objects.TryAdd(guid, obj); if (guid.HasEntry() && (objType == ObjectType.Unit || objType == ObjectType.GameObject)) packet.AddSniffData(Utilities.ObjectTypeToStore(objType), (int)guid.GetEntry(), "SPAWN"); }
private static void ReadCreateObjectBlock(ref Packet packet, Guid guid, uint map, int index) { var objType = packet.ReadEnum<ObjectType>("Object Type", TypeCode.Byte, index); var moves = ReadMovementUpdateBlock(ref packet, guid, index); var updates = ReadValuesUpdateBlock(ref packet, objType, index); switch (objType) { case ObjectType.Unit: var unit = new Unit {Type = objType, Movement = moves, UpdateFields = updates, Map = map, Area = WorldStateHandler.CurrentAreaId, PhaseMask = (uint) MovementHandler.CurrentPhaseMask}; packet.SniffFileInfo.Storage.Objects.TryAdd(guid, unit); break; case ObjectType.GameObject: var go = new GameObject {Type = objType, Movement = moves, UpdateFields = updates, Map = map, Area = WorldStateHandler.CurrentAreaId, PhaseMask = (uint) MovementHandler.CurrentPhaseMask}; packet.SniffFileInfo.Storage.Objects.TryAdd(guid, go); break; case ObjectType.Item: var item = new Item {Type = objType, Movement = moves, UpdateFields = updates, Map = map, Area = WorldStateHandler.CurrentAreaId, PhaseMask = (uint) MovementHandler.CurrentPhaseMask}; packet.SniffFileInfo.Storage.Objects.TryAdd(guid, item); break; case ObjectType.Player: var player = new Player {Type = objType, Movement = moves, UpdateFields = updates, Map = map, Area = WorldStateHandler.CurrentAreaId, PhaseMask = (uint) MovementHandler.CurrentPhaseMask}; packet.SniffFileInfo.Storage.Objects.TryAdd(guid, player); break; default: var obj = new WoWObject {Type = objType, Movement = moves, UpdateFields = updates, Map = map, Area = WorldStateHandler.CurrentAreaId, PhaseMask = (uint) MovementHandler.CurrentPhaseMask}; packet.SniffFileInfo.Storage.Objects.TryAdd(guid, obj); break; } if (guid.HasEntry() && (objType == ObjectType.Unit || objType == ObjectType.GameObject)) packet.AddSniffData(Utilities.ObjectTypeToStore(objType), (int)guid.GetEntry(), "SPAWN"); }