<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite%2FMyriad_Lite_Rumor_Server-Preview6.lsl</id>
		<title>User:Allen Kerensky/Myriad Lite/Myriad Lite Rumor Server-Preview6.lsl - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite%2FMyriad_Lite_Rumor_Server-Preview6.lsl"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Rumor_Server-Preview6.lsl&amp;action=history"/>
		<updated>2026-04-24T09:26:45Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Rumor_Server-Preview6.lsl&amp;diff=30387&amp;oldid=prev</id>
		<title>Allen Kerensky: Myriad_Lite_Rumor_Server-Preview6.lsl</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Rumor_Server-Preview6.lsl&amp;diff=30387&amp;oldid=prev"/>
				<updated>2012-08-12T17:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;Myriad_Lite_Rumor_Server-Preview6.lsl&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Myriad_Lite_Rumor_Server-Preview6.lsl =&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Myriad_Lite_Rumor_Server-Preview6.lsl&lt;br /&gt;
// Copyright (c) 2012 by Allen Kerensky (OSG/SL) All Rights Reserved.&lt;br /&gt;
// This work is dual-licensed under&lt;br /&gt;
// Creative Commons Attribution (CC BY) 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by/3.0/&lt;br /&gt;
// - or -&lt;br /&gt;
// Modified BSD License (3-clause)&lt;br /&gt;
// Redistribution and use in source and binary forms, with or without&lt;br /&gt;
// modification, are permitted provided that the following conditions are met:&lt;br /&gt;
// * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
//   this list of conditions and the following disclaimer.&lt;br /&gt;
// * Redistributions in binary form must reproduce the above copyright notice,&lt;br /&gt;
//   this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
//   and/or other materials provided with the distribution.&lt;br /&gt;
// * Neither the name of Myriad Lite nor the names of its contributors may be&lt;br /&gt;
//   used to endorse or promote products derived from this software without&lt;br /&gt;
//   specific prior written permission.&lt;br /&gt;
//&lt;br /&gt;
// THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN&lt;br /&gt;
// NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
//&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG System licensed under:&lt;br /&gt;
// Creative Commons Attribution (CC BY) 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
&lt;br /&gt;
string  VERSION = &amp;quot;0.0.5&amp;quot;; // version number&lt;br /&gt;
string  VERDATE = &amp;quot;20120704&amp;quot;; // version date&lt;br /&gt;
&lt;br /&gt;
// !!! CODED TO WORK WITH ANTI-DELAY NODE MANAGER AND ONE OR MORE ANTI-DELAY NODE SCRIPTS !!!&lt;br /&gt;
// http://wiki.secondlife.com/wiki/AntiDelay_Node&lt;br /&gt;
&lt;br /&gt;
list    ADMINS = [ ]; // list all avatar names of your co-admins here, yourself included - defaults to just owner&lt;br /&gt;
integer CHAN_MYRIAD = -999;&lt;br /&gt;
integer HAND_MYRIAD;&lt;br /&gt;
integer CHAN_SERVER;&lt;br /&gt;
integer HAND_SERVER;&lt;br /&gt;
//float   MENU_TIMEOUT = 20;&lt;br /&gt;
string  MENU_TITLE = &amp;quot;Myriad Lite Rumor Server&amp;quot;;&lt;br /&gt;
list    MENU_BUTTONS = [&amp;quot;RUMOR_LIST&amp;quot;,&amp;quot;RUMOR_MODERATE&amp;quot;,&amp;quot;RUMOR_CLOSE&amp;quot;,&amp;quot;RUMOR_RESET&amp;quot;];&lt;br /&gt;
vector  GREEN = &amp;lt;0,1,0&amp;gt;;&lt;br /&gt;
//vector  BLUE = &amp;lt;0,0,1&amp;gt;;&lt;br /&gt;
//vector  RED = &amp;lt;1,0,0&amp;gt;;&lt;br /&gt;
key     MENU_USER;&lt;br /&gt;
list    TOKENS;&lt;br /&gt;
string  COMMAND;&lt;br /&gt;
string  NAME;&lt;br /&gt;
string  RUMOR;&lt;br /&gt;
integer RUMOR_TIME = 30; // days&lt;br /&gt;
list    PENDING; // [ TIME, NAME of Rumor Start, Rumor text with no commas, [ ... ]]&lt;br /&gt;
list    RUMORS; // [ TIME, NAME of Rumor Start, Rumor text with no commas, [ ... ]]&lt;br /&gt;
integer TIME;&lt;br /&gt;
integer LENGTH;&lt;br /&gt;
integer INDEX;&lt;br /&gt;
list    TEMP;&lt;br /&gt;
list    GETTERS;&lt;br /&gt;
integer FLAG_DEBUG;&lt;br /&gt;
integer FLAG_RESTART;&lt;br /&gt;
&lt;br /&gt;
string  notecardName = &amp;quot;Myriad_Lite_Seed_Rumors-Preview6.txt&amp;quot;;&lt;br /&gt;
integer lineCounter;&lt;br /&gt;
key     dataRequestID;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CLEAN_RUMOR_LIST() {&lt;br /&gt;
    // reset getters queue&lt;br /&gt;
    GETTERS = [];&lt;br /&gt;
    // scan rumor queue and timeout&lt;br /&gt;
    if ( llGetListLength(RUMORS) &amp;lt; 1 ) {&lt;br /&gt;
        return;&lt;br /&gt;
    } else {&lt;br /&gt;
            LENGTH = llGetListLength(RUMORS);&lt;br /&gt;
        for ( INDEX = 0; INDEX &amp;lt; LENGTH; INDEX += 3 ) {&lt;br /&gt;
            TIME = llList2Integer(RUMORS,INDEX);&lt;br /&gt;
            NAME = llList2String(RUMORS,INDEX + 1);&lt;br /&gt;
            RUMOR = llList2String(RUMORS,INDEX + 2);&lt;br /&gt;
            if ( TIME &amp;gt; llGetUnixTime() ) TEMP = [ TIME,NAME,RUMOR ] + TEMP;&lt;br /&gt;
        }&lt;br /&gt;
        RUMORS = [] + TEMP;&lt;br /&gt;
        TEMP = [];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DEBUG(string debugmsg) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) llSay(DEBUG_CHANNEL,&amp;quot;(&amp;quot;+llKey2Name(llGetOwner())+&amp;quot;) RUMOR SERVER: &amp;quot;+debugmsg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SETUP() {&lt;br /&gt;
    FLAG_DEBUG = TRUE;&lt;br /&gt;
    FLAG_RESTART = FALSE;&lt;br /&gt;
    if ( llGetListLength(ADMINS) &amp;lt; 1 ) { // if there are no admins listed&lt;br /&gt;
        ADMINS = [llKey2Name(llGetOwner())]; // add the server owner as an admin minimum&lt;br /&gt;
    }&lt;br /&gt;
    if ( HAND_MYRIAD != 0 ) llListenRemove(HAND_MYRIAD);&lt;br /&gt;
    HAND_MYRIAD = llListen(CHAN_MYRIAD,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    CHAN_SERVER = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),0,6));&lt;br /&gt;
    if ( HAND_SERVER != 0 ) llListenRemove(HAND_SERVER);&lt;br /&gt;
    HAND_SERVER = llListen(CHAN_SERVER,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    llMessageLinked(LINK_THIS,-123,(string)llGetOwner()+&amp;quot;~~~Restarting Rumor Control and reading seed notecard.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    lineCounter = 0;&lt;br /&gt;
    dataRequestID = llGetNotecardLine(notecardName, lineCounter);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RESET() {&lt;br /&gt;
    llResetScript();&lt;br /&gt;
}&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer changes) {&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_INVENTORY ) { // someone changed rumor notecard, restart?&lt;br /&gt;
            if ( FLAG_RESTART == TRUE ) {&lt;br /&gt;
                RESET();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver(key queryid, string data) {&lt;br /&gt;
        //Check to make sure this is the request we are making.&lt;br /&gt;
        //Remember that when data comes back from the dataserver,&lt;br /&gt;
        //it goes to *all* scripts in your prim.&lt;br /&gt;
        //So you have to make sure this is the data you want, and&lt;br /&gt;
        //not data coming from some other script.&lt;br /&gt;
        if (dataRequestID == queryid) {&lt;br /&gt;
            //If we haven't reached the end of the file&lt;br /&gt;
            //Display the incoming data, then request the next line #&lt;br /&gt;
            if (data != EOF) {&lt;br /&gt;
                if ( llGetSubString(data,0,0) != &amp;quot;#&amp;quot; ) { // skip comment lines&lt;br /&gt;
                    list tokens = llParseString2List(data,[&amp;quot;,&amp;quot;],[]);&lt;br /&gt;
                    integer time = (llGetUnixTime() + (RUMOR_TIME * 86400));&lt;br /&gt;
                    string rumormonger = llList2String(tokens,0);&lt;br /&gt;
                    string rumor = llList2String(tokens,1);&lt;br /&gt;
                    if ( llStringLength(rumormonger) &amp;gt; 4 &amp;amp;&amp;amp; llStringLength(rumor) &amp;gt; 4 ) { // ignore blank rumor lines in notecard&lt;br /&gt;
                        RUMORS = [ time, rumormonger, rumor ] + RUMORS;&lt;br /&gt;
                        DEBUG(&amp;quot;notecard: time=[&amp;quot;+(string)time+&amp;quot;] rumormonger=[&amp;quot;+rumormonger+&amp;quot;] rumor=[&amp;quot;+rumor+&amp;quot;]&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                dataRequestID = llGetNotecardLine(notecardName, ++lineCounter);&lt;br /&gt;
            } else {&lt;br /&gt;
                    llSetColor(GREEN,ALL_SIDES);&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)llGetOwner()+&amp;quot;~~~Restart complete. Now serving rumors.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel,string name,key id,string msg) {&lt;br /&gt;
        DEBUG(&amp;quot;listen: channel=[&amp;quot;+(string)channel+&amp;quot;] name=[&amp;quot;+name+&amp;quot;] id=[&amp;quot;+(string)id+&amp;quot;] message=[&amp;quot;+msg+&amp;quot;]&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer replychan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llList2String(llGetObjectDetails(id,[OBJECT_OWNER]),0),0,6));&lt;br /&gt;
&lt;br /&gt;
        //----------------------------------------------------------------&lt;br /&gt;
        // Watch the region-wide channel for a HUD looking for the rumor server&lt;br /&gt;
        //----------------------------------------------------------------&lt;br /&gt;
        if ( channel == CHAN_MYRIAD ) {&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_SERVER_FIND&amp;quot; ) { // got a request to locate rumor server&lt;br /&gt;
                llRegionSay(replychan,&amp;quot;RUMOR_SERVER_FOUND&amp;quot;); // reply that we're found to give requester our UUID for calculating a dynamic channel&lt;br /&gt;
                integer objchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)id,0,6));&lt;br /&gt;
                llRegionSay(objchan,&amp;quot;RUMOR_SERVER_FOUND&amp;quot;); // reply that we're found to give requester our UUID for calculating a dynamic channel                &lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //----------------------------------------------------------------&lt;br /&gt;
        // Handle messages sent specifically to the rumor server&lt;br /&gt;
        //----------------------------------------------------------------&lt;br /&gt;
        if ( channel == CHAN_SERVER ) {&lt;br /&gt;
            TOKENS = llParseString2List(msg,[&amp;quot;|&amp;quot;],[]); // split on | pipe symbols&lt;br /&gt;
            COMMAND = llList2String(TOKENS,0); // first field is the command&lt;br /&gt;
            key who = llList2Key(llGetObjectDetails(id,[OBJECT_OWNER]),0); // who is interacting?&lt;br /&gt;
            string whoname = llKey2Name(who);&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_MAIN&amp;quot; ) {&lt;br /&gt;
                //llDialog(MENU_USER,MENU_TITLE,MENU_BUTTONS,MENU_CHANNEL);&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~&amp;quot;+MENU_TITLE+&amp;quot;~~~&amp;quot;+llList2CSV(MENU_BUTTONS)+&amp;quot;~~~&amp;quot;+(string)CHAN_SERVER,&amp;quot;dialog&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_RESET&amp;quot; ) {&lt;br /&gt;
                //llDialog(id,&amp;quot;ERASE EVERYTHING?\nARE YOU SURE?&amp;quot;,[&amp;quot;YES&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;MAIN&amp;quot;],MENU_CHANNEL);&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~ERASE EVERYTHING?\nARE YOU SURE?~~~RUMOR_YES,RUMOR_NO,RUMOR_MAIN~~~&amp;quot;+(string)CHAN_SERVER,&amp;quot;dialog&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_YES&amp;quot; ) {&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                RESET();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_LIST&amp;quot; ) {&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if ( llGetListLength(RUMORS) &amp;lt; 1 ) {&lt;br /&gt;
                    //llInstantMessage(id,&amp;quot;No pending rumors. Start some.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~No active rumors. Start some.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                        LENGTH = llGetListLength(RUMORS);&lt;br /&gt;
                    for ( INDEX = 0; INDEX &amp;lt; LENGTH; INDEX += 3 ) {&lt;br /&gt;
                        // llInstantMessage(id,llList2String(RUMORS,INDEX + 1)+&amp;quot;: &amp;quot;+llList2String(RUMORS, INDEX + 2));&lt;br /&gt;
                        llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~&amp;quot;+llList2String(RUMORS,INDEX + 1)+&amp;quot;: &amp;quot;+llList2String(RUMORS, INDEX + 2),&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_MODERATE&amp;quot; ) {&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if ( llGetListLength(PENDING) &amp;lt; 1 ) {&lt;br /&gt;
                    //llOwnerSay(&amp;quot;No pending rumors. Start some.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~No pending rumors. Start some.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                        TIME = llList2Integer(PENDING,0);&lt;br /&gt;
                    NAME = llList2String(PENDING,1);&lt;br /&gt;
                    RUMOR = llList2String(PENDING,2);&lt;br /&gt;
                    //llDialog(id,&amp;quot;Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApprove Rumor?&amp;quot;,[&amp;quot;APPROVE&amp;quot;,&amp;quot;DENY&amp;quot;,&amp;quot;MAIN&amp;quot;],MENU_CHANNEL);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApprove Rumor?~~~RUMOR_APPROVE,RUMOR_DENY,RUMOR_MAIN~~~&amp;quot;+(string)CHAN_SERVER,&amp;quot;dialog&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_APPROVE&amp;quot; ) {&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                RUMORS = [ TIME,NAME,RUMOR ] + RUMORS;&lt;br /&gt;
                PENDING = llDeleteSubList(PENDING,0,2);&lt;br /&gt;
                //llInstantMessage(id,&amp;quot;APPROVED: &amp;quot;+NAME+&amp;quot;, &amp;quot;+RUMOR);&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~APPROVED: &amp;quot;+NAME+&amp;quot;, &amp;quot;+RUMOR,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                if ( llGetListLength(PENDING) &amp;lt; 1 ) {&lt;br /&gt;
                    llOwnerSay(&amp;quot;No more rumors. Start some.&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                        TIME = llList2Integer(PENDING,0);&lt;br /&gt;
                    NAME = llList2String(PENDING,1);&lt;br /&gt;
                    RUMOR = llList2String(PENDING,2);&lt;br /&gt;
                    //llDialog(id,&amp;quot;Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApproved Rumor?&amp;quot;,[&amp;quot;APPROVE&amp;quot;,&amp;quot;DENY&amp;quot;,&amp;quot;MAIN&amp;quot;],MENU_CHANNEL);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApprove Rumor?~~~RUMOR_APPROVE,RUMOR_DENY,RUMOR_MAIN~~~&amp;quot;+(string)CHAN_SERVER,&amp;quot;dialog&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_DENY&amp;quot; ) {&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                PENDING = llDeleteSubList(PENDING,0,2);&lt;br /&gt;
                //llInstantMessage(id,&amp;quot;DELETED Rumor.&amp;quot;);&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~DELETED Rumor.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                if ( llGetListLength(PENDING) &amp;lt; 1 ) {&lt;br /&gt;
                    //llOwnerSay(&amp;quot;No more rumors. Start some.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~No more rumors. Start some.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                        TIME = llList2Integer(PENDING,0);&lt;br /&gt;
                    NAME = llList2String(PENDING,1);&lt;br /&gt;
                    RUMOR = llList2String(PENDING,2);&lt;br /&gt;
                    //llDialog(id,&amp;quot;Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApprove Rumor?&amp;quot;,[&amp;quot;APPROVE&amp;quot;,&amp;quot;DENY&amp;quot;,&amp;quot;MAIN&amp;quot;],MENU_CHANNEL);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Author: &amp;quot;+NAME+&amp;quot;\nRumor: &amp;quot;+RUMOR+&amp;quot;\nApprove Rumor?~~~RUMOR_APPROVE,RUMOR_DENY,RUMOR_MAIN~~~&amp;quot;+(string)CHAN_SERVER,&amp;quot;dialog&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( msg == &amp;quot;RUMOR_CLOSE&amp;quot; ) {&lt;br /&gt;
                //llWhisper(PUBLIC_CHANNEL,&amp;quot;Closing menu and resetting.&amp;quot;);&lt;br /&gt;
                if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {&lt;br /&gt;
                    //llInstantMessage(MENU_USER,&amp;quot;You are not an Al Raqis Admin.&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~You are not a Region Admin.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    MENU_USER = NULL_KEY;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Closing menu and resetting.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( COMMAND == &amp;quot;RUMOR_GET&amp;quot; ) {&lt;br /&gt;
                if ( llGetListLength(RUMORS) &amp;lt; 1 ) {&lt;br /&gt;
                    //llInstantMessage(llList2Key(TOKENS,1),&amp;quot;No rumors are circulating. Time to start some!&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~No rumors are circulating. Time to start some!&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if ( llListFindList(GETTERS,[who]) &amp;lt; 0 ) {&lt;br /&gt;
                    if ( llGetFreeMemory() &amp;lt; 256 ) GETTERS = [];&lt;br /&gt;
                    GETTERS = [who,llGetUnixTime()] + GETTERS;&lt;br /&gt;
                } else {&lt;br /&gt;
                        if ( llListFindList(ADMINS,[whoname]) &amp;lt; 0 ) {// not an admin&lt;br /&gt;
                            integer time = llList2Integer(GETTERS,llListFindList(GETTERS,[who])+1);&lt;br /&gt;
                            if ( ( llGetUnixTime() - time ) &amp;lt;= 600 ) {&lt;br /&gt;
                                //llInstantMessage(who,&amp;quot;Please allow some time to pass before checking for more rumors.&amp;quot;);&lt;br /&gt;
                                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Please allow some time to pass before checking for more rumors.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                                return;&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                INDEX = (integer)llFrand( (llGetListLength(RUMORS) / 3 ) );&lt;br /&gt;
                //llInstantMessage(who,llList2String(RUMORS,INDEX + 2));&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~&amp;quot;+llList2String(RUMORS,(INDEX * 3) + 2),&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            //----------------------------------------------------------------&lt;br /&gt;
            if ( COMMAND == &amp;quot;RUMOR_PUT&amp;quot; ) {&lt;br /&gt;
                NAME = llList2String(TOKENS,1);&lt;br /&gt;
                RUMOR = llList2String(TOKENS,2);&lt;br /&gt;
                // need a way for quests to add pre-approved rumors - if object adding rumor is owned by admin, pre-approve&lt;br /&gt;
                if ( llListFindList(ADMINS,[llKey2Name(llList2Key(llGetObjectDetails(id,[OBJECT_OWNER]),0))]) != -1 ) {&lt;br /&gt;
                    RUMORS = [ (llGetUnixTime() + (RUMOR_TIME * 86400)), NAME, RUMOR ] + RUMORS;&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)llGetOwner()+&amp;quot;~~~RUMOR ADDED FOR &amp;quot;+NAME+&amp;quot;: &amp;quot;+RUMOR,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                        //llOwnerSay(&amp;quot;RUMORS: &amp;quot;+NAME+&amp;quot; WAITING FOR YOU TO APPROVE RUMOR: &amp;quot;+RUMOR);&lt;br /&gt;
                        PENDING = [ (llGetUnixTime() + (RUMOR_TIME * 86400)),NAME,RUMOR ] + PENDING;&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)llGetOwner()+&amp;quot;~~~RUMORS: &amp;quot;+NAME+&amp;quot; WAITING FOR YOU TO APPROVE RUMOR: &amp;quot;+RUMOR,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                    llMessageLinked(LINK_THIS,-123,(string)who+&amp;quot;~~~Your rumor is pending approval.&amp;quot;,&amp;quot;instantmessage&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer() {&lt;br /&gt;
        CLEAN_RUMOR_LIST();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	</feed>