llSetTimerEvent
void llSetTimerEvent(float Rate)Causes the timer event to be triggered every Rate seconds.
Passing in 0.0 stops further timer events.
Parameters
-
Rate(float)
- The time between timer events can be longer due to:
- Time dilation - See llGetRegionTimeDilation for more information
- Default event delay - Only so many events can be triggered per second
- 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. 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 resets the timer clock
- If you repeatedly call this function at some interval less than
sec, the timer event will never fire
- If you repeatedly call this function at some interval less than
- The timer event is not an interrupt; it will not pause the execution of the currently running event to execute the timer. The current event must finish executing before the timer executes
Examples
Section titled “Examples”Basic Timer Usage
Section titled “Basic Timer Usage”// default of counter is 0 upon script loadinteger 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)); }}Random Timer Interval
Section titled “Random Timer Interval”// 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) );Timer with Sensor (Events That Interfere)
Section titled “Timer with Sensor (Events That Interfere)”// The timer event will never fire.default{ state_entry() { llSetTimerEvent(5.0); // Sensor every 2.5 seconds llSensorRepeat("", NULL_KEY, FALSE, 0.0, 0.0, 2.5); }
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."); }}Simulating Multiple Timers
Section titled “Simulating Multiple Timers”// Using a timer to simulate multiple timersinteger counter_a = 0;integer counter_b = 0;
default{ state_entry() { //Starting Timer Event llSetTimerEvent(1.0); }
timer() { //Increment counters counter_a++; counter_b++;
if(counter_a >= 100) { //Resetting Counter A counter_a = 0; llOwnerSay("Counter a has reached 100"); }
if(counter_b >= 200) { //Resetting counter B counter_b = 0; llOwnerSay("Counter b has reached 200"); }
}}