LSL hediye dağıtma scripti: freebie ve grup hediyeleri için
Second Life mağazaları için ücretsiz LSL hediye scripti: dokunun, tüm eşyalar tek klasörde gelsin. Herkes ya da yalnızca grup etiketini takanlar için.
Her mağazanın bir hediye dağıtıcısına ihtiyacı var. Bu script, birisi nesneye dokunduğunda bir nesnenin Contents (İçerik) kısmındaki her şeyi tek ve düzenli bir klasör halinde verir. GROUP_ONLY ayarını açarsanız bir grup hediye panosuna dönüşür: yalnızca mağazanızın grup etiketini takan sakinler hediyeyi alır.
// 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();
}
}
Ücretsizdir: kullanabilir, değiştirebilir ve sattıkların dahil kendi yapımlarına koyabilirsin.
Nasıl kurulur
- Hediyeniz için bir kutu, tabela ya da poster rezz edin ve scripti İçeriğine (Contents) koyun.
- Hediye eşyalarınızı ekleyin (kıyafet, mobilya, bir landmark, bir notecard). Bir sonraki sahip için copyable olmaları gerekir.
- Grup hediyesi için GROUP_ONLY değerini TRUE yapın ve nesnenin grubunu Edit penceresinin General sekmesinden ayarlayın. Scripti tekrar kaydedin.
- Dağıtıcıya dokunarak test edin. Hediye, nesnenin adını taşıyan bir klasör olarak gelir.
Ayarlar
- GROUP_ONLY: FALSE herkese verir; TRUE yalnızca nesnenin grup etiketini takan sakinlere verir.
- FOLDER_NAME: hediyenin geleceği klasörün adı; boş bırakılırsa nesnenin adı kullanılır.
- THANK_YOU ve NO_GROUP_TEXT: sakinlerin gördüğü mesajlar.
- COOLDOWN_SECONDS: aynı avatarın yanlışlıkla hediyeyi tekrar tekrar almasını engeller.
İpuçları
- Contents içindeki eşyaları değiştirerek her ay hediyeyi yenileyin; scripti değiştirmeniz gerekmez.
- Hediyeye, mağazanıza giden bir landmark ve bir teşekkür içeren kısa bir notecard ekleyin.
- Daha fazla sakinin bulması için hediyenizi WhatSL'de ücretsiz listeleyin.
Sık sorulan sorular
Grubumdaki bir sakin neden "this gift is for group members" mesajını alıyor?
Grupta, ancak başka bir grup etiketi aktif durumda. Ona grubunuzu aktif grup yapmasını söyleyin ve tekrar dokunsun.
Bazı eşyalar neden klasörde yok?
Bir sonraki sahip için no-copy olan eşyalar klasör içinde verilemez. Bunları copyable yapın ya da her no-copy eşya için ayrı bir dağıtıcı kullanın.
Landmark da verebilir miyim?
Evet. Scriptin kendisi hariç, İçerikteki her şey verilir; landmark ve notecard dahil.