allowdrop

Répondre
Partager Rechercher
Voila quand on autorise de lacher un truc dans notre objet on peut trapper l'evenement grace à change. Mais mon soucis, c'est que je ne sais pas qui et quoi...

Car j'aimerais faire un script d'auto mise à jour et un sender de notecard que l'on glisse dedans mais je veux pas que l'on mette n'importe quoi dedans et que n'importe qui le fasse

une idée?
Autre solution, un peu plus complexe et qui nécessite 2 prims : 1 prim réceptacle qui est vide (excepté le script bien sur); donc quand tu reçois la notecard, c'est la seule et unique. Après controle par le script, tu transfére dans l'autre objet et tu delete dans le réceptacle.
...
Tu peux obliger la personne à cliquer l'objet pour activer le allowdrop avec un timeout. Si la personne n'est pas autorisée, le drop n'est pas activé.
[quote=Christy Mansbridge;16696593]
Q: Can I find out who (or what) caused the object to change?
A: No.
C'est succinct, mais clair ;-)
[quote]

Ben au moins ca réponds clairement à mon post
Comme quoi il y a encore des manques au LSL, il ferait bien de rajouter des lldetect pour change().

En tout cas merci à tous, je vais faire un patchwork de tout ca
/me avale un aspirine en prévision
...
De toute facon ca ne sera pas un objet publique donc pas de soucis.

Sinon, quand un objet fait un giveinventory à un autre objet, c'est un change_inventory ou un drop qui se déclenche?

