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,84 +72,7 @@ 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++)
|
|
||||||
{
|
|
||||||
key object = llList2Key(objects_to_update, i);
|
|
||||||
list items = llParseStringKeepNulls(llList2String(objects_files, i), ["|"], []);
|
|
||||||
if (1 == 1)
|
|
||||||
{
|
|
||||||
list scripts_to_update;
|
|
||||||
list other_to_update;
|
|
||||||
list surplus_to_update;
|
|
||||||
integer j;
|
|
||||||
for (j = 0; j < llGetListLength(items); j = j + 2)
|
|
||||||
{
|
|
||||||
string item = llList2String(items, j);
|
|
||||||
key item_key = (key)llList2String(items, j + 1);
|
|
||||||
if (item_key != llGetInventoryKey(item) || item_key == NULL_KEY)
|
|
||||||
{
|
|
||||||
if (llGetInventoryType(item) == INVENTORY_SCRIPT)
|
|
||||||
{
|
|
||||||
scripts_to_update += item;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
other_to_update += item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (llGetInventoryType(item) == INVENTORY_OBJECT)
|
|
||||||
{
|
|
||||||
surplus_to_update += item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (llGetListLength(scripts_to_update) == 0 && llGetListLength(other_to_update) == 0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
particles_on(object);
|
|
||||||
if (llGetListLength(other_to_update) > 0)
|
|
||||||
{
|
|
||||||
if (llListFindList(scripts_to_update, [receiver_script]) == -1)
|
|
||||||
{
|
|
||||||
scripts_to_update += receiver_script;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (llListFindList(scripts_to_update, [receiver_script]) != -1)
|
|
||||||
{
|
|
||||||
other_to_update += surplus_to_update;
|
|
||||||
}
|
|
||||||
for (j = 0; j < llGetListLength(scripts_to_update); j++)
|
|
||||||
{
|
|
||||||
llRegionSayTo(av, 0, "Sending: " + llList2String(scripts_to_update, j) + " to " + llKey2Name(object));
|
|
||||||
integer running = TRUE;
|
|
||||||
if (llSubStringIndex(llKey2Name(object), "[BOX]") != -1 && llList2String(scripts_to_update, j) != receiver_script)
|
|
||||||
{
|
|
||||||
running = FALSE; // set scripts not running if the target name contains [BOX]
|
|
||||||
}
|
|
||||||
integer remove_objects = -1;
|
|
||||||
if (llGetListLength(surplus_to_update))
|
|
||||||
{
|
|
||||||
remove_objects = -1;
|
|
||||||
}
|
|
||||||
llRemoteLoadScriptPin(object, llList2String(scripts_to_update, j), pin, running, remove_objects);
|
|
||||||
}
|
|
||||||
for (j = 0; j < llGetListLength(other_to_update); j++)
|
|
||||||
{
|
|
||||||
llRegionSayTo(av, 0, "Sending: " + llList2String(other_to_update, j) + " to " + llKey2Name(object));
|
|
||||||
llGiveInventory(object, llList2String(other_to_update, j));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
llRemoteLoadScriptPin(object, receiver_script, pin, TRUE, -1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
llRegionSayTo(av, 0, "Updating Complete!");
|
|
||||||
llResetScript();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
touch_start(integer touched)
|
touch_start(integer touched)
|
||||||
|
@ -191,3 +115,93 @@ default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
list scripts_to_update;
|
||||||
|
list other_to_update;
|
||||||
|
list surplus_to_update;
|
||||||
|
integer j;
|
||||||
|
for (j = 0; j < llGetListLength(items); j = j + 2)
|
||||||
|
{
|
||||||
|
string item = llList2String(items, j);
|
||||||
|
key item_key = (key)llList2String(items, j + 1);
|
||||||
|
if (item_key != llGetInventoryKey(item) || item_key == NULL_KEY)
|
||||||
|
{
|
||||||
|
if (llGetInventoryType(item) == INVENTORY_SCRIPT)
|
||||||
|
{
|
||||||
|
scripts_to_update += item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
other_to_update += item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (llGetInventoryType(item) == INVENTORY_OBJECT)
|
||||||
|
{
|
||||||
|
surplus_to_update += item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (llGetListLength(scripts_to_update) == 0 && llGetListLength(other_to_update) == 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
particles_on(object);
|
||||||
|
if (llGetListLength(other_to_update) > 0)
|
||||||
|
{
|
||||||
|
if (llListFindList(scripts_to_update, [receiver_script]) == -1)
|
||||||
|
{
|
||||||
|
scripts_to_update += receiver_script;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (llListFindList(scripts_to_update, [receiver_script]) != -1)
|
||||||
|
{
|
||||||
|
other_to_update += surplus_to_update;
|
||||||
|
}
|
||||||
|
for (j = 0; j < llGetListLength(scripts_to_update); j++)
|
||||||
|
{
|
||||||
|
llRegionSayTo(av, 0, "Sending: " + llList2String(scripts_to_update, j) + " to " + llKey2Name(object));
|
||||||
|
integer running = TRUE;
|
||||||
|
if (llSubStringIndex(llKey2Name(object), "[BOX]") != -1 && llList2String(scripts_to_update, j) != receiver_script)
|
||||||
|
{
|
||||||
|
running = FALSE; // set scripts not running if the target name contains [BOX]
|
||||||
|
}
|
||||||
|
integer remove_objects = -1;
|
||||||
|
if (llGetListLength(surplus_to_update))
|
||||||
|
{
|
||||||
|
remove_objects = -1;
|
||||||
|
}
|
||||||
|
llRemoteLoadScriptPin(object, llList2String(scripts_to_update, j), pin, running, remove_objects);
|
||||||
|
}
|
||||||
|
for (j = 0; j < llGetListLength(other_to_update); j++)
|
||||||
|
{
|
||||||
|
llRegionSayTo(av, 0, "Sending: " + llList2String(other_to_update, j) + " to " + llKey2Name(object));
|
||||||
|
llGiveInventory(object, llList2String(other_to_update, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if(i==llGetListLength(objects_to_update)){
|
||||||
|
llRegionSayTo(av, 0, "Updates complete!");
|
||||||
|
llResetScript();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue