aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authordiva2009-02-10 22:54:05 +0000
committerdiva2009-02-10 22:54:05 +0000
commitb4be9baa4a8b10c99b9c9e471607b782c8c75851 (patch)
tree45e4d6834f281dee94f8375ffa7a4530a3280a86
parent* Remove load and save inventory commands from the console since these are ac... (diff)
downloadopensim-SC_OLD-b4be9baa4a8b10c99b9c9e471607b782c8c75851.zip
opensim-SC_OLD-b4be9baa4a8b10c99b9c9e471607b782c8c75851.tar.gz
opensim-SC_OLD-b4be9baa4a8b10c99b9c9e471607b782c8c75851.tar.bz2
opensim-SC_OLD-b4be9baa4a8b10c99b9c9e471607b782c8c75851.tar.xz
Fixes the problem of attachment offset after crossings/TPs. Hopefully it fixes mantis #3126, as well as other random displacements. The problem was that the new object at the receiving region was being marked as attachment before AttachObject was called. That made its AbsolutePosition be the position of the avie, and that was what was being given to AttachObject.
-rw-r--r--OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs5
-rw-r--r--OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs3
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs71
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs4
5 files changed, 43 insertions, 42 deletions
diff --git a/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs
index 3a9df4a..5c2fc1c 100644
--- a/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs
@@ -218,8 +218,9 @@ namespace OpenSim.Region.CoreModules.Communications.Local
218 { 218 {
219 if (s.RegionInfo.RegionHandle == regionHandle) 219 if (s.RegionInfo.RegionHandle == regionHandle)
220 { 220 {
221 //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); 221 //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject");
222 return s.IncomingCreateObject(sog); 222 ISceneObject sogClone = sog.CloneForNewScene();
223 return s.IncomingCreateObject(sogClone);
223 } 224 }
224 } 225 }
225 return false; 226 return false;
diff --git a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs
index b4f4814..8a4bb09 100644
--- a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs
@@ -223,8 +223,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST
223 public bool SendCreateObject(ulong regionHandle, ISceneObject sog) 223 public bool SendCreateObject(ulong regionHandle, ISceneObject sog)
224 { 224 {
225 // Try local first 225 // Try local first
226 ISceneObject sogClone = sog.CloneForNewScene(); 226 if (m_localBackend.SendCreateObject(regionHandle, sog))
227 if (m_localBackend.SendCreateObject(regionHandle, sogClone))
228 { 227 {
229 //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded"); 228 //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded");
230 return true; 229 return true;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b2d77f5..fd979a3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2168,7 +2168,7 @@ namespace OpenSim.Region.Framework.Scenes
2168 2168
2169 public bool IncomingCreateObject(ISceneObject sog) 2169 public bool IncomingCreateObject(ISceneObject sog)
2170 { 2170 {
2171 //Console.WriteLine(" >>> IncomingCreateObject <<<"); 2171 //Console.WriteLine(" >>> IncomingCreateObject <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted);
2172 SceneObjectGroup newObject; 2172 SceneObjectGroup newObject;
2173 try 2173 try
2174 { 2174 {
@@ -2201,7 +2201,6 @@ namespace OpenSim.Region.Framework.Scenes
2201 2201
2202 return false; 2202 return false;
2203 } 2203 }
2204
2205 // Force allocation of new LocalId 2204 // Force allocation of new LocalId
2206 // 2205 //
2207 foreach (SceneObjectPart p in sceneObject.Children.Values) 2206 foreach (SceneObjectPart p in sceneObject.Children.Values)
@@ -2209,59 +2208,57 @@ namespace OpenSim.Region.Framework.Scenes
2209 2208
2210 if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) 2209 if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim)
2211 { 2210 {
2212 if (sceneObject.RootPart.Shape.State != 0) 2211 if (sceneObject.RootPart.Shape.State != 0) // Attchment
2213 { 2212 {
2213
2214 sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez);
2215
2216 AddRestoredSceneObject(sceneObject, false, false);
2217
2218 // Handle attachment special case
2219 //
2220 //SceneObjectPart RootPrim = GetSceneObjectPart(primID);
2221 SceneObjectPart RootPrim = sceneObject.RootPart;
2222
2214 // Fix up attachment Parent Local ID 2223 // Fix up attachment Parent Local ID
2215 // 2224 //
2216 ScenePresence sp = GetScenePresence(sceneObject.OwnerID); 2225 ScenePresence sp = GetScenePresence(sceneObject.OwnerID);
2217 2226
2218 uint parentLocalID = 0; 2227 uint parentLocalID = 0;
2219 if (sp != null) 2228 if (sp != null)
2229 {
2220 parentLocalID = sp.LocalId; 2230 parentLocalID = sp.LocalId;
2221 2231
2222 sceneObject.RootPart.IsAttachment = true; 2232 //sceneObject.RootPart.IsAttachment = true;
2223 sceneObject.RootPart.SetParentLocalId(parentLocalID); 2233 //sceneObject.RootPart.SetParentLocalId(parentLocalID);
2224
2225 AddRestoredSceneObject(sceneObject, false, false);
2226
2227 // Handle attachment special case
2228 //
2229 SceneObjectPart RootPrim = GetSceneObjectPart(primID);
2230 //SceneObjectPart RootPrim = sceneObject.RootPart;
2231 2234
2232 if (RootPrim != null) 2235 SceneObjectGroup grp = sceneObject;
2233 {
2234 SceneObjectGroup grp = RootPrim.ParentGroup;
2235 2236
2236 RootPrim.SetParentLocalId(parentLocalID); 2237 //RootPrim.SetParentLocalId(parentLocalID);
2237 2238
2238 if (grp != null) 2239 m_log.DebugFormat("[ATTACHMENT]: Received " +
2239 {
2240 m_log.DebugFormat("[ATTACHMENT]: Received " +
2241 "attachment {0}, inworld asset id {1}", 2240 "attachment {0}, inworld asset id {1}",
2242 //grp.RootPart.LastOwnerID.ToString(), 2241 //grp.RootPart.LastOwnerID.ToString(),
2243 grp.GetFromAssetID(), 2242 grp.GetFromAssetID(),
2244 grp.UUID.ToString()); 2243 grp.UUID.ToString());
2245 2244
2246 if (sp != null) 2245 //grp.SetFromAssetID(grp.RootPart.LastOwnerID);
2247 { 2246 m_log.DebugFormat("[ATTACHMENT]: Attach " +
2248 //grp.SetFromAssetID(grp.RootPart.LastOwnerID); 2247 "to avatar {0} at position {1}",
2249 m_log.DebugFormat("[ATTACHMENT]: Attach " + 2248 sp.UUID.ToString(), grp.AbsolutePosition);
2250 "to avatar {0}", 2249 AttachObject(sp.ControllingClient,
2251 sp.UUID.ToString()); 2250 grp.LocalId, (uint)0,
2252 AttachObject(sp.ControllingClient, 2251 grp.GroupRotation,
2253 grp.LocalId, (uint)0, 2252 grp.AbsolutePosition, false);
2254 grp.GroupRotation, 2253 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2255 grp.AbsolutePosition, false); 2254 grp.SendGroupFullUpdate();
2256 grp.SendGroupFullUpdate(); 2255 }
2257 } 2256 else
2258 else 2257 {
2259 { 2258 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2260 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2259 RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
2261 RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
2262 }
2263 }
2264 } 2260 }
2261
2265 } 2262 }
2266 else 2263 else
2267 { 2264 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index c3485ab..e1362f9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -309,7 +309,7 @@ namespace OpenSim.Region.Framework.Scenes
309 309
310 public string GetStateSnapshot() 310 public string GetStateSnapshot()
311 { 311 {
312 Console.WriteLine(" >>> GetStateSnapshot <<<"); 312 //Console.WriteLine(" >>> GetStateSnapshot <<<");
313 313
314 List<string> assemblies = new List<string>(); 314 List<string> assemblies = new List<string>();
315 Dictionary<UUID, string> states = new Dictionary<UUID, string>(); 315 Dictionary<UUID, string> states = new Dictionary<UUID, string>();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 520b228..997cce5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1717,6 +1717,9 @@ namespace OpenSim.Region.Framework.Scenes
1717 if (m_rootPart == null) 1717 if (m_rootPart == null)
1718 return; 1718 return;
1719 1719
1720 if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0)
1721 return;
1722
1720 lock (m_parts) 1723 lock (m_parts)
1721 { 1724 {
1722 bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); 1725 bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
@@ -3036,6 +3039,7 @@ namespace OpenSim.Region.Framework.Scenes
3036 public virtual ISceneObject CloneForNewScene() 3039 public virtual ISceneObject CloneForNewScene()
3037 { 3040 {
3038 SceneObjectGroup sog = Copy(this.OwnerID, this.GroupID, false); 3041 SceneObjectGroup sog = Copy(this.OwnerID, this.GroupID, false);
3042 sog.m_isDeleted = false;
3039 return sog; 3043 return sog;
3040 } 3044 }
3041 3045