Car j'aimerais aussi faire des panneaux d'affichage que je peux mettre à jour (pub pour l'ecole) et ainsi envoyer une texture et qu'elle se mette à jour sur le panneau
...
Y a t'il d'autres moyen de communications simple inter-sim que par giveinventory?
(sinon y a la bdd sur un serveur extene, mais je prefererais eviter)
Genre es ce que je peux envoyer un UUID par IM pour faire un set de ma texture?
hello ,

j' ai cherché un peu partout ( ici , wiki , wakka ) pour savoir si on peut mettre un script "llAllowInventoryDrop " dans un objet vendu en no modify ,

le but est en fait de vendre un object avec script llAllowInventoryDrop + llGetNotecardLine qui permettrait au client de personnaliser son objet en lui redonnant un nouveau nom qu' il choisit lui meme , tout en restant no modify ...

j' ai 2 ouvertures vers ces scripts mais qui ne conviennent pas , peut etre quelques details à modifier pour rendre les choses possibles ??

Celui à lecture de notecard , le proprio ecrit le nom de son choix sur la note card , la drop dans la prim , et le nom de son choix est ajouté ( en plus du nom de l' objet dans le cas de mon script , c' est volontaire ), mais qui m' oblige à laisser l' objet en modify ( et je ne veux pas ! ) pour que le nom change :

ce qui donnera ex: moto 1 perso

Code PHP:

string NOTECARD_NAME "bike_name"// name of the card we are going to read
integer notecard_line 0;
integer num_notecard_lines 0;
key notecard_request NULL_KEY;
list 
card_data// the data in the card
 
integer
check_card
(string name// check that that the named inventory item is a notecard
{
    
integer i llGetInventoryType(name);
    return 
== INVENTORY_NOTECARD;
}
 
default
{
    
state_entry()
    {
        
state init;
    }
}
 
state ready 
{
    
touch_start(integer detected)
    {
        
llOwnerSay("the notecard contained the following data:");
        
llOwnerSay(llDumpList2String(card_data"\n"));
    }
    
changed(integer change)
    {
        if (
change & (CHANGED_INVENTORY)) // if someone edits the card, reset the script
        
{
            
llResetScript();
        }
    }
}
 
state init
{
    
state_entry()
    {
        if (!
check_card(NOTECARD_NAME)) // check the card exists
        
{
            
state error;
        }
        
llSetText("initialising...", <111>, 0);
        
notecard_request NULL_KEY;
        
notecard_line 0;
        
num_notecard_lines 0;
        
notecard_request llGetNumberOfNotecardLines(NOTECARD_NAME); // ask for the number of lines in the card
        
llSetTimerEvent(5.0); // if we don't hear back in 5 secs, then the card might have been empty
    
}
    
timer() // if we time out, it meant something went wrong - the notecard was probably empty
    
{
        
llSetTimerEvent(0.0);
        
state error;
    }
    
dataserver(key query_idstring data)
    {
        if (
query_id == notecard_request// make sure it's an answer to a question we asked - this should be an unnecessary check
        
{
            
llSetTimerEvent(0.0); // at least one line, so don't worry any more
            
if (data == EOF// end of the notecard, change to ready state
            
{
                
state ready;
            }
            else if (
num_notecard_lines == 0// first request is for the number of lines
            
{
                
num_notecard_lines = (integer)data;
                
notecard_request llGetNotecardLine(NOTECARD_NAMEnotecard_line); // now get the first line
            
}
            else
            {
                if (
data != "" && llGetSubString(data00) != "#"// ignore empty lines, or lines beginning with "#"
                
{
                    
card_data = (card_data = []) + card_data data;
                }
                ++
notecard_line;
                
notecard_request llGetNotecardLine(NOTECARD_NAMEnotecard_line); // ask for the next line
            
}
        }
        
// update the hover-text with the progress
         
llSetObjectName"HD Cruiser " +  (string)(card_data) );
    }
 
    
state_exit()
    {
        
llSetText("", <000>, 0);
    }
}
 
state error
{
    
state_entry()
    {
        
llOwnerSay("something went wrong; try checking that the notecard [ " NOTECARD_NAME " ] exists and contains data");
    }
    
changed(integer change)
    {
        if (
change CHANGED_INVENTORY)
        {
            
llResetScript();
        }
    }

ou celui ci mais qui donnera le nom que je choisis à la place du proprio dans mon script avec un menu pop up ( en l' occurence son nom d' avatar dans mon exemple ) :

ce qui donnera ex: moto 1 jean Durand

Code PHP:

integer com_chan 333;  


default 


   
    
touch_start(integer num_detected
    { 
        
llDialog(llDetectedKey(0),"\nConfiguration Menu",["add name"],333);
       
llListen(333,"",llGetOwner(),"");
    }
    
   
listen(integer channelstring namekey idstring message)
   {
        

       if ( 
message == "add name" )
       {
    
    
llSetObjectName"moto 1"" " name );
       
        }
          
    }

quelqu' un a une possibilité alternative ?

un script peut etre avec commande dans le chat qui permettrait d' ajouter le nom de la moto + un nom choisi par le nouveeau proprio (?)
hello ,

personne n' aurait une solution , svp ?
( sorry pour ce petit up ... )

peut etre pourrait on me dire comment inserer pour le 2è script une sorte de "chatText " avec" /(channel) ( nom ajouté ) que je pourrais ajouter dns ce script avec en début du script " integer" ou "string" du type :

llSetObjectName( "moto 1"+ " " + string("texte ajouté"));
[ je sais que ma commande n' existe pas telle qu ' elle , mais justement comment la rediger ??]

svp ,
essayons d' etre plus clair ....

le client achete un objet , une moto , avec des couleurs , resize , etc et fonctions modifiables et " customise " le modele qu' il vient de rezz pour faire sa version de l' objet avec les parametres qu' il a choisi . Pour rezz à chaque fois cette version qui lui plait tant à ses gouts , il la prend ( take ) dans son inventaire , et cette version a donc le meme nom dans son inventaire que la version origine telle qu' elle lui a été vendue en no modify .
Pour reconnaitre son modele à ses gouts , il pourra modifier le nom de SA version , en " moto 1 ma belle bleue " pour la differencier de la version orgine .

>>> Donc en utilisant la fonction " llSetObjectName( "moto 1"+ " " + name ); "

le client a donc " moto 1 jean Durand " par obligation ,
comment faire pour qu' il puisse ajouter le nom qu' il veut choisir , plutot que de lui imposer son nom ou un choix de possibilité s que j' aurais prédéfini

ta solution "
llSettext("Blabla") va seulement ajouter un texte au dessus de l' objet , c' est le nom de l' objet que je veux modifier ( nom tel qu' il apparait dans l' inventaire )

merci


PS: Ce sujet date de 2008 : c' est avec la fonction recherche que je l' ai trouvé , pourquoi creer un nouveau sujet alors qu' il existe déjà ....
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés