aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/ISceneEntity.cs1
-rw-r--r--OpenSim/Framework/ISceneObject.cs6
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs5
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs27
8 files changed, 50 insertions, 21 deletions
diff --git a/OpenSim/Framework/ISceneEntity.cs b/OpenSim/Framework/ISceneEntity.cs
index c0ea302..a9f21d2 100644
--- a/OpenSim/Framework/ISceneEntity.cs
+++ b/OpenSim/Framework/ISceneEntity.cs
@@ -34,6 +34,7 @@ namespace OpenSim.Framework
34 string Name { get; set; } 34 string Name { get; set; }
35 UUID UUID { get; } 35 UUID UUID { get; }
36 uint LocalId { get; } 36 uint LocalId { get; }
37
37 Vector3 AbsolutePosition { get; } 38 Vector3 AbsolutePosition { get; }
38 } 39 }
39} 40}
diff --git a/OpenSim/Framework/ISceneObject.cs b/OpenSim/Framework/ISceneObject.cs
index 18631f1..afac9b8 100644
--- a/OpenSim/Framework/ISceneObject.cs
+++ b/OpenSim/Framework/ISceneObject.cs
@@ -33,6 +33,12 @@ namespace OpenSim.Framework
33 public interface ISceneObject 33 public interface ISceneObject
34 { 34 {
35 UUID UUID { get; } 35 UUID UUID { get; }
36
37 /// <summary>
38 /// The owner of this object.
39 /// </summary>
40 UUID OwnerID { get; set; }
41
36 ISceneObject CloneForNewScene(); 42 ISceneObject CloneForNewScene();
37 string ToXml2(); 43 string ToXml2();
38 string ExtraToXmlString(); 44 string ExtraToXmlString();
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 7760382..cdecd2f 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -384,9 +384,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
384 if (m_debugPermissions) 384 if (m_debugPermissions)
385 m_log.Debug("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName); 385 m_log.Debug("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName);
386 } 386 }
387 387
388 // Checks if the given group is active and if the user is a group member 388 /// <summary>
389 // with the powers requested (powers = 0 for no powers check) 389 /// Checks if the given group is active and if the user is a group member
390 /// with the powers requested (powers = 0 for no powers check)
391 /// </summary>
392 /// <param name="groupID"></param>
393 /// <param name="userID"></param>
394 /// <param name="powers"></param>
395 /// <returns></returns>
390 protected bool IsGroupMember(UUID groupID, UUID userID, ulong powers) 396 protected bool IsGroupMember(UUID groupID, UUID userID, ulong powers)
391 { 397 {
392 if (null == m_groupsModule) 398 if (null == m_groupsModule)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b43b227..4914d65 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2776,7 +2776,6 @@ namespace OpenSim.Region.Framework.Scenes
2776 2776
2777 public virtual void SubscribeToClientParcelEvents(IClientAPI client) 2777 public virtual void SubscribeToClientParcelEvents(IClientAPI client)
2778 { 2778 {
2779 client.OnObjectGroupRequest += m_sceneGraph.HandleObjectGroupUpdate;
2780 client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel; 2779 client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel;
2781 client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime; 2780 client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime;
2782 client.OnParcelBuy += ProcessParcelBuy; 2781 client.OnParcelBuy += ProcessParcelBuy;
@@ -2903,7 +2902,6 @@ namespace OpenSim.Region.Framework.Scenes
2903 2902
2904 public virtual void UnSubscribeToClientParcelEvents(IClientAPI client) 2903 public virtual void UnSubscribeToClientParcelEvents(IClientAPI client)
2905 { 2904 {
2906 client.OnObjectGroupRequest -= m_sceneGraph.HandleObjectGroupUpdate;
2907 client.OnParcelReturnObjectsRequest -= LandChannel.ReturnObjectsInParcel; 2905 client.OnParcelReturnObjectsRequest -= LandChannel.ReturnObjectsInParcel;
2908 client.OnParcelSetOtherCleanTime -= LandChannel.SetParcelOtherCleanTime; 2906 client.OnParcelSetOtherCleanTime -= LandChannel.SetParcelOtherCleanTime;
2909 client.OnParcelBuy -= ProcessParcelBuy; 2907 client.OnParcelBuy -= ProcessParcelBuy;
@@ -4287,7 +4285,7 @@ namespace OpenSim.Region.Framework.Scenes
4287 /// Get a scene object group that contains the prim with the given local id 4285 /// Get a scene object group that contains the prim with the given local id
4288 /// </summary> 4286 /// </summary>
4289 /// <param name="localID"></param> 4287 /// <param name="localID"></param>
4290 /// <returns>null if no scene object group containing that prim is found</returns> 4288 /// <returns>null if no scene object group containing that prim is found</returns>
4291 public SceneObjectGroup GetGroupByPrim(uint localID) 4289 public SceneObjectGroup GetGroupByPrim(uint localID)
4292 { 4290 {
4293 return m_sceneGraph.GetGroupByPrim(localID); 4291 return m_sceneGraph.GetGroupByPrim(localID);
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index af95c28..a3e4b46 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -575,20 +575,6 @@ namespace OpenSim.Region.Framework.Scenes
575 } 575 }
576 } 576 }
577 577
578 protected internal void HandleObjectGroupUpdate(
579 IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage)
580 {
581 if (!remoteClient.IsGroupMember(GroupID))
582 return;
583
584 SceneObjectGroup group = GetGroupByPrim(objectLocalID);
585 if (group != null)
586 {
587 if (group.OwnerID == remoteClient.AgentId)
588 group.SetGroup(GroupID, remoteClient);
589 }
590 }
591
592 protected internal ScenePresence CreateAndAddChildScenePresence( 578 protected internal ScenePresence CreateAndAddChildScenePresence(
593 IClientAPI client, AvatarAppearance appearance, PresenceType type) 579 IClientAPI client, AvatarAppearance appearance, PresenceType type)
594 { 580 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 7bf8c34..abea788 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3211,6 +3211,8 @@ namespace OpenSim.Region.Framework.Scenes
3211 part.Inventory.ChangeInventoryGroup(GroupID); 3211 part.Inventory.ChangeInventoryGroup(GroupID);
3212 } 3212 }
3213 3213
3214 HasGroupChanged = true;
3215
3214 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled 3216 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
3215 // for the same object with very different properties. The caller must schedule the update. 3217 // for the same object with very different properties. The caller must schedule the update.
3216 //ScheduleGroupForFullUpdate(); 3218 //ScheduleGroupForFullUpdate();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 598b310..b29ecc6 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3344,6 +3344,11 @@ namespace OpenSim.Region.Framework.Scenes
3344 3344
3345 public void SetGroup(UUID groupID, IClientAPI client) 3345 public void SetGroup(UUID groupID, IClientAPI client)
3346 { 3346 {
3347 // Scene.AddNewPrims() calls with client == null so can't use this.
3348// m_log.DebugFormat(
3349// "[SCENE OBJECT PART]: Setting group for {0} to {1} for {2}",
3350// Name, groupID, OwnerID);
3351
3347 GroupID = groupID; 3352 GroupID = groupID;
3348 if (client != null) 3353 if (client != null)
3349 SendPropertiesToClient(client); 3354 SendPropertiesToClient(client);
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 8baeaa4..9969a15 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -218,6 +218,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
218 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 218 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
219 219
220 client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; 220 client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest;
221 client.OnObjectGroupRequest += HandleObjectGroupUpdate;
221 client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; 222 client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest;
222 client.OnDirFindQuery += OnDirFindQuery; 223 client.OnDirFindQuery += OnDirFindQuery;
223 client.OnRequestAvatarProperties += OnRequestAvatarProperties; 224 client.OnRequestAvatarProperties += OnRequestAvatarProperties;
@@ -225,7 +226,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
225 // Used for Notices and Group Invites/Accept/Reject 226 // Used for Notices and Group Invites/Accept/Reject
226 client.OnInstantMessage += OnInstantMessage; 227 client.OnInstantMessage += OnInstantMessage;
227 228
228 // Send client thier groups information. 229 // Send client their groups information.
229 SendAgentGroupDataUpdate(client, client.AgentId); 230 SendAgentGroupDataUpdate(client, client.AgentId);
230 } 231 }
231 232
@@ -328,6 +329,30 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
328 remoteClient.SendGroupNameReply(GroupID, GroupName); 329 remoteClient.SendGroupNameReply(GroupID, GroupName);
329 } 330 }
330 331
332 private void HandleObjectGroupUpdate(
333 IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage)
334 {
335 GroupMembershipData gmd = GetMembershipData(GroupID, remoteClient.AgentId);
336
337 if (gmd == null)
338 {
339// m_log.WarnFormat(
340// "[GROUPS]: User {0} is not a member of group {1} so they can't update {2} to this group",
341// remoteClient.Name, GroupID, objectLocalID);
342
343 return;
344 }
345
346 SceneObjectGroup so = ((Scene)remoteClient.Scene).GetGroupByPrim(objectLocalID);
347 if (so != null)
348 {
349 if (so.OwnerID == remoteClient.AgentId)
350 {
351 so.SetGroup(GroupID, remoteClient);
352 }
353 }
354 }
355
331 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) 356 private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
332 { 357 {
333 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 358 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);