Index: OpenSim.RegionServer/SimClient.cs =================================================================== --- OpenSim.RegionServer/SimClient.cs (revision 281) +++ OpenSim.RegionServer/SimClient.cs (working copy) @@ -310,6 +310,10 @@ FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; OpenSimRoot.Instance.InventoryCache.FetchInventoryDescendents(this, Fetch); break; + case PacketType.DeRezObject: + //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Received DeRezObject packet"); + OpenSimRoot.Instance.LocalWorld.DeRezObject((DeRezObjectPacket)Pack, this); + break; } } Index: OpenSim.RegionServer/world/World.cs =================================================================== --- OpenSim.RegionServer/world/World.cs (revision 281) +++ OpenSim.RegionServer/world/World.cs (working copy) @@ -197,8 +197,50 @@ //prim.PhysicsEnabled = true; this.Entities.Add(prim.uuid, prim); this._primCount++; - } + } + public void DeRezObject(DeRezObjectPacket DeRezPacket, SimClient AgentClient) + { + //Needs to delete object from physics at a later date + + libsecondlife.LLUUID [] DeRezEnts; + DeRezEnts = new libsecondlife.LLUUID[ DeRezPacket.ObjectData.Length ]; + int i = 0; + foreach( DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData ) + { + //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); + foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + { + if (ent.localid == Data.ObjectLocalID) + { + DeRezEnts[i++] = ent.uuid; + this.localStorage.RemovePrim(ent.uuid); + KillObjectPacket kill = new KillObjectPacket(); + kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; + kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); + kill.ObjectData[0].ID = ent.localid; + foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + { + client.OutPacket(kill); + } + //Uncommenting this means an old UUID will be re-used, thus crashing the asset server + //Uncomment when prim/object UUIDs are random or such + //2007-03-22 - Randomskk + //this._primCount--; + OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Deleted UUID " + ent.uuid); + } + } + } + foreach( libsecondlife.LLUUID uuid in DeRezEnts ) + { + lock (OpenSimRoot.Instance.LocalWorld.Entities) + { + //OpenSimRoot.Instance.LocalWorld.Entities.Remove(uuid); + } + } + + } + public bool Backup() {