Introduction

While ActiveWorlds has certainly been well served by the combination of the animate, astart, astop commands and the adone triggers for creating complex, timed sequences the problem has always been that these commands were never really intended for this purpose. These commands relied very heavily on the underlying implementation of an image processing system which could lead to lag if improperly used. The syntax wasn't exactly the most intuitive either since it required almost arcane knowledge of how the animate system worked. Another pitfall was the lack of synchronization capabilities. Timers were introduced to address these pitfalls with the old system commonly known as "AAA." They introduce a new syntax for developing sequenced, timed events, a system that is only reliant on the underlying timer implementation (and not a image system), and the ability to synchronize events with the VRT clock of the browser. While AAA certainly did do a lot for bringing scripted events to ActiveWorlds and hasn't entirely lost its usefulness, timers are now the supported and preferred method of creating sequenced events and the only way of creating clock synchronized events.
What exactly are timers? What are known as timers are actually a combination of two parts:
The goal of this guide is to cover the syntax for both of these systems and to show how they are used and then go into a discussion of advance methods for using timers.

Timer Command

Before using timers a timer must first be created using the timer command. The timer command takes the following form:
<trigger> timer tmName duration [loop=(n)] [stop | reset] [global]
The parameters are explained as follows:

Examples

Now for some examples of using this command. Note that the at trigger is not used. This section is only to illustrate how to use the timer command itself, the at trigger will be discussed later. Also you can recombine the different triggers and examples here to create new and different ways of operating on a timer.

Example 1: Creating a timer with the create trigger

This creates a timer, when the object loads, named abc with a duration of 1500ms.
create timer abc 1500

Example 2: Creating a timer with the create trigger in suspended mode

This creates a timer, when the object loads, named xyz with a duration of 2000ms and suspends the timer so that it doesn't execute immediately.
create timer xyz 2000 stop

Example 3: Creating a timer with the bump trigger that starts ticking for everyone

This creates a timer named pqr with a duration of 3000ms when an avatar bumps the object. It starts ticking for everyone near the avatar.
bump timer pqr 3000 global

Example 4: Suspending a timer with the activate trigger

This will suspend the ticking of the timer named pqr when a user clicks the object. This is useful for allowing a user to stop some sequenced event.
activate timer pqr stop

Example 5: Suspending a timer with thr bump trigger

This will suspend the ticking of the timer named xyz when the user bumps the object. An example of using this would be stopping a timer that would have teleported a user after 60 seconds if they had not reached the end of a maze.
bump timer xyz stop

Example 6: Restart a timer at 0 and continue ticking when a user enters a zone

This will reset the timer abc to 0 where it will begin ticking once more when the user enters the zone named bob.
enter zone bob, timer abc reset

Example 7: Create a timer that loops six times using the create trigger

This will create a timer named asdf that has a duration of 5000ms, and it will repeat itself in ticking up to 5000ms six times in a row.
create timer asdf 5000 loop=6

At Trigger (with named timers)

Creating, resetting, and even stopping timers is easy enough, but they are useless without some way to respond to them and execute other commands like move, rotate, color, tag, etc. This is where the at trigger comes into play. It allows you to specify a set of parameters for when a given list of commands should be executed by the browser. You can even specify multiple at triggers on a single object (with the exception of VRT based at triggers).

At Trigger (with VRT target)