Difference between revisions of "LlRezObject"

From Second Life Wiki
Jump to navigation Jump to search
(Removing the mass delay. I talked to Falcon & Andrew Linden months ago and he said this has been removed for a long time.)
(See SVC-6578)
Line 1: Line 1:
{{Issues/SVC-3145}}{{LSL_Function/inventory|inventory|uuid=false|type=object}}
{{Issues/SVC-3145}}{{Issues/SVC-6578}}{{LSL_Function/inventory|inventory|uuid=false|type=object}}
{{LSL_Function
{{LSL_Function
|func_id=104|func_sleep=0.1|func_energy=200.0
|func_id=104|func_sleep=0.1|func_energy=200.0

Revision as of 07:54, 2 December 2010

Summary

Function: llRezObject( string inventory, vector pos, vector vel, rotation rot, integer param );
0.1 Forced Delay
200.0 Energy

Instantiate inventory object at pos with velocity vel and rotation rot with start parameter param

• string inventory an object in the inventory of the prim this script is in
• vector pos position (in region coordinates)
• vector vel velocity (max magnitude is approximately 200m/s)
• rotation rot rotation
• integer param on_rez event parameter and value returned by llGetStartParameter in the rezzed object (or by each of the items in a coalesced object).

The root of inventory is not at pos but the center of inventory is.
To have the root prim at pos use llRezAtRoot instead.

Caveats

  • This function causes the script to sleep for 0.1 seconds.
  • If inventory is missing from the prim's inventory or it is not an object then an error is shouted on DEBUG_CHANNEL.
  • Silently fails to rez inventory if pos is too far from the prim trying to rez inventory.
    • If your script is mysteriously failing to rez things, make sure you haven't (say) written "<0.0,0.0,1.0>" for the pos parameter rather than (say) llGetPos() + <0.0,0.0,1.0>".
    • The documented limit is 10 meters; however in at least some server versions experimentation reveals a larger limit that seems to be related to the size of the object doing the rezzing: See Notes for more info.
  • When scripting attachments meant to rez objects, remember that attachments move. You will need to use llGetPos() and add it to pos to obtain a faithful position for your rezzed object. When used in the root of an (attached) attachment llGetPos doesn't return the position of the attachment but instead returns the position of the avatar's bounding box geometric center. Read llGetPos and llParticleSystem Caveats for more information.
  • If the owner of the object does not have copy permission on inventory, the object will no longer be present in inventory after it is rezzed (so another attempt to rez (the same object) will fail); if the owner does have copy permission, then a copy is rezzed, and the original inventory remains in inventory.
  • Silently fails if you don't have offline building rights on the land.
    • Which means that you need to either:
      1. Own the land yourself.
      2. Be in the group that owns it, the allow group to build parcel flag has to be enabled and the object has to be set to group.
      3. Or everyone should be allowed to build.
      4. You can also deed the object to the group that owns the land, this will always work.
    • The group role "Always allow 'Create Objects'" will only work to override this when you are online. See SVC-3145 in the Issues subsection of Deep Notes for more information.

Examples

<lsl>default {

    touch_start(integer param)
    {
         llRezObject("Object", llGetPos() + <0.0,0.0,1.0>, <0.0,0.0,0.0>, <0.0,0.0,0.0,1.0>, 0);
    }

}</lsl> <lsl>// Rez an object on touch, with relative position, rotation, and velocity all described in the rezzing prim's coordinate system. string object = "Object"; // Name of object in inventory vector relativePosOffset = <2.0, 0.0, 1.0>; // "Forward" and a little "above" this prim vector relativeVel = <1.0, 0.0, 0.0>; // Traveling in this prim's "forward" direction at 1m/s rotation relativeRot = <0.707107, 0.0, 0.0, 0.707107>; // Rotated 90 degrees on the x-axis compared to this prim integer startParam = 10;

default {

   touch_start(integer a)
   {
       vector myPos = llGetPos();
       rotation myRot = llGetRot();
       vector rezPos = myPos+relativePosOffset*myRot;
       vector rezVel = relativeVel*myRot;
       rotation rezRot = relativeRot*myRot;
       llRezObject(object, rezPos, rezVel, rezRot, startParam);
   }
}</lsl>

Notes

Maximum rez distance

  • After tests on server 1.38, these figures were measured - (on some earlier server versions the same further-than-10-meter rezzes have been possible).
  • The distance measured is between the center of the rezzing prim and the center of the prim that is rezzed.
    • The tests did not include rezzing from or the rezzing of link_set objects.
    • A 10.0 meter cube could rez a 0.5 meter cube just beyond 18.6 meters away.
    • A 0.01 cube could rez a 0.5 meter cube just beyond 10.0 meters away.
  • There was seen to be a sliding scale between these figures. The max distance growing with the size of the rezzer.
  • Even if the attempted rez succeeds, the rezzed object may not be exactly at the pos ordered by the script. It seems that the accuracy of the final pos reduces the closer your ordered pos is to the maximum that would succeed. Such quirks as, whether the rezzing prim was snapped-to-grid or not even seemed to have an effect. As with everything in SL, experimentation is key.
  • Setting a script up to rez objects outside the previously established known maximum of 10.0 meters is something that you need to be aware may stop working at any time in the future. Without solid verification from Linden Labs, 10.0 meters should be considered a safe maximum distance.

See Also

Constants

•  PRIM_TEMP_ON_REZ

Events

•  object_rez triggered when this object rezzes an object from inventory

Functions

•  llRezAtRoot Rezzes the object at the requested position
•  llGetStartParameter
•  llGodLikeRezObject

Deep Notes

Signature

function void llRezObject( string inventory, vector pos, vector vel, rotation rot, integer param );