AVprop allows AVsitter™ to rez props and can also be used as a standalone prop rezzer in creations without seating. Props are inworld objects rezzed on the land. Props can also become avatar attachments.
Edit me

Preparing Prop Objects

Before adding a prop to your project, you’ll need to create the prop object:

  1. Choose any object you want to use as a prop. e.g. Laptop Computer, Reading Book, Coffee Cup, etc.
  2. Drop the [AV]object script into the object’s root prim.
  3. Repeat for each object you plan to use as a prop.

Setting up a Prop with AVsitter™

To add props to your furniture, start with the normal setup procedure, then:

  1. Ensure the [AV]helper and [AV]adjuster are in the prim.
  2. Drop the [AV]prop script and your prepared prop objects into the prim.
  3. Sit on the prim, then choose a pose from the menu that you want to trigger the prop.
  4. Choose [ADJUST] then [HELPER] from the menu, and the [AV]helper stick will rez.
  5. Choose [NEW] from the menu, then choose [PROP].
  6. Choose your prop object from the menu and the prop object will rez inworld.
  7. Move the prop object with the SL building tools to where you want it to rez inworld, then click [SAVE]. Props can rez a maximum of 10 meters from the centre of the prim.
  8. Repeat for each prop.
  9. When you have finished saving all your props, click [DUMP] to output your settings into chat.
  10. Copy-paste the [DUMP] result into your AVpos notecard, replacing the contents of the notecard.

Props with AVsit Video

Setting up a Prop with AVmenu™

With AVmenu™ you can create menus in prims that don’t have animations. The [AV]menu script can be used in spare prims of furniture or in stand-alone objects that don’t have seating (e.g. lazy Susan, kitchen/bar, item dispenser, drinks machine).

As with the [AV]sit scripts, [AV]menu is controlled by an AVpos notecard. [AV]menu allows BUTTON, TOMENU, MENU, TEXT and MTYPE 3 from the Notecard Commands to be used to create menus and also reacts to the 90005 link message in the same way as the [AV]sit scripts.

To add props to a prim using [AV]menu:

  1. Drop the following into the prim:
    • [AV]menu script
    • [AV]prop script
    • AVpos notecard
    • Your prepared prop objects
  2. Touch the prim, choose [OWNER] to enter the owner menu.
  3. Choose [NEW] from the menu, then choose your prop object from the menu.
  4. The dialog will ask you to name your prop and then the prop object will rez.
  5. Move the prop object with the SL building tools to where you want it to rez inworld, then click [SAVE].
  6. Repeat for each prop.
  7. When you have finished saving all your props, click [DUMP] to output your settings into chat.
  8. Copy-paste the [DUMP] result into your AVpos notecard, replacing the contents of the notecard.

Props with AVmenu Video

Attachment Props

Props can be set to request permission to attach to the avatar after they rez inworld. Even if your prop is an attachment it must rez inworld before it asks the avatar for permisison to attach.

Before you place an attachment prop inside the furniture, you need to attach it and adjust it just like you would if editing prim clothing that you avatar wears. SL automatically remembers the attachment position for an object. When you are happy with the way it’s attached, you then detach it and place it in the furniture.

After setting up a prop, you can designate the prop to be an attachment by editing the AVpos notecard and changing its <prop_type> to PROP1 or PROP2 as described in the Notecard Commands section.

Notecard Commands

You can edit the AVpos notecard to change how props will behave.

The format for the notecard is:

<prop_type> <trigger_name>|<prop_object>|<prop_group>|<position>|<rotation>|<attachment_point>

<prop_type> can be any of:

  • PROP is a regular prop.
  • PROP1 requests permission to attach to the avatar as soon as it is rezzed.
  • PROP2 rezzes as a regular prop and requests permission to attach to an avatar when touched.
  • PROP3 is a special type used only by the shared prop script examples.

<trigger_name> must match the menu name of the pose (or BUTTON) that you want to trigger the prop.

<prop_group> assigns the prop to a user-defined group. A prop will derez when a new prop is rezzed that has the same prop group. This is relevant when Rezzing/De-Rezzing props by BUTTON or by scripting.

<attachment_point> defines the attach point to use. Only needed when <prop_type> is set to PROP1 or PROP2.

Possible values:

chest, head, left shoulder, right shoulder, left hand, right hand, left foot, right foot, back, pelvis, mouth, chin, left ear, right ear, left eye, right eye, nose, right upper arm, right lower arm, left upper arm, left lower arm, right hip, right upper leg, right lower leg, left hip, left upper leg, left lower leg, stomach, left pectoral, right pectoral, HUD center 2, HUD top right, HUD top, HUD top left, HUD center, HUD bottom left, HUD bottom, HUD bottom right, neck, avatar center

Experience Keys

Second Life has now enabled ‘experiences’ which will allow automatic attachments (without need for any permission request).

