llGetScriptState

From Second Life Wiki
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.

Summary

Function: integer llGetScriptState( string script );

Returns a boolean (an integer) that is TRUE if the script is running.

• string script a script in the inventory of the prim this script is in

Caveats

  • If script is missing from the prim's inventory or it is not a script then an error is shouted on DEBUG_CHANNEL.
All Issues ~ Search JIRA for related Bugs

Examples

default
{
    touch_start(integer num_detected)
    {
        integer numberOfScripts = llGetInventoryNumber(INVENTORY_SCRIPT);

        integer index;
        do
        {
            string scriptName = llGetInventoryName(INVENTORY_SCRIPT, index);
            integer scriptState = llGetScriptState(scriptName);

        //  default value
            string output = "FALSE";
        //  else
            if (scriptState) output = "TRUE";

            // PUBLIC_CHANNEL has the integer value 0
            llSay(PUBLIC_CHANNEL,
                "Script named '" + scriptName + "' has current script state '" + output + "'.");
        }
        while (++index < numberOfScripts);
    }
}
// Monitor other scripts in the object, then report, restart or both if some have crashed
// NB: cannot distinguish a manually stopped script or restart one
integer TRY_RESTART = FALSE;
integer REPORT = TRUE;

default
{
    state_entry() {
        // monitoring rate = once per minute
        llSetTimerEvent(60);
    }
    
    timer() {
        integer i = llGetInventoryNumber(INVENTORY_SCRIPT);
        string script_name;
        list stopped;
        
        while(--i >= 0) {
            // the script will also monitor itself, but there is little reason to specifically skip
            script_name = llGetInventoryName(INVENTORY_SCRIPT, i);
            if(!llGetScriptState(script_name)) {
                if(TRY_RESTART)
                    llResetOtherScript(script_name);
                if(REPORT)
                    stopped += script_name;
            }
        }
        if(stopped) {
            string message = "The following scripts were crashed/stopped: " + llList2CSV(stopped) + ".";
            if(TRY_RESTART)
                message += " A restart was attempted.";
            llInstantMessage(llGetOwner(), message);
        }
    }
}

See Also

Functions

•  llSetScriptState
•  llResetOtherScript

Deep Notes

History

Search JIRA for related Issues

Signature

function integer llGetScriptState( string script );