Difference between revisions of "LlRezObjectWithParams"

From Second Life Wiki
Jump to navigation Jump to search
m (no forced delay)
m (Specified limit to REZ_POS distance rather than only saying "too far.")
 
(6 intermediate revisions by 4 users not shown)
Line 3: Line 3:
{{LSL_Function/inventory|inventory|uuid=false|type=object}}
{{LSL_Function/inventory|inventory|uuid=false|type=object}}
{{LSL_Function/position|pos|region=*}}
{{LSL_Function/position|pos|region=*}}
|func_id=104|func_sleep=0.0|func_energy=200.0
|func_id=|func_sleep=0.1|func_energy=200.0
|func=llRezObjectWithParams|sort=RezObjectWithParams
|func=llRezObjectWithParams|sort=RezObjectWithParams
|return_type=key
|return_type=key
Line 9: Line 9:
|p2_type=list|p2_name=params
|p2_type=list|p2_name=params
|func_desc=Instantiate {{LSLP|inventory}} object at {{LSLP|pos}} with an initial set of parameters specified in {{LSLP|params}}.
|func_desc=Instantiate {{LSLP|inventory}} object at {{LSLP|pos}} with an initial set of parameters specified in {{LSLP|params}}.
{{LSLP|pos}} will default to the position of the object containing the script, unless REZ_POS is specified. (see below)
|return_text=which will be the key of the object when it is successfully rezzed in the world.
|return_text=which will be the key of the object when it is successfully rezzed in the world.
|spec=  
|spec=  
{{:LSL Constants/llRezObjectWithParams}}
{{:LSL Constants/llRezObjectWithParams}}
|caveats=
|caveats=
*Silently fails to rez {{LSLP|inventory}} if REZ_POS is too far from the geometric center of the object trying to rez {{LSLP|inventory}}.
*Silently fails to rez {{LSLP|inventory}} if REZ_POS is too far from the geometric center of the object trying to rez {{LSLP|inventory}} (generally 10 meters; see [[llRezObject]]).
* When scripting attachments meant to rez objects, remember that when used in the root of an ([[attach|attached]]) [[attachment]] <code>[[llGetPos]]</code> 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 | llParticleSystem Caveats]] for more information.
* When scripting attachments meant to rez objects, remember that when used in the root of an ([[attach|attached]]) [[attachment]] <code>[[llGetPos]]</code> 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 | llParticleSystem Caveats]] for more information.
* If the object is unattached and the owner of the object does not have copy permission  on {{LSLP|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 {{LSLP|inventory}} remains in inventory.
* If the object is unattached and the owner of the object does not have copy permission  on {{LSLP|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 {{LSLP|inventory}} remains in inventory.
Line 25: Line 27:
* See [[object_rez]] for examples on how to establish communications between the rezzing object and the new prim.
* See [[object_rez]] for examples on how to establish communications between the rezzing object and the new prim.
|constants
|constants
|examples
|examples=
The list of parameters is entirely optional. If you want to rez an object exactly where the rezzer is, you may call the function with an empty list.
<syntaxhighlight lang="lsl2">
default
{
    touch_start(integer total_number)
    {
        llRezObjectWithParams("Object", []);
    }
}
</syntaxhighlight>
 
The below example rezzes an object slightly above the rezzer, slowly spinning and with automatic cleanup. See [[:Category:LSL Temporary|Temporary]]
<syntaxhighlight lang="lsl2">
default
{
    touch_start(integer total_number)
    {
        llRezObjectWithParams("Object", [
            REZ_FLAGS, REZ_FLAG_TEMP | REZ_FLAG_PHANTOM,
            REZ_POS, <0,0,1>, TRUE, TRUE,
            REZ_OMEGA, <0,0,1>, TRUE, 0.5, PI
        ]);
    }
}
</syntaxhighlight>
 
The below is a basic example of firing a typical bullet from a worn attachment. The bullet is fired with a left-click during [[mouselook]].
<syntaxhighlight lang="lsl2">
default
{
    control(key id, integer level, integer edge)
    {
        integer click = level & edge;
 
        if (click & CONTROL_ML_LBUTTON) {
            llRezObjectWithParams("Bullet", [
                REZ_POS, <2,0,0>, TRUE, TRUE, // Relative offset 2 meters forward
                REZ_ROT, ZERO_ROTATION, TRUE, // Relative rotation
                REZ_VEL, <100,0,0>, TRUE, FALSE, // Relative velocity 100m/s forward
                REZ_DAMAGE, 40,
                REZ_LOCK_AXES, <1,1,1>, // Disable all rotation
                REZ_FLAGS, 0
                | REZ_FLAG_PHYSICAL
                | REZ_FLAG_TEMP
                | REZ_FLAG_DIE_ON_COLLIDE
                | REZ_FLAG_DIE_ON_NOENTRY
                | REZ_FLAG_NO_COLLIDE_OWNER
                | REZ_FLAG_NO_COLLIDE_FAMILY
                | REZ_FLAG_BLOCK_GRAB_OBJECT
            ]);
        }
    }
 
    run_time_permissions(integer perm)
    {
        if (perm) {
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE);
        }
    }
 
    attach(key id)
    {
        if (id) {
            llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }
    }
 
    state_entry()
    {
        if (llGetAttached()) {
            llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }
    }
}
</syntaxhighlight>
|helpers
|helpers
|also_constants=
|also_constants=

Latest revision as of 21:50, 18 October 2024

Summary

Function: key llRezObjectWithParams( string inventory, list params );
0.1 Forced Delay
200.0 Energy

Instantiate inventory object at pos with an initial set of parameters specified in params.

pos will default to the position of the object containing the script, unless REZ_POS is specified. (see below)
Returns a key which will be the key of the object when it is successfully rezzed in the world.

• string inventory an object in the inventory of the prim this script is in
• list params

Specification

Parameters

parameter integer value values to set description
REZ_PARAM 0 integer param Start parameter passed into the rezzed object's on_rez(integer) event.
REZ_FLAGS 1 integer flags Flags applied to rezzed object when it is created in the world.

Flags

parameter integer value description
REZ_FLAG_TEMP 0x0001 Object is rezzed as temporary.
REZ_FLAG_PHYSICAL 0x0002 Object is rezzed as physical.
REZ_FLAG_PHANTOM 0x0004 Object is rezzed as phantom
REZ_FLAG_DIE_ON_COLLIDE 0x0008 The object will die after its first collision.
REZ_FLAG_DIE_ON_NOENTRY 0x0010 Object will die if it attempts to enter a parcel that it can't.
REZ_FLAG_NO_COLLIDE_OWNER 0x0020 Object will not trigger a collision event if colliding with its owner.
REZ_FLAG_NO_COLLIDE_FAMILY 0x0040 Object will not trigger collision events when colliding with other object rezzed by the same rezzer.
REZ_FLAG_BLOCK_GRAB_OBJECT 0x0080 Grabbing is disabled for this object.

† Disabling collisions only disables collision events and damage. The object will still cause a physics collision and may push the objects.

REZ_POS 2 vector pos, integer relative, integer at_root Position to rez the new object in the world. If relative is FALSE the position is in region coordinates. If relative is TRUE, the position will be relative to the rezzing object.

If at_root is FALSE, the center of the object will be at the position specified by pos(llRezObject). Set at_root to TRUE to set the position of the root prim(llRezAtRoot).

REZ_ROT 3 rotation rot, integer relative The initial rotation to apply to the object. If relative is TRUE, the rotation is relative to the rezzing object, otherwise it is absolute.
REZ_VEL 4 vector velocity, integer local, integer inherit The initial velocity to apply to the object. If local is TRUE the velocity is in the local object coordinate frame, otherwise it is in world coordinates.

If inherit is TRUE the object also inherits it's rezzer's velocity.

REZ_ACCEL 5 vector force, integer local A constant force to apply to the object. If local is TRUE, the force vector is in local coordinates.
REZ_OMEGA 7 vector axis, integer local, float spin, float gain Spin the object around the specified axis. If local is TRUE that axis is in local coordinates, otherwise they are global.
REZ_DAMAGE 8 float damage The amount of damage applied to an agent upon collision with this object.
REZ_SOUND 9 string sound, float volume, integer loop A sound to attach to this object. It will be played at the specified volume.

If loop is TRUE the sound will loop continuously for the life of the object. The sound parameter may be either a sound file in the rezzer's inventory or the UUID of a sound asset.

REZ_SOUND_COLLIDE 10 string sound, float volume A sound to play upon collision with another object, the ground or an avatar.

The sound parameter may be either a sound file in the rezzer's inventory or the UUID of a sound asset.

REZ_LOCK_AXES 11 vector locks Prevent the object from spinning on certain axes. Setting the vector's coordinate to non-zero will prevent the object from spinning on that axis. For instance
REZ_LOCK_AXES, <1.0, 1.0, 0.0>
will allow the object to only rotate around its Z-axis.
REZ_DAMAGE_TYPE 12 integer damage_type The damage type to apply when this prim collides with another object. Can match one of the DAMAGE_TYPE_* constants, be a custom damage type or repurpose the damage field.
REZ_PARAM_STRING 13 string start_param Pass an initialization string to the root prim of the newly rezzed object that may be read with llGetStartString from within the rezzed object.

Maximum string length is 1024 bytes.

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 REZ_POS is too far from the geometric center of the object trying to rez inventory (generally 10 meters; see llRezObject).
  • When scripting attachments meant to rez objects, remember that 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 object is unattached and 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.
  • If the object is attached and the owner of the object does not have copy permission on inventory, an error is shouted on DEBUG_CHANNEL: "Cannot rez no copy objects from an attached object."
  • Silently fails if you don't have offline building rights on the land. To have the right, your objects needs to either:
    • Be on land you own yourself.
    • Be on land where anyone is allowed to build, e.g. a sandbox.
    • Be deeded to the group that owns the land.
    • Be set to the same group that owns the land and the land have the parcel flag 'allow group to build' set.
    • The group role "Always allow 'Create Objects'" will only work to override this when you are online, in the region, or have a child agent in the region. See SVC-3145 in the Issues subsection of Deep Notes for more information.
  • See object_rez for examples on how to establish communications between the rezzing object and the new prim.

Examples

The list of parameters is entirely optional. If you want to rez an object exactly where the rezzer is, you may call the function with an empty list.

default
{
    touch_start(integer total_number)
    {
        llRezObjectWithParams("Object", []);
    }
}

The below example rezzes an object slightly above the rezzer, slowly spinning and with automatic cleanup. See Temporary

default
{
    touch_start(integer total_number)
    {
        llRezObjectWithParams("Object", [
            REZ_FLAGS, REZ_FLAG_TEMP | REZ_FLAG_PHANTOM,
            REZ_POS, <0,0,1>, TRUE, TRUE,
            REZ_OMEGA, <0,0,1>, TRUE, 0.5, PI
        ]);
    }
}

The below is a basic example of firing a typical bullet from a worn attachment. The bullet is fired with a left-click during mouselook.

default
{
    control(key id, integer level, integer edge)
    {
        integer click = level & edge;

        if (click & CONTROL_ML_LBUTTON) {
            llRezObjectWithParams("Bullet", [
                REZ_POS, <2,0,0>, TRUE, TRUE, // Relative offset 2 meters forward
                REZ_ROT, ZERO_ROTATION, TRUE, // Relative rotation
                REZ_VEL, <100,0,0>, TRUE, FALSE, // Relative velocity 100m/s forward
                REZ_DAMAGE, 40,
                REZ_LOCK_AXES, <1,1,1>, // Disable all rotation
                REZ_FLAGS, 0
                | REZ_FLAG_PHYSICAL
                | REZ_FLAG_TEMP
                | REZ_FLAG_DIE_ON_COLLIDE
                | REZ_FLAG_DIE_ON_NOENTRY
                | REZ_FLAG_NO_COLLIDE_OWNER
                | REZ_FLAG_NO_COLLIDE_FAMILY
                | REZ_FLAG_BLOCK_GRAB_OBJECT
            ]);
        }
    }

    run_time_permissions(integer perm)
    {
        if (perm) {
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE);
        }
    }

    attach(key id)
    {
        if (id) {
            llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }
    }

    state_entry()
    {
        if (llGetAttached()) {
            llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }
    }
}

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
•  llRezObject Rezzes the object at the requested position
•  llGetStartParameter
•  llGodLikeRezObject
•  LlGetParcelFlags#Examples Test if the parcel allows this script to rez

Deep Notes

Signature

function key llRezObjectWithParams( string inventory, list params );