mardi 8 janvier 2008

llGetInventoryName

Pour ceux qui aurait des difficultés avec ce script je fais cours demain sur "terra bordeaux" à l'ecole de SL et ce sujet sera abordé.

Le programme du jour est chargé car il y a deux fonctions. llGetInventoryNumber retourne le nombre de "content"(je trouve pas le mot en francais, à part truc) d'un type (notecard, object, script, etc..)
Et comme l'objectif de notre vendor est de vendre les object de l'inventaire, il nous faut savoir combien y en a.
Chaque objet ou "content" dans l'inventaire est numéroté, ainsi, avec la fonction llGetInventoryName, je peux lui demander de me dire le nom du niéme objet. Noter fonction prend deux paramètre le type de "content" et le numéro du "content".

Donc ces objets nous devons ajouter leur nom à notre list obj. Pour cela grace au for, la ligne est répété et la valeur de i change. Ainsi, on execute notre fonction pour chque objet et son resultat est ajouté à notre liste d'objet.

L'interet de ce système est de plus avoir à modifier son script des que l'on modifie son vendor pour de nouveaux objets. Désormais il marche pour tous...

// la liste des objet à vendre dans votre vendor
list obj=[];

// channel de communication pour la fenêtre lldialog
integer mychannel;

// key du client qui viens de payer
key client;
default
{
state_entry()
{

// choisi un channel au hasard pour securisé
mychannel=(integer)llFrand(1000.0)+5000;

// ecoute le channel
llListen(mychannel,"",NULL_KEY,"");

// donne le nombre d'objet contenu dans l'inventaire du prim
integer NbObj=llGetInventoryNumber(INVENTORY_OBJECT);

// compteur de boucle
integer i;

// le for permet de répeter des instructions plusieurs fois
// premier paramètre à combien on en commence i=0
// deuxieme parametre je le fais i // troisième paramètre à chaque tour j'augmente i de 1 i++
for(i=0;i {
// la fonction du jour
obj+=llGetInventoryName(INVENTORY_OBJECT,i);
}

}

listen(integer channel, string name, key id, string message)
{
// la fonction du jour
if(id==client)llGiveInventory(client,message);
}
money(key giver, integer amount)
{
// sauvegarde la key du client
client=giver;

// laisse le choix de l'objet à l'utilisateur
llDialog(client,"Choisissez votre objet",obj,mychannel);
}

}

Aucun commentaire: