Difference between revisions of "Avatar Radar (NewAge)"

From Second Life Wiki
Jump to navigation Jump to search
Line 1: Line 1:
Just copy and paste this script into an object that will be your hud!
NewAge Avatar Radar Project
Version 1.2
No longer need to spend to in making a hud, just copy and past script into a prim and click yes to allow script permission to attach to your UI, Set on Center 2.


<lsl>
<lsl>
/////////////////////////////////
/////////////////////////////////
// New Age Radar Script
// NewAge Radar Project Script
// By Asia Snowfall
// By Asia Snowfall
// Version 1.1
// Version 1.2
/////////////////////////////////
// v1.2;
// ------
// (Added) HUD Maker Feature, When you save script, click Yes
// (Added) Power Feature, Turn Radar on and Off by clicking the HUD
// (Added) HUD Menu, Allowing you to control Power Feature, Change from Avatar Radar to Land Information and back again
// Easier to now Modify script varibles
/////////////////////////////////
/////////////////////////////////
// v1.1;
// v1.1;
Line 17: Line 26:
/////////////////////////////////
/////////////////////////////////


// Configure;
float scan_range = 100;
float scan_range = 100;
float speed = 2;
float speed = 2;
integer channel = 1;
integer channel = 1;
integer menu_channel = 666;
integer show_total_agents_in_chat_range = TRUE;
integer show_total_agents_in_chat_range = TRUE;
integer show_total_agents_in_region = TRUE;
integer show_total_agents_in_region = TRUE;
integer show_lag_status = TRUE;
integer show_lag_status = TRUE;
integer max_people = 7;
integer parcel_description_max_characters = 50;
 
string menu_text = "***\nAvatar Radar Project\n***\nby Asia Snowfall";
string hud_texture = "ec122289-1239-74fd-708f-ab4b949b7cdb";
 
vector hud_size = <0.1,0.1,0.1>;
 
// Core Varibles;
 
// Integer Varibles
integer setting = FALSE;
integer handler;
integer handler;
integer radar_power = TRUE;
integer positioning;
integer positioning_handler;
integer scan_type = TRUE;
 
// String Varibles
string people;
string people;
string lag_status;
// List Varibles
list people_in_sensor_range;
list people_in_sensor_range;
list people_in_sensor_vectors;
list people_in_sensor_vectors;
list chat_range;
list chat_range;
list hud_position;
list main_menu;
// Float Varibles
float position_by = 0.01;
   
   
integer max_people = 7;
// Vector Varibles
string lag_status;
vector text_color;
vector text_color;


// Premade Functions
asSetPosMenu() //Might wonder why i make the script empty the hud position and fill it again with same options, but it optimizes script memory! every little helps
{
    setting = TRUE;
    hud_position = [];
    llListenRemove(positioning_handler);
    @retry;
    positioning = llRound(llFrand(999999));
    if(positioning <= 2000)
    {
        jump retry;
    }
    positioning_handler = llListen(positioning, "", "", "");
    hud_position = ["-", "Down", "+", "Left", "===", "Right", "===", "Up", "Done"];
    llSetText("Setup the hud using position control\nClick Done when your finished", <1.0, 1.0, 1.0>, 1.0);
    llSetTimerEvent(30);
}
asSetMainMenu()
{
    main_menu = ["Avatars", "Land Info"];
    if(radar_power == FALSE)
    {
        main_menu += "Power On";
    }
    else
    {
        main_menu += "Power Off";
    }
}


llLagStatus()
llLagStatus()
Line 78: Line 142:
     }
     }
}
}
finish()
{
    llOwnerSay("Starting radar system\nClick HUD for Menu");
    setting = FALSE;
    llSetTimerEvent(speed);
    llListenRemove(positioning_handler);
}
           


default
default
Line 83: Line 156:
     state_entry()
     state_entry()
     {
     {
         llSensor("", "", AGENT, scan_range, PI);
         llListen(menu_channel, "", "", "");
         llSetTimerEvent(speed);
         if(llGetAttached() != 0)
    }
    attach(key id)
    {
        if(id == llGetOwner())
         {
         {
            llSetScale(hud_size);
            llSetTexture(hud_texture, ALL_SIDES);
             handler = llListen(channel, "", "", "");
             handler = llListen(channel, "", "", "");
             llOwnerSay("Find location of avatar within sensor range by typing either their full or partial name on channel "+(string)channel + ", example; /"+(string)channel+" Mark");
             llOwnerSay("Find location of avatar within sensor range by typing either their full or partial name on channel "+(string)channel + ", example; /"+(string)channel+" Mark");
            asSetPosMenu();
            llDialog(llGetOwner(), menu_text, hud_position, positioning);
         }
         }
         else if(id == NULL_KEY)
         else if(llGetAttached() == 0)
         {
         {
            llSensor("", "", AGENT, scan_range, PI);
            setting = FALSE;
             llListenRemove(handler);
             llListenRemove(handler);
            llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
        }
    }
    touch_start(integer x)
    {
        if(llDetectedKey(0) == llGetOwner())
        {
            if(setting == FALSE)
            {
                if(llGetAttached() != 0)
                {
                    asSetMainMenu();
                    llDialog(llGetOwner(), menu_text, main_menu, menu_channel);
                }
                else
                {
                    llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
                }
            }
            else
            {
                llDialog(llGetOwner(), menu_text, hud_position, positioning);
            }
        }
    }
    run_time_permissions(integer perm)
    {
        if(perm & PERMISSION_ATTACH)
        {
            llAttachToAvatar(ATTACH_HUD_CENTER_2);
        }
        else
        {
            llOwnerSay("Some features disabled when not attached");
            llSetTimerEvent(speed);
         }
         }
     }
     }
     listen(integer channel, string name, key id, string str)
    attach(key id)
    {
        llResetScript();
    }
     listen(integer chan, string name, key id, string str)
     {
     {
         if(id == llGetOwner())
         if(id == llGetOwner())
         {
         {
             str = llToLower(str);
             str = llToLower(str);
             integer index = llListFindList(people_in_sensor_range, [str]);
             if(chan == channel)
            if(index != -1)
            {
                integer index = llListFindList(people_in_sensor_range, [str]);
                if(index != -1)
                {
                    llOwnerSay(llList2String(people_in_sensor_range, index)+" is located at "+llList2String(people_in_sensor_vectors, index));
                }
                else if(index == -1)
                {
                    integer i = 0;
                    integer length = llGetListLength(people_in_sensor_range);
                    integer ind;
                    do
                    {
                        if(llStringLength(llList2String(people_in_sensor_range, i)) > 0)
                        {
                            ind = llSubStringIndex(llList2String(people_in_sensor_range, i), str);
                            if(ind != -1)
                            {
                                llOwnerSay(llList2String(people_in_sensor_range, i) + " is located at "+llList2String(people_in_sensor_vectors, i));
                                return;
                            }
                        }
                    }while(i++<length);
                    llOwnerSay("No Avatars Found by the name or partial name of "+str);
                }
            }
            else if(chan == menu_channel)
             {
             {
                 llOwnerSay(llList2String(people_in_sensor_range, index)+" is located at "+llList2String(people_in_sensor_vectors, index));
                 if(str == "avatars")
                {
                    scan_type = 1;
                    llOwnerSay("Radar will scan all avatars within "+(string)scan_range+" meters");
                }
                else if(str == "land info")
                {
                    scan_type = 2;
                    llOwnerSay("Radar will show land information");
                }
                else if(str == "power on")
                {
                    radar_power = TRUE;
                    llSetTimerEvent(speed);
                }
                else if(str == "power off")
                {
                    radar_power = FALSE;
                    llSetTimerEvent(0);
                    llSetText("Power Off", <1.0,1.0,1.0>, 1.0);
                }
             }
             }
             else if(index == -1)
             else if(chan == positioning)
             {
             {
                 integer i = 0;
                 if(str == "+")
                integer length = llGetListLength(people_in_sensor_range);
                {
                 integer ind;
                    if(position_by < 0.1)
                 do
                    {
                        position_by += 0.01;
                    }
                    llOwnerSay("Positioning will move by "+(string)position_by+" meters");
                 }
                 else if(str == "-")
                 {
                 {
                     if(llStringLength(llList2String(people_in_sensor_range, i)) > 0)
                     if(position_by > 0.01)
                     {
                     {
                         ind = llSubStringIndex(llList2String(people_in_sensor_range, i), str);
                         position_by -= 0.01;
                        if(ind != -1)
                        {
                            llOwnerSay(llList2String(people_in_sensor_range, i) + " is located at "+llList2String(people_in_sensor_vectors, i));
                            return;
                        }
                     }
                     }
                 }while(i++<length);
                    llOwnerSay("Positioning will move by "+(string)position_by+" meters");
                 llOwnerSay("No Avatars Found by the name or partial name of "+str);
                }
                else if(str == "down")
                {
                    llSetPos(llGetLocalPos()+<0.0,0.0,-position_by>*llGetRot());
                 }
                else if(str == "left")
                {
                    llSetPos(llGetLocalPos()+<0.0,position_by,0.0>*llGetRot());
                }
                else if(str == "right")
                {
                    llSetPos(llGetLocalPos()+<0.0,-position_by,0.0>*llGetRot());
                 }
                else if(str == "up")
                {
                    llSetPos(llGetLocalPos()+<0.0,0.0,position_by>*llGetRot());
                }
                else if(str == "done")
                {
                    finish();
                }
                if(setting == TRUE)
                {
                    llSetTimerEvent(30);
                    llDialog(llGetOwner(), menu_text, hud_position, positioning);
                }
             }
             }
        }
    }
    on_rez(integer g)
    {
        if(g & CHANGED_OWNER)
        {
            llResetScript();
         }
         }
     }
     }
