diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index a03752a483..d8098857b4 100755 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs @@ -115,6 +115,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments return; m_invAccessModule = m_scene.RequestModuleInterface(); + if (m_invAccessModule is null) + { + Enabled = false; + m_scene.UnregisterModuleInterface(this); + m_scene.EventManager.OnNewClient -= SubscribeToClientEvents; + m_scene.EventManager.OnStartScript -= OnScriptStarted; + m_scene.EventManager.OnStopScript -= OnScriptStopped; + m_log.WarnFormat("[ATTACHMENTS MODULE]: InventoryService unvailable!. Module disabled"); + return; + } + m_regionConsole = scene.RequestModuleInterface(); if (m_regionConsole is not null) { diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index a788d2951f..496cf4031c 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -315,9 +315,16 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) { InventoryItemBase item = m_Scene.InventoryService.GetItem(remoteClient.AgentId, itemID); - if (item == null || item.AssetID.IsZero()) + if (item is null || item.AssetID.IsZero()) return null; + if (attachment && (item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) != 0) + { + if (remoteClient is not null && remoteClient.IsActive) + remoteClient.SendAlertMessage("You can't attach multiple objects to one spot"); + return null; + } + string userAssetServer; if (IsForeignUser(remoteClient.AgentId, out userAssetServer)) { diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 772e432314..ce49cf02e6 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -923,9 +923,16 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess // m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID); InventoryItemBase item = m_Scene.InventoryService.GetItem(remoteClient.AgentId, itemID); - if (item == null) + if (item is null) return null; + if (attachment && (item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) != 0) + { + if (remoteClient is not null && remoteClient.IsActive) + remoteClient.SendAlertMessage("You can't attach multiple objects to one spot"); + return null; + } + item.Owner = remoteClient.AgentId; return RezObject(