Difference between revisions of "LlAvatarOnSitTarget"

From Second Life Wiki
Jump to navigation Jump to search
m (On the last code snippet, used the signature 'listen(integer channel, string name, key id, string message)' for consistency's sake)
 
(22 intermediate revisions by 11 users not shown)
Line 2: Line 2:
|func=llAvatarOnSitTarget
|func=llAvatarOnSitTarget
|return_type=key
|return_type=key
|return_text= :Retourne le [[UUID]] de l'avatar assis sur le prim.
|return_text=that is the [[UUID]] of the user seated on the prim.
|func_footnote=SI le prim ne trouve pas de 'sit target' ou si il n'y a pas d'avatar assis sur le prim, alors {{LSL Const|NULL_KEY|key|"00000000-0000-0000-0000-000000000000"|c=Evaluates to false in conditionals just like invalid keys.}} est retourné.
|func_footnote=If the prim lacks a [[llSitTarget|sit target]] or there is no avatar sitting on the prim, then {{LSL Constant/NULL_KEY}} is returned.
|caveats=*Un prim n'a pas de 'sit target' sans que [[llSitTarget]] soit crée avec un vecteur '''non nul'''.
|caveats=*A prim does not have a sit target unless [[llSitTarget]] has been called with a '''nonzero''' vector as the first argument.
*Si le prim ne trouve pas de 'sit target' ou si l'avatar est assis sur un prim different,la seule façon de determiner combien et quel avatar est assis sur l'objet est de scanner le link set<sup>[[#Notes|1]]</sup>.
*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#Useful_Snippets|llGetNumberOfPrims]]).
|spec
|spec
|examples=<pre>
|examples=<syntaxhighlight lang="lsl2">default
default
{
{
     state_entry()
     state_entry()
     {
     {
         // Creation du sit target, sinon la fonction ne marche pas
         // set sit target, otherwise this will not work
         llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
         llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);
     }
     }


     changed(integer change) {
     changed(integer change)
         if (change & CHANGED_LINK) {  
    {
         if (change & CHANGED_LINK)
        {  
             key av = llAvatarOnSitTarget();
             key av = llAvatarOnSitTarget();
             if (av) {//VRAI si la clé de l'avatar existe et est valide
             if (av) // evaluated as true if key is valid and not NULL_KEY
                 llSay(0, "Salut " + llKey2Name(av) + ", Merci de vous etre assis");
            {
                 llSay(0, "Hello " + llKey2Name(av) + ", thank you for sitting down");
            }
        }
    }
}</syntaxhighlight>
|helpers=<syntaxhighlight lang="lsl2">//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.
}</syntaxhighlight>
<syntaxhighlight lang="lsl2">//It's sometimes useful to use a state change
//useful when the prim is linked to an other prim
//and useful with a dialog box
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)
            {
                //Someone is on the sit target.
                state sitting;
             }
             }
         }
         }
     }
     }
}
}
</pre>
 
|helpers=<pre>
state sitting
//Donne le numero de link de l'avatar assis
integer GetAgentLinkNumber(key avatar)
{
{
     integer linkNum = 1 + llGetNumberOfPrims();
     state_entry()
     key linkKey;
     {
    //Apres nous prendrond le linkKey soyez sur qu'il est non nul sinon cela ne marchera pas.
        //Open a dialog box when an avatar is sitting on the prim
    while((linkKey = llGetLinkKey( --linkNum )))//est ce que la clé est valide?
        key av_menu = llAvatarOnSitTarget();
         if(avatar == linkKey)//est ce le bon avatar?
        llListen(-99, "", av_menu, "Yes");
            return linkNum;//C'est le bon avatar.
        llDialog(av_menu, "\nDo you like this example?", ["Yes", "No" ] , -99);
     //L'avatar n'a pas été trouvé
    }
     //retounre un nombre, ce n'est pas une balise LINK_* ni un numero de link valide.
   
     return 0x7FFFFFFF;//max int.
    changed(integer change)
}//Written by Strife Onizuka
    {
</pre>
        if (change & CHANGED_LINK)
         {
            key av_unsit = llAvatarOnSitTarget();
            if (av_unsit == NULL_KEY)  
            {
                //No one is on the sit target.
                //"On state change all listens are removed automatically."
                state default;
            }
        }
     }
 
     listen(integer channel, string name, key id, string message)
     {
        // If the user clicked the "Yes" button
        llWhisper(0, "Thank you");
    }
}</syntaxhighlight>
|related
|related
|also_tests
|also_tests
|also_events={{LSL DefineRow||[[changed]]|}}
|also_events={{LSL DefineRow||[[changed]]|}}
|also_functions={{LSL DefineRow||[[llSitTarget]]|}}
|also_functions=
{{LSL DefineRow||[[llAvatarOnLinkSitTarget]]|}}
{{LSL DefineRow||[[llSitTarget]]|}}
{{LSL DefineRow||[[llLinkSitTarget]]|}}
{{LSL DefineRow||[[llGetLinkKey]]}}
{{LSL DefineRow||[[llGetLinkKey]]}}
|also_articles
|also_articles={{LSL DefineRow||[[CHANGED_LINK]]|}}
|notes=
|notes=The position of an avatar on a sit target can be determined with the use of [[llGetObjectDetails]] (see [[llSitTarget#Useful_Snippets|llSitTarget]] for an example).
#Pour scanner un link set utliser une fonction comme [[llGetLinkKey]] (voir [[llGetNumberOfPrims#Useful_Snippets]]comme exemple).
|haiku={{Haiku|Glorious sunset|Lazy avatar enjoys|sitting on a prim}}
#La position d'un avatar assis sur un prim peut etre determiné avec [[llGetObjectDetails]] (voir [[llSitTarget#Useful_Snippets]]comme exemple).
|cat1=Avatar
|cat1=Avatar
|cat2=Prim
|cat2=Prim

Latest revision as of 14:32, 23 April 2022

Summary

Function: key llAvatarOnSitTarget( );
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
//useful when the prim is linked to an other prim
//and useful with a dialog box
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) 
            {
                //Someone is on the sit target.
                state sitting;
            }
        }
    }
}

state sitting
{
    state_entry()
    {
        //Open a dialog box when an avatar is sitting on the prim
        key av_menu = llAvatarOnSitTarget();
        llListen(-99, "", av_menu, "Yes");
        llDialog(av_menu, "\nDo you like this example?", ["Yes", "No" ] , -99);
    }
    
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        { 
            key av_unsit = llAvatarOnSitTarget();
            if (av_unsit == NULL_KEY) 
            {
                //No one is on the sit target.
                //"On state change all listens are removed automatically."
                state default;
            }
        }
    }

    listen(integer channel, string name, key id, string message)
    {
        // If the user clicked the "Yes" button
        llWhisper(0, "Thank you");
    }
}

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

Deep Notes

Signature

function key llAvatarOnSitTarget();

Haiku

Glorious sunset
Lazy avatar enjoys
sitting on a prim