Difference between revisions of "LlSetTimerEvent"

From Second Life Wiki
Jump to navigation Jump to search
m (added warning to LSL Tip about using llSetTimerEvent in combination with llFrand)
m (added second example script)
Line 49: Line 49:
     }
     }
}
}
</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>
|helpers
|helpers

Revision as of 14:29, 16 November 2012

Summary

Function: llSetTimerEvent( float sec );

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
All Issues ~ Search JIRA for related Bugs

Examples

KBcaution.png Important: Timers inside Second Life are either running, when you set the time inside the llSetTimerEvent function call to a positive float, or they are not running, when you set the time inside the llSetTimerEvent function call to 0.0. Each state in your script only has one timer, and timers keep running even when switching states.

For the sake of readability I personally tend to write llSetTimerEvent( (float)FALSE ); when stopping a timer, because I read it as "stop timer". Other scripters will argue though, that 0.0 is just fine and I'm crazy.

Please take care when using something like llSetTimerEvent(llFrand(5.0)) in your code. There's a slight chance of llFrand returning 0.0 and that would stop your timer. Instead write llSetTimerEvent(1.0 + llFrand(4.0)) to get a random somewhere in [1.0, 5.0).

<lsl> // default of counter is 0 upon script load integer counter;

default {

   state_entry()
   {
       // llResetTime();
       llSetTimerEvent(2.0);
   }
   touch_start(integer total_number)
   {
       // PUBLIC_CHANNEL has the integer value 0
       llSay(PUBLIC_CHANNEL, "The timer stops.");
       llSetTimerEvent(0.0);
       counter = 0;
   }
   timer()
   {
       ++counter; 
       llSay(PUBLIC_CHANNEL,
           (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>

Notes

See Also

Events

•  timer

Functions

•  llSensorRepeat
•  llGetRegionTimeDilation
•  llGetTime

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ The ranges in this article are written in Interval Notation.

Signature

function void llSetTimerEvent( float sec );