Difference between revisions of "LlSetTimerEvent"

From Second Life Wiki
Jump to navigation Jump to search
(Corrected corrupted script which would not compile. Removed not-so-important notes.)
(Additional llSetTimerEvent() calls reset current timer, added example.)
Line 12: Line 12:
** '''Event Execution''' - If the execution of an event takes too long.
** '''Event Execution''' - If the execution of an event takes too long.
*The timer persists across state changes, but gets removed when the script is reset. So if you change to a state that has a timer() event, with the timer still running, it will fire in the new state.
*The timer persists across state changes, but gets removed when the script is reset. So if you change to a state that has a timer() event, with the timer still running, it will fire in the new state.
*Setting a new timer replaces the old timer, and if called faster than the timer can ever trigger will result in no timer event ever firing.
|constants
|constants
|examples=
|examples=
Line 51: Line 52:
//  same results for:
//  same results for:
//  llSetTimerEvent( 30.0 + llFrand(-15.0) );
//  llSetTimerEvent( 30.0 + llFrand(-15.0) );
</lsl>
<lsl>
// The timer event will never fire.
default
{
    state_entry()
    {
        llSetTimerEvent(5.0);
        llSensorRepeat("", NULL_KEY, FALSE, 0.0, 0.0, 2.5); // Sensor every 2.5 seconds
    }
    no_sensor()
    {
        llSetTimerEvent(5.0);
    }
   
    timer()
    {
        llSay(0, "I will never happen.");
        llSay(0, "Well, unless llSensorRepeat() magically finds something, or maybe there's 2.5+ seconds of lag and the timer() event queues.");
    }
}
</lsl>
</lsl>
|helpers
|helpers

Revision as of 14:49, 27 September 2013

Summary

Function: llSetTimerEvent( float sec );
0.0 Forced Delay
10.0 Energy

Cause the timer event to be triggered a maximum of once every sec seconds. Passing in 0.0 stops further timer events.

• float sec Any positive non-zero value to enable, zero (0.0) to disable.

Caveats

  • The time between timer events can be longer, this is caused by:
  • The timer persists across state changes, but gets removed when the script is reset. So if you change to a state that has a timer() event, with the timer still running, it will fire in the new state.
  • Setting a new timer replaces the old timer, and if called faster than the timer can ever trigger will result in no timer event ever firing.

Examples

<lsl> // default of counter is 0 upon script load integer counter; float gap = 2.0;

default {

   state_entry()
   {
       llSetTimerEvent(gap);
   }
   touch_start(integer total_number)
   {
       llSay(0, "The timer stops.");
       llSetTimerEvent(0.0);
       counter = 0;
   }
   timer()
   {
       ++counter; 
       llSay(0,
           (string)counter+" ticks have passed in " + (string)llGetTime() 
           + " script seconds.\nEstimated elapsed time: " + (string)(counter * gap));
   }

} </lsl> <lsl> // random period in between (+15.0, +30.0] // which means the resulting float could be 30.0 but not 15.0

   llSetTimerEvent( 30.0 - llFrand(15.0) );

// same results for: // llSetTimerEvent( 30.0 + llFrand(-15.0) ); </lsl> <lsl> // The timer event will never fire. default {

   state_entry()
   {
       llSetTimerEvent(5.0);
       llSensorRepeat("", NULL_KEY, FALSE, 0.0, 0.0, 2.5); // Sensor every 2.5 seconds
   }
   no_sensor()
   {
       llSetTimerEvent(5.0);
   }
   
   timer()
   {
       llSay(0, "I will never happen.");
       llSay(0, "Well, unless llSensorRepeat() magically finds something, or maybe there's 2.5+ seconds of lag and the timer() event queues.");
   }

}

</lsl>

Notes

See Also

Events

•  timer

Functions

•  llSensorRepeat
•  llGetRegionTimeDilation
•  llGetTime

Deep Notes

Signature

function void llSetTimerEvent( float sec );