Difference between revisions of "User:Viktoria Dovgal/Simple CB simulator"

From Second Life Wiki
Jump to navigation Jump to search
m (paste er)
Line 110: Line 110:
                     } // "/channel"
                     } // "/channel"
                 }
                 }
                 if (command == "/handle") {
                 else if (command == "/handle") {
                     if (command_list_length == 1) { // just asking
                     if (command_list_length == 1) { // just asking
                         PrintStatus();
                         PrintStatus();

Revision as of 03:45, 25 June 2008

<lsl> // Simple CB simulator, drop in a prim and attach or just use

// ====================================================================== // Licensing // ====================================================================== // Copyright ©2008 Viktoria Dovgal // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // ======================================================================


// the channel you use to talk to your radio integer local_channel = 19; // it's a CB right?

// The default public channel if you don't pick another. integer broadcast_channel = -4040808;


// global globules key owner; string handle; // resident name by default integer local_listener; integer broadcast_listener; string range;


Setup() {

   owner = llGetOwner();
   handle = llKey2Name(owner);
   range = "shout";
   // clean up after old listeners, if any
   llListenRemove(local_listener);
   llListenRemove(broadcast_listener);
   // start up the new ones
   local_listener = llListen(local_channel, "", "", "");
   broadcast_listener = llListen(broadcast_channel, "", "", "");

}


PrintStatus() {

   llOwnerSay("Handle \"" + handle + "\", " + range + ", channel " + (string)broadcast_channel);

}


Hello() {

   llOwnerSay("CB simulator, type /" + (string)local_channel + "/help for commmands");
   PrintStatus();

}

default {

   state_entry() {
       Setup();
       Hello();
   }
   on_rez(integer rezparam) {
       Hello();
   }
   changed (integer change) {
       if (change & CHANGED_OWNER) {
           Setup();
           Hello();
       }
   }


   listen(integer channel, string name, key id, string message) {
       if (channel == local_channel) { // possibly from owner
           if (llGetOwnerKey(id) == owner) { // it is!
               list command_list = llParseString2List(message, [" "], []);
               integer command_list_length = llGetListLength(command_list);
               string command = llList2String(command_list, 0);
               
               if (command == "/channel") {
                   if (command_list_length == 1) { // just asking
                       PrintStatus();
                   }
                   else {
                       integer new_channel = (integer)llList2String(command_list, 1);
                       if (new_channel >= 0) {
                           llOwnerSay("Channel must be a number less than zero.");
                       }
                       else {
                           llListenRemove(broadcast_listener); // close the old one
                           broadcast_channel = new_channel;
                           broadcast_listener = llListen(broadcast_channel, "", "", ""); // open the new
                           PrintStatus();
                       }
                   } // "/channel"
               }
               else if (command == "/handle") {
                   if (command_list_length == 1) { // just asking
                       PrintStatus();
                   }
                   else {
                       handle = llStringTrim(llGetSubString(message, 7, -1), STRING_TRIM);
                       PrintStatus();
                   } // "/handle";
               }
               else if (command == "/region") { // cover entire region but not across edges
                   range = "region";
                   PrintStatus();
               }
               else if (command == "/shout") { // 100m range, crosses regin boundaries
                   range = "shout";
                   PrintStatus();
               }
               else if (command == "/status") {
                   PrintStatus();
               }
               else if (command == "/help") {
                   llOwnerSay("CB simulator help:");
                   llOwnerSay(" /"+(string)local_channel+ "/channel -nn : change channel, must be a negative number");
                   llOwnerSay(" /"+(string)local_channel+ "/handle xxx : change handle");
                   llOwnerSay(" /"+(string)local_channel+ "/region : talk to entire region, but this region only");
                   llOwnerSay(" /"+(string)local_channel+ "/shout : talk up to 100m away, including nearby regions");
                   llOwnerSay(" /"+(string)local_channel+ "/status : show channel and range");
                   llOwnerSay(" /"+(string)local_channel+ "/help : you're soaking in it");
                   llOwnerSay(" /"+(string)local_channel+ " (anything else) : text is broadcast");
               }
               else { // just talking i guess!
                   if (range == "region") {
                       llRegionSay(broadcast_channel, message);
                   }
                   else {
                       llShout(broadcast_channel, "[" + handle + "] " + message);
                       llOwnerSay("<" + handle + "> " + message); // echo
                   }
               } // just talking
           } // owner check
       } // local_channel
       else if (channel == broadcast_channel) { // incoming
           llOwnerSay(message);
       } // broadcast_channel
   }

} </lsl>