Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Simple script for remotely monitoring the state of a region. Handy if you're waiting for a region to come back form a restart.
//////////////////////////////////////////////////////////////////////
// Region Status Checker -- By Antony Fairport
//
// Lets you remotely keep an eye on a region's status. Handy to see
// what's happening with your region while it's restarting and you're
// elsewhere.
//
// Revision history:
// ------------------------------------------------------------
//
// 2013-06-05
// First version.
//////////////////////////////////////////////////////////////////////
// Constants
float REFRESH_TIME = 5.0;
//////////////////////////////////////////////////////////////////////
// Globals.
string g_sRegion;
key g_kRequest;
string g_sLastText;
//////////////////////////////////////////////////////////////////////
// Set the float text of the object.
Text( string s )
{
llSetText( g_sLastText = s, < 1.0, 1.0, 1.0 >, 1.0 );
}
//////////////////////////////////////////////////////////////////////
// Add a bit of extra text to the existing float text.
ExtraText( string s )
{
Text( s + "\n" + g_sLastText );
}
//////////////////////////////////////////////////////////////////////
// Request the simulator status.
RequestData()
{
g_kRequest = llRequestSimulatorData( g_sRegion, DATA_SIM_STATUS );
}
//////////////////////////////////////////////////////////////////////
// Default state.
default
{
//////////////////////////////////////////////////////////////////
// State entry.
state_entry()
{
// Clear any text to start with.
Text( "" );
// If it looks like we've got a sensible description...
if ( g_sRegion = llGetObjectDesc() )
{
// ...assume it's a region name and start status checking.
state StatusChecker;
}
else
{
// ...otherwise tell the owner to set it.
llOwnerSay( "Please enter the region name in the description of this object and touch me to start." );
}
}
//////////////////////////////////////////////////////////////////
// Handle a touch.
touch_start( integer num_detected )
{
llResetScript();
}
}
//////////////////////////////////////////////////////////////////////
// Checking state.
state StatusChecker
{
//////////////////////////////////////////////////////////////////
// State entry.
state_entry()
{
// Initial text...
Text( "Checking " + g_sRegion + "..." );
// Find out the state of the region.
RequestData();
}
//////////////////////////////////////////////////////////////////
// Handle incoming data from the data server.
dataserver( key query_id, string data )
{
// Something we requested?
if ( query_id == g_kRequest )
{
// Yup. Stop the timer for a moment.
llSetTimerEvent( 0.0 );
// Set the status in the hover text.
Text( g_sRegion + "\nis " + data );
// Now pause before doing a refresh.
llSetTimerEvent( REFRESH_TIME );
}
}
//////////////////////////////////////////////////////////////////
// Handle a timer event.
timer()
{
// Show that we're checking again.
ExtraText( "(checking...)\n " );
// Request the state of the region again.
RequestData();
}
//////////////////////////////////////////////////////////////////
// Handle a touch.
touch_start( integer num_detected )
{
llResetScript();
}
//////////////////////////////////////////////////////////////////
// Handle changes.
changed( integer change )
{
if ( ( change & CHANGED_REGION ) || ( change & CHANGED_OWNER ) )
{
llResetScript();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment