Jump to content

Cool Land Survey Script


BornCrazed
 Share

You are about to reply to a thread that has been inactive for 2054 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Looking for like minded scripters and builders who want to join my Motorcycle club. Non-Rp club. Just a social group.

 

Also see below. Two seperate scripts. Watch for the cut-off line. One is advanced radar and another is online status of sim residents. So you can know who is in your vicinity and who is online in the sim including the land owner. Great for just getting a feel for a place or learning about your neighbors. Drop both scripts in a single prim. Wear or Rez.

Message me in-world if you want to hang out or join my mc.

 

integer glow = TRUE;
integer bounce = FALSE;
integer interpColor = TRUE;
integer interpSize = TRUE;     
integer wind = FALSE;
integer followSource = FALSE;
integer followVel = FALSE;

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;

key target =        "";

float age =         4;
float minSpeed =    0;
float maxSpeed =    0;
string texture =    "";
float startAlpha =  1;
float endAlpha =    1;
vector startColor = <1,1,1>;
vector endColor =   <1,1,1>;
vector startSize =  <.1,.1,.02>;
vector endSize =    <.1,.1,.6>;
vector push =       <0,0,0>;


float rate =        .01;      
float radius =      .2;       
integer count =     50;   
float outerAngle =  0;  
float innerAngle =  PI;   
vector omega =      <5,5,5>;

integer flags;

updateParticles()
{
    if (target == "owner")  target = llGetOwner();
    if (target == "self")   target = llGetKey();
    if (glow)               flags = flags | PSYS_PART_EMISSIVE_MASK;
    if (bounce)             flags = flags | PSYS_PART_BOUNCE_MASK;
    if (interpColor)        flags = flags | PSYS_PART_INTERP_COLOR_MASK;
    if (interpSize)         flags = flags | PSYS_PART_INTERP_SCALE_MASK;
    if (wind)               flags = flags | PSYS_PART_WIND_MASK;
    if (followSource)       flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
    if (followVel)          flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target != "")       flags = flags | PSYS_PART_TARGET_POS_MASK;
   
    llParticleSystem([  PSYS_PART_MAX_AGE,          age,
                        PSYS_PART_FLAGS,            flags,
                        PSYS_PART_START_COLOR,      startColor,
                        PSYS_PART_END_COLOR,        endColor,
                        PSYS_PART_START_SCALE,      startSize,
                        PSYS_PART_END_SCALE,        endSize,
                        PSYS_SRC_PATTERN,           pattern,
                        PSYS_SRC_BURST_RATE,        rate,
                        PSYS_SRC_ACCEL,             push,
                        PSYS_SRC_BURST_PART_COUNT,  count,
                        PSYS_SRC_BURST_RADIUS,      radius,
                        PSYS_SRC_BURST_SPEED_MIN,   minSpeed,
                        PSYS_SRC_BURST_SPEED_MAX,   maxSpeed,
                        PSYS_SRC_TARGET_KEY,        target,
                        PSYS_SRC_INNERANGLE,        innerAngle,
                        PSYS_SRC_OUTERANGLE,        outerAngle,
                        PSYS_SRC_OMEGA,             omega,
                        PSYS_SRC_TEXTURE,           texture,
                        PSYS_PART_START_ALPHA,      startAlpha,
                        PSYS_PART_END_ALPHA,        endAlpha
                            ]);
}

integer gIsOnline = FALSE;
integer gLandOwner = FALSE;
key gKey = NULL_KEY;
string gName = "";
float UPDATE_INTERVAL = 5.0;

updateStatus(string s){
    key k = llGetLandOwnerAt(llGetPos());
    if(s=="1"){
        gIsOnline = TRUE;
    }else{
        gIsOnline = FALSE;
    }
}

key getWhom(){
    if(gKey == NULL_KEY){
        if(gLandOwner){
            return llGetLandOwnerAt(llGetPos());
        }else{
            return llGetOwner();
        }
    }else{
        return gKey;
    }
}

doUpdate(){
    llRequestAgentData(getWhom(),DATA_ONLINE);
}

updateName(){
    llRequestAgentData(getWhom(),DATA_NAME);
}

enable(){
    updateName();
    doUpdate();
    llSetTimerEvent(1);
    llWhisper(0,"Online status display enabled.");
    
}
disable(){
    llSetTimerEvent(0);
    llSetText("Display Disabled",<1,1,1>,1);
    llSetColor(<0,0,1>,ALL_SIDES);
    startColor = <0,0,1>;
    endColor = <0,0,1>;
    updateParticles();
    llWhisper(0,"Online status display disabled.");
}

