One common item which you will find around Second Life is the ‘owner on-line’ indicator. There are various different versions of these, but most of them change color and display some floating text to say whether the owner is on-line.

Here is a script which implements this. It uses the llRequestAgentData function to find out whether the owner is on-line. This reports the information back to the script via the dataserver event, which then changes the text message and the color of the prim appropriately.

string ownerName;
key onlineQry;
init()
{
 // Store the owner's name.
 ownerName = llKey2Name(llGetOwner());
 // Send a request for the information. This will
 // be sent back in the dataserver event.
 onlineQry = llRequestAgentData(llGetOwner(), DATA_ONLINE);
 // Start a timer to regularly check the on-line
 // status.    
 llSetTimerEvent(30.00);
}
default
{
 state_entry()
 {
  init();
 }
 on_rez(integer r)
 {
  init();
 }
 timer()
 {
  onlineQry = llRequestAgentData(llGetOwner(), DATA_ONLINE);    
 }
 dataserver(key query_id, string data) 
 {
  vector prim_color;
  if (query_id == onlineQry)
  {
   // The data parameter holds TRUE if the owner
   // is on-line.
   if ((integer)data == TRUE)
   {
    // Change the text.
    llSetText(ownerName + " is on-line", <0.0, 1.0, 0.0>, 0.5);
    // Set the object color to green.
    prim_color = <0.0, 1.0, 0.0>;
    llSetColor( prim_color, ALL_SIDES );
   }
   else
   {
    // Change the text.
    llSetText(ownerName + " is off-line", <1.0, 0.0, 0.0>, 0.5);
    // Set the object color to grey.
    prim_color = <0.5, 0.5, 0.5>;
    llSetColor( prim_color, ALL_SIDES );
    }
   }
 }
 changed(integer change)
 {
  if (change & CHANGED_OWNER) 
  {
   // We have changed owner. Reset the script to
   // make sure that we pick up the change
   // correctly.
   llResetScript();
  }
 }
}