Line 175: Line 367:
         llLagStatus();
         llLagStatus();
         all_status();
         all_status();
        if(scan_type == 2)
        {
            list details = llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME, PARCEL_DETAILS_DESC, PARCEL_DETAILS_OWNER, PARCEL_DETAILS_AREA]);
            people = "Region = "+llGetRegionName();
            people += "\nParcel Name = "+llList2String(details, 0);
            people += "\nParcel Description = "+llGetSubString(llList2String(details, 1), 0, parcel_description_max_characters);
            if(llStringLength(llKey2Name((key)llList2String(details, 2))) > 0)
            {
                people += "\nParcel Owner = "+llKey2Name((key)llList2String(details, 2));
            }
            else
            {
                people += "\nParcel Owner = Group Owned";
            }
            people += "\nParcel Area = "+llList2String(details, 3);
            people += "\nRegion FPS = "+(string)llGetRegionFPS();
            people += "\nRegion Time Dilation = "+(string)llGetRegionTimeDilation();
        }
         llSetText(people, text_color, 1.0);
         llSetText(people, text_color, 1.0);
         people = "";
         people = "";
Line 193: Line 403:
     timer()
     timer()
     {
     {
         llSensor("", "", AGENT, scan_range, PI);
         if(setting == FALSE)
        {
            llSensor("", "", AGENT, scan_range, PI);
        }
        else
        {
            finish();
        }
     }
     }
}
}
</lsl>
</lsl>

Revision as of 10:57, 21 July 2010

NewAge Avatar Radar Project Version 1.2 No longer need to spend to in making a hud, just copy and past script into a prim and click yes to allow script permission to attach to your UI, Set on Center 2.

<lsl> ///////////////////////////////// // NewAge Radar Project Script // By Asia Snowfall // Version 1.2 ///////////////////////////////// // v1.2; // ------ // (Added) HUD Maker Feature, When you save script, click Yes // (Added) Power Feature, Turn Radar on and Off by clicking the HUD // (Added) HUD Menu, Allowing you to control Power Feature, Change from Avatar Radar to Land Information and back again // Easier to now Modify script varibles ///////////////////////////////// // v1.1; // ------ // (Added) - Agent Count in Region when no agents in sensor range // (Added) - Lag Status when no agents in sensor range ///////////////////////////////// // v1.0 // ------ // (Initial Release) /////////////////////////////////

// Configure; float scan_range = 100; float speed = 2;

integer channel = 1; integer menu_channel = 666; integer show_total_agents_in_chat_range = TRUE; integer show_total_agents_in_region = TRUE; integer show_lag_status = TRUE; integer max_people = 7; integer parcel_description_max_characters = 50;

string menu_text = "***\nAvatar Radar Project\n***\nby Asia Snowfall"; string hud_texture = "ec122289-1239-74fd-708f-ab4b949b7cdb";

vector hud_size = <0.1,0.1,0.1>;

// Core Varibles;

// Integer Varibles integer setting = FALSE; integer handler; integer radar_power = TRUE; integer positioning; integer positioning_handler; integer scan_type = TRUE;

// String Varibles string people; string lag_status;

// List Varibles list people_in_sensor_range; list people_in_sensor_vectors; list chat_range; list hud_position; list main_menu;

// Float Varibles float position_by = 0.01;

// Vector Varibles vector text_color;

// Premade Functions

asSetPosMenu() //Might wonder why i make the script empty the hud position and fill it again with same options, but it optimizes script memory! every little helps {

   setting = TRUE;
   hud_position = [];
   llListenRemove(positioning_handler);
   @retry;
   positioning = llRound(llFrand(999999));
   if(positioning <= 2000)
   {
       jump retry;
   }
   positioning_handler = llListen(positioning, "", "", "");
   hud_position = ["-", "Down", "+", "Left", "===", "Right", "===", "Up", "Done"];
   llSetText("Setup the hud using position control\nClick Done when your finished", <1.0, 1.0, 1.0>, 1.0);
   llSetTimerEvent(30);

}

