Difference between revisions of "LlAvatarOnSitTarget"
Jump to navigation
Jump to search
All Issues ~ Search JIRA for related Bugs
m |
(state change with LlAvatarOnSitTarget) |
||
Line 42: | Line 42: | ||
return FALSE; // 0 (zero) for easy testing. | return FALSE; // 0 (zero) for easy testing. | ||
}</source> | }</source> | ||
<source lang="lsl2">//It's sometimes useful to use a state change | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
//"Sit target is a prim property." | |||
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION); | |||
} | |||
changed(integer change) | |||
{ | |||
if (change & CHANGED_LINK) | |||
{ | |||
key av_sit = llAvatarOnSitTarget(); | |||
if (av_sit) | |||
{ | |||
state sitting; | |||
} | |||
} | |||
} | |||
} | |||
state sitting | |||
{ | |||
state_entry() | |||
{ | |||
llSay(0, "You are sitting"); | |||
} | |||
changed(integer change) | |||
{ | |||
if (change & CHANGED_LINK) | |||
{ | |||
key av_unsit = llAvatarOnSitTarget(); | |||
if (av_unsit) ; | |||
else | |||
{ | |||
llSay(0, "You are not sitting"); | |||
state default; | |||
} | |||
} | |||
} | |||
} | |||
</source> | |||
|related | |related | ||
|also_tests | |also_tests |
Revision as of 17:02, 14 January 2017
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: key llAvatarOnSitTarget( );239 | Function ID |
0.0 | Forced Delay |
10.0 | Energy |
Returns a key that is the UUID of the user seated on the prim.
If the prim lacks a sit target or there is no avatar sitting on the prim, then NULL_KEY is returned.
Caveats
- A prim does not have a sit target unless llSitTarget has been called with a nonzero vector as the first argument.
- If the prim lacks a sit target or the avatar is seated upon a different prim, the only way to determine how many and which avatars are seated upon the object is to scan the link set (for an example of this, see llGetNumberOfPrims).
Examples
default
{
state_entry()
{
// set sit target, otherwise this will not work
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key av = llAvatarOnSitTarget();
if (av) // evaluated as true if key is valid and not NULL_KEY
{
llSay(0, "Hello " + llKey2Name(av) + ", thank you for sitting down");
}
}
}
}
Useful Snippets
//Gets the link number of a seated avatar
integer GetAgentLinkNumber(key avatar)
{
integer link_num = llGetNumberOfPrims();
while (link_num > 1) // Check only child prims.
{
if (llGetLinkKey(link_num) == avatar) // If it is the avatar we want
{
return link_num; // then return the link number
}
--link_num; // else go on with next child.
}
// Avatar wasn't found
return FALSE; // 0 (zero) for easy testing.
}
//It's sometimes useful to use a state change
default
{
state_entry()
{
//"Sit target is a prim property."
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key av_sit = llAvatarOnSitTarget();
if (av_sit)
{
state sitting;
}
}
}
}
state sitting
{
state_entry()
{
llSay(0, "You are sitting");
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key av_unsit = llAvatarOnSitTarget();
if (av_unsit) ;
else
{
llSay(0, "You are not sitting");
state default;
}
}
}
}
Notes
The position of an avatar on a sit target can be determined with the use of llGetObjectDetails (see llSitTarget for an example).
See Also
Events
• | changed |
Functions
• | llAvatarOnLinkSitTarget | |||
• | llSitTarget | |||
• | llLinkSitTarget | |||
• | llGetLinkKey |
Articles
• | CHANGED_LINK |