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

From Second Life Wiki
Jump to navigation Jump to search
No edit summary
Removing all content from page
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<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"
                }
                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>

Latest revision as of 19:15, 23 August 2008