OsTeleportObject

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
Line 42: Line 42:
 
* Zero means that a teleport to another region was started. result needs to be checked by other means (?)
 
* Zero means that a teleport to another region was started. result needs to be checked by other means (?)
 
* 1 did a local teleport
 
* 1 did a local teleport
 +
 +
this can do region crossings if the target position is on another region.
 +
since target position is in start region local coords, some simple math is needed
 +
 +
- on the target region, use llgetregioncorner to get its global coords
 +
- add to that vector the target position you want on that region local coords
 +
 +
- on the start region use llgetregioncorner to get its global coords
 +
- subtract that vector from the previus one.
 +
- result is the needed value for target position
 +
 +
you may notice that this may work also on regions that are far apart.
 +
but since it uses normal regions crossing code the operation is not pretty to see on viewer, so do avoid it
  
 
===== Restrictions: =====
 
===== Restrictions: =====
Line 51: Line 64:
 
* the object can not be selected at tp time
 
* the object can not be selected at tp time
  
make sure there is enough clear space on target position for the object to arrive
+
make sure there is enough clear space on target position for the object to rez
 
|
 
|
 
}}
 
}}

Revision as of 00:50, 18 April 2018

integer osTeleportObject(key objectUUID, vector targetPos, rotation rot, int flags)
...
Arguments:
  • objectUUID the id of the linkset to teleport
  • targetPos target position in region local coords
  • rot a rotation.
  • flags
Flags:
  • OSTPOBJ_NONE it is just 0
  • OSTPOBJ_STOPATTARRGET object is stopped at destination
  • OSTPOBJ_STOPONFAIL stops at start point if tp fails (still does nothing)
  • OSTPOBJ_SETROT the rotation is the final object rotation, otherwise is a added rotation
Threat Level Severe
Permissions ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
Extra Delay 0 seconds
Example(s)
// Example of osTeleportObject
 
default
{
    state_entry()
    {
       llSay(0, "Script running");
    }
    touch_start(integer num)
    {
        // target position in region local coords
        vector target =<873.911926, 879.844910, 21.332354>;  
        rotation rot =<0,0,0.707,.707>;
        osObjectTeleport(llGetKey(),target,rot,1);
    }
}
Notes
returns a integer error code:
  • negative the teleport failed
  • Zero means that a teleport to another region was started. result needs to be checked by other means (?)
  • 1 did a local teleport

this can do region crossings if the target position is on another region. since target position is in start region local coords, some simple math is needed

- on the target region, use llgetregioncorner to get its global coords - add to that vector the target position you want on that region local coords

- on the start region use llgetregioncorner to get its global coords - subtract that vector from the previus one. - result is the needed value for target position

you may notice that this may work also on regions that are far apart. but since it uses normal regions crossing code the operation is not pretty to see on viewer, so do avoid it

Restrictions:
  • if object has scripts, owner must have rights to run scripts on target location
  • object owner must have rights to enter ojects on target location
  • target location parcel must have enought free prims capacity for the linkset prims
  • all avatars siting on the object must have access to target location
  • has a cool down time. retries before expire reset it, and tp is ignored with error -2
  • the object can not be selected at tp time

make sure there is enough clear space on target position for the object to rez

Personal tools
General
About This Wiki