OsSetLinkSitActiveRange

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
 
(2 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
|function_syntax=osSetLinkSitActiveRange(integer linkNumber, float range)
 
|function_syntax=osSetLinkSitActiveRange(integer linkNumber, float range)
 
|csharp_syntax=
 
|csharp_syntax=
|description= sets a limit on how far a avatar can be to have a sit request accepted
+
|description= sets a limit on how far a avatar can be to have a sit request accepted, or disable sits
 
* linkNumber is link number of the prim to change or one of LINK_SET,LINK_ROOT, LINK_ALL_OTHERS,LINK_ALL_CHILDREN or LINK_THIS
 
* linkNumber is link number of the prim to change or one of LINK_SET,LINK_ROOT, LINK_ALL_OTHERS,LINK_ALL_CHILDREN or LINK_THIS
 
* range > 0: if a avatar if far from the prim by more than that value, a sit request is silent ignored
 
* range > 0: if a avatar if far from the prim by more than that value, a sit request is silent ignored
Line 11: Line 11:
 
|permissions= true
 
|permissions= true
 
|delay=0
 
|delay=0
|ossl_example=
+
|ossl_example=<source lang="lsl">
 +
// Example of osSetLinkSitActiveRange
 +
 
 +
vector target = <0.0, 0.3, 0.55>;  // Target position where avatars will sit
 +
vector rotate = <0.0, 0.0, 90.0>;  // Rotation of the sitting avatar
 +
float active_link_range = 5.0;    // Initial active link range
 +
integer link = 2;                  // Link number of the prim
 +
key avatar;                        // Key of the avatar currently sitting
 +
 
 +
// Function to debug and display active link range for an avatar
 +
debug(string name)
 +
{
 +
    active_link_range = osGetLinkSitActiveRange(link);
 +
    llOwnerSay("active_link_range for avatar " + name + " is " + (string)active_link_range);
 +
}
 +
 
 +
default
 +
{
 +
    state_entry()
 +
    {
 +
        // Stand up any avatars currently sitting on the prim
 +
        llUnSit(llAvatarOnSitTarget());
 +
       
 +
        // Set click action to allow sitting on the prim
 +
        llSetClickAction(CLICK_ACTION_SIT);
 +
       
 +
        // Set the sit target and rotation for the linked prim
 +
        llLinkSitTarget(link, target, llEuler2Rot((rotate * DEG_TO_RAD)));
 +
       
 +
        // Set the initial active sit range for the linked prim
 +
        osSetLinkSitActiveRange(link, active_link_range);
 +
    }
 +
 +
    changed(integer change)
 +
    {
 +
        // Check if a link has been changed
 +
        if (change & CHANGED_LINK)
 +
        {
 +
            // Get the key of the avatar sitting on the prim
 +
            key user = llAvatarOnSitTarget();
 +
 +
            // If an avatar is sitting on the prim
 +
            if (user != NULL_KEY)
 +
            {
 +
                avatar = user;
 +
                debug(osKey2Name(avatar)); // Debug and display active link range
 +
            }
 +
            // If no avatar is sitting on the prim
 +
            else if (user == NULL_KEY)
 +
            {
 +
                debug(osKey2Name(avatar)); // Debug and display active link range
 +
                avatar = NULL_KEY;
 +
            }
 +
            // Reset the script if an unexpected condition occurs
 +
            else
 +
            {
 +
                llResetScript();
 +
            }
 +
        }
 +
    }
 +
}
 +
</source>
 
|additional_info=This function was added in 0.9.2.0
 
|additional_info=This function was added in 0.9.2.0
 
}}
 
}}

Latest revision as of 23:53, 5 March 2024

osSetLinkSitActiveRange(integer linkNumber, float range)
sets a limit on how far a avatar can be to have a sit request accepted, or disable sits
  • linkNumber is link number of the prim to change or one of LINK_SET,LINK_ROOT, LINK_ALL_OTHERS,LINK_ALL_CHILDREN or LINK_THIS
  • range > 0: if a avatar if far from the prim by more than that value, a sit request is silent ignored
  • range == 0: disables this limit. Region default is used. Current that is unlimited if a sit target is set or physics can sit the avatar, otherwise 10m
  • range < 0: sits are disabled. Requests are silently ignored

this value is stored on the prim, even if the script is removed

Threat Level None
Permissions Use of this function is always allowed by default
Extra Delay 0 seconds
Example(s)
// Example of osSetLinkSitActiveRange
 
vector target = <0.0, 0.3, 0.55>;  // Target position where avatars will sit
vector rotate = <0.0, 0.0, 90.0>;   // Rotation of the sitting avatar
float active_link_range = 5.0;     // Initial active link range
integer link = 2;                  // Link number of the prim
key avatar;                        // Key of the avatar currently sitting
 
// Function to debug and display active link range for an avatar
debug(string name)
{
    active_link_range = osGetLinkSitActiveRange(link);
    llOwnerSay("active_link_range for avatar " + name + " is " + (string)active_link_range);
}
 
default
{
    state_entry()
    {
        // Stand up any avatars currently sitting on the prim
        llUnSit(llAvatarOnSitTarget());
 
        // Set click action to allow sitting on the prim
        llSetClickAction(CLICK_ACTION_SIT);
 
        // Set the sit target and rotation for the linked prim
        llLinkSitTarget(link, target, llEuler2Rot((rotate * DEG_TO_RAD)));
 
        // Set the initial active sit range for the linked prim
        osSetLinkSitActiveRange(link, active_link_range);
    }
 
    changed(integer change)
    {
        // Check if a link has been changed
        if (change & CHANGED_LINK)
        {
            // Get the key of the avatar sitting on the prim
            key user = llAvatarOnSitTarget();
 
            // If an avatar is sitting on the prim
            if (user != NULL_KEY)
            {
                avatar = user;
                debug(osKey2Name(avatar)); // Debug and display active link range
            }
            // If no avatar is sitting on the prim
            else if (user == NULL_KEY)
            {
                debug(osKey2Name(avatar)); // Debug and display active link range
                avatar = NULL_KEY;
            }
            // Reset the script if an unexpected condition occurs
            else
            {
                llResetScript();
            }
        }
    }
}
Notes
This function was added in 0.9.2.0
Personal tools
General
About This Wiki