Online Indicator

From Second Life Wiki
Revision as of 13:50, 14 January 2009 by Kristy Fanshaw (talk | contribs)
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 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.

<lsl>key owner_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 RESIDENT_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( owner_key, DATA_NAME);   
   }
   dataserver(key queryid, string data)
   {
       name = data;
       state show;
   }

} state show {

   state_entry()
   {
       llSetTimerEvent(10);
   } 
   timer()
   {
       llHTTPRequest( RESIDENT_URL + (string)owner_key,[HTTP_METHOD,"GET"],"");
       llRequestAgentData( owner_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");
       llSetTimerEvent(time);   
   }
   listen(integer ch, string name, key id, string msg)
   {
       llInstantMessage(owner_key, 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>