LM-Giver

Ein LM-Giver (eigentlich gibt das Skript alles ausser dem Skript heraus), der bei Annäherung eines Avatars LMs und sonstiges übergibt. Die Avatare werden gespeichert, so dass sie nicht dauernd belästigt werden. Zu einer bestimmten Zeit wird dann die Liste gelöscht.


// script copyright by Rebekka Revnik

// Das Script gibt allen neu gekommenen Avataren alles was im Objekt ist, ausser dem Skript.
// Durch Anklicken wird der LM-Giver gestartet.
// Bei nochmaligem Anklicken wird der LM-Giver gestoppt und eine Liste der Avatare wird ausgegeben.
// Bei jedem Start und um Mitternacht MEZ wird die Liste der Avatare gelöscht.

float RANGE = 30 ;			// der Scanradius in Metern - max 96
float TIME = 5;				// die Scanrate im Sekunden
integer DELETE_TIME = 0;	// Stunde wann die Liste gel?scht werden soll (SL-Zeit)

list Avas;
list Names;
integer Deleted;

CheckTime()
{
	integer hour = (integer)(llGetWallclock() / 3600);
	if(hour == DELETE_TIME)
	{
		if(Deleted) return;
		Deleted = TRUE;
		Avas = [];
		Names = [];
	} else Deleted = FALSE;
}

default
{
	touch_start(integer total_number)
	{
		if(llDetectedKey(0) == llGetOwner()) state on;
	}
}
state on
{
	state_entry()
	{
		Avas = [];
		Names = [];
		llSensorRepeat("", NULL_KEY, AGENT, RANGE, PI, TIME);
	}
	sensor(integer total_number)
	{
		integer i;
		key id = llDetectedKey(0);
		string name = llKey2Name(id);
		list l = llParseString2List(name, [" "], []);
		name = llList2String(l, 0);
		if(llListFindList(Avas, [id]) == -1)
		{
			Avas += [id];
			Names += [llKey2Name(id)];
			for(i = 0; i < llGetInventoryNumber(INVENTORY_ALL); i++)
			{
				if(llGetInventoryName(INVENTORY_ALL, i) != llGetScriptName()) llGiveInventory(id, llGetInventoryName(INVENTORY_ALL, i));
			}
		}
		CheckTime();
	}
	no_sensor()
	{
		CheckTime();
	}
	touch_start(integer total_number)
	{
		if(llDetectedKey(0) == llGetOwner()) state off;
	}
}
state off
{
	state_entry()
	{
		string s;
		integer i;
		integer Count = llGetListLength(Avas);
		llSensorRemove();
		if(Count > 0)
		{
			if(Count == 1) s = "Eine LM wurde heute vergeben an:";
			else s = (string)Count + " LMs wurden heute an folgende Avatare vergeben:";
			llOwnerSay(s);
			for(i = 0; i < Count; i++) llOwnerSay(llList2String(Names, i));
		} else llOwnerSay("Heute wurden keine LMs vergeben.");
	}
	touch_start(integer total_number)
	{
		if(llDetectedKey(0) == llGetOwner()) state on;
	}
}