Difference between revisions of "Timer"

From Scriptwiki
Jump to: navigation, search
(Stripped away {} from examples and added notes about why not to use brackets and pipe)
m
Line 91: Line 91:
  
 
== See Also ==
 
== See Also ==
To stop all timers, take a look at [[timers|/timers]].
+
* [[timers|/timers]] to stop all timers, take a look at.
 
+
* [[$timer]] to get information about a timer.
You can also get information about a timer by using the [[$timer]] identifier.
 
  
 
[[Category:Commands]]
 
[[Category:Commands]]
 
[[Category:Timer Commands and Identifiers]]
 
[[Category:Timer Commands and Identifiers]]

Revision as of 10:05, 2 July 2007

Activates the specified timer to perform the specified command at a specified interval, and optionally at a specified time.

/timer[N/name] [-ceomhipr] [time] <repetitions> <interval> <command>

If you are not connected to a server and a timer is started, it will be an offline timer by default, meaning that it will continue to run whether you are connected to a server on not. If you are connected to a server while starting a timer, it will be an online timer, that will stop if you disconnect. You can make a timer being an offline timer by using the -o switch.

To make a new timer, you can either use /timer without name/number or you can specify a name, without space between the command and the name (/timerfoo ...). If you do not specify a name/number, mIRC will get the first free timernumber it finds and use this.

If you specify a delay of 0 seconds, the timer will trigger immediately after the calling script ends.

You can also specify a time when the timer is supposed to trigger (see example below).

Note that if you specify 0 repetitions it will continue until you either stop it yourself or you disconnect, in case it is an online timer.

Note that identifiers usually do not get re-evaluated during a timer (see example below). To force this, you have to use an exclamation mark after the $ of an identifier (e.g. $!time or $!me)

You can stop a timer by using /timer<name|N> off, which will also be able to handle wildcards in the name (see example below).


You can use the following switches:

Switch Explanation
c will make mIRC "catch up" a timer by executing it more than once during one interval if the real-time interval isn't matching your requested interval.
m / h indicates that the interval delay is in milliseconds.
h make a high-resolution multimedia timer (uses system resources heavily)
e will executes the command associated with the specified timer name (works with wildcard names too).
p will pause a timer
r will resume a timer
i will make a timer dynamically associate with whatever happens to be the active connection. If a server window is closed, the timer is associated with the next available server window.

Example

In the following, we'll always create an alias to be able to execute commands directly after creating the timer.

alias timertest {
 timer 2 2 echo -a moo!
}

This alias just creates an timer that will echo moo! to your active window two times with a delay of 2 seconds.


alias timertest {
 timer1 2 10 echo -a $!asctime
 timer2 2 10 echo -a $asctime
}

Here we create two timers, one with forcing it to re-evaluate the identifier (the one on top), the other not. You will see the first always echoing the current time, the other always echoing the time when it was started.


alias timertest {
 timermilli -m 10 50 echo -a The difference is 50 milliseconds.
}

This timer called milli will echo The difference is 50 milliseconds. every 0,05 seconds to your active window, all in all 10 times.


alias timertest {
 timertime 14:00 1 1 echo -a It is 14:00 o'clock.
}

This one will echo It is 14:00 o'clock. to the active window when it is 14oclock, as we made the timer trigger then.


timer1* off

We just stop all timers beginning with a 1.

Notes

When using {, } and | in timers they will get evaluated before setting the timer so it is always advisable to avoid stacking commands inside of a timer.

Best practise would be to never try and stack commands inside a timer, instead create an alias with the commands you wish to run and start a timer to execute the alias.

timer 1 5 showme
alias showme {
  if ($true) {
    echo -ag My name is $mnick
    echo -ag And I eat fish.
  }
  echo -ag That go moo!
}

Although it should be avoided where ever possible it is possible to stack commands using $chr(124) as the command delimiter.

timer 1 5 echo -ag My name is $mnick $chr(124) echo -ag And I eat fish.
;;This will start a timer like this:
* Timer 1 1 time(s) 5s delay echo -ag My name is Dana | echo -ag And I eat fish. (QuakeNet)

It is also possible to use $chr(123) and $chr(125) instead of { and } for stacking commands in an if-then-else.

timer 1 5 if ($true) $chr(123) echo -ag My name is $mnick $chr(124) echo -ag And I eat fish. $chr(125) $chr(124) echo -ag That go moo!
;;This will start a timer like this:
* Timer 1 1 time(s) 5s delay if ($true) { echo -ag My name is Dana | echo -ag And I eat fish. } | echo -ag That go moo! (QuakeNet)

See Also

  • /timers to stop all timers, take a look at.
  • $timer to get information about a timer.