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;
|
||||
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), "|");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue