vector pos; integer posno = 0; integer agentsuc = 0; integer agenttotal = 25; list queryavs; key lastrid; key querytell; string lastrname; vector pos_return() { if(posno < 4) { return <45,45,50+(posno*192)>; } else if(posno == 4) { return <45,45,765>; } else if(posno < 9) { return <211,45,50+((posno-5)*192)>; } else if(posno == 9) { return <211,45,765>; } else if(posno < 14) { return <45,211,50+((posno-10)*192)>; } else if(posno == 14) { return <45,211,765>; } else if(posno < 19) { return <211,211,50+((posno-15)*192)>; } else if(posno == 19) { return <211,211,765>; } else if(posno == 20) { return <128,128,2>; } else if(posno <= 24) { return <128,128,146+(posno-21)*192>; } else { return <0,0,0>; } } default { state_entry() { llTargetOmega(<0,0,-0.5>,PI,1); pos = llGetPos(); llListen(0,"",llGetOwner(),""); llListen(5381,"Sim Grid Halo",NULL_KEY,""); llListen(5380,"Sim Grid Agent",NULL_KEY,""); } listen(integer channel,string name,key id,string msg) { if(id == llGetOwner()) { if(msg == "create grid") { llSay(0,"Forming sim grid."); vector sayvec; pos = llGetPos(); posno = 0; agentsuc = 0; llRezObject("Sim Grid Agent",llGetPos()+<0,0,5>,ZERO_VECTOR,ZERO_ROTATION,2); } else if(msg == "destroy grid") { agentsuc = 0; llSay(0,"Destroying sim grid."); llRegionSay(5380,"Sim Grid Die"); } else if(msg == "halo reset") { llSay(0,"Executing halo system reset."); llRegionSay(5380,"Halo Reset"); } } else if(name == "Sim Grid Agent") { list msginfo = llCSV2List(msg); string type = llList2String(msginfo,0); //For OMSG & RMSG: key rokey = llList2Key(msginfo,1); string roname = llList2String(msginfo,2); //For RMSG: string rmsg = llList2String(msginfo,3); if(msg == "success") { agentsuc += 1; llSay(0,"Agents successful: "+(string)agentsuc+"/"+(string)agenttotal); if(agentsuc == agenttotal) { llSay(0,"All Sim Grid Agents have successfully moved into place!"); } } else if(type == "OMSG") { llRegionSay(5380,"tobliviate:"+(string)rokey+roname); } else if(type == "RMSG" && rokey != lastrid && roname != lastrname) { lastrid = rokey; lastrname = roname; llRegionSay(5381,(string)rokey+rmsg); } else { list queryinfo = llCSV2List(msg); querytell = llList2Key(queryinfo,llGetListLength(queryinfo)-1); integer avadd; while(avadd < llGetListLength(queryinfo)-1) { list queryadd = llList2List(queryinfo,avadd,avadd); if(llListFindList(queryavs,queryadd) == -1) { queryavs = llListInsertList(queryavs,queryadd,0); } avadd += 1; } } } else if(name == "Sim Grid Halo") { integer comindex = llSubStringIndex(msg,">"); string cmd = llGetSubString(msg,0,comindex); string cmdname = llGetSubString(msg,comindex+1,llStringLength(msg)-1); if(cmd == "find>") { llRegionSay(5380,"map:"+(string)id+cmdname); } else if(msg == "avatar query") { llRegionSay(5380,"query:"+(string)id); queryavs = []; llSetTimerEvent(3); } else if(cmd == "hold>") { llRegionSay(5380,"hold:"+(string)id+cmdname); } else if(cmd == "obliviate>") { llRegionSay(5380,"obliviate:"+(string)id+cmdname); } else if(cmd == "rescue>") { llRegionSay(5380,"rescue:"+(string)id+cmdname); } } } object_rez(key id) { if(posno < 25 && llKey2Name(id) == "Sim Grid Agent") { llSay(5380,(string)pos_return()); posno += 1; llRezObject("Sim Grid Agent",llGetPos()+<0,0,5>,ZERO_VECTOR,ZERO_ROTATION,2); } else if(llKey2Name(id) == "Sim Grid Agent") { llSay(5380,(string)pos_return()); llSay(0,"Sim grid formation complete."); } } timer() { llRegionSay(5380,(string)querytell+llList2CSV(queryavs)); llSetTimerEvent(0); } }