LSL-Geschenkverteiler-Skript für Freebies und Gruppengeschenke
Kostenloses LSL-Geschenkskript für Second-Life-Stores: Anklicken gibt alle Objekte als einen Ordner, für alle oder nur für Gruppenmitglieder mit Gruppentag.
Jeder Store braucht einen Geschenkverteiler. Dieses Skript verteilt alles aus dem Inhalt eines Objekts als einen ordentlichen Ordner, sobald jemand es anklickt. Schalte GROUP_ONLY ein, und es wird zu einem Gruppengeschenk-Board: Nur Residents, die den Gruppentag deines Stores tragen, bekommen das Geschenk.
// 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();
}
}
Frei nutzbar, änderbar und in eigenen Kreationen verwendbar, auch in solchen, die du verkaufst.
So richtest du es ein
- Rez eine Kiste, ein Schild oder ein Poster für dein Geschenk und lege das Skript in dessen Inhalt.
- Füge deine Geschenkobjekte hinzu (Kleidung, Möbel, ein Landmark, eine Notizkarte). Sie müssen für den nächsten Besitzer kopierbar sein.
- Für ein Gruppengeschenk setzt du GROUP_ONLY auf TRUE und stellst im Bearbeitungsfenster, Reiter Allgemein, die Gruppe des Objekts ein. Speichere das Skript danach erneut.
- Klicke den Verteiler an, um ihn zu testen. Das Geschenk erscheint als Ordner, benannt nach dem Objekt.
Einstellungen
- GROUP_ONLY: FALSE gibt an alle; TRUE nur an Residents, die den Gruppentag des Objekts tragen.
- FOLDER_NAME: der Name des Ordners, in dem das Geschenk ankommt; leer lassen, dann wird der Name des Objekts verwendet.
- THANK_YOU und NO_GROUP_TEXT: die Nachrichten, die Residents sehen.
- COOLDOWN_SECONDS: verhindert, dass sich derselbe Avatar das Geschenk versehentlich immer wieder holt.
Tipps
- Wechsle das Geschenk jeden Monat, indem du die Objekte im Inhalt austauschst; am Skript muss nichts geändert werden.
- Lege dem Geschenk eine kurze Notizkarte mit einem Landmark zu deinem Store und einem Dankeschön bei.
- Trage dein Geschenk kostenlos auf WhatSL ein, damit mehr Residents es finden.
Häufig gestellte Fragen
Warum sieht ein Resident in meiner Gruppe „Dieses Geschenk ist für Gruppenmitglieder“?
Dieser ist zwar in der Gruppe, hat aber einen anderen Gruppentag aktiv. Bitte ihn, deine Gruppe als aktive Gruppe festzulegen, und dann noch einmal anzuklicken.
Warum fehlen einige Objekte im Ordner?
Objekte, die für den nächsten Besitzer nicht kopierbar sind, können nicht in einem Ordner verschenkt werden. Mache sie kopierbar oder nutze für jedes nicht kopierbare Objekt einen eigenen Verteiler.
Kann ich auch ein Landmark verschenken?
Ja. Alles im Inhalt außer dem Skript selbst wird verschenkt, also auch Landmarks und Notizkarten.