Daemonika Nightfire
Forumsgott/göttin
huhu,
so schwer kann das doch nicht sein.
Es gibt mehrere moeglichkeiten, gewisse Items aus dem Inhalt einer Box oder aehnlichem nicht mit zu uebergeben. Staendig muss ich Muell aus meinem Inventar aus den einzelnen ordnern heraus suchen und loeschen.
14 jahre SL und immer noch werden Stein alte Freebie Funktionen, oder nicht durchdachte giver verwendet.
Diese Inventar Vermuellung geht mir echt langsam auf die nerven, man kann ja gar nicht mehr ordentlich Shoppen, ohne gleich zur Muelltonne rennen zu muessen.
Darum hier ein beispiel, wie man Scripte nicht ins Inventar schickt.
Hier ein Schnipsel, wie man zugleich die Animation einer Einkaufstuete in der Tuete laesst.
Zu diesem Zweck habe ich vor Jahren schon ein Tutorial in der Wiki veroeffentlicht.
http://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Giver_Tutorial
LG
Dae
so schwer kann das doch nicht sein.
Es gibt mehrere moeglichkeiten, gewisse Items aus dem Inhalt einer Box oder aehnlichem nicht mit zu uebergeben. Staendig muss ich Muell aus meinem Inventar aus den einzelnen ordnern heraus suchen und loeschen.
14 jahre SL und immer noch werden Stein alte Freebie Funktionen, oder nicht durchdachte giver verwendet.
Diese Inventar Vermuellung geht mir echt langsam auf die nerven, man kann ja gar nicht mehr ordentlich Shoppen, ohne gleich zur Muelltonne rennen zu muessen.
Darum hier ein beispiel, wie man Scripte nicht ins Inventar schickt.
Code:
key owner;
list inventory = [];
string name;
integer num;
default
{
state_entry()
{
// Speichert den Besitzer-Key (UUID)
owner = llGetOwner();
num = llGetInventoryNumber(INVENTORY_ALL);
integer i;
// ab hier wird das komplette Inventar des Objects ausgelesen
for(i = 0; i < num; ++i)
{
// liesst die Inventar-Namen aus
name = llGetInventoryName(INVENTORY_ALL, i);
// Diese Funktion, sorgt dafuer, das das Script nicht zur Liste hinzu gefuegt wird
if(name != llGetScriptName())
{
// fuegt die ausgelesenen Inventar-Namen in die Liste ein.
inventory += name;
}
}
}
touch_start(integer total_number)
{
// reagiert nur, wenn der Besitzer klickt
if(llDetectedKey(0) == owner)
{
if(llGetListLength(inventory) < 1)
{
// bloed wenn die Box leer ist ;)
llWhisper(0,"No items to offer.");
}
else
{
// gibt den gelisteten Inhalt aus (es dauert 3 secunden, bis das Script hier nach wieder reagiert)
llGiveInventoryList(owner, llGetObjectName(), inventory);
}
}
}
changed(integer change)
{
// Hinweis:
// CHANGED_OWNER wird nicht ausgeloest bei Objecten die im Inventar uebergeben werden.
if(change & CHANGED_OWNER)
{
// resettet das Script, sobald der Besitzer wechselt
llResetScript();
}
// Ein Reset bei CHANGED_INVENTORY ist in Verbindung mit (no copy) Items nicht zu empfehlen.
//if(change & CHANGED_INVENTORY)
//{
// resettet das Script, sobald sich der Inhalt des Objects aendert
//llResetScript();
//}
}
on_rez(integer Dae)
{
// resettet das Script, sobald es auf dem Boden gerezzt wird
llResetScript();
}
}
Hier ein Schnipsel, wie man zugleich die Animation einer Einkaufstuete in der Tuete laesst.
Code:
key owner;
string anim = "*DS* Shopping Bag anim.";
list inventory = [];
string name;
integer num;
default
{
state_entry()
{
owner = llGetOwner();
num = llGetInventoryNumber(INVENTORY_ALL);
integer i;
for(i = 0; i < num; ++i)
{
name = llGetInventoryName(INVENTORY_ALL, i);
if(name != llGetScriptName())
{
if(name != anim)
{
inventory += name;
}
}
}
}
Zu diesem Zweck habe ich vor Jahren schon ein Tutorial in der Wiki veroeffentlicht.
http://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Giver_Tutorial
LG
Dae
Zuletzt bearbeitet: