use timer to avoid event timeout in OpenSim (#40)

This commit is contained in:
codeviolet 2017-09-09 18:56:10 +10:00 committed by GitHub
parent bfb8ba8443
commit dc8b6c8386

View file

@ -26,6 +26,7 @@ list objects_files;
integer menu_handle;
key av;
integer listenhandle;
integer i;
particles_on(key target)
{
@ -71,10 +72,63 @@ default
{
llSetTimerEvent(0);
llListenRemove(listenhandle);
llRegionSayTo(av, 0, "Found " + (string)llGetListLength(objects_to_update) + " objects...");
integer i;
for (i = 0; i < llGetListLength(objects_to_update); i++)
state do_update;
}
touch_start(integer touched)
{
if (llDetectedKey(0) == llGetOwner() || llSameGroup(llDetectedKey(0)))
{
av = llDetectedKey(0);
objects_to_update = [];
objects_files = [];
llSetTimerEvent(10);
list items;
integer i;
for (i = 0; i < llGetInventoryNumber(INVENTORY_ALL); i++)
{
if (llGetInventoryName(INVENTORY_ALL, i) != llGetScriptName())
{
items += llGetInventoryName(INVENTORY_ALL, i);
}
}
llRegionSayTo(av, 0, "listening...");
llSay(pin, "OBJECT_SEARCH|" + llDumpList2String(items, "|"));
}
}
listen(integer chan, string name, key id, string msg)
{
if (llGetOwnerKey(id) == llGetOwner())
{
list data = llParseStringKeepNulls(msg, ["|"], []);
if (llList2String(data, 0) == "OBJECT_HERE")
{
vector mysize = llGetScale();
float distance = llVecMag(llGetPos() - llList2Vector(llGetObjectDetails(id, [OBJECT_POS]), 0));
if (distance <= mysize.x / 2)
{
objects_to_update += id;
objects_files += llDumpList2String(llList2List(data, 1, -1), "|");
}
}
}
}
}
state do_update
{
state_entry()
{
llRegionSayTo(av, 0, "Found " + (string)llGetListLength(objects_to_update) + " prims...");
i = 0;
llSetTimerEvent(0.1);
}
timer(){
llRegionSayTo(av, 0, "Processing prim " + (string)(i+1) + "/" + (string)llGetListLength(objects_to_update));
key object = llList2Key(objects_to_update, i);
list items = llParseStringKeepNulls(llList2String(objects_files, i), ["|"], []);
if (1 == 1)
@ -142,52 +196,12 @@ default
}
}
}
else
{
llRemoteLoadScriptPin(object, receiver_script, pin, TRUE, -1);
}
}
llRegionSayTo(av, 0, "Updating Complete!");
i++;
if(i==llGetListLength(objects_to_update)){
llRegionSayTo(av, 0, "Updates complete!");
llResetScript();
}
touch_start(integer touched)
{
if (llDetectedKey(0) == llGetOwner() || llSameGroup(llDetectedKey(0)))
{
av = llDetectedKey(0);
objects_to_update = [];
objects_files = [];
llSetTimerEvent(10);
list items;
integer i;
for (i = 0; i < llGetInventoryNumber(INVENTORY_ALL); i++)
{
if (llGetInventoryName(INVENTORY_ALL, i) != llGetScriptName())
{
items += llGetInventoryName(INVENTORY_ALL, i);
}
}
llRegionSayTo(av, 0, "listening...");
llSay(pin, "OBJECT_SEARCH|" + llDumpList2String(items, "|"));
}
}
listen(integer chan, string name, key id, string msg)
{
if (llGetOwnerKey(id) == llGetOwner())
{
list data = llParseStringKeepNulls(msg, ["|"], []);
if (llList2String(data, 0) == "OBJECT_HERE")
{
vector mysize = llGetScale();
float distance = llVecMag(llGetPos() - llList2Vector(llGetObjectDetails(id, [OBJECT_POS]), 0));
if (distance <= mysize.x / 2)
{
objects_to_update += id;
objects_files += llDumpList2String(llList2List(data, 1, -1), "|");
}
}
}
}
}