Rang: Ehrenmitglied
Mitglied seit: 05.09.2014(UTC) Beiträge: 84  Wohnort: Tulln und Rostock Dankte: 1 mal(e)
|
Das folgende Skript überwacht die Avatare in der Parzelle, und sendet eine Warnung an alle (außer den Besitzer des Objekts), die mehr als 150 Skripts an ihre Avatare angehängt haben. Wird auf die Warnung (und auf eine zweite Warnung) nicht reagiert, wird der Avatar rausgeworfen. Dazu muss das Objekt dem Besitzer der Parzelle gehören. Code:
list lAVATAR;
list lTIME;
list lSTATE;
float fTIME_WARNING = 300;
float fTIME_KICK = 300; //will be kicked after WARNING + KICK - time
integer iLIMIT = 150;
float fTIMER = 1.0;
string sWARNING = "Bitte reduziere deine angehängten Skripts auf maximal 150!";
string sWARNING_2 = "Letzte Warnung, bitte reduziere die angehängten Skripts, sonst musst du diese Region verlassen!";
integer iSTATE_KICK = 2;
integer iSTATE_WARN = 1;
default
{
state_entry()
{
llSetTimerEvent(fTIMER);
}
timer()
{
integer i;
integer f;
key k;
list lNEW;
integer iTimestamp = llGetUnixTime();
list l = llGetAgentList(AGENT_LIST_PARCEL_OWNER, []);
for (i = 0; i < llGetListLength(l); i++)
{
k = llList2Key(l, i);
if (k != llGetOwner() && llList2Integer(llGetObjectDetails(k, [OBJECT_TOTAL_SCRIPT_COUNT]),0) > iLIMIT)
{
lNEW += [k];
f = llListFindList(lAVATAR, [k]);
if (f == -1)
{
llRegionSayTo(k, PUBLIC_CHANNEL, sWARNING);
lAVATAR += [k];
lTIME += [llGetUnixTime() + (integer)fTIME_WARNING];
lSTATE += iSTATE_WARN;
}
else
{
if (llList2Integer(lTIME, f) <= llGetUnixTime())
{
if (llList2Integer(lSTATE, f) == iSTATE_KICK)
{ //kick
lAVATAR = llDeleteSubList(lAVATAR, f, f);
lTIME = llDeleteSubList(lTIME, f, f);
lSTATE = llDeleteSubList(lSTATE, f, f);
llTeleportAgentHome(k);
}
else if (llList2Integer(lSTATE, f) == iSTATE_WARN)
{
llRegionSayTo(k, PUBLIC_CHANNEL, sWARNING_2);
lTIME = llListReplaceList(lTIME, [llGetUnixTime() + (integer)fTIME_KICK], f, f);
lSTATE = llListReplaceList(lSTATE, [iSTATE_KICK], f, f);
}
}
}
}
}
//cleanup
for (i = 0; i < llGetListLength(lAVATAR); i++)
{
if (llListFindList(lNEW, [llList2Key(lAVATAR, i)]) == -1)
{ //avatar gone
lAVATAR = llDeleteSubList(lAVATAR, i, i);
lTIME = llDeleteSubList(lTIME, i, i);
lSTATE = llDeleteSubList(lSTATE, i, i);
}
}
}
}
Bearbeitet vom Benutzer Dienstag, 7. Oktober 2014 15:32:39(UTC)
| Grund: Nicht angegeben |
It is the mark of an educated mind to be able to entertain a thought without accepting it. |