key hostkey = NULL_KEY; vector corepos; vector targetpos; vector avsize; vector startpos; integer got; integer initmsg = 0; integer initins = 0; integer dietimer; string homeregion; float dist; float sdist; warpPos( vector d ) { if ( d.z > 768 ) d.z = 768; integer s = (integer)(llVecMag(d-llGetPos())/10)+1; if ( s > 100 ) s = 100; integer e = (integer)( llLog( s ) / llLog( 2 ) ); list rules = [ PRIM_POSITION, d ]; integer i; for ( i = 0 ; i < e ; ++i ) rules += rules; integer r = s - (integer)llPow( 2, e ); if ( r > 0 ) rules += llList2List( rules, 0, r * 2 + 1 ); llSetPrimitiveParams( rules ); } default { on_rez(integer start) { startpos = llGetPos(); initmsg = 0; initins = 0; } state_entry() { llSitTarget(<0,0,0.5>,llGetRot()); llSetSitText("SG Core"); llSetTouchText("Target"); llTargetOmega(<0,0,-0.1>,PI,1); llListen(5381,"Sim Grid Agent",NULL_KEY,""); llListen(5385,"Sim Grid Halo",NULL_KEY,""); llListen(5380,"Sim Grid",NULL_KEY,""); llListen(5381,"Sim Grid",NULL_KEY,""); } changed(integer change) { key av = llAvatarOnSitTarget(); if((change & CHANGED_LINK) && NULL_KEY != av) { if(av == hostkey) { warpPos(corepos); llMessageLinked(LINK_SET,0,"Taking you to the Sim Grid Core.",hostkey); llUnSit(av); llSleep(1.0); } else if(llSameGroup(av)) { llUnSit(av); } else { vector hostpos = llGetPos(); warpPos(hostpos+<0,0,300>); llUnSit(av); llSleep(0.2); warpPos(hostpos); } } } sensor(integer detected) { vector otherpos = llDetectedPos(0); dist = llVecDist(otherpos+<0,0,( avsize.z/2)+0.25>,llGetPos()); sdist = llVecDist(otherpos+<0,0,( avsize.z/2)+0.25>,startpos); if(detected > 0 && !initins) { list distcheck = [hostkey,sdist]; llRegionSay(5385,llList2CSV(distcheck)); initins = 1; } if(detected > 0 && otherpos.x <= 256 && otherpos.x >= 0 && otherpos.y <= 256 && otherpos.y >= 0) { warpPos(otherpos+<0,0,(avsize.z /2)+0.25>); } else { llMessageLinked(LINK_SET,0,"De-rezzing. You haved moved outside of the "+homeregion+" Sim Grid coverage.",hostkey); llRegionSay(5382,"-"+(string)hostkey); llSleep(0.1); llDie(); } if(detected > 0 && dist < 0.5 && !initmsg) { llMessageLinked(LINK_SET,0,"Hello, "+llKey2Name(hostkey)+". The Tripwire Fortress Corps Sim Grid is in effect throughout "+homeregion+". Because you are a member of TFC, you will be able to utilize the Sim Grid to the full extent of its abilities through me, your Sim Grid Halo. Say 'sg help' for usage information (not yet working).",hostkey); initmsg = 1; } if(NULL_KEY != hostkey && !dietimer && (detected == 0 || <0,0,0> == llDetectedPos(0))) { dietimer = 1; llRegionSay(5381,"find>"+llToLower(llKey2Name(hostkey))); llSetTimerEvent(5); } } no_sensor() { if(NULL_KEY != hostkey && !dietimer) { dietimer = 1; llRegionSay(5381,"find>"+llToLower(llKey2Name(hostkey))); llSetTimerEvent(5); } } listen(integer channel, string name, key id, string msg) { list otherinfo = llCSV2List(msg); //[%] For rez info from Sim Grid Agent. integer startcomp = llList2Integer(otherinfo,0); key hkey = llList2Key(otherinfo,1); //[%] //[@] For any location find command's results. key mcheck = (key)llGetSubString(msg,0,35); string klmsg = llGetSubString(msg,36,llStringLength(msg)-1); integer sidx = llSubStringIndex(msg,"<"); integer eidx = llSubStringIndex(msg,">"); if(!dietimer && (vector)llGetSubString(msg,sidx,eidx) != <0,0,0>) { targetpos = (vector)llGetSubString(msg,sidx,eidx); llMessageLinked(LINK_SET,1,(string)targetpos,hostkey); } //[@] //[#] For duplicate arguments of which one should die. key givenkey = llList2Key(otherinfo,0); float givendist = llList2Float(otherinfo,1); //[#] //User Commands [ if((eidx > 0 || msg == "avatar query") && id == hostkey) { llRegionSay(5381,msg); if(msg == "avatar query") { llMessageLinked(LINK_SET,0,"Populating avatar list...",hostkey); } } //User Commands ] //Non-Core-Using User Commands [ else if(channel == 0 || channel == 9) { if(msg == "save") { llSay(5387,"Hold Die"); } else if(msg == "wide save") { llShout(5387,"Hold Die"); } else if(msg == "mass save") { llRegionSay(5387,"Hold Die"); } else if(msg == "crush") { llSay(5387,"Kill Die"); } else if(msg == "wide crush") { llShout(5387,"Kill Die"); } else if(msg == "mass crush") { llRegionSay(5387,"Kill Die"); } else if(msg == "tran") { llRezObject("Sim Grid Transporter",llGetPos()+<0,0,0.5>,ZERO_VECTOR,llEuler2Rot(<0,PI+(PI/2),0>),2); llSleep(0.5); llWhisper(5388,(string)targetpos); llMessageLinked(LINK_SET,0,"A transporter has been rezzed. You may either click it to go to your last found target, or right click it and choose 'Bus' to send it to the target so that they may be transported here.",hostkey); } } //Non-Core-Using User Commands ] else if(channel == 5381) { if(mcheck == llGetKey() && !got) { if(!dietimer) { got = 1; llSetTimerEvent(0.5); klmsg += " Click me to target this avatar's position."; llMessageLinked(LINK_SET,0,klmsg,hostkey); } else { llSetTimerEvent(0); warpPos(targetpos); dietimer = 0; } } else if(startcomp == llGetStartParameter() && NULL_KEY != hkey && NULL_KEY == hostkey) { homeregion = llGetRegionName(); hostkey = hkey; corepos = targetpos; llRegionSay(5382,"+"+(string)hostkey); avsize = llGetAgentSize(hostkey); llListen(0,"",hostkey,""); llListen(9,"",hostkey,""); llSensorRepeat("",hostkey,AGENT,200000,7000*PI,0.001); } } else if(channel == 5385 && givenkey == hostkey) { if(sdist < givendist) { initins = 0; } else { llDie(); } } else if(channel == 5380 && (msg == "Halo Reset" || msg == "Sim Grid Die")) { llDie(); } else if(channel == 5380 && mcheck == llGetKey()) { llMessageLinked(LINK_SET,0,"Avatars currently present in the sim: "+klmsg,hostkey); } } timer() { if(!dietimer) { got = 0; } else { llRegionSay(5382,"-"+(string)hostkey); llSleep(0.1); llDie(); } } }