Skip to content

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
  • 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
// 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));
}
}
// 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) );
// 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.");
}
}
// Using a timer to simulate multiple timers
integer 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");
}
}
}