diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index 000a800d45..bd4acd1382 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -57,7 +57,6 @@ namespace OpenSim.Framework public interface IScene { RegionInfo RegionInfo { get; } - uint NextAvatarLocalId { get; } RegionStatus Region_Status { get; set; } ClientManager ClientManager { get; } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index 68aee8654b..0c4e6db7c3 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -556,7 +556,12 @@ namespace OpenSim.Region.Environment.Modules.World.Land } lock (m_landList) { - return m_landList[m_landIDList[x, y]]; + // Corner case. If an autoreturn happens during sim startup + // we will come here with the list uninitialized + // + if (m_landList.ContainsKey(m_landIDList[x, y])) + return m_landList[m_landIDList[x, y]]; + return null; } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index c8285a3dc7..03d79f163d 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -269,6 +269,8 @@ namespace OpenSim.Region.Environment.Scenes { m_config = config; + Random random = new Random(); + m_lastAllocatedLocalId = (uint)(random.NextDouble() * (double)(uint.MaxValue/2))+(uint)(uint.MaxValue/4); m_moduleLoader = moduleLoader; m_authenticateHandler = authen; CommsManager = commsMan; @@ -2182,12 +2184,12 @@ namespace OpenSim.Region.Environment.Scenes // SceneObjectPart RootPrim = GetSceneObjectPart(primID); - RootPrim.SetParentLocalId(parentLocalID); - if (RootPrim != null) { SceneObjectGroup grp = RootPrim.ParentGroup; + RootPrim.SetParentLocalId(parentLocalID); + if (grp != null) { m_log.DebugFormat("[ATTACHMENT]: Received "+ @@ -2205,6 +2207,7 @@ namespace OpenSim.Region.Environment.Scenes grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); + grp.SendGroupFullUpdate(); } else { diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs index 6d1e808b1b..805ca5d559 100644 --- a/OpenSim/Region/Environment/Scenes/SceneBase.cs +++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs @@ -53,7 +53,7 @@ namespace OpenSim.Region.Environment.Scenes /// The last allocated local prim id. When a new local id is requested, the next number in the sequence is /// dispensed. /// - private uint m_lastAllocatedLocalId = 720000; + protected uint m_lastAllocatedLocalId = 720000; private readonly Mutex _primAllocateMutex = new Mutex(false); @@ -92,8 +92,6 @@ namespace OpenSim.Region.Environment.Scenes protected string m_datastore; - private uint m_nextAvatarLocalId = 8880000; - private AssetCache m_assetCache; public AssetCache AssetCache @@ -167,11 +165,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_regInfo; } } - public uint NextAvatarLocalId - { - get { return m_nextAvatarLocalId++; } - } - #region admin stuff /// diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 8b4eb72ded..b85fd93230 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -508,7 +508,7 @@ namespace OpenSim.Region.Environment.Scenes m_scene = world; m_uuid = client.AgentId; m_regionInfo = reginfo; - m_localId = m_scene.NextAvatarLocalId; + m_localId = m_scene.AllocateLocalId(); IGroupsModule gm = m_scene.RequestModuleInterface(); if (gm != null)