Basic Sim Status Button Indicator HUD

From Second Life Wiki
Revision as of 12:47, 16 December 2012 by Ackley Bing (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.

<lsl> // Generic Sim Status Button / Indicator // HUD / 1 prim // by Ackley Bing // December 2012 // // A HUD button for remote monitoring of sims. // Color indicates the sim status // Green = SIM available // When the sim goes down it turns red/black // // To use put this in a prim and attach to your preferred HUD location. // Go to the sim you want to monitor and and click the prim // Click and HOLD the hud button to choose another sim. // // Modify // Attach / Connect this to your HUD/Vehicle/etc any way you like.

integer listenhandle; string homeregion; key datarequestID;

SetHomeButtonColor(string data) {

   if ( data == "up" ) llSetPrimitiveParams( [ PRIM_COLOR, 4, <0.0,1.0,0.0>, 1.0 ] ); // set color to green
   else if ( data == "down" ) llSetPrimitiveParams( [ PRIM_COLOR, 4, <1.0,0.0,0.0>, 1.0 ] ); // set color to red
   else if ( data == "starting" || data == "stopping" ) llSetPrimitiveParams( [ PRIM_COLOR, 4, <1.0,1.0,0.0>, 1.0 ] ); // set color to yellow
   else llSetPrimitiveParams( [ PRIM_COLOR, 4, <0.0,0.0,0.0>, 1.0 ] ); // set color to black

}

default {

   state_entry()
   {
       llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
       SetHomeButtonColor("");
   }
   touch_start(integer n)
   {
       llResetTime();
       llSetTimerEvent(30.0);
   }
   touch_end(integer n)
   {
       if(llGetTime()<5.0 && homeregion != "") datarequestID=llRequestSimulatorData(homeregion,DATA_SIM_STATUS);
       else llDialog(llGetOwner(), "Monitor Sim Status for "+llGetRegionName()+"?", ["Yes","No"], (listenhandle = llListen(1, "", llGetOwner(), "")));
   }
   listen(integer channel, string name, key id, string message)
   {
       if (message=="Yes")
       {
           llSetTimerEvent(30.0);
           datarequestID=llRequestSimulatorData(homeregion=llGetRegionName(),DATA_SIM_STATUS);
       }
       if (message=="No" && homeregion=="")
       {
           llSetTimerEvent(0.0);
           SetHomeButtonColor(homeregion="");
       }
   }
   timer()
   {
       if (listenhandle) llListenRemove(listenhandle--);
       if (homeregion!="") llRequestSimulatorData(homeregion,DATA_SIM_STATUS);
   }
   dataserver(key requested, string data)
   {
       if (requested==datarequestID) llOwnerSay("http://maps.secondlife.com/secondlife/"+llEscapeURL(homeregion)+" is "+data+(string)(datarequestID=""));
       SetHomeButtonColor(data);
   }
   run_time_permissions(integer perms)
   {
       llTakeControls((perms && PERMISSION_TAKE_CONTROLS)*CONTROL_BACK, TRUE, TRUE);
   }

} </lsl>