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

From Second Life Wiki
Jump to navigation Jump to search
m (paste er)
(Removing all content from page)
 
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"
                }
                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>

Latest revision as of 19:15, 23 August 2008