Current edition: Vol.7, No.3, March 2004

Active Worlds News

World of the Month
Glance at AW History
Worlds to Watch
Bot of the Month
Tech Support Tip
AWUniversity News
Artist Tip
Meet Your Neighbor
Nevada Reunion
AWTeen Adventure
Cy Awards
AWEC Calendar


Building Links
Community Links










Bot of the Month

Courtesy of Andras

Tourists Guardian Angel!

Hmmm.. one would ask why do tourists needs a Guardian Angel?

Several reasons and I mention a few here:
- First of all their property is hunted by some citizens and some tourists, so anything they build is vanishing fast.
- They only know about features citizens have only by the word of mouth - they can't try them..
- Some worlds wants to protect tourists builds because it helps to their diversity and atmosphere,
and last but not least
 - The more tourists sign up as citizen the better AW will be:)

Sooo - what do this bot has to do to accomplish the goals above?

1, Protect tourists objects against vandalism, deletion.
2, Add telegram/join/invite features to tourists - at least inworld or within the network of the GuardBots (Short name for the Guardian Angel).
3, Add such features doesn't exist within the standard browser (like seed object, copy/paste full range of builds, etc.) to tease them for signing up
4, Provide the same "Privilege" password idea for them like the browser has.

Those features explicitly created for tourists but what the world owner/caretaker will get in exchange to have tourists building in their world?

Very detailed control over what can be done/built within the world like:
Enable coronas usage,
Restrict corona size,
Enable "create sound", "create picture", "create URL" (this one is controllable by the world's option but it limits the use of that command to caretakers).
Enable the "update=" command for TV like objects, etc.
Restrict (slow down) excessive building behavior.

Very detailed reports about who did what :
Report Visitors enter/leave,
Report "picture, URL, sound, corona, update=, URL" usage
Report if someone tries to delete someone else's property
Report if someone changes his/her name
Report if someone in a watched IP range enters,
Report if someone does excessive building/deleting (too many objects in a short time affected)

Those are more flexible restrictions than the world server can handle.

How does the bot operates?

The bot communicates with the users through whispers to reduce the chat traffic for others.
Extensive help is available through whispers.. To dump a full help file on a user in the chat window is not acceptable, so the help is tiered to several levels and targeted the proper audience (tourists, citizens, WorldKeepers and BotControllers)
Each tourists who want to build in the covered area should apply for a password (which is generated by the bot to avoid "week" passwords usually made up by human being) once. Every time they enter the world(s) covered by a GuardBot they have to provide the password for identification purpose. I couldn't use the user's IP address because it can change nor the Computer ID because it is not accessible by the bot, another reason I picked this method is that there can be multiple users on the same computer who wants to build separately. During the password generation time the bot assigns a "privilege" password to the tourist too, so they can team-up for a common building project. Tourists can register an email address with the bot, so if they forget their password, the bot can email it to them.
When a new object added to the world server, the bot checks if it encroaches the nearby objects (it has a full encroachment implementation and even the rotate and move commands are taking account in the encroachment logic). If the object is not violating any restriction mentioned above and not encroaching, then the object is built and assigned to the builder's privilege owner (if one doesn't use the privilege feature, it is of course the builder itself). This method protects the builds based on the same concept the browser does with the citizens. If someone deletes other's property, the bot rebuilds the object and issues the usual BI message to the guilty one).
There is a telegram option where tourists (and citizens) can send short messages to each other. Right now the message is only delivered if the recipient is inworld but I'm working on a "central server" solution. The message length is limited to about 250 characters (the length of the whisper message can't exceed that size).
Visitors can join or invite each other by whispers (tourists and citizens alike).
The privacy options are implemented for the features above - one can block tgs, have the join/invite confirmed, etc.

There are 4 different user level from the bot's viewpoint:
- Tourists (main target of the bot, most protection)
- Citizens (some limited bot access, like tg, join)
- WorldKeepers (caretakers in the bot's terminology - can get the reports, have the ability to delete tourists objects, etc)
- BotControllers (the owner of the bot and a few assigned co-owners. They can control how the bot behaves, who can be a caretaker, can erase a single tourist's builds with a simple command or simply wipe out all old tourist builds from the world)
Each of them have different commands and help messages of course.

Each GuardBot can communicate with a central password server, so the tourists can use the same password in different world the bot is running. This server provides the incoming tourist's password and email address for the bot and the bot sends the new passwords/email addresses back to the central server. I plan to enhance this server to provide the inter-world telegramming and join/invite actions.

If the bot stops for any reason and restarted - there will be objects which are not designated to any tourists (they build during the bot was off). To overcome that problem, there is an option that any tourists can claim those objects as their own builds by simply selecting them (if this feature is enabled in the bot settings). I know it is not the "perfect" solution but give me a better one :)

How this bot does all this job alone?

The program spawns several  bots to monitor the desired area. Each bot can cover 400x400 meter range (a P20 world size). Due to the general audience I targeted (not everyone can have CT rights in a world) and the instability in the Global Mode I implemented the individual bots for this purpose. There is one bot which can run as a Global Mode bot to deliver the Building Inspector messages though in normal mode those messages are delivered as whispers.
The bot records each tourists property and other vital info in its own database and saves it regularly to the hard drive.
The covered area is queried at the startup time and matched with the tourists database, marking all tourists builds which has no owner in the database "unowned". It resynchronizes it's password database with the central password server.
After all those initial phase the bots starts to watch every event within the world and act according to it's settings. Almost all SDK feature is used in this case.
There were some speed consideration when I created the bot so I optimized it for execution speed. The world database is kept fully in memory, all the visitors data is in the memory - actually nothing is referenced from the hard disk, except occasional feature changes the caretakers/botcontrollers initialize. Several frequently called module is rewritten totally in Assembly language (one prominent example is a string compare routine whish is 4-7 times faster than the fastest library module I have). There are independent threads for the database saving to the hard disk, so it won't interrupt the bot's operation, so the password server communication.

How much resources do I need for this bot?

The bot is memory hungry! The maximum area you can cover with it is a P160 world (81 bots!!) For that size the bot will consume about 150MBytes of memory. The P100 world settings consumes about 40MBytes of memory.
The network connection is critical - the closer to the world server - the faster the bot response, though I did not get complaints running the bot in Hungary while the server was in the USA. Network bandwidth usage is relatively low - I think the bot will run happily on a 56K connection with 10-15 concurrent visitors.
CPU doesn't have to be fast - 300 MHz PII is sufficient thanks to the optimization.

Plans for the future:
Enhance the password server to provide the inter-world telegramming and join/invite actions.
Contact list for tourists.

More details:


My sincere thanks to Ryan who is the father of this idea. He asked me to help to solve some problems in AWNewbie - a tourist building world - and the result is this bot. Without his help, ideas and extensive testing the bot wouldn't be here today! He created an excellent web help for the users too (I'm a know lazy programmer who never creates help files).
Thanks to Matt888, Elyk and C P for their ideas and testing.
Thanks to Jetta Lewis who let me plant this bot in America to enable tourist builds there.

And thanks to all the tourists who are using the bot .


  Active Worlds   |   Newsletter Home   |   Newsletter Archive   |   Contact Us    |   Disclaimer