llSetRegionPos

From Second Life Wiki
Jump to navigation Jump to search

Summary

Function: integer llSetRegionPos( vector position );

Tries to move the entire object so that the root prim is within 0.1m of position.
Returns an integer boolean, TRUE if the object is successfully placed within 0.1 m of position, FALSE otherwise. See #Specification for details.

• vector position position in region coordinates

Only if TRUE is returned does the object move, if FALSE is returned, the object does not change position.

Specification

The object with the script will move the root prim position to the given location. The position is any position within the region. If the position is below ground, it will be set to the ground level at that X,Y spot. The function has no delay or throttle.

  • Returns TRUE if the object is successfully placed within 0.1 m of position.
  • Returns FALSE and does not move the object if...
    • position is more than 10m off region or above 4096m.
      • The x & y components of position must be in the range [-10.0, 266.0].[1]
      • The z component must be in the range [0.0, 4096].
    • the object is dynamic (has physics enabled).
    • the object can not move to position due to parcel/region restrictions (object entry rules, prim limits, bans, etc).
    • the object is an avatar attachment.
  • Returns FALSE and moves the object if the z position is below the ground .

Examples

default
{
    touch_start(integer num_detected)
    {
        vector currentPosition = llGetPos();

        // check whether the object has successfully been moved
        // to the center of the sim at the same height
        integer hasMoved = llSetRegionPos(<128.0, 128.0, currentPosition.z>);

        if (hasMoved)
        {
            llOwnerSay("My new position is now:\n"
                + "http://maps.secondlife.com/secondlife/" + llEscapeURL(llGetRegionName())
                + "/128/128/" + (string)llRound(currentPosition.z) + "/");
        }
        else if ( currentPosition.z < llGround(ZERO_VECTOR) )
        {
            llOwnerSay("My new position is now:\n"
                + "http://maps.secondlife.com/secondlife/" + llEscapeURL(llGetRegionName())
                + "/128/128/" + (string)llCeil(llGround(ZERO_VECTOR)) + "/");
        }
        else
            llOwnerSay("Move was not possible!");
    }
}

Notes

This function is intended to replace WarpPos.

See Also

Functions

•  llGetLocalPos Returns the prim's local position if it is attached or non-root (otherwise it returns the global position)
•  llGetRootPosition Gets the root prims position
•  llGetPos Returns the prim's global position, even if it is attached or non-root
•  llSetPos
•  llEdgeOfWorld

Deep Notes

History

  • New LSL function integer llSetRegionPos(vector position) in Second Life Server 12.01.24.248357
    The object with the script will move the root prim position to the given location. The position is any position within the region. If the position is below ground, it will be set to the ground level at that X,Y spot. The function has no delay or throttle.
    • Returns 1 if the object is successfully placed within 0.1 m of position.
    • Returns 0 and does not move the object if position is more than 10m off region or above 4096m.
    • Returns 0 and does not move the object if the object is dynamic (has physics enabled).
    • Returns 0 and does not move the object if the object can not move to position due to object entry rules, prim limits, bans, etc.

Footnotes

  1. ^ The ranges in this article are written in Interval Notation.

Signature

function integer llSetRegionPos( vector position );