Online Indicator

From Second Life Wiki
Revision as of 14:52, 14 January 2009 by Kristy Fanshaw (talk | contribs)
Jump to navigation Jump to search

This script will show if the user is online or offline - will create hover text.

Will show user profile picture on the object and when touched, then toucher can send IM to user by typing the message to main chat.
Also offers a link in main chat to open users profile.

<lsl>key user_key = "00000000-0000-0000-0000-000000000000"; // must be agent UUID whose status it will indicate integer time = 30; // time within the message should be written. string url = "http://world.secondlife.com/resident/"; key blank = "5748decc-f629-461c-9a36-a35a221fe21f"; string name; key toucher; string status;

default {

   state_entry()
   {
       llSetText("", <1,0,0>, 1.0);
       llSetTexture(blank, ALL_SIDES);
       llRequestAgentData( user_key, DATA_NAME);   
   }
   dataserver(key queryid, string data)
   {
       name = data;
       llSetObjectName(name + "'s Online Detector");
       state show;
   }

} state show {

   state_entry()
   {
       llSetTimerEvent(10);
   } 
   timer()
   {
       llHTTPRequest( url + (string)user_key,[HTTP_METHOD,"GET"],"");
       llRequestAgentData( user_key, DATA_ONLINE);   
   } 
   on_rez(integer start_param)
   {
       llSetText("", <1,0,0>, 1.0);
       llSetTexture(blank, ALL_SIDES);
   } 
   http_response(key request_id,integer status, list metadata, string body)
   { 
       if (llSubStringIndex(body, "blank.jpg") == -1)
       {
           integer start_UUID = llSubStringIndex(body,"<img alt=\"profile image\" src=\"http://secondlife.com/app/image/") + llStringLength("<img alt=\"profile image\" src=\"http://secondlife.com/app/image/");
           integer end_UUID = llSubStringIndex(body,"\" class=\"parcelimg\" />") - 3;
           string profile_pic = llGetSubString(body, start_UUID, end_UUID);
           llSetTexture((key)profile_pic, ALL_SIDES);
       }
       else
       {
           llSetTexture(blank, ALL_SIDES);
       }
   }
   dataserver(key queryid, string data)
   {
       if ( data == "1" ) 
       {
           status = " is online";

           llSetText(name + status, <0,1,0>, 1.0);
       }
       else if (data == "0")
       {
           status = " is offline";

           llSetText(name + status, <1,0,0>, 1.0);
       }

   }
   touch_start(integer num_detected)
   {
       toucher = llDetectedKey(0);
       state msg;
   }

} state msg {

    state_entry()
   {
       llListen(0,"",toucher,"");
       llInstantMessage(toucher, "write your message to " + name +" - you have " +(string)time + " seconds");
       llInstantMessage(toucher, "to see " + name +"'s profile, click this link here: secondlife:///app/agent/" + (string)user_key + "/about");
       llSetTimerEvent(time);   
   }
   listen(integer ch, string name, key id, string msg)
   {
       llInstantMessage(user_key, llKey2Name(toucher) + " sent you a message from " + llGetRegionName() + ": " + msg);
       llInstantMessage(toucher, "message is sent.");
       llListenRemove(0);
       state show;
   }
   timer()
   {
       llInstantMessage(toucher, "time is up - touch again to write a message");
       llListenRemove(0); 
       state show;
   }

}</lsl>