default
{
    state_entry()
    {
        llListen(0, "", llGetOwner(), "");
        enable();
        llWhisper(0,"Type /ol help for a list of commands");
    }
    on_rez(integer n){
        llResetScript();
    }
    dataserver(key req, string data){
        if(data == "1" || data == "0"){
            updateStatus(data);
        }else{
            gName = data;
            llSetText("Getting online status for " + gName,<1,1,1>,1);
            llSetColor(<0,0,1>,ALL_SIDES);
            startColor = <0,0,1>;
            endColor = <0,0,1>;
            updateParticles();
            llSetTimerEvent(UPDATE_INTERVAL);
        }
    }
    timer(){
        doUpdate();
        if(gIsOnline){
            llSetText(gName + " is Online",<1,1,1>,1);
            llSetColor(<0,1,0>,ALL_SIDES);
            startColor = <0,1,0>;
            endColor = <0,1,0>;
            updateParticles();
        }else{
            llSetText(gName + " is Offline",<1,1,1>,1);
            llSetColor(<1,0,0>,ALL_SIDES);
            startColor = <1,0,0>;
            endColor = <1,0,0>;
            updateParticles();
        }
    }
    listen(integer number, string name, key id, string msg){
        if (llGetSubString(msg, 0,0) != "/"){
            return;
        }
        list argv = llParseString2List(msg, [" "], []);
        integer argc = llGetListLength(argv);
        string cmd = llToLower(llList2String(argv, 0));
        if(cmd == "/ol"){
            string arg =  llToLower(llList2String(argv, 1));
            if(arg=="on"){
                enable();
            }else if(arg=="off"){
                disable();
            }else if(arg=="land"){
                gLandOwner = TRUE;
                gKey = NULL_KEY;
                updateName();
            }else if(arg=="key"){
                gKey = llList2Key(argv,2);
                updateName();
            }else if(arg=="me"){
                gLandOwner = FALSE;
                gKey = NULL_KEY;
                updateName();
            }else if(arg=="help"){
                llWhisper(0,"/ol on - activate online status display");
                llWhisper(0,"/ol off - disable online status display");
                llWhisper(0,"/ol land - display online status for owner of this land");
                llWhisper(0,"/ol me - display your online status");
            }
        }
    }
    
}

---------------Start New Script-----------------------
 
integer i;
vector Vec;
integer IntX;
integer IntY;
integer IntZ;
//string Position;
vector Pos;
string Compass;
float Angle;
float Opposite;
float Hypotenuse;
string Distance;
string Output;
vector Color = <.2, .8, .4>;
 
default
{
    state_entry()
    {
        llSetTexture("accda64a-d338-040d-1842-ffbf9780da9b", ALL_SIDES);
        llSetScale(<0.1, 0.1, 0.1>);
        llSetObjectName("Avatar Radar");
        llTargetOmega(<1,0,0>, -PI/4, 1);
        llSensorRepeat("", NULL_KEY, AGENT, 96, PI, 0.1);
    }
 
    sensor(integer num_detected)
    {
        Output = "";
        for (i = 0; i < num_detected; ++i)
        {
            Compass = "";
            Vec = llDetectedPos(i);
            //IntX = (integer)Vec.x;
            //IntY = (integer)Vec.y;
            //IntZ = (integer)Vec.z;
            //Position = "<" + (string)IntX + ", " + (string)IntY + ", " + (string)IntZ + ">";
            Distance = (string)llRound(llVecDist(llGetPos(), llDetectedPos(i)));
            Vec.z = 0;
            Pos = llGetPos();
            Pos.z = 0;
            Opposite = Vec.y - Pos.y;
            Hypotenuse = llVecDist(Vec, Pos);
            if(Hypotenuse == 0) { Hypotenuse = 0.01; }
            Angle = llAsin(Opposite/Hypotenuse) * (180/PI);
            if((Angle >= 22.5) && (Angle <= 90)) { Compass = "N"; }
            if((Angle <= -22.5) && (Angle >= -90)) { Compass = "S"; }
            if(((Angle >= -67.5) && (Angle <= 67.5)) && (Vec.x < Pos.x)) { Compass = Compass + "W"; }
            if(((Angle >= -67.5) && (Angle <= 67.5)) && (Vec.x > Pos.x)) { Compass = Compass + "E"; }
 
            Output = Output + llDetectedName(i) + " (" + Compass + " @ " + Distance + "m)\n";
        }
        llSetText(Output, Color, 1);
    }
 
    no_sensor() { llSetText("No Avatars in range", Color, 1); }
}

 

 

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 2054 days.

Please take a moment to consider if this thread is worth bumping.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...