Basic Target Scanner HUD

From Second Life Wiki
Revision as of 19:06, 24 January 2015 by ObviousAltIsObvious Resident (talk | contribs) (<lsl> tag to <source>)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This single prim HUD is just a button that scrolls through nearby players names, photos and user key. Drop it in a prim and touch the prim and you are set to go. Modify it to suit your particular use in another Hud, weapon, or whatever you want. <3 --Ackley Bing

// Basic Target Scanner HUD
// by Ackley Bing
// v.2.0 now using llGetAgentList() instead of sensor().  Added a missing profile photo texture. fixed a lot of issues.

integer index;
key HUDtarget;
key photoReq;
integer HUDattachpoint=ATTACH_HUD_CENTER_1;
string missingtexture="1a6e02aa-23a8-7a5f-0525-44d724144f89";
Target()
{
    list agents=llGetAgentList(AGENT_LIST_REGION,[]);
    integer ownerindex=llListFindList( agents, (list)llGetOwner() );
    integer num_agents;
    agents=llDeleteSubList( agents, ownerindex, ownerindex );
    num_agents = llGetListLength(agents);
    index=((index<0)*(num_agents-1))+((index>=0)*(index*(index!=num_agents)));
    HUDtarget=llList2Key(agents, index);
    llSetText(llKey2Name(HUDtarget)+" ("+llGetDisplayName(HUDtarget)+")\n"+(string)HUDtarget, <0.0, 1.0, 0.0>, 1.0);
    photoReq=llHTTPRequest("http://world.secondlife.com/resident/" + (string)HUDtarget, [], "");
    llOwnerSay("("+(string)(index+1)+"/"+(string)(num_agents) +") Current Target: secondlife:///app/agent/" + (string)HUDtarget + "/inspect " + (string)HUDtarget );
}
default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(),PERMISSION_ATTACH);
    }
    attach(key id)
    {
        if (id)
        {
            llSetScale(<0.1, 0.15, 0.1>);
            llSetPrimitiveParams([PRIM_TYPE, PRIM_TYPE_BOX, PRIM_HOLE_DEFAULT, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <2.0, 0.5, 1.0>, <0.0, 0.0, 0.0>, PRIM_ROT_LOCAL, <0.000000, -0.707107, 0.000000, 0.707107>, PRIM_COLOR, 0, <1.0,1.0,1.0>, 1.0, PRIM_COLOR, 1, <0.0,1.0,0.0>, 1.0, PRIM_COLOR, 3, <0.0,1.0,0.0>, 1.0, PRIM_COLOR, 2, <1.0,1.0,1.0>, 0.0, PRIM_COLOR, 4, <1.0,1.0,1.0>, 0.0]);
            llRotateTexture(270.0*DEG_TO_RAD,0);
            HUDattachpoint=llGetAttached();
            Target();
            llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }
    }
    on_rez(integer param)
    {
        if ( !llGetAttached() )
        {
            index=0;
            HUDtarget=NULL_KEY;
            llSetText("", <0.0, 1.0, 0.0>, 1.0);
            llSetTexture(missingtexture, 0);
            llRequestPermissions(llGetOwner(),PERMISSION_ATTACH);
        }
    }
    touch_start(integer n)
    {
        index=index+(llDetectedTouchFace(0)==1)-(llDetectedTouchFace(0)==3);
        Target();
    }
    http_response(key request_id, integer status, list metadata, string body)
    {
        if( request_id == photoReq )
        {
            string photoID;
            integer StartIndex=llSubStringIndex(body,"<title>");
            integer EndIndex=llSubStringIndex(body,"</title>");
            if( StartIndex!=-1)
            {
                integer tempIndex=llSubStringIndex(body,"imageid")+18;
                if(tempIndex>17)photoID=llGetSubString(body,tempIndex,tempIndex+35);
            }
            if ( photoID==NULL_KEY || photoID=="" ) photoID=missingtexture;
            llSetTexture(photoID, 0);
        }
    }
    run_time_permissions(integer perms)
    {
        if ( perms & PERMISSION_ATTACH ) llAttachToAvatar(HUDattachpoint);
        if ( perms & PERMISSION_TAKE_CONTROLS ) llTakeControls(CONTROL_BACK, FALSE, TRUE);
    }
}