Script LSL de cadeaux gratuits pour freebies et cadeaux de groupe
Script LSL gratuit pour boutiques Second Life : un clic livre tous les articles en un dossier, à tous ou seulement aux membres du groupe portant le tag.
Chaque boutique a besoin d'un distributeur de cadeaux. Ce script remet tout le contenu d'un objet sous forme de dossier bien rangé quand quelqu'un le touche. Activez GROUP_ONLY et il devient un panneau de cadeaux de groupe : seuls les résidents portant le tag de groupe de votre boutique reçoivent le cadeau.
// Gift Giver (everyone or group only) - free LSL script from WhatSL (https://whatsl.com/scripts/lsl-gift-giver-script)
// Free to use, change and put in your own creations, also ones you sell.
//
// Put this script and your gift items in an object. Touch it to receive everything in its Contents
// (except this script) as one folder. Items must be copyable for the next owner.
// With GROUP_ONLY = TRUE, only residents wearing the same group tag as the object get the gift:
// set the object's group in the Edit window (General tab) first.
integer GROUP_ONLY = FALSE;
string FOLDER_NAME = ""; // "" = use the object's name
string THANK_YOU = "Enjoy your gift! It is in your inventory.";
string NO_GROUP_TEXT = "Sorry, this gift is for group members. Wear the group tag and touch me again.";
integer COOLDOWN_SECONDS = 60; // the same avatar can take the gift again after this time
list gRecent = []; // [avatar key, unix time, ...]
string folderName()
{
if (FOLDER_NAME != "") return FOLDER_NAME;
return llGetObjectName();
}
list giftItems()
{
list out = [];
string me = llGetScriptName();
integer n = llGetInventoryNumber(INVENTORY_ALL);
integer i;
for (i = 0; i < n; ++i)
{
string name = llGetInventoryName(INVENTORY_ALL, i);
if (name != me) out += [name];
}
return out;
}
giveGift(key who, integer sameGroup)
{
if (GROUP_ONLY)
{
// an object without a group would let everyone in, so check that a group is set
key objGroup = llList2Key(llGetObjectDetails(llGetKey(), [OBJECT_GROUP]), 0);
if (objGroup == NULL_KEY)
{
llRegionSayTo(who, 0, "This gift giver is not set up yet.");
return;
}
if (!sameGroup)
{
llRegionSayTo(who, 0, NO_GROUP_TEXT);
return;
}
}
integer now = llGetUnixTime();
integer i = llListFindList(gRecent, [who]);
if (i != -1)
{
if (now - llList2Integer(gRecent, i + 1) < COOLDOWN_SECONDS)
{
llRegionSayTo(who, 0, "You already have this gift. Look for the folder \"" + folderName() + "\" in your inventory.");
return;
}
gRecent = llDeleteSubList(gRecent, i, i + 1);
}
list stuff = giftItems();
if (llGetListLength(stuff) == 0)
{
llRegionSayTo(who, 0, "This gift giver is empty right now.");
return;
}
llGiveInventoryList(who, folderName(), stuff);
llRegionSayTo(who, 0, THANK_YOU);
gRecent += [who, now];
if (llGetListLength(gRecent) > 200) gRecent = llDeleteSubList(gRecent, 0, 1);
}
default
{
state_entry()
{
if (GROUP_ONLY)
{
key objGroup = llList2Key(llGetObjectDetails(llGetKey(), [OBJECT_GROUP]), 0);
if (objGroup == NULL_KEY) llOwnerSay("GROUP_ONLY is on, but this object has no group. Set the group in the Edit window (General tab), then reset the script.");
}
}
touch_start(integer total)
{
integer d;
for (d = 0; d < total; ++d)
{
giveGift(llDetectedKey(d), llDetectedGroup(d));
}
}
changed(integer change)
{
if (change & CHANGED_OWNER) llResetScript();
}
}
Libre d’utilisation, de modification et d’intégration dans vos créations, même celles que vous vendez.
Comment l'installer
- Placez une boîte, un panneau ou une affiche pour votre cadeau et mettez le script dans son Contenu.
- Ajoutez vos articles (vêtements, meubles, un repère, une note). Ils doivent être copiables pour le nouveau propriétaire.
- Pour un cadeau de groupe, réglez GROUP_ONLY sur TRUE et définissez le groupe de l'objet dans la fenêtre Modifier, onglet Général. Enregistrez à nouveau le script.
- Touchez le distributeur pour le tester. Le cadeau arrive dans un dossier portant le nom de l'objet.
Réglages
- GROUP_ONLY : FALSE donne à tout le monde ; TRUE seulement aux résidents portant le tag de groupe de l'objet.
- FOLDER_NAME : le nom du dossier dans lequel arrive le cadeau ; vide utilise le nom de l'objet.
- THANK_YOU et NO_GROUP_TEXT : les messages que voient les résidents.
- COOLDOWN_SECONDS : empêche le même avatar de reprendre le cadeau encore et encore par erreur.
Astuces
- Changez le cadeau chaque mois en remplaçant les articles du Contenu ; le script n'a pas besoin de changer.
- Mettez une courte note dans le cadeau avec un repère vers votre boutique et un message de remerciement.
- Inscrivez votre cadeau gratuitement sur WhatSL pour qu'il soit trouvé par davantage de résidents.
Questions fréquentes
Pourquoi un résident de mon groupe voit-il « ce cadeau est réservé aux membres du groupe » ?
Il est dans le groupe mais a un autre tag de groupe actif. Demandez-lui de mettre votre groupe comme groupe actif puis de toucher à nouveau.
Pourquoi certains articles manquent-ils dans le dossier ?
Les articles sans copie pour le nouveau propriétaire ne peuvent pas être donnés dans un dossier. Rendez-les copiables, ou utilisez un distributeur séparé pour chaque article sans copie.
Puis-je aussi donner un repère ?
Oui. Tout ce qui se trouve dans le Contenu, sauf le script lui-même, est donné, y compris les repères et les notes.