private static void OnContainerContents(PacketReader reader) { if (reader.Size == 5) { return; } bool oldStyle = false; int count = reader.ReadInt16(); if ((reader.Size - 5) / 20 != count) { oldStyle = true; } ItemCollection container = null; for (int i = 0; i < count; i++) { int serial = reader.ReadInt32(); int id = reader.ReadUInt16(); reader.ReadByte(); // Item ID Offset int amount = reader.ReadUInt16(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); int grid = 0; if (!oldStyle) { grid = reader.ReadByte(); } int containerSerial = reader.ReadInt32(); int hue = reader.ReadUInt16(); if (container == null) { container = new ItemCollection(containerSerial); } Item item = Engine.GetOrCreateItem(serial, containerSerial); item.ID = id; item.Count = amount; item.Owner = containerSerial; item.Hue = hue; item.Grid = grid; item.X = x; item.Y = y; container.Add(item); } if (container == null) { return; } Item containerItem = Engine.Items.GetItem(container.Serial); if (containerItem.Container == null) { containerItem.Container = container; } else { containerItem.Container.Clear(); containerItem.Container.Add(container.GetItems()); } Engine.Items.Add(containerItem); ContainerContentsEvent?.Invoke(container.Serial, container); Engine.RehueList.CheckRehue(container); }
private static void OnContainerContents(PacketReader reader) { Item containerItem = null; int count = 0; try { if (reader.Size == 5) { return; } bool oldStyle = false; count = reader.ReadInt16(); if ((reader.Size - 5) / 20 != count) { oldStyle = true; } ItemCollection container = null; for (int i = 0; i < count; i++) { int serial = reader.ReadInt32(); int id = reader.ReadUInt16(); reader.ReadByte(); // Item ID Offset int amount = reader.ReadUInt16(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); int grid = 0; if (!oldStyle) { grid = reader.ReadByte(); } int containerSerial = reader.ReadInt32(); int hue = reader.ReadUInt16(); if (container == null) { container = new ItemCollection(containerSerial); } Item item = Engine.GetOrCreateItem(serial, containerSerial); item.ID = id; item.Count = amount; item.Owner = containerSerial; item.Hue = hue; item.Grid = grid; item.X = x; item.Y = y; container.Add(item); } if (container == null) { return; } containerItem = Engine.GetOrCreateItem(container.Serial); if (containerItem.Container == null) { containerItem.Container = container; } else { containerItem.Container.Clear(); containerItem.Container.Add(container.GetItems()); } Engine.Items.Add(containerItem); ContainerContentsEvent?.Invoke(container.Serial, container); Engine.RehueList.CheckRehue(container); } catch (Exception e) { e.ToExceptionless().SetProperty("ContainerSerial", containerItem?.Serial) .SetProperty("Count", count).SetProperty("Packet", reader.GetData()) .SetProperty("WorldContainsContainerSerial", Engine.Items.Any(i => containerItem != null && i.Serial == containerItem.Serial)) .SetProperty("WorldItemCount", Engine.Items.Count()) .SetProperty("WorldMobileCount", Engine.Mobiles.Count()).Submit(); } }