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)); } }