aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs70
1 files changed, 39 insertions, 31 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 1287709..8b53edc 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3424,53 +3424,61 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3424 3424
3425 m_host.AddScriptLPS(1); 3425 m_host.AddScriptLPS(1);
3426 3426
3427 int implicitPerms = 0;
3428
3427 if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar) 3429 if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar)
3428 { 3430 {
3429 // When attached, certain permissions are implicit if requested from owner 3431 // When attached, certain permissions are implicit if requested from owner
3430 int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | 3432 implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS |
3431 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 3433 ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3432 ScriptBaseClass.PERMISSION_CONTROL_CAMERA | 3434 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3433 ScriptBaseClass.PERMISSION_ATTACH; 3435 ScriptBaseClass.PERMISSION_ATTACH;
3434 3436 }
3435 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms 3437 else
3438 {
3439 bool sitting = false;
3440 if (m_host.SitTargetAvatar == agentID)
3436 { 3441 {
3437 lock (m_host.TaskInventory) 3442 sitting = true;
3443 }
3444 else
3445 {
3446 foreach (SceneObjectPart p in m_host.ParentGroup.Parts)
3438 { 3447 {
3439 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; 3448 if (p.SitTargetAvatar == agentID)
3440 m_host.TaskInventory[m_item.ItemID].PermsMask = perm; 3449 sitting = true;
3441 } 3450 }
3451 }
3442 3452
3443 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( 3453 if (sitting)
3444 "run_time_permissions", new Object[] { 3454 {
3445 new LSL_Integer(perm) }, 3455 // When agent is sitting, certain permissions are implicit if requested from sitting agent
3446 new DetectParams[0])); 3456 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3447 3457 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3448 return; 3458 ScriptBaseClass.PERMISSION_TRACK_CAMERA |
3459 ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
3460 }
3461 else
3462 {
3463 if (World.GetExtraSetting("auto_grant_attach_perms") == "true")
3464 implicitPerms = ScriptBaseClass.PERMISSION_ATTACH;
3449 } 3465 }
3450 } 3466 }
3451 else if (m_host.SitTargetAvatar == agentID) // Sitting avatar
3452 {
3453 // When agent is sitting, certain permissions are implicit if requested from sitting agent
3454 int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
3455 ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
3456 ScriptBaseClass.PERMISSION_TRACK_CAMERA |
3457 ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
3458 3467
3459 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms 3468 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
3469 {
3470 lock (m_host.TaskInventory)
3460 { 3471 {
3461 lock (m_host.TaskInventory) 3472 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
3462 { 3473 m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
3463 m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; 3474 }
3464 m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
3465 }
3466 3475
3467 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( 3476 m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
3468 "run_time_permissions", new Object[] { 3477 "run_time_permissions", new Object[] {
3469 new LSL_Integer(perm) }, 3478 new LSL_Integer(perm) },
3470 new DetectParams[0])); 3479 new DetectParams[0]));
3471 3480
3472 return; 3481 return;
3473 }
3474 } 3482 }
3475 3483
3476 ScenePresence presence = World.GetScenePresence(agentID); 3484 ScenePresence presence = World.GetScenePresence(agentID);