diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 782a1af138..74d2629489 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -307,6 +307,11 @@ namespace OpenSim.Region.Framework.Scenes private bool m_isBackedUp; + public bool IsBackedUp + { + get { return m_isBackedUp; } + } + protected MapAndArray m_parts = new MapAndArray(); protected ulong m_regionHandle; @@ -3450,6 +3455,14 @@ namespace OpenSim.Region.Framework.Scenes bool god = Scene.Permissions.IsGod(AgentID); + if (field == 1 && god) + { + ForEachPart(part => + { + part.BaseMask = RootPart.BaseMask; + }); + } + AdjustChildPrimPermissions(); if (field == 1 && god) // Base mask was set. Update all child part inventories @@ -4374,6 +4387,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// When the physics engine has finished with it, the sculpt data is discarded to save memory. /// +/* public void CheckSculptAndLoad() { if (IsDeleted) @@ -4386,10 +4400,10 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart[] parts = m_parts.GetArray(); -// for (int i = 0; i < parts.Length; i++) -// parts[i].CheckSculptAndLoad(); + for (int i = 0; i < parts.Length; i++) + parts[i].CheckSculptAndLoad(); } - +*/ /// /// Set the user group to which this scene object belongs. /// diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 421ec794e3..0551c0bd1b 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -352,10 +352,11 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); } else { + d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); } @@ -425,7 +426,7 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); } else { @@ -858,6 +859,11 @@ namespace OpenSim.Region.Physics.OdePlugin private static Dictionary m_MeshToTriMeshMap = new Dictionary(); + public int BadAssetColideBits() + { + return (m_isphysical ? (int)CollisionCategories.Land : 0); + } + private void setMesh(OdeScene parent_scene, IMesh mesh) { // m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh); @@ -1139,7 +1145,7 @@ Console.WriteLine("ZProcessTaints for " + Name); if (prm.m_assetFailed) { d.GeomSetCategoryBits(prm.prim_geom, 0); - d.GeomSetCollideBits(prm.prim_geom, prm.BadMeshAssetCollideBits); + d.GeomSetCollideBits(prm.prim_geom, prm.BadAssetColideBits()); } else { @@ -1193,7 +1199,7 @@ Console.WriteLine("ZProcessTaints for " + Name); if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); } else { @@ -1395,7 +1401,7 @@ Console.WriteLine("ZProcessTaints for " + Name); if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); } else { @@ -2139,7 +2145,7 @@ Console.WriteLine(" JointCreateFixed"); } if (m_assetFailed) - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, BadAssetColideBits()); else d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); @@ -3367,4 +3373,4 @@ Console.WriteLine(" JointCreateFixed"); } } } -} \ No newline at end of file +}