Difference between revisions of "LlSetTimerEvent"
Jump to navigation
Jump to search
All Issues ~ Search JIRA for related Bugs
Omei Qunhua (talk | contribs) (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 15:49, 27 September 2013
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llSetTimerEvent( float sec );107 | Function ID |
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:
- 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. 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
- Notes on minimum practical llSetTimerEvent values, Second Life forum, 2011-03-21