asSetMainMenu() {

   main_menu = ["Avatars", "Land Info"];
   if(radar_power == FALSE)
   {
       main_menu += "Power On";
   }
   else
   {
       main_menu += "Power Off";
   }

}

llLagStatus() {

   float time_dilation = llGetRegionTimeDilation();
   if(time_dilation <= 0.3)
   {
       lag_status = "Laggy";
       text_color = <1.0,0.0,0.0>;
   }
   else if(time_dilation > 0.3 && time_dilation <= 0.5)
   {
       lag_status = "Not Bad";
       text_color = <1.0,1.0,0.0>;
   }
   else if(time_dilation > 0.5 && time_dilation <= 0.8)
   {
       lag_status = "Good";
       text_color = <0.0,1.0,0.0>;
   }
   else if(time_dilation > 0.8 && time_dilation <= 1.0)
   {
       lag_status = "Excellent";
       text_color = <0.0,1.0,1.0>;
   }

}

all_status() {

   if(show_total_agents_in_region == TRUE)
   {
       people += "Region Agent Count = "+(string)llGetRegionAgentCount()+"\n";
   }
   if(show_total_agents_in_chat_range == TRUE)
   {
       people += "Agents in Range = "+(string)llGetListLength(chat_range)+"\n";
   }
   if(show_lag_status == TRUE)
   {
       people += "Lag Status = "+lag_status;
   }

}

finish() {

   llOwnerSay("Starting radar system\nClick HUD for Menu");
   setting = FALSE;
   llSetTimerEvent(speed);
   llListenRemove(positioning_handler);

}


