LlAttachToAvatarTemp

De DigiWiki.

(Différences entre les versions)
Ligne 28 : Ligne 28 :
         if( vBitPermissions & PERMISSION_ATTACH )
         if( vBitPermissions & PERMISSION_ATTACH )
         {
         {
-
             llAttachToAvatarTemp ( ATTACH_LHAND );
+
             llAttachToAvatarTemp(ATTACH_LHAND);
         }
         }
         else
         else

Version du 11 octobre 2014 à 09:30

Suit les mêmes règles que llAttachToAvatar, à l’exception près que l'objet ne sera pas créé dans l inventaire de l'avatar et disparaîtra à sa déconnexion ou au détachement de l objet. En effet , par design , cela permet de "redonner" plusieurs fois à un autre utilisateur un objet en tant qu attachement sans que cela pollue son inventaire.
On doit considérer cet objet comme un attachement temporaire ; un utilisateur ne peut pas utiliser les actions "prendre" , "prendre une copie" sur celui ci.
D'autre part, le grand avantage de cette fonction est que l'utilisateur n'a pas besoin d'être le propriétaire de l objet pour pouvoir l'attacher.
En revanche, les permissions du script sont à réinitialiser pour le"propriétaire à titre temporaire".

  • Toutes les permissions du script sont à réinitialiser lors de l 'attachement de l'objet temporaire ( probablement pour des mesures de sécurité).
  • L utilisation de llAttachToAvatarTemp sur un objet que vous n avez pas la permission de transférer provoquera une erreur de script No permission to transfer, même si vous l'attachez à vous mêmes (il faut voir cette fonction comme un transfert).
  • Les points d'attachements peuvent être occupés par plusieurs objets.
  • Si attach_point est zéro , il se retrouve attaché par défaut à la main droite (ATTACH_RHAND).
  • Si l'objet est déjà attaché , la fonction ne fait rien silencieusement , même si le point d'attachement est différent.
//-- rez object on ground, drop in this script, it will request permissions to attach,
//-- and then attach to the left hand if permission is granted. if permission is denied,
//-- then the script complains.
default
{
    state_entry()
    {
        llRequestPermissions( llGetOwner(), PERMISSION_ATTACH );
    }
 
    run_time_permissions( integer vBitPermissions )
    {
        if( vBitPermissions & PERMISSION_ATTACH )
        {
            llAttachToAvatarTemp">llAttachToAvatarTemp(ATTACH_LHAND);
        }
        else
        {
            llOwnerSay( "Permission to attach denied" );
        }
    }
 
    on_rez(integer rez)
    {
        if(!llGetAttached())
        { //reset the script if it's not attached.
            llResetScript();
        }
    }
 
    attach(key AvatarKey)
    {
        if(AvatarKey)
        {//event is called on both attach and detach, but Key is only valid on attach
            integer test = llGetAttached();
            if (test) {
                llOwnerSay( "The object is attached" );
            } else {
                llOwnerSay( "The object is not attached");
            }
        }
    }
}
//-- This example can demonstrate ownership transfer of an object on a temporary basis using llAttachToAvatarTemp()
//-- Whoever touches will be asked for permission to attach, and upon granting permission will have the item attach,
//-- But not appear in Inventory.
default
{
    touch_start(integer num_touches)
    {
        llRequestPermissions( llDetectedKey(0), PERMISSION_ATTACH );
    }
 
    run_time_permissions( integer vBitPermissions )
    {
        if( vBitPermissions & PERMISSION_ATTACH )
        {
            llAttachToAvatarTemp">llAttachToAvatarTemp( ATTACH_LHAND );
        }
        else
        {
            llOwnerSay( "Permission to attach denied" );
        }
    }
 
    on_rez(integer rez)
    {
        if(!llGetAttached())
        { //reset the script if it's not attached.
            llResetScript();
        }
    }
}
// This example illustrates how to handle permissions before and after llAttachToAvatarTemp has been called. Because ownership
// changes when the object is attached, the initial PERMISSION_ATTACH is revoked and new permissions need to be requested.
 
integer gAttach = TRUE;
 
default
{
 
    touch_start(integer num)
    {
        if (gAttach)  // Object has not been attached yet
        {
            llRequestPermissions(llDetectedKey(0),PERMISSION_ATTACH);
            gAttach = FALSE;
        }
        else   // Object has been attached, but you still need PERMISSION_ATTACH in order to detach the object
        {
            if (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION | PERMISSION_ATTACH)
            {
                llDetachFromAvatar();  // Note that the object vanishes when detached, so there is no need to set gAttach = TRUE again
            }
        }
    }
 
    attach(key id)
    {
        if (id)  // Object has been attached, so request permissions again
        {
            llRequestPermissions(id,PERMISSION_ATTACH | PERMISSION_TRIGGER_ANIMATION);
        }
    }
 
    run_time_permissions (integer perm)
    {
        if (!gAttach)  //First time
        {
            if (perm & PERMISSION_ATTACH)
            {
                gAttach = TRUE;
                llAttachToAvatarTemp">llAttachToAvatarTemp(ATTACH_HEAD);  // Initial PERMISSION_ATTACH is revoked at this point
            }
        }
        else  // Second time
        {
            if (perm & PERMISSION_ATTACH | PERMISSION_TRIGGER_ANIMATION)
            {
                llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));
            }
        }
    }
}
// Because ownership changes when the object is attached, the initial PERMISSION_ATTACH is revoked and new permissions need to be requested.
 
default
{
    touch_start(integer num)
    {
        if (!llGetAttached()) llRequestPermissions( llDetectedKey(0), PERMISSION_ATTACH);
        else if ( llGetPermissions() & PERMISSION_ATTACH) llDetachFromAvatar();
    }
    attach(key id)
    {
        if (id) llRequestPermissions( id, PERMISSION_ATTACH | PERMISSION_TRIGGER_ANIMATION);
    }
    run_time_permissions (integer perm)
    {
        if (!llGetAttached() && (perm & PERMISSION_ATTACH)) llAttachToAvatarTemp">llAttachToAvatarTemp( ATTACH_NOSE);
        if (perm & PERMISSION_TRIGGER_ANIMATION) llStartAnimation( llGetInventoryName( INVENTORY_ANIMATION, 0));
    }
}
Outils personnels
donate
Google Ads