Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- integer attachmentPoint;
- key attachedTo;
- integer listenHandle = 0;
- integer listenHandle2 = 0;
- vector origScale = ZERO_VECTOR;
- integer pin = 980572850;
- string lastMessage = "";
- float version = 0.4;
- list lastMessages = [];
- float messagePurgeCountdown;
- //http://secondlife.com/badgeo/wakka.php?wakka=LibraryWarpPos&show_comments=1#comments
- warpPos(vector destpos)
- { //R&D by Keknehv Psaltery, 05/25/2006
- //with a little pokeing by Strife, and a bit more
- //some more munging by Talarus Luan
- //Final cleanup by Keknehv Psaltery
- // Compute the number of jumps necessary
- integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1;
- // Try and avoid stack/heap collisions
- if (jumps > 100 )
- jumps = 100; // 1km should be plenty
- list rules = [ PRIM_POSITION, destpos ]; //The start for the rules list
- integer count = 1;
- while ( ( count = count << 1 ) < jumps)
- rules = (rules=[]) + rules + rules; //should tighten memory use.
- llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );
- }
- default {
- state_entry() {
- attachmentPoint = llGetAttached();
- listenHandle = llListen(150, "", NULL_KEY, ""); //Listen only to our owner.
- if (attachmentPoint==0) {
- listenHandle2 = llListen(0, "", NULL_KEY, "");
- } else {
- listenHandle2 = 0;
- }
- lastMessage="";
- llSetRemoteScriptAccessPin(pin);
- lastMessages = [];
- llSetTimerEvent(0.0);
- messagePurgeCountdown=0.0;
- }
- on_rez(integer start_param) {
- attachmentPoint = llGetAttached();
- llListenRemove(listenHandle);
- listenHandle = llListen(150, "", NULL_KEY, ""); //Listen only to our owner.
- llListenRemove(listenHandle2);
- if (attachmentPoint==0) {
- listenHandle2 = llListen(0, "", NULL_KEY, "");
- } else {
- listenHandle2 = 0;
- }
- lastMessage="";
- lastMessages = [];
- llSetTimerEvent(0.0);
- messagePurgeCountdown=0.0;
- if (start_param>0) {
- integer index = start_param - 1;
- float x = (index%3)*64 + 64.0;
- float y = (index/3)*64 + 64.0;
- float z = llGround(<x, y, 0.0>-llGetPos()) - 1.0;
- vector dest = <x, y, z>;
- llOwnerSay("Moving to "+(string)dest);
- warpPos(dest);
- //llDie();
- }
- }
- attach(key id) {
- if (id==NULL_KEY) {
- attachmentPoint=0;
- } else {
- attachmentPoint = llGetAttached();
- }
- llListenRemove(listenHandle);
- listenHandle = llListen(150, "", NULL_KEY, ""); //Listen only to our owner.
- llListenRemove(listenHandle2);
- if (attachmentPoint==0) {
- listenHandle2 = llListen(0, "", NULL_KEY, "");
- } else {
- listenHandle2 = 0;
- }
- }
- listen(integer channel, string name, key id, string message) {
- if (id==llGetOwner()) { //If the owner is speaking
- if (attachmentPoint!=0 && channel==150) { //If we're attached and the owner spoke on channel 150.
- if (message=="suicide") { //Kill all our drones.
- llOwnerSay("Commanding drones to suicide.");
- llShout(150, "suicide");
- } else if (message=="update") {
- llOwnerSay("Sending update information (our version: "+(string)version+").");
- llShout(150, "update|"+(string)version);
- } else if (message=="test") {
- llOwnerSay("Querying drones.");
- llShout(150, "test");
- } else if (message=="rez") {
- llOwnerSay("Creating network.");
- integer i=1;
- for (i=1; i<=9; i++) {
- llRezObject("Comm Drone", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, i);
- }
- } else if (message!=lastMessage) { //Have the drones say something.
- llOwnerSay("Commanding drones to say \""+message+"\"");
- llShout(150, "say|"+name+"|"+message);
- }
- }
- } else if (llGetOwnerKey(id)==llGetOwner()) {
- if (attachmentPoint==0) {
- if (channel==150) {
- list packet = llParseString2List(message, ["|"], []);
- if (llListFindList(lastMessages, [message])==-1) {
- if (messagePurgeCountdown==0.0) {
- llSetTimerEvent(0.1);
- messagePurgeCountdown=5.0;
- }
- lastMessages += message;
- string command = llList2String(packet, 0);
- if (command=="suicide") { //Die on command
- llOwnerSay("Suiciding.");
- llShout(150, "suicide");
- llDie();
- } else if (command=="update") {
- float availableVersion = (float) llList2String(packet, 1);
- if (availableVersion>version) {
- llOwnerSay("Requesting update (our version is "+(string)version+", proposed version is "+(string)availableVersion+".");
- string send = "updateme|"+(string)llGetKey();
- lastMessages += send;
- llShout(150, send);
- } else {
- llOwnerSay("Ignoring update (our version is "+(string)version+", proposed version is "+(string)availableVersion+".");
- }
- } else if (command=="test") {
- llOwnerSay("Comm Drone at "+(string)llGetPos()+" reporting in.");
- llShout(150, "test");
- } else if (command=="say") {
- string speakerName = llList2String(packet, 1);
- string speakerMessage = llList2String(packet, 2);
- llOwnerSay("Saying <"+speakerName+"> "+speakerMessage);
- string myName = llGetObjectName();
- llSetObjectName(speakerName);
- llSay(0, speakerMessage);
- llSetObjectName(myName);
- } else if (command=="updateme") {
- llOwnerSay("Forwarding update request "+message);
- //llRemoteLoadScriptPin(llGetLinkKey(num), llGetScriptName(), pin, TRUE, 1);
- llShout(150, message);
- }
- }
- } else {
- //Ignore anything said by other drones on channel 0.
- }
- } else {
- list packet = llParseString2List(message, ["|"], []);
- if (llListFindList(lastMessages, [message])==-1) {
- if (messagePurgeCountdown==0.0) {
- llSetTimerEvent(0.1);
- messagePurgeCountdown=5.0;
- }
- lastMessages += message;
- string command = llList2String(packet, 0);
- if (command=="updateme") {
- llOwnerSay("Updating "+llKey2Name(id));
- key id = (key) llList2String(packet, 1);
- llRemoteLoadScriptPin(id, llGetScriptName(), pin, TRUE, 1);
- }
- }
- }
- } else if (channel==0) {
- //said by someone or something not belonging to our owner
- llOwnerSay("<"+name+"> "+message);
- }
- }
- timer() {
- if (messagePurgeCountdown<=0.1) {
- if (llGetListLength(lastMessages)>0) {
- llListReplaceList(lastMessages, [], 0, 0);
- messagePurgeCountdown=5.0;
- } else {
- messagePurgeCountdown=0.0;
- llSetTimerEvent(0.0);
- }
- } else {
- messagePurgeCountdown-=0.1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement