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

}

lundi 7 janvier 2008

llGiveInventory

La fonction du jour permet de donner à un utilisateur un objet qui se trouve dans le contenu de celui-ci(inventaire de l'objet).
Imaginons que nous vendions deux tee-shirt, un modèle pour homme et un pour femme. Grâce à cette fonction on mets les deux tee shirt dans le vendor, un qui s'appelle homme et l'autre femme. Au moment de la vente on ne donnera que celui que veut le client.

Dans l'évènement money, comme ca on est sur que le client a payé, on affiche la fenêtre de dialog.
Et dans le listen, on verifie si c'est bien le client qui a fait le choix et cette fois-ci on donne l'objet grâce à la fonction.

La fonction attend deux paramètres la key du destinataire, et le nom de l'objet de l'inventaire


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

// 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,"");
}
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);
}
}

vendredi 4 janvier 2008

llGiveMoney

La fonction d'aujourd'hui permet de faire ce que l'on appel un vendor partagé. C'est en effet très util quand on fait des ventes. Il permet de donnée une partie de son argent au propriétaire de la boutique. Ce qui est un contrat courant entre créateur est propriétaire de magasin.
Revenons à la fonction. llGiveMoney, elle prend deux paramètres une ke la personne à qui on envoit la somme et un integer qui est la somme à proprement parlé.
Vous aurez certainement remarqué, dans le state entry le llrequestPermission, nous nous etendrons pas sur le sujet pour l'instant car il s'agit d'une fonction difficile. Il faut juste retenir que un script ne peut donner votre argent sans votre accord et que cette fonction vous pose la question. Sans llRequestPermission pas de llGiveMoney.


// personne avec qui l'on veut partager sa vente
key destinataire="a822ff2b-ff02-461d-b45d-dcd10a2de0c2";

default
{
state_entry()
{
// demande au propiétaire si le script a le droit de donner de l'argent
// on va tout de même toucher à votre compte sans votre avis ^^
// cette fonction sera vu en detail ulterieurment
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
}
// l'evenement money se produit quand un paiement à été fait à l'objet
// giver est la key de la personne ayant donné de l'argent et amount le montant
money(key giver, integer amount)
{
// ici on partage à 50% le montant recu
integer MontantPartage;
MontantPartage=(integer)amount/2;

// la fonction du jour
llGiveMoney(destinataire,MontantPartage);

// vite fait un petit message d'information pour le destinataire
llInstantMessage(destinataire, "vous aves recu " + (string)MontantPartage + " L$ de " + llKey2Name(llGetOwner()));
}
}

jeudi 3 janvier 2008

llInstantMessage

Cette fonction est très simple d'utilisation à partir de la Key d'un personne on paut lui envoyer un IM. Ici, on remerci le donneur par un IM, après tout, tout le monde n'a pas besoin de le savoir. En plus, ca flash bien comme message.
Donc deux paramètres le premier la key du destinataire, et le deuxième, le message


default
{
state_entry()
{
// affiche le texte en blanc au dessus de l'objet
llSetText("tip jar",<1.0,1.0,1.0>,1.0);

// defini le don
llSetPayPrice(PAY_DEFAULT, [50,100,200,PAY_HIDE]);
}

// l'evenement money se produit quand un paiement à été fait à l'objet
// giver est la key de la personne ayant donné de l'argent et amount le montant
money(key giver, integer amount)
{
// la fonction du jour
llInstantMessage(giver, llKey2Name(giver) + " merci pour le don");
}
}

mercredi 2 janvier 2008

llSetPayPrice

On va parler un peu d'argent, et oui, cela fait aussi parti de second life. Pour travailler on va utiliser un exemple simple la tip jar. llSetPayPrice permet d'afficher une petite fenêtre avec un menu de prix.
La fonction prend 2 paramètres le premier indique si l'on veut une fenêtre de saisie manuelle.
PAY_DEFAULT si on en veut une, sinon PAY_HIDE
Le second indique un tableau de 4 montant possible correspondant à différents choix.
si l'on veut moins de 4 choix on complète par PAY_HIDE

En utilisant llsetprice il n'est pas nécessaire de cocher la case à vendre... ca ne voudrais rien dire d'ailleurs

default
{
state_entry()
{
// affiche le texte en blanc au dessus de l'objet
llSetText("tip jar",<1.0,1.0,1.0>,1.0);

// la fonction du jour
llSetPayPrice(PAY_DEFAULT, [50,100,200,PAY_HIDE]);
}

// l'evenement money se produit quand un paiement à été fait à l'objet
// giver est la key de la personne ayant donné de l'argent et amount le montant
money(key giver, integer amount)
{
//llKey2Name tranforme l'UID d'une personne en son nom
llSay(PUBLIC_CHANNEL,llKey2Name(giver) + " merci pour avoir donne" + (string)amount + "L$" );
}
}