For automatic attachments to work, Users will need to enable the experience ‘AVsitter’ (created by Code Violet) on their land. An experience may be enabled at the Estate or Parcel level by adding it to the ‘Allowed Experiences’ list. For an excellent explanation, see this video by Froukje Hoorenbeek. Be sure to choose the experience created by Code Violet as anyone could have accidentally created an experience with the same name.

You can find out more about ‘experiences’ on the SL blog and in the SL scripting WIKI.

Rezzing Props by BUTTON

If you want a BUTTON to trigger a prop, first create the prop as normal so that it rezzes for a pose, then edit the notecard to change the <trigger_name> of the prop to match your BUTTON. Alternately, add the PROP line manually to your notecard. e.g.

BUTTON Rez Guitar
...
PROP Rez Guitar|guitar|G1|<0.000000, 0.000000, 1.000000>|<0.000000, 0.000000, 0.000000>

When the “Rez Guitar” button is pressed, the guitar prop object will rez.

If you don’t want the menu returned then use the 90220 link message in the BUTTON. e.g.

BUTTON Rez Guitar|90220

De-Rezzing Props by BUTTON

If you want a BUTTON to clear all props then simply refer to a prop that does not exist. e.g.

BUTTON [CLEAR]

To make a BUTTON to clear props by name then send remprop_<trigger_name> as the button’s <custom_string> using integer 90200. e.g.

BUTTON Clear Fruit|90200|remprop_Fruit

If you want a BUTTON to clear all props in one <prop_group> then you can create a blank prop with the same <prop_group>. It’s important to leave the <prop_object> for the blank prop empty as in the ‘Clear Quilt’ example below. e.g.

BUTTON Quilt1
BUTTON Quilt2
BUTTON Clear Quilt
...
PROP Quilt1|object1|G1|<0.000004, 0.003191, 0.204285>|<180.000000, 0.000000, 0.000000>|
PROP Quilt2|object2|G1|<0.000004, 0.003191, 0.204285>|<180.000000, 0.000000, 0.000000>|
PROP Clear Quilt||G1

Prop behavior

Example Notecards

Following are some examples of notecard lines and complete notecards relating to AVprop™

PROP line examples

Rez the book object when the Reading pose is played:

PROP Reading|book|G1|<0.000000, 0.000000, 1.000000>|<0.000000, 0.000000, 0.000000>

Attach pen to avatar’s right hand when the Writing pose is played:

PROP1 Writing|pen|G1|<0.000000, 0.000000, 1.000000>|<0.000000, 0.000000, 0.000000>|right hand

Rez two props when the Sit pose is played:

PROP Sit|prop1|G1|<0.000000, 0.000000, 1.000000>|<0.000000, 0.000000, 0.000000>
PROP Sit|prop2|G1|<0.000000, 0.000000, 1.000000>|<0.000000, 0.000000, 0.000000>

One SITTER

Complete notecard for one SITTER. Includes poses, buttons, different prop types and prop groups:

POSE Read|z-readpapers
POSE Dine|table-eat
POSE Soup|table-soup
BUTTON Wine
BUTTON Juice
{Read}<-0.007082, 0.000018, 0.137853><-0.016476, 9.001595, 0.033839>
{Dine}<0.222899, 0.015423, 0.373918><-0.037846, 2.906952, 3.043228>
{Soup}<0.284377, -0.009065, 0.355389><0.257740, 6.912522, 0.014369>
PROP Read|paper|G1|<0.550008, -0.001500, 0.142298>|<-134.045500, 75.901150, 44.793560>
PROP Dine|eggs|G1|<0.469654, 0.000830, 0.191699>|<-0.018939, 9.899974, -0.015683>
PROP1 Dine|knife|G1|<0.387543, -0.311709, 0.173970>|<-0.017549, 9.899983, 90.102720>|Right Hand
PROP1 Dine|fork|G1|<0.386396, 0.315884, 0.173978>|<-0.017549, 9.899983, 90.102720>|Left Hand
PROP Soup|soup|G1|<0.471728, 0.000833, 0.182416>|<-0.017561, 9.899969, 0.005860>
PROP1 Soup|spoon|G1|<0.378329, -0.319233, 0.181404>|<-0.017547, 9.899982, 90.102720>|Right Hand
PROP Wine|wine|G2|<0.778376, -0.371154, 0.302741>|<-0.020984, 9.899971, 0.006449>
PROP Juice|juice|G2|<0.760159, -0.371186, 0.198361>|<-0.020984, 9.899975, 0.006449>

Two SITTERs

Complete notecard for two SITTERs, including props for both SITTERs:

SITTER 0
POSE Laptop|z-lt-lie
POSE Sitting|chair-001
SYNC Couples1|fm-close
SYNC Couples2|fm-entwine
{Laptop}<0.042650, -0.772460, 0.296690><0.000000, -11.995530, 0.000000>
{Sitting}<0.224900, -0.734250, 0.744080><0.000000, 0.000000, 0.000000>
{Couples1}<0.180660, 0.019210, 0.433470><1.569690, 18.286940, -8.538540>
{Couples2}<0.586030, 0.351290, 0.145940><0.000000, 0.000000, 175.963300>
PROP Laptop|laptop|G1|<0.433091, -0.835237, 0.319153>|<-122.413500, 71.813410, 31.093090>
PROP Couples1|laptop|G1|<0.319954, -0.866334, 0.312684>|<108.560600, -60.579450, -163.669100>

SITTER 1
POSE Laptop|z-lt-tummy
POSE Sitting|chair-001
SYNC Couples1|ml-close
SYNC Couples2|ml-entwine
{Laptop}<0.239970, 0.651860, 0.258480><-5.942750, -0.826550, -74.043050>
{Sitting}<0.223270, 0.651870, 0.775510><0.000000, 0.000000, 0.000000>
{Couples1}<0.348780, 0.037700, 0.212590><1.569690, 18.286940, -8.538540>
{Couples2}<0.545530, 0.215300, 0.222410><0.000000, 0.000000, 176.003400>
PROP Laptop|laptop|G1|<0.466172, -0.140335, 0.311097>|<98.181810, 13.074120, 178.024700>
PROP Couples1|laptop|G1|<0.319954, 0.837922, 0.312684>|<-105.833200, -55.077900, -13.040110>

AVmenu™ Example

Example notecard for [AV]menu with [AV]prop. Demonstrates use of prop groups (shelf1,shelf2,shelf3).

TEXT Welcome to my display case :)\nChoose items to rez!\n
BUTTON Books
BUTTON Glasses
BUTTON Photo
BUTTON Fruit
BUTTON Plates
BUTTON Vase
BUTTON [CLEAR]
PROP Books|books|shelf1|<-0.042320, 0.020645, 1.875854>|<0.000000, 0.000000, 0.000000>
PROP Glasses|glasses|shelf1|<-0.270195, -0.014359, 1.763062>|<0.000000, 0.000000, -84.350010>
PROP Photo|photo|shelf2|<-0.001717, -0.056343, 1.234741>|<78.650010, 6.850002, 1.349999>
PROP Fruit|fruit|shelf2|<0.014526, 0.002861, 1.214783>|<180.000000, 0.000000, 0.000000>
PROP Plates|plates|shelf3|<0.199730, -0.000938, 0.434692>|<-90.000000, 73.000010, 0.000000>
PROP Vase|vase|shelf3|<-0.022728, -0.019066, 0.440918>|<0.000000, 0.000009, 174.400100>

LSL Scripting

Scripting methods can be used to rez and remove props, and respond to prop related events.

Message 90200 & 90220

Instructs [AV]prop to rez a prop by its <trigger_name>. e.g.

llMessageLinked(LINK_THIS, 90220, "Fruit", "");

By including an avatar’s <avatar_uuid> you can rez the prop specifically for them. e.g.

llMessageLinked(LINK_THIS, 90220, "Fruit", <avatar_uuid>);

By including an integer you can rez the prop specifically for that sitter. e.g.

llMessageLinked(LINK_THIS, 90220, "Fruit", "0");

If you want to clear all props then use a <trigger_name> that does not match a prop. e.g.

llMessageLinked(LINK_THIS, 90220, "[CLEAR]", "");

To derez a specific prop by name, just add “remprop_” to the beginning of the <trigger_name>. e.g.

llMessageLinked(LINK_THIS, 90220, "remprop_Fruit", "");

Message 90500

[AV]prop reports on events relating to props with link message 90500. The key field will include the UUID of the avatar. The string field includes the event type, SITTER #, <trigger_name>, <prop_object>, <prop_group> & the prop’s UUID, each separated by the pipe ( | ) character (to separate this information, llParseStringKeepNulls(); is used). Possible event types are ATTACHED, DETACHED, REZ, DEREZ. This information may be useful to trigger scripted actions in certain advanced projects.

e.g.

default
{
    link_message(integer sender, integer num, string msg, key id)
    {
        if(num == 90500)
        {
            list data = llParseStringKeepNulls(msg, ["|"], []);
            key AVATAR_UUID = id;
            string EVENT = llList2String(data, 0);
            string SITTER_NUMBER = llList2String(data, 1);
            string PROP_NAME = llList2String(data, 2);
            string PROP_OBJECT = llList2String(data, 3);
            string PROP_GROUP = llList2String(data, 4);
            string PROP_UUID = llList2String(data, 5);
            llOwnerSay(llDumpList2String([EVENT, SITTER_NUMBER, PROP_NAME, PROP_OBJECT, PROP_GROUP, PROP_UUID, AVATAR_UUID], ","));
        }
    }
}

Script Examples

For AVprop script examples click here.