default {

   state_entry()
   {
       llListen(menu_channel, "", "", "");
       if(llGetAttached() != 0)
       {
           llSetScale(hud_size);
           llSetTexture(hud_texture, ALL_SIDES);
           handler = llListen(channel, "", "", "");
           llOwnerSay("Find location of avatar within sensor range by typing either their full or partial name on channel "+(string)channel + ", example; /"+(string)channel+" Mark");
           asSetPosMenu();
           llDialog(llGetOwner(), menu_text, hud_position, positioning);
       }
       else if(llGetAttached() == 0)
       {
           llSensor("", "", AGENT, scan_range, PI);
           setting = FALSE;
           llListenRemove(handler);
           llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
       }
   }
   touch_start(integer x)
   {
       if(llDetectedKey(0) == llGetOwner())
       {
           if(setting == FALSE)
           {
               if(llGetAttached() != 0)
               {
                   asSetMainMenu();
                   llDialog(llGetOwner(), menu_text, main_menu, menu_channel);
               }
               else
               {
                   llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
               }
           }
           else
           {
               llDialog(llGetOwner(), menu_text, hud_position, positioning);
           }
       }
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_ATTACH)
       {
           llAttachToAvatar(ATTACH_HUD_CENTER_2);
       }
       else
       {
           llOwnerSay("Some features disabled when not attached");
           llSetTimerEvent(speed);
       }
   }
   attach(key id)
   {
       llResetScript();
   }
   listen(integer chan, string name, key id, string str)
   {
       if(id == llGetOwner())
       {
           str = llToLower(str);
           if(chan == channel)
           {
               integer index = llListFindList(people_in_sensor_range, [str]);
               if(index != -1)
               {
                   llOwnerSay(llList2String(people_in_sensor_range, index)+" is located at "+llList2String(people_in_sensor_vectors, index));
               }
               else if(index == -1)
               {
                   integer i = 0;
                   integer length = llGetListLength(people_in_sensor_range);
                   integer ind;
                   do
                   {
                       if(llStringLength(llList2String(people_in_sensor_range, i)) > 0)
                       {
                           ind = llSubStringIndex(llList2String(people_in_sensor_range, i), str);
                           if(ind != -1)
                           {
                               llOwnerSay(llList2String(people_in_sensor_range, i) + " is located at "+llList2String(people_in_sensor_vectors, i));
                               return;
                           }
                       }
                   }while(i++<length);
                   llOwnerSay("No Avatars Found by the name or partial name of "+str);
               }
           }
           else if(chan == menu_channel)
           {
               if(str == "avatars")
               {
                   scan_type = 1;
                   llOwnerSay("Radar will scan all avatars within "+(string)scan_range+" meters");
               }
               else if(str == "land info")
               {
                   scan_type = 2;
                   llOwnerSay("Radar will show land information");
               }
               else if(str == "power on")
               {
                   radar_power = TRUE;
                   llSetTimerEvent(speed);
               }
               else if(str == "power off")
               {
                   radar_power = FALSE;
                   llSetTimerEvent(0);
                   llSetText("Power Off", <1.0,1.0,1.0>, 1.0);
               }
           }
           else if(chan == positioning)
           {
               if(str == "+")
               {
                   if(position_by < 0.1)
                   {
                       position_by += 0.01;
                   }
                   llOwnerSay("Positioning will move by "+(string)position_by+" meters");
               }
               else if(str == "-")
               {
                   if(position_by > 0.01)
                   {
                       position_by -= 0.01;
                   }
                   llOwnerSay("Positioning will move by "+(string)position_by+" meters");
               }
               else if(str == "down")
               {
                   llSetPos(llGetLocalPos()+<0.0,0.0,-position_by>*llGetRot());
               }
               else if(str == "left")
               {
                   llSetPos(llGetLocalPos()+<0.0,position_by,0.0>*llGetRot());
               }
               else if(str == "right")
               {
                   llSetPos(llGetLocalPos()+<0.0,-position_by,0.0>*llGetRot());
               }
               else if(str == "up")
               {
                   llSetPos(llGetLocalPos()+<0.0,0.0,position_by>*llGetRot());
               }
               else if(str == "done")
               {
                   finish();
               }
               if(setting == TRUE)
               {
                   llSetTimerEvent(30);
                   llDialog(llGetOwner(), menu_text, hud_position, positioning);
               }
           }
       }
   }
   on_rez(integer g)
   {
       if(g & CHANGED_OWNER)
       {
           llResetScript();
       }
   }
   changed(integer h)
   {
       if(h & CHANGED_OWNER)
       {
           llResetScript();
       }
   }
   sensor(integer x)
   {
       people_in_sensor_range = [];
       people_in_sensor_vectors = [];
       integer i = 0;
       integer index;
       --x;
       if(x > max_people)
       {
           x = max_people-1;
       }
       do
       {
           index = llListFindList(chat_range, [llDetectedName(i)]);
           if(llStringLength(llDetectedName(i)) >! 0)
           {
               if(llVecDist(llDetectedPos(i), llGetPos()) <= 20)
               {
                   if(index == -1)
                   {
                       chat_range += llDetectedName(i);
                       llOwnerSay(llDetectedName(i) + " has entered chat range");
                   }
               }
               else
               {
                   if(index != -1)
                   {
                       llOwnerSay(llDetectedName(i) + " has left chat range");
                       chat_range = llDeleteSubList(chat_range, index, index);
                   }
               }
               people_in_sensor_range += llToLower(llDetectedName(i));
               people_in_sensor_vectors += llDetectedPos(i);
               people += llDetectedName(i) + " - " + llGetSubString((string)llVecDist(llDetectedPos(i), llGetPos()), 0, 4)+"m\n";
           }
       }while(i++<x);
       llLagStatus();
       all_status();
       if(scan_type == 2)
       {
           list details = llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME, PARCEL_DETAILS_DESC, PARCEL_DETAILS_OWNER, PARCEL_DETAILS_AREA]);
           people = "Region = "+llGetRegionName();
           people += "\nParcel Name = "+llList2String(details, 0);
           people += "\nParcel Description = "+llGetSubString(llList2String(details, 1), 0, parcel_description_max_characters);
           if(llStringLength(llKey2Name((key)llList2String(details, 2))) > 0)
           {
               people += "\nParcel Owner = "+llKey2Name((key)llList2String(details, 2));
           }
           else
           {
               people += "\nParcel Owner = Group Owned";
           }
           people += "\nParcel Area = "+llList2String(details, 3);
           people += "\nRegion FPS = "+(string)llGetRegionFPS();
           people += "\nRegion Time Dilation = "+(string)llGetRegionTimeDilation();
       }
       llSetText(people, text_color, 1.0);
       people = "";
   }
   no_sensor()
   {
       if(llGetListLength(chat_range) > 0)
       {
           chat_range = [];
       }
       people += "Region Agent Count = "+(string)llGetRegionAgentCount()+"\nAgents in Range = "+(string)llGetListLength(chat_range)+"\n";
       people = "No People In Range\n";
       llLagStatus();
       all_status();
       llSetText(people, text_color, 1.0);
       people = "";
   }
   timer()
   {
       if(setting == FALSE)
       {
           llSensor("", "", AGENT, scan_range, PI);
       }
       else
       {
           finish();
       }
   }

} </lsl>