private void HandleObjectInfoPacket(ObjectInfoPacket packet) { if (packet.Type == 0x2006) { LastCorpseId = packet.Id; } }
public void Can_deserialize_packet_with_dye() { var rawPacket = FakePackets.Instantiate(new byte[] { 0x1A, // packet 0x00, 0x10, // size 0x40, 0x03, 0x7C, 0xBD, // object id 0x1A, 0xD7, // type 0x14, 0xF4, // xloc 0x8B, 0xAE, // yloc 0x06, // zloc 0x09, 0x80 // dye }); var packet = new ObjectInfoPacket(); packet.Deserialize(rawPacket); packet.Id.Should().Be(new ObjectId(0x40037cbd)); packet.Type.Should().Be((ModelId)0x1ad7); packet.Location.X.Should().Be(0x14f4); packet.Location.Y.Should().Be(0x0BAE); packet.Location.Z.Should().Be(0x06); packet.Dye.Should().Be((Color)0x0980); }
public void Can_deserialize_packet_with_negative_zcoord() { var rawPacket = FakePackets.Instantiate(new byte[] { 0x1A, 0x00, 0x0E, 0x40, 0x00, 0x11, 0x37, 0x0E, 0x80, 0x0A, 0xAB, 0x0C, 0xB5, 0xF0, }); var packet = new ObjectInfoPacket(); packet.Deserialize(rawPacket); packet.Id.Should().Be(new ObjectId(0x40001137)); packet.Type.Should().Be((ModelId)0x0E80); packet.Location.X.Should().Be(0x0AAB); packet.Location.Y.Should().Be(0x0CB5); unchecked { packet.Location.Z.Should().Be((sbyte)0xF0); } }
public ObjectId AddNewItemToGround(ModelId type, Location2D location, int amount = 1, Color?color = null) { var newItemId = NewItemId(); var packet = new ObjectInfoPacket(newItemId, type, (Location3D)location, color, (ushort?)amount); sendPacket(packet.RawPacket.Payload); return(newItemId); }
private void EnterGameSA() { SendToClient(new CharLocaleAndBodyPacket() { PlayerId = legacyApi.Me.PlayerId, BodyType = legacyApi.Me.BodyType, Direction = legacyApi.Me.Direction, MovementType = legacyApi.Me.MovementType, Location = legacyApi.Me.Location, }.Serialize()); SendToClient(new SetMapPacket(reloginInfo.MapId).RawPacket); var enableFeaturesPacket = packetRegistry.Instantiate <EnableLockedClientFeaturesPacket>(0xB9); enableFeaturesPacket.Flags = reloginInfo.EnabledFeatureFlags; SendToClient(enableFeaturesPacket.Serialize()); var drawPlayer = new DrawGamePlayerPacket(legacyApi.Me.PlayerId, legacyApi.Me.BodyType, legacyApi.Me.Location, legacyApi.Me.Direction, legacyApi.Me.MovementType, legacyApi.Me.Color); SendToClient(drawPlayer.Serialize()); foreach (var obj in UO.Items.OnGround()) { var objectInfo = new ObjectInfoPacket(obj.Id, obj.Type, obj.Location, obj.Color, obj.Amount); SendToClient(objectInfo.RawPacket); } foreach (var mobile in UO.Mobiles) { var drawPacket = packetRegistry.Instantiate <DrawObjectPacket>(0x78); drawPacket.Color = mobile.Color.HasValue ? mobile.Color.Value : (Color)0; drawPacket.Direction = mobile.Orientation.HasValue ? mobile.Orientation.Value : Direction.North; drawPacket.Flags = mobile.Flags; drawPacket.Id = mobile.Id; drawPacket.Location = mobile.Location; drawPacket.MovementType = mobile.CurrentMovementType.HasValue ? mobile.CurrentMovementType.Value : MovementType.Walk; drawPacket.Notoriety = mobile.Notoriety.HasValue ? mobile.Notoriety.Value : Notoriety.Innocent; drawPacket.Type = mobile.Type; var items = UO.Items.InContainer(mobile.Id).Where(i => i.Layer.HasValue).ToArray(); drawPacket.Items = items; SendToClient(drawPacket.Serialize()); } drawPlayer = new DrawGamePlayerPacket(legacyApi.Me.PlayerId, legacyApi.Me.BodyType, legacyApi.Me.Location, legacyApi.Me.Direction, legacyApi.Me.MovementType, legacyApi.Me.Color); SendToClient(drawPlayer.Serialize()); SendToClient(new Packet(new byte[] { 0x55 })); }
public void Can_deserialize_packet_without_any_optional_part() { var packet = new ObjectInfoPacket(); packet.Deserialize(ObjectInfoPacket); packet.Id.Should().Be(new ObjectId(0x4000000F)); packet.Type.Should().Be((ModelId)0x372A); packet.Amount.Should().Be(1); packet.Location.X.Should().Be(0x129B); packet.Location.Y.Should().Be(0x0551); packet.Location.Z.Should().Be(0x0A); packet.Flags.Should().HaveFlag(ObjectFlag.None); }
public void Can_materialize_packet_with_amount() { var packet = new ObjectInfoPacket(); packet.Deserialize(ObjectInfoPacketWithAmountWithFlag); packet.Id.Should().Be(new ObjectId(0x4000000B)); packet.Type.Should().Be((ModelId)0x0EED); packet.Amount.Should().Be(0x01F4); packet.Location.X.Should().Be(0x128A); packet.Location.Y.Should().Be(0x0542); packet.Location.Z.Should().Be(0x0A); packet.Flags.Should().HaveFlag(ObjectFlag.Movable); }
private void HandleObjectInfoPacket(ObjectInfoPacket packet) { if (gameObjects.TryGet(packet.Id, out GameObject existingObject) && existingObject is Item existingItem) { gameObjects.UpdateObject(existingItem.Update(packet.Type, packet.Amount, packet.Location, existingItem.Color, existingItem.ContainerId)); } else { var item = packet.Type == 0x2006 ? new Corpse(packet.Id, packet.Type, packet.Amount, packet.Location, packet.Dye, null, null) : new Item(packet.Id, packet.Type, packet.Amount, packet.Location, packet.Dye, null, null); gameObjects.AddObject(item); OnItemEnteredView(item); } }
private Packet?FilterItemShapes(Packet rawPacket) { if (enabled && rawPacket.Id == PacketDefinitions.ObjectInfo.Id) { var packet = PacketDefinitionRegistry.Materialize <ObjectInfoPacket>(rawPacket); foreach (var def in itemShapeShiftDefinitions) { if (def.SourceSpec.Matches(packet.Type)) { var newPacket = new ObjectInfoPacket(packet.Id, def.TargetType, packet.Location, def.TargetColor ?? packet.Dye); return(newPacket.RawPacket); } } } return(rawPacket); }
private void HandleObjectInfoPacket(ObjectInfoPacket packet) { if (gameObjects.TryGet(packet.Id, out var existingObject) && existingObject is Item existingItem) { // ObjectInfo packet holds information about items that are on ground, not in a container, so if // an item is in a container and it is updated by a ObjectInfo packet, the item has to be // taken out of the container and put on the ground. gameObjects.UpdateObject(existingItem.Update(packet.Type, packet.Amount, packet.Location, existingItem.Color, null)); } else { var item = packet.Type == 0x2006 ? new Corpse(packet.Id, packet.Type, packet.Amount, packet.Location, packet.Dye, null, null) : new Item(packet.Id, packet.Type, packet.Amount, packet.Location, packet.Dye, null, null); gameObjects.AddObject(item); OnItemEnteredView(item); } }
public void Can_deserialize_packet_with_facing() { var rawPacket = FakePackets.Instantiate(new byte[] { 0x1A, // packet 0x00, 0x0F, // size 0x40, 0x03, 0x24, 0xDD, // object id 0x19, 0x8A, // type 0x94, 0xEB, // xloc 0x0B, 0xD0, // yloc 0x01, // facing 0x00, // zloc }); var packet = new ObjectInfoPacket(); packet.Deserialize(rawPacket); packet.Id.Should().Be(new ObjectId(0x400324dd)); packet.Type.Should().Be((ModelId)0x198a); packet.Location.X.Should().Be(0x14EB); packet.Location.Y.Should().Be(0x0bd0); packet.Location.Z.Should().Be(0x00); }
public void ObjectInfo(ObjectId id, ModelId type, Location3D location, Color?color) { ObjectInfoPacket packet = new ObjectInfoPacket(id, type, location, color); Send(packet.RawPacket); }
internal void ObjectInfo(ObjectId id, ModelId type, int amount, Location3D location, Color color) { var packet = new ObjectInfoPacket(id, type, location, color, (ushort)amount); sendPacket(packet.RawPacket.Payload); }