diff --git a/OpenMetaverse/ObjectManager.cs b/OpenMetaverse/ObjectManager.cs index 5cd983d0..e9f8e261 100644 --- a/OpenMetaverse/ObjectManager.cs +++ b/OpenMetaverse/ObjectManager.cs @@ -478,6 +478,49 @@ namespace OpenMetaverse Client.Network.SendPacket(select, simulator); } + /// + /// Sets an object's sale information + /// + /// + /// + /// + public void SetObjectSaleInfo(uint localID, SaleType saleType, int price) + { + ObjectSaleInfoPacket sale = new ObjectSaleInfoPacket(); + sale.AgentData.AgentID = Client.Self.AgentID; + sale.AgentData.SessionID = Client.Self.SessionID; + sale.ObjectData = new ObjectSaleInfoPacket.ObjectDataBlock[1]; + sale.ObjectData[0] = new ObjectSaleInfoPacket.ObjectDataBlock(); + sale.ObjectData[0].LocalID = localID; + sale.ObjectData[0].SalePrice = price; + sale.ObjectData[0].SaleType = (byte)saleType; + + Client.Network.SendPacket(sale); + } + + /// + /// Sets sale info for multiple objects + /// + /// + /// + /// + public void SetObjectSaleInfo(List localIDs, SaleType saleType, int price) + { + ObjectSaleInfoPacket sale = new ObjectSaleInfoPacket(); + sale.AgentData.AgentID = Client.Self.AgentID; + sale.AgentData.SessionID = Client.Self.SessionID; + sale.ObjectData = new ObjectSaleInfoPacket.ObjectDataBlock[localIDs.Count]; + for (int i = 0; i < localIDs.Count; i++) + { + sale.ObjectData[i] = new ObjectSaleInfoPacket.ObjectDataBlock(); + sale.ObjectData[i].LocalID = localIDs[i]; + sale.ObjectData[i].SalePrice = price; + sale.ObjectData[i].SaleType = (byte)saleType; + } + + Client.Network.SendPacket(sale); + } + /// /// Deselect an object /// @@ -2124,16 +2167,16 @@ namespace OpenMetaverse } } } + + //Do the actual removing outside of the loops but still inside the lock. + //This safely prevents the collection from being modified during a loop. + foreach (uint removeID in removeAvatars) + simulator.ObjectsAvatars.Dictionary.Remove(removeID); } } - //Do the actual removing outside of the loops but still inside the lock. - //This safely prevents the collection from being modified during a loop. - foreach (uint removeID in removeAvatars) - simulator.ObjectsAvatars.Remove(removeID); - foreach (uint removeID in removePrims) - simulator.ObjectsPrimitives.Remove(removeID); + simulator.ObjectsPrimitives.Dictionary.Remove(removeID); } } diff --git a/OpenMetaverse/Simulator.cs b/OpenMetaverse/Simulator.cs index 5db9930a..a0757fbb 100644 --- a/OpenMetaverse/Simulator.cs +++ b/OpenMetaverse/Simulator.cs @@ -636,7 +636,7 @@ namespace OpenMetaverse /// /// Sends a packet directly to the simulator without queuing /// - /// Packet to be sent + /// Packet to be sent public void SendPacketUnqueued(NetworkManager.OutgoingPacket outgoingPacket) { Packet packet = outgoingPacket.Packet;