diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 32 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml | 3 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | 17 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 13 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 35 | ||||
-rw-r--r-- | bin/config-include/Standalone.ini | 40 |
6 files changed, 78 insertions, 62 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 3b7fe88..3c2cc42 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -67,6 +67,36 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
67 | get { return false; } | 67 | get { return false; } |
68 | } | 68 | } |
69 | 69 | ||
70 | public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, bool silent) | ||
71 | { | ||
72 | m_log.Debug("[ATTACHMENTS MODULE]: Invoking AttachObject"); | ||
73 | |||
74 | // If we can't take it, we can't attach it! | ||
75 | SceneObjectPart part = m_scene.GetSceneObjectPart(objectLocalID); | ||
76 | if (part == null) | ||
77 | return; | ||
78 | |||
79 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | ||
80 | return; | ||
81 | |||
82 | // Calls attach with a Zero position | ||
83 | if (AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) | ||
84 | { | ||
85 | m_scene.EventManager.TriggerOnAttach(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); | ||
86 | |||
87 | // Save avatar attachment information | ||
88 | ScenePresence presence; | ||
89 | if (m_scene.AvatarFactory != null && m_scene.TryGetAvatar(remoteClient.AgentId, out presence)) | ||
90 | { | ||
91 | m_log.Info( | ||
92 | "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId | ||
93 | + ", AttachmentPoint: " + AttachmentPt); | ||
94 | |||
95 | m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | ||
96 | } | ||
97 | } | ||
98 | } | ||
99 | |||
70 | public bool AttachObject( | 100 | public bool AttachObject( |
71 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) | 101 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) |
72 | { | 102 | { |
@@ -143,7 +173,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
143 | SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) | 173 | SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) |
144 | { | 174 | { |
145 | m_log.DebugFormat( | 175 | m_log.DebugFormat( |
146 | "[ATTACHMENTS MODULEY]: Updating inventory of {0} to show attachment of {1} (item ID {2})", | 176 | "[ATTACHMENTS MODULE]: Updating inventory of {0} to show attachment of {1} (item ID {2})", |
147 | remoteClient.Name, att.Name, itemID); | 177 | remoteClient.Name, att.Name, itemID); |
148 | 178 | ||
149 | if (!att.IsDeleted) | 179 | if (!att.IsDeleted) |
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml index 0195c03..aaa318c 100644 --- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml +++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml | |||
@@ -56,6 +56,9 @@ | |||
56 | <RegionModule id="RemotePresenceServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence.RemotePresenceServicesConnector" /> | 56 | <RegionModule id="RemotePresenceServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence.RemotePresenceServicesConnector" /> |
57 | <RegionModule id="LocalUserAccountServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts.LocalUserAccountServicesConnector" /> | 57 | <RegionModule id="LocalUserAccountServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts.LocalUserAccountServicesConnector" /> |
58 | <RegionModule id="RemoteUserAccountServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts.RemoteUserAccountServicesConnector" /> | 58 | <RegionModule id="RemoteUserAccountServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts.RemoteUserAccountServicesConnector" /> |
59 | |||
60 | <RegionModule id="LocalGridUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.GridUser.LocalGridUserServicesConnector" /> | ||
61 | |||
59 | <RegionModule id="LocalSimulationConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation.LocalSimulationConnectorModule" /> | 62 | <RegionModule id="LocalSimulationConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation.LocalSimulationConnectorModule" /> |
60 | <RegionModule id="RemoteSimulationConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation.RemoteSimulationConnectorModule" /> | 63 | <RegionModule id="RemoteSimulationConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation.RemoteSimulationConnectorModule" /> |
61 | <!-- Service connectors IN modules --> | 64 | <!-- Service connectors IN modules --> |
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 6cf2a2e..21c1056 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -35,17 +35,28 @@ namespace OpenSim.Region.Framework.Interfaces | |||
35 | public interface IAttachmentsModule | 35 | public interface IAttachmentsModule |
36 | { | 36 | { |
37 | /// <summary> | 37 | /// <summary> |
38 | /// Attach an object to an avatar from the world. | ||
39 | /// </summary> | ||
40 | /// <param name="controllingClient"></param> | ||
41 | /// <param name="localID"></param> | ||
42 | /// <param name="attachPoint"></param> | ||
43 | /// <param name="rot"></param> | ||
44 | /// <param name="silent"></param> | ||
45 | void AttachObject( | ||
46 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, bool silent); | ||
47 | |||
48 | /// <summary> | ||
38 | /// Attach an object to an avatar. | 49 | /// Attach an object to an avatar. |
39 | /// </summary> | 50 | /// </summary> |
40 | /// <param name="controllingClient"></param> | 51 | /// <param name="controllingClient"></param> |
41 | /// <param name="localID"></param> | 52 | /// <param name="localID"></param> |
42 | /// <param name="attachPoint"></param> | 53 | /// <param name="attachPoint"></param> |
43 | /// <param name="rot"></param> | 54 | /// <param name="rot"></param> |
44 | /// <param name="pos"></param> | 55 | /// <param name="attachPos"></param> |
45 | /// <param name="silent"></param> | 56 | /// <param name="silent"></param> |
46 | /// <returns>true if the object was successfully attached, false otherwise</returns> | 57 | /// <returns>true if the object was successfully attached, false otherwise</returns> |
47 | bool AttachObject( | 58 | bool AttachObject( |
48 | IClientAPI controllingClient, uint localID, uint attachPoint, Quaternion rot, Vector3 pos, bool silent); | 59 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent); |
49 | 60 | ||
50 | /// <summary> | 61 | /// <summary> |
51 | /// Update the user inventory to the attachment of an item | 62 | /// Update the user inventory to the attachment of an item |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 87a753e..d4d134f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2644,12 +2644,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2644 | public virtual void SubscribeToClientAttachmentEvents(IClientAPI client) | 2644 | public virtual void SubscribeToClientAttachmentEvents(IClientAPI client) |
2645 | { | 2645 | { |
2646 | client.OnRezSingleAttachmentFromInv += RezSingleAttachment; | 2646 | client.OnRezSingleAttachmentFromInv += RezSingleAttachment; |
2647 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; | 2647 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; |
2648 | client.OnObjectAttach += m_sceneGraph.AttachObject; | ||
2649 | client.OnObjectDetach += m_sceneGraph.DetachObject; | 2648 | client.OnObjectDetach += m_sceneGraph.DetachObject; |
2650 | 2649 | ||
2651 | if (AttachmentsModule != null) | 2650 | if (AttachmentsModule != null) |
2651 | { | ||
2652 | client.OnObjectAttach += AttachmentsModule.AttachObject; | ||
2652 | client.OnDetachAttachmentIntoInv += AttachmentsModule.ShowDetachInUserInventory; | 2653 | client.OnDetachAttachmentIntoInv += AttachmentsModule.ShowDetachInUserInventory; |
2654 | } | ||
2653 | } | 2655 | } |
2654 | 2656 | ||
2655 | public virtual void SubscribeToClientTeleportEvents(IClientAPI client) | 2657 | public virtual void SubscribeToClientTeleportEvents(IClientAPI client) |
@@ -2774,7 +2776,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2774 | client.OnRezObject -= RezObject; | 2776 | client.OnRezObject -= RezObject; |
2775 | } | 2777 | } |
2776 | 2778 | ||
2777 | |||
2778 | public virtual void UnSubscribeToClientInventoryEvents(IClientAPI client) | 2779 | public virtual void UnSubscribeToClientInventoryEvents(IClientAPI client) |
2779 | { | 2780 | { |
2780 | client.OnCreateNewInventoryItem -= CreateNewInventoryItem; | 2781 | client.OnCreateNewInventoryItem -= CreateNewInventoryItem; |
@@ -2799,12 +2800,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2799 | public virtual void UnSubscribeToClientAttachmentEvents(IClientAPI client) | 2800 | public virtual void UnSubscribeToClientAttachmentEvents(IClientAPI client) |
2800 | { | 2801 | { |
2801 | client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachments; | 2802 | client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachments; |
2802 | client.OnRezSingleAttachmentFromInv -= RezSingleAttachment; | 2803 | client.OnRezSingleAttachmentFromInv -= RezSingleAttachment; |
2803 | client.OnObjectAttach -= m_sceneGraph.AttachObject; | ||
2804 | client.OnObjectDetach -= m_sceneGraph.DetachObject; | 2804 | client.OnObjectDetach -= m_sceneGraph.DetachObject; |
2805 | 2805 | ||
2806 | if (AttachmentsModule != null) | 2806 | if (AttachmentsModule != null) |
2807 | { | ||
2808 | client.OnObjectAttach -= AttachmentsModule.AttachObject; | ||
2807 | client.OnDetachAttachmentIntoInv -= AttachmentsModule.ShowDetachInUserInventory; | 2809 | client.OnDetachAttachmentIntoInv -= AttachmentsModule.ShowDetachInUserInventory; |
2810 | } | ||
2808 | } | 2811 | } |
2809 | 2812 | ||
2810 | public virtual void UnSubscribeToClientTeleportEvents(IClientAPI client) | 2813 | public virtual void UnSubscribeToClientTeleportEvents(IClientAPI client) |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 380722d..a88d456 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -487,41 +487,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
487 | } | 487 | } |
488 | 488 | ||
489 | /// <summary> | 489 | /// <summary> |
490 | /// Event Handling routine for Attach Object | ||
491 | /// </summary> | ||
492 | /// <param name="remoteClient"></param> | ||
493 | /// <param name="objectLocalID"></param> | ||
494 | /// <param name="AttachmentPt"></param> | ||
495 | /// <param name="rot"></param> | ||
496 | protected internal void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, bool silent) | ||
497 | { | ||
498 | // If we can't take it, we can't attach it! | ||
499 | SceneObjectPart part = m_parentScene.GetSceneObjectPart(objectLocalID); | ||
500 | if (part == null) | ||
501 | return; | ||
502 | |||
503 | if (!m_parentScene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | ||
504 | return; | ||
505 | |||
506 | // Calls attach with a Zero position | ||
507 | if (m_parentScene.AttachmentsModule.AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) | ||
508 | { | ||
509 | m_parentScene.SendAttachEvent(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); | ||
510 | |||
511 | // Save avatar attachment information | ||
512 | ScenePresence presence; | ||
513 | if (m_parentScene.AvatarFactory != null && m_parentScene.TryGetAvatar(remoteClient.AgentId, out presence)) | ||
514 | { | ||
515 | m_log.Info( | ||
516 | "[SCENE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId | ||
517 | + ", AttachmentPoint: " + AttachmentPt); | ||
518 | |||
519 | m_parentScene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | ||
520 | } | ||
521 | } | ||
522 | } | ||
523 | |||
524 | /// <summary> | ||
525 | /// Rez an attachment | 490 | /// Rez an attachment |
526 | /// </summary> | 491 | /// </summary> |
527 | /// <param name="remoteClient"></param> | 492 | /// <param name="remoteClient"></param> |
diff --git a/bin/config-include/Standalone.ini b/bin/config-include/Standalone.ini index 54e11af..92c2154 100644 --- a/bin/config-include/Standalone.ini +++ b/bin/config-include/Standalone.ini | |||
@@ -5,17 +5,18 @@ | |||
5 | ;; | 5 | ;; |
6 | 6 | ||
7 | [Modules] | 7 | [Modules] |
8 | AssetServices = "LocalAssetServicesConnector" | 8 | AssetServices = "LocalAssetServicesConnector" |
9 | InventoryServices = "LocalInventoryServicesConnector" | 9 | InventoryServices = "LocalInventoryServicesConnector" |
10 | NeighbourServices = "LocalNeighbourServicesConnector" | 10 | NeighbourServices = "LocalNeighbourServicesConnector" |
11 | AuthenticationServices = "LocalAuthenticationServicesConnector" | 11 | AuthenticationServices = "LocalAuthenticationServicesConnector" |
12 | GridServices = "LocalGridServicesConnector" | 12 | GridServices = "LocalGridServicesConnector" |
13 | PresenceServices = "LocalPresenceServicesConnector" | 13 | PresenceServices = "LocalPresenceServicesConnector" |
14 | UserAccountServices = "LocalUserAccountServicesConnector" | 14 | UserAccountServices = "LocalUserAccountServicesConnector" |
15 | SimulationServices = "LocalSimulationConnectorModule" | 15 | GridUserServices = "LocalGridUserServicesConnector" |
16 | AvatarServices = "LocalAvatarServicesConnector" | 16 | SimulationServices = "LocalSimulationConnectorModule" |
17 | EntityTransferModule = "BasicEntityTransferModule" | 17 | AvatarServices = "LocalAvatarServicesConnector" |
18 | InventoryAccessModule = "BasicInventoryAccessModule" | 18 | EntityTransferModule = "BasicEntityTransferModule" |
19 | InventoryAccessModule = "BasicInventoryAccessModule" | ||
19 | LibraryModule = true | 20 | LibraryModule = true |
20 | LLLoginServiceInConnector = true | 21 | LLLoginServiceInConnector = true |
21 | 22 | ||
@@ -57,6 +58,9 @@ | |||
57 | GridService = "OpenSim.Services.GridService.dll:GridService" | 58 | GridService = "OpenSim.Services.GridService.dll:GridService" |
58 | InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService" | 59 | InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService" |
59 | 60 | ||
61 | [GridUserService] | ||
62 | LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService" | ||
63 | |||
60 | [FriendsService] | 64 | [FriendsService] |
61 | LocalServiceModule = "OpenSim.Services.FriendsService.dll" | 65 | LocalServiceModule = "OpenSim.Services.FriendsService.dll" |
62 | 66 | ||
@@ -64,14 +68,14 @@ | |||
64 | Connector = "OpenSim.Services.FriendsService.dll" | 68 | Connector = "OpenSim.Services.FriendsService.dll" |
65 | 69 | ||
66 | [LoginService] | 70 | [LoginService] |
67 | LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService" | 71 | LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService" |
68 | UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" | 72 | UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" |
69 | AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" | 73 | AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" |
70 | InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService" | 74 | InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService" |
71 | PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" | 75 | PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService" |
72 | GridService = "OpenSim.Services.GridService.dll:GridService" | 76 | GridService = "OpenSim.Services.GridService.dll:GridService" |
73 | AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" | 77 | AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" |
74 | FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" | 78 | FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" |
75 | 79 | ||
76 | WelcomeMessage = "Welcome, Avatar!" | 80 | WelcomeMessage = "Welcome, Avatar!" |
77 | 81 | ||