Xavier's Gun Control

Written by Kitsune
// Xavier#s Gun Control Script
// : Master Computer Relay on 2167811067 ( send / receive )
// : Updates guns Friends list on 2167812300 ( transmit list)
// : Receives Gun reply#s on 2166617540 / Set ON/OFF / Confirm list, Confirmed On / Off)

// Init Lists
list Ops = ["Charlie Omega"];
list kos;

integer guns_on = FALSE;

integer talk_channel = 0;

// Function to Talk
talk(integer atchan, string saydis)
{
  if (talk_channel == 0)
  {
  llSay(talk_channel,saydis);
  }
  else
  {
  llShout(talk_channel,saydis);
  }

}   

// Functions to check Ops list
integer isNameOnList( string name, list test )
{
    list single_name_list;
    single_name_list += name;
    
    return (-1 != llListFindList( test, single_name_list ) );
}

// Function Display List Data
display(string test)
{ 
    string textstring = "";
            
    if (test == "OPS")
    {
        textstring = llList2CSV(Ops);
        
      }
    
    if (test == "kos")
    {
        textstring = llList2CSV(kos);
       }
    
    if ( textstring == "" )
    {        
     talk( talk_channel, test + " - Returned no Data");   
    }
    else
    {
         talk( talk_channel, textstring); 
    }
                  
}

// Function Add to Friends List
addlist(string name)
{
   kos += name;
       
}

// Function Kill from kos list
offlist(string name)
{
    
    list single_name_list;
    single_name_list += name;
    
   integer nameat = llListFindList(kos, single_name_list );
   if (nameat > -1)
   {
    kos = llDeleteSubList(kos, nameat,nameat );
   }
   else
   {
            talk( talk_channel, name + " - Invalid Data");
    }   
}

// Function to shout to all Guns
tellgun(string commands)
{

if (commands == "ON" )
{
llShout(2166617540,"GON");
guns_on = TRUE;
}

if (commands == "OFF" )
{
llShout(2166617540,"GOFF");
guns_on = FALSE;
}
    
if (commands == "UPDATE" )
{
string textstring = llList2CSV(kos);
llShout(2167812300, textstring);
}    


} 


status()
{

string report;

if (guns_on == TRUE)
{
    report = " Status - Online"; 
    
}   
else
{
     report = " Status - Offline"; 
} 

talk(talk_channel, report);
    
}


help()
{
    talk(talk_channel,"__________________________________");
    talk(talk_channel,"|                                                                  |");
    talk(talk_channel,"| Combat Computer Options                        |");
    talk(talk_channel,"|--------------------------------------------|");
    talk(talk_channel,"| ADD < Name > - add to kill list                 |");
    talk(talk_channel,"| REMOVE < Name > - remove from kill list |");
    talk(talk_channel,"| LIST ( ops / koss ) - display list                |");
    talk(talk_channel,"| GUNS ( on / off ) - turn guns on / off         |");
    talk(talk_channel,"| GUNS Update - copy friends list to guns   |");    
    talk(talk_channel,"| STATUS - Display current system status    |");
    talk(talk_channel,"|_________________________________|");  
}

default
{
    state_entry()
    {
       llListen(0, "", "", ""); // Local Reception
       llListen(2167811067, "", "", ""); // Relay Reception    
       llListen(2166617540, "", "", ""); // Gun Transmission Reception
    }

        listen(integer channel, string name, key id, string message)
        {

            talk_channel = channel;

            string temp_message = llToUpper(message);
            integer strlong = llStringLength(message);
            
           if( isNameOnList(name,Ops)==TRUE | channel == 2167811067 )
           {
           
               if(llGetSubString(temp_message, 0, 3)=="LIST")
               {
                string test = llGetSubString(temp_message, 5, strlong);
                display(test);
               }
                
               if(llGetSubString(temp_message, 0, 2)=="ADD")
               {
                string test = llGetSubString(message, 4, strlong);
                addlist(test);
                     }                

               if(llGetSubString(temp_message, 0, 5)=="REMOVE")
               {
                string test = llGetSubString(message, 5, strlong);
                offlist(test);
                           }    
                
                 if(llGetSubString(temp_message, 0, 3)=="GUNS")
               {
                string test = llGetSubString(temp_message, 5, strlong);
                tellgun(test);
                           }
                if(llGetSubString(temp_message, 0, 7)=="COMMANDS")
               {
                string test = llGetSubString(temp_message, 5, strlong);
                help();
                
                           }                                     
                if(llGetSubString(temp_message, 0, 5)=="STATUS")
               {
                string test = llGetSubString(temp_message, 5, strlong);
                status();
                
                           } 
                
            } // end commands reception
            
            if (channel == 2166617540)
            {
                llSay(0, name + " - " + message);
                llShout(2167811067, name + " - " + message);
            }
    
        }

}