use timer to avoid event timeout in OpenSim (#40)
This commit is contained in:
parent
bfb8ba8443
commit
dc8b6c8386
1 changed files with 92 additions and 78 deletions
|
@ -26,6 +26,7 @@ list objects_files;
|
||||||
integer menu_handle;
|
integer menu_handle;
|
||||||
key av;
|
key av;
|
||||||
integer listenhandle;
|
integer listenhandle;
|
||||||
|
integer i;
|
||||||
|
|
||||||
particles_on(key target)
|
particles_on(key target)
|
||||||
{
|
{
|
||||||
|
@ -71,10 +72,63 @@ default
|
||||||
{
|
{
|
||||||
llSetTimerEvent(0);
|
llSetTimerEvent(0);
|
||||||
llListenRemove(listenhandle);
|
llListenRemove(listenhandle);
|
||||||
llRegionSayTo(av, 0, "Found " + (string)llGetListLength(objects_to_update) + " objects...");
|
state do_update;
|
||||||
integer i;
|
}
|
||||||
for (i = 0; i < llGetListLength(objects_to_update); i++)
|
|
||||||
|
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);
|
key object = llList2Key(objects_to_update, i);
|
||||||
list items = llParseStringKeepNulls(llList2String(objects_files, i), ["|"], []);
|
list items = llParseStringKeepNulls(llList2String(objects_files, i), ["|"], []);
|
||||||
if (1 == 1)
|
if (1 == 1)
|
||||||
|
@ -142,52 +196,12 @@ default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
i++;
|
||||||
llRemoteLoadScriptPin(object, receiver_script, pin, TRUE, -1);
|
|
||||||
}
|
if(i==llGetListLength(objects_to_update)){
|
||||||
}
|
llRegionSayTo(av, 0, "Updates complete!");
|
||||||
llRegionSayTo(av, 0, "Updating Complete!");
|
|
||||||
llResetScript();
|
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), "|");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue