diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 70 |
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); |