aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie2012-08-15 18:22:52 +0200
committerMelanie2012-08-15 18:22:52 +0200
commit44dc138d8b7a957f9db39fd1a017c0267dfd0829 (patch)
tree1b4b893b0ecbc1ef97a9d42dfb9767f3b133f52a /OpenSim/Region
parentAdd support for the extra params to scene and the event manager (diff)
downloadopensim-SC-44dc138d8b7a957f9db39fd1a017c0267dfd0829.zip
opensim-SC-44dc138d8b7a957f9db39fd1a017c0267dfd0829.tar.gz
opensim-SC-44dc138d8b7a957f9db39fd1a017c0267dfd0829.tar.bz2
opensim-SC-44dc138d8b7a957f9db39fd1a017c0267dfd0829.tar.xz
Let the temp attachment module add a command to allow attaching without permissions and add support for this (incomplete!) to LSL
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs41
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs51
2 files changed, 60 insertions, 32 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
index 68a484a..417b620 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs
@@ -43,15 +43,13 @@ using OpenSim.Region.Framework.Scenes;
43 43
44namespace OpenSim.Region.OptionalModules.Avatar.Attachments 44namespace OpenSim.Region.OptionalModules.Avatar.Attachments
45{ 45{
46 /// <summary>
47 /// A module that just holds commands for inspecting avatar appearance.
48 /// </summary>
49 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "TempAttachmentsModule")] 46 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "TempAttachmentsModule")]
50 public class TempAttachmentsModule : INonSharedRegionModule 47 public class TempAttachmentsModule : INonSharedRegionModule
51 { 48 {
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 50
54 private Scene m_scene; 51 private Scene m_scene;
52 private IRegionConsole m_console;
55 53
56 public void Initialise(IConfigSource configSource) 54 public void Initialise(IConfigSource configSource)
57 { 55 {
@@ -74,6 +72,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
74 { 72 {
75 comms.RegisterScriptInvocation( this, "llAttachToAvatarTemp"); 73 comms.RegisterScriptInvocation( this, "llAttachToAvatarTemp");
76 m_log.DebugFormat("[TEMP ATTACHS]: Registered script functions"); 74 m_log.DebugFormat("[TEMP ATTACHS]: Registered script functions");
75 m_console = scene.RequestModuleInterface<IRegionConsole>();
76
77 if (m_console != null)
78 {
79 m_console.AddCommand("TempATtachModule", false, "set auto_grant_attach_perms", "set auto_grant_attach_perms true|false", "Allow objects owned by the region owner os estate managers to obtain attach permissions without asking the user", SetAutoGrantAttachPerms);
80 }
77 } 81 }
78 else 82 else
79 { 83 {
@@ -95,6 +99,37 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
95 get { return "TempAttachmentsModule"; } 99 get { return "TempAttachmentsModule"; }
96 } 100 }
97 101
102 private void SendConsoleOutput(UUID agentID, string text)
103 {
104 if (m_console == null)
105 return;
106
107 m_console.SendConsoleOutput(agentID, text);
108 }
109
110 private void SetAutoGrantAttachPerms(string module, string[] parms)
111 {
112 UUID agentID = new UUID(parms[parms.Length - 1]);
113 Array.Resize(ref parms, parms.Length - 1);
114
115 if (parms.Length != 3)
116 {
117 SendConsoleOutput(agentID, "Command parameter error");
118 return;
119 }
120
121 string val = parms[2];
122 if (val != "true" && val != "false")
123 {
124 SendConsoleOutput(agentID, "Command parameter error");
125 return;
126 }
127
128 m_scene.StoreExtraSetting("auto_grant_attach_perms", val);
129
130 SendConsoleOutput(agentID, String.Format("auto_grant_attach_perms set to {0}", val));
131 }
132
98 private void llAttachToAvatarTemp(UUID host, UUID script, int attachmentPoint) 133 private void llAttachToAvatarTemp(UUID host, UUID script, int attachmentPoint)
99 { 134 {
100 SceneObjectPart hostPart = m_scene.GetSceneObjectPart(host); 135 SceneObjectPart hostPart = m_scene.GetSceneObjectPart(host);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 54cb214..1115542 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3753,29 +3753,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3753 3753
3754 m_host.AddScriptLPS(1); 3754 m_host.AddScriptLPS(1);
3755 3755
3756 int implicitPerms = 0;
3757
3756 if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar) 3758 if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar)
3757 { 3759 {
3758 // When attached, certain permissions are implicit if requested from owner 3760 // When attached, certain permissions are implicit if requested from owner
3759 int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | 3761 implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS |
3760 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 3762 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3761 ScriptBaseClass.PERMISSION_CONTROL_CAMERA | 3763 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3762 ScriptBaseClass.PERMISSION_TRACK_CAMERA | 3764 ScriptBaseClass.PERMISSION_TRACK_CAMERA |
3763 ScriptBaseClass.PERMISSION_ATTACH; 3765 ScriptBaseClass.PERMISSION_ATTACH;
3764 3766
3765 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
3766 {
3767 m_host.TaskInventory.LockItemsForWrite(true);
3768 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
3769 m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
3770 m_host.TaskInventory.LockItemsForWrite(false);
3771
3772 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
3773 "run_time_permissions", new Object[] {
3774 new LSL_Integer(perm) },
3775 new DetectParams[0]));
3776
3777 return;
3778 }
3779 } 3767 }
3780 else 3768 else
3781 { 3769 {
@@ -3796,26 +3784,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3796 if (sitting) 3784 if (sitting)
3797 { 3785 {
3798 // When agent is sitting, certain permissions are implicit if requested from sitting agent 3786 // When agent is sitting, certain permissions are implicit if requested from sitting agent
3799 int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 3787 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3800 ScriptBaseClass.PERMISSION_CONTROL_CAMERA | 3788 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3801 ScriptBaseClass.PERMISSION_TRACK_CAMERA | 3789 ScriptBaseClass.PERMISSION_TRACK_CAMERA |
3802 ScriptBaseClass.PERMISSION_TAKE_CONTROLS; 3790 ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
3791 }
3792 else
3793 {
3794 if (World.GetExtraSetting("auto_grant_attach_perms") == "true")
3795 implicitPerms = ScriptBaseClass.PERMISSION_ATTACH;
3796 }
3797 }
3803 3798
3804 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms 3799 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
3805 { 3800 {
3806 m_host.TaskInventory.LockItemsForWrite(true); 3801 m_host.TaskInventory.LockItemsForWrite(true);
3807 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; 3802 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
3808 m_host.TaskInventory[m_item.ItemID].PermsMask = perm; 3803 m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
3809 m_host.TaskInventory.LockItemsForWrite(false); 3804 m_host.TaskInventory.LockItemsForWrite(false);
3810 3805
3811 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( 3806 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
3812 "run_time_permissions", new Object[] { 3807 "run_time_permissions", new Object[] {
3813 new LSL_Integer(perm) }, 3808 new LSL_Integer(perm) },
3814 new DetectParams[0])); 3809 new DetectParams[0]));
3815 3810
3816 return; 3811 return;
3817 }
3818 }
3819 } 3812 }
3820 3813
3821 ScenePresence presence = World.GetScenePresence(agentID); 3814 ScenePresence presence = World.GetScenePresence(agentID);