Tracker Robot User Manual


General information

Introduction:

Tracker is a very powerful AW robot with heavy MySQL database usage. With the TrackMap utility you can have visual interpretation where your visitors go in your world, you can create movement playbacks for the Crowd  bot.
Tracker is meant to communicate only with its caretakers (with the exception of the Elevator Control) so the average user will not see it in operation.

The robot's primary purpose is to keep track all visitors within a world. It helps GateKeepers to identify visitors, handle an IPWatch list and provides means to get the most out of your world. It has several useful plug-ins to handle separate tasks.

The bot is running in the background, all interaction with it can be done online through chat commands. Base version is running under Linux OS but there is a small Windows wrapper to make it available for those unlucky users who stuck with Windows.
This manual assumes you have a fair understanding of the MySQL database commands/client and the AW technology itself.

The robot currently is available for both the 3.6 AW and the 4.1 AW Universe versions too. TrackerBot is a commercial application, please contact me about pricing.

Requirements:

The bot requires access to your world server and to a MySQL server (Version 5 preferred).
For the best performance, the bot should run on the same machine your world is running and MySQL server should run on the same machine too. Of course it is not a prerequisite for running the bot but expect heavy network usage.
Be prepared for a big storage usage when the bot is running for a long time with several visitors. The database could grow to tens of gigabytes!


Core Operation


The bot gets all necessary parameters from its ini file.
New feature: The ini file can contain only the parameters of a MySQL table which contains all the configuration!
If the program finds the SqlConfiguration=1 in the ini file's [IniConfig] section, it will read first all values from the ini file, then overrrides it with the values read from the MySQL table and finally updates the MySQL table with the new values. In case the corresponding table doesn't exists, the program tries to create the table for you.

Fills it's internal tables(Caretaker list, Language tables, Visitors and IPWatch list) from the MySQL database then logs in into the world (the bot can be invisible but in this case you should give CT rights to the owner's citizen number in that world).

Every time starting the bot will try to create the core MySQL tables if they don't exist and adds/modifies the bot owner to the caretaker list with full rights.

It will monitor all visitors coming and going and their movements inworld and record it to the Location database. Movement records can be reduced with the built-in calculation method, which only records the beginning and the end of a straight-line move.

You can assign different caretakers for different rights, so you can have a GateKeeper who deals with IP watching or someone who just receives new visitors entry message:

RightToBotControl         - This caretaker can create/modify caretakers, he has full bot controlling rights.
RightToIPReport          
- Those caretakers can edit the IPWatch list and will receive the IPWatch warning messages.
RightToVisitorReport      - They can receive notification of the entering/exiting visitors (their name and preferred language)
RightToReceiveIP         
- Those caretakers can receive the IP address of the visitors entering.
RightToBadWord            - Those caretakers can add/modify the bad words table and receive a message if someone used them


Caretakers can customize the appearance of the robot messages with the console command for easy view.

Each visitor entry and exit can be reported to caretakers who have rights to receive them if they sign up for those reports. The bot performs a reverse lookup on the visitor's IP address which can help to locate him/her on the globe and tries to determine the default language the visitor is using based on his top level domain.

Helper    Andras Lang=HU

Those caretakers who have IPWatch rights can manipulate the IPWatch database through commands. They can add new IP address with some meaningful description and username to the table. When using multiple Tracker Bots with a common IPWatch database, consider using the real-time update flag to ensure all bots are in synch or be sure you reload the table when one bot modifies it. Each entry is matched with the IPWatch list and if match found, a warning is issued to all caretakers inworld about the event:

Helper    IPWatch: Tester IP=194.152.129.209 oldname=Andras Msg=frequent name changes!

All chat can be logged on demand to a separate log file called tracker.chat.log. Robot messages/errors/etc. is constantly logged to the console (Linux version) or to the tracker.log file together with the memo box (Windows version).
Caretakers can get all current visitors' location by issuing the /vis command.

You should grant the following privileges on the MySQL database for the robot: with a strong password
+-------------------------+--------------------------+-------------------------------------------------------+
| Privilege               | Context                  | Comment                                               |
+-------------------------+--------------------------+-------------------------------------------------------+
| Alter                   | Tables                   | To alter the table                                    |
| Create                  | Databases,Tables,Indexes | To create new databases and tables                    |
| Insert                  | Tables                   | To insert data into tables                            |
| Select                  | Tables                   | To retrieve rows from table                           |
| Update                  | Tables                   | To update existing rows                               |
+-------------------------+--------------------------+-------------------------------------------------------+
I am fairly lazy with granting the privileges:
grant all privileges on IPWatch.* to 'tracker'@'localhost' identified by 'MystrongPassword'; flush privileges;

Plug-in descriptions


Portal Control

The Portal Control allows having Customers for detailed statistics. Each customer can own Booths, signs, URLs, etc inworld. The bot keep track of visitors in the customer's locations, number of URL/Object clicked, time spent within a booth. Once you set up the Customer database, you can assign any objects to the customer, specify its category (booth, sign, URL, etc.)  by the portal control commands. Customers can have advertising, which changes to another one when a visitor clicks on it, or just change them periodically with the given time frame. They can have links pointing to their web pages and the bot can push those to the visitor's 3D window or to the web window together with the URL whispered to them. You can rent those booths to the customer and charge by the visit frequency/time spent in their location, etc. The bot's commands and responses give you full control during the development phase of the Portal and during its operation.
Current implementation is based on a 13 story, 4 towers building but it can be changed by explicit order. For making the floor references simpler, the bot uses a floor cross-reference table.
There are two major object concept within the implementation:

Booths, rooms, suites within the building
Furnishing objects that can reside inside a booth or anywhere inworld.

When you prebuild the world (preferably with a single ground object), you can build the rooms/suites within the given environment. Each room/booth/suite should have an entry in the BoothLocation database, which describes it location and size. Those values provide the basis of the "Visiting" status of a booth. Furnishing objects can be inside the booth or somewhere else and they are assigned to a customer to keep track of the density the given customer should be charged and to provide the basis of calculating clicks(hits) or submitting advertisements. The later ones are residing in a separate table with their display duration and click actions.
The Customer table should be filled by some sign-in web page where the customer is able to retrieve the statistics of the visits too. This exercise is left to you, I don't have a working example.

There are several commands helps you build the area and assign them to customers. Almost all action is based on simply selecting an object (right click) but not changing it. You can preset which customer should own the object then with right clicking (or multiple selection) the bot will assign those objects to the preselected customer. Few commands operate on the "last selected" object.

MySQL savvy builders could issue complete SQL queries through the whisper box on the Portal Database. Don't put the terminating ";" onto your query though! Once if the builder is in query mode, all whispers starting with a letter "q" will be passed to the MySQL server with that letter stripped off. Be careful, only let users with good MySQL knowledge to use this feature (you can prevent the use by not giving RightToQuery to them).

Elevator Control

With the Elevator Control, you can have multi-story buildings with elevators and your visitors can go there by telling the bot their desired destination. E.g. Floor 3 will bring them to the nearest 3rd floor elevator door. Floor 7 n  will teleport the visitor to the North Tower 7th floor.

The Elevator control has a multi-language communication database where you can have the messages/commands stored in several languages. The first entrance based on his Top Level Domain automatically determines the visitor’s language. Each visitor can change his language to his preferred one by issuing the LANG command to the bot. Current implementation uses 5 different languages: English, Dutch, German, French and Hungarian.

The Elevator table contains all messages in all languages you support and the actual addresses of the given location for teleporting the visitor there. E.g.:

| Floor | Tower | Message                                         | X    | Y    | Z     | YAW | WARP | Lang |
+-------+-------+-------------------------------------------------+------+------+-------+-----+------+------+
|    -1 | N     | Subway station, North Tower at your service %s! | 3700 | 4550 |  4150 | 180 |    0 | EN   |

The Command table contains all commands the bot can receive from any user and act on behalf of it. You should have all commands/messages in all supported language defined otherwise the bot will use the English default. Commands implemented so far:
| Command   | Lng | Parameter | Action |
+-----------+-----+-----------+--------+
| help      |   4 |           |      1 | Whispers detailed help message to the user
| lang      |   4 | %s        |      2 | Language selection
| map       |   3 |           |      3 | Displays the URL of the world's map.
| floor     |   5 | %d%s      |      4 | Teleports to the given floor
| ground    |   6 | %s        |      5 | Teleports to the ground floor
| subway    |   6 | %s        |      6 | Teleports to the subway level
| top       |   3 | %s        |      7 | Teleports to the top floor
| quiet     |   5 |           |      8 | No more URLs are posted to him
| verbose   |   4 |           |      9 | URL posting enabled


Entry Control

Entry Control gives you the ability to expand the "Entry Rights" list within the world options to unlimited number of visitors. The list can be defined in two separate method (selectable by the ini file's EntryListRanges parameter).

The EntryRange mode uses the visitor's citizen number or the privilege number to determine if this visitor is allowed to enter the world. The bot uses the EntryDatabase's Entryrights table to retrieve the right for the visitor. If the visitor has no right to enter to this world, the bot tries to determine if it has any world within its rights where the user is allowed to go and will teleport him there. If there is no such world then the visitor is teleported to "Nowhere" world. If the Entryrights table doesn't exist or empty, the bot will create one for you and puts the bot's owner citizen number there to grant entry for the owner.

The Classified method uses a vast database where each citizen number has an assigned classification to determine their entry rights. This later feature can be used for creating closed party or invitation only visits. Entry rights should be inserted into the Citizen table.

The teleportation puts the visitor in to a slight random location around the desired address, so they won't end up on top of each other.

In both method you can add/delete citizen numbers/ranges to the database.


Weather Control

With Weather Control, you can have a Weather Pattern played back in your world anytime. The pattern contains all environment related variables (water level, fog, light direction, color, etc) and optionally you can even issue Immigration Officer messages during the playback. With the /recordweather command you can create your own record pattern while inworld. Just start the weather recording with a unique pattern name and change the world options settings. The bot will put another entry to the WeatherSequence table and will record all changes together with the time duration into the WeatherAction table. Issuing another record command stops the recording and the new pattern is ready to play back. If you want to manually/programmatically edit/create a pattern: those fields you leave NULL in the database will not be changed during playback. You can specify a single weather pattern to be played back regularly in the ini file. The weather patterns can be interrupted/restarted by commands too.

The bot will create the necessary tables in the weather database if they don't exist.

Excellent example for this feature is the sinking of the Titanic in AWEurope's Titanic world.


Exhibit Control

Exhibit Control gives you an excellent tool to create an exhibit where you can use prebuilt booths for placing them into a predefined spot. The prebuilt booth has special designators for those models that can be changed/assigned by the exhibitor. Your exhibitor, who can have all booths visible on a web page, can do the booth selections and he can fill in all the signs, pictures, URLs for his exhibit. The bot (and the corresponding web pages) simplifies the booth building and helps you creating an outstanding exhibition.
If you use together with the Portal Control feature, you can keep track of the individual exhibitor's hits.

Your customers (exhibitors) will use a web driven interface where they can select a booth location, pick which booth they want there and they can fill out the signs/textures/URL etc fields of the pre built booth. This web interface will create the necessary property data in the MySQL database. When you decide your customer finalized his request, you can command the bot to build those exhibit spots automatically for you.

First you have to create the exhibit world and place the booth designator object on those spots you want to have the bot to build booths. When you are satisfied with the layout, create a map of it with the MapView utility.

Next phase is you create the booth templates for the exhibition. Build the booth template on a clear area in your world. Assign special action commands to those objects, which are customizable by the customers (logo textures, URLs, streaming media, etc.). When you are happy with a template, command the bot to query and save that template to the database.


Class Control

Class control can be used to hold presentation, keep your visitors off the stage, etc. You have to build your auditorium for the class: a stage where the speaker and his invited listener can go and chairs where the visitors can sit.

When a visitor clicks on a chair, the chair turns into invisible (so others can't click on the same chair), the visitor is teleported to that chair, his/her avatar is changed to a predefined new avatar (e.g. a sitting avatar) and  he can be summoned to the stage by the speaker. The visitor can leave his chair if shift is enabled in your world but there is another control option within the bot that pushes the visitor back if he is not allowed to leave the chair. This feature can be changed while the bot is running. The visitor can leave his seat by clicking to a predefined Gesture button in his browser. In case the visitor leaves his chair, his original avatar is assigned back to him and he is teleported back to the location he came from. Only those visitors will be seated, whose avatar number is in the ini file list.

The Teacher/Speaker can summon a sitting avatar to the stage by clicking on the sitting avatar. The bot will teleport the avatar to the stage. The speaker can send him back to his seat by clicking on the avatar on the stage again.

Chat parsing / bad words handling

Chat parsing is implemented as a regular expression tool to punish those who are using bad words inworld.
The operator can add new regular expressions to the bad words table with a severity value. The program maintains the severity level for each visitors and adds the severity value when a visitor's chat has a match for any of the regular expressions in the bad words table. When a user reaches an operator defined maximum severity level, the user can be teleported to a so called quarantine where he can't move within the world for the duration of the quarantine time.
The bot uses the IPWatch Database to store/retrieve the bad word lists. The database has two tables for this purpose:

Configuration:

The bot gets all of its parameter from the ini file. Some data is retrieved from the MySQL database (like user's entry rights, preferences, CareTaker list, etc.).

Initial configuration from MySQL table

[IniConfig]
SqlConfiguration=1                       When this flag is selected, all configuration settings are retrieved from the database
SqlConfigurationServer=localhost
SqlConfigurationUser=tracker
SqlConfigurationPassword=xxxxxxxx
SqlConfigurationDatabase=Iniconfig
SqlConfigurationDatabaseDBPrefix=

MySQL database parameters.

[MySQL]

General Tracker activities:

VisitorsServer=localhost
VisitorsUser=tracker
VisitorsPassword=xxxxxxxx
VisitorsDatabase=Track_Icotrade
VisitorsDatabaseDBPrefix=

I use one common database  in several worlds for watching particular IPs:

IPWatchServer=localhost
IPWatchUser=tracker
IPWatchPassword=xxxxxxxx
IPWatchDatabase=Universe_IPWatch
IPWatchDatabaseDBPrefix=


Portal and Exhibit control database:

PortalServer=localhost
PortalUser=tracker
PortalPassword=xxxxxxxx
PortalDatabase=IcotradePortal
PortalDatabaseDBPrefix=

Entry control database:

EntryServer=localhost
EntryUser=tracker
EntryPassword=xxxxxxxx
EntryDatabase=Entry_DB
EntryDatabaseDBPrefix=ico_

Weather control database which contains all the "weather" related values to simulate the weather:

WeatherServer=localhost
WeatherUser=tracker
WeatherPassword=xxxxxxxx
WeatherDatabase=Weather_DB
WeatherDatabaseDBPrefix=

Robot credentials, etc:

[Bot]

license key issued for you

LicenseKey=254E-DB11-B5D4-0609-ED73-49AF-1B2E-9B63-4989-5268-D4AB

universe authentication parameters:

Universe=auth.activeworlds.com# Universe URL
Port=5702# Universe port number
World=icotrade # world to log-in
Owner=236 # bot owner's citizen number
PrivPass=storage # owner's privilege password
Name=Tracker # bot's name
GlobalBot=1 # If you have a large world (>P20) you need CT rights in the world
Visible=0 # Reduces the clutter in the whisper list but commands can be issued only through the chat
Location_y=-4000 # Elevation Robot position inworld (if visible) in centimeter
Location_x=0 # W-E
Location_z=0 # N-S
Location_yaw=0 # Angle in 1/10th degree


General parameters for the bot:

[Parameters]
ChatLog=1 # Enable chat log to tracker.chat.log file
WhisperLog=1 # Enable all whispered message to/from the bot to the chat log file
RecordAllMove=0 # Record all moves instead of the straight move enhancement. It will increase the database size significantly!
DisableRecordMove=0 # do not record movements in the database at all. Only Entry/Exit records will go there.
PreloadTourist=0 # Preload Tourists records from the database (no real need for now)
QueryOneShot=1 # Do a whole world query at startup (only use when Portal Control, Exhibit Control or Class Control enabled)
DuplicateCheck=0 # check if there is duplicate objects at the same place and ignore them
RealTimeIPWatchDB=0
# IPWatch DB access is real-time (when multiple tracker accessing the the same database and you don't want to reload manually all robots when one is changing the list). It could cause sluggish response if the MySQL server is busy or on a remote machine for every visitor enter event!
Daemonized=0
# Defined only under Linux. If the value is 1, the bot will go to the background and all log will go to the Logfile
Logfile=tracker.log
# default log file name for background process


Plug-in selection:

[PlugIns]
ClassControlEnabled=1
WeatherControlEnabled=1
ElevatorControlEnabled=1
PortalControlEnabled=1
EntryControlEnabled=1
ExhibitControlEnabled=1
ChatParsingEnabled=1


Entry Control Plug-in's parameters:

[EntryControl]
MAX_CITIZEN_NUMBER=100000 # Specify the largest citizen number in the universe.
EntryListRanges=1 # Use Range type entry right list instead of entry classification
EntryTargetOverride=1 # If someone arrives farther from the world entry location, leave him alone otherwise If someone arrives at the world entry position, do a slight random change, so multiple newcomers will not arrive on each other
EntryPrivilege=0 # Use the user's privilege number instead of its citizen number for the entry right determination
AnyoneCanEnter=1 # Override the entry classification
EnabledType=VIP,Special # Entry right classification list who are allowed to enter
EntryTypes=VIP,Special,Private,General,World # All possible entry classifications (max 7)
Kick_World=Nowhere # Which world the non-welcomed user to teleport
Kick_X=-100000 # the W-E address of the target location in centimeter
Kick_Y=0 # Elevation
Kick_Z=-100000 # N-S
Kick_YAW=0 # Angle
TargetAddressX=-270 # World entry point (it will be overwritten when the world attributes arrives from the world's options!)
TargetAddressY=10000 # Elevation
TargetAddressZ=8380 # N-S
TargetAddressYAW=1790 # Angle in 1/10th degree
ListEntryList=0 # List all entry rights into the log file

Back to entry control

Weather Control Plug-in's parameters:

[WeatherControl]
WeatherLooping=0 # Enable the weather pattern to be repeated
WeatherName=70m2 # weather pattern name in the database
WeatherLoopTime=120 # Repeat time in minutes if repeating is enabled


Class Control Plug-in's parameters:

[ClassControl]
StickyChair=0 # only allow the user to leave the chair with the gesture button
AvatarPair000=6 1 # Avatar type 0 change to 6, release gesture is 1 (the first gesture button)
AvatarPair001=34 3 # Avatar type 1 change to the 34st avatar, release gesture is the 34st avatar's 3rd gesture button
SitObject000=chair01 # Chair object name
SitObjectHeight000=50 # corresponding height offset where the user will be warped
SitObject001=coach1 #Chair2 object
SitObjectHeight001=0 #Chair 2 object elevation offset
StageObject=fakestage # stage object where the caretaker can teleport the user
StageObjectHeight=150 #stage object elevation offset
SitAction=create visible no,solid on # the action field of the sit object when the user is teleported there
NoObjectChange=0
# Wether the bot should apply the SitAction to the chair or not

Chat parsing parameters:

[Quarantine]
severity
0

Commands:


The bot can be controlled by commands issued to it. Each command should start with the "/" character. Commands are only accepted from those citizens who are in the CareTaker database tale and who has rights to certain commands. There are several reporting possibilities which the CareTaker can enable/disable for himself.

Core commands:

Available commands can be accessed by the /trackerhelp command:

/flags

Lists your active status. E.g.: IPWatch langdef visitor IP Included (this CT will get IPWatch warnings, User language preference, User entry/exit with IP)

/console r g b b i msg

Sets the console message color,bold,italic,leading string values.
E.g.: /console 192 0 0 1 0 Helper  will produce all messages like: Helper    Andras ( giant.andras.net ) 194.152.129.209 Lang=EN

/reportvisitor

- toggles visitors report

/reportnoexit

- toggles visitor exit report

/reportnewvisitor

- toggles 'new visitors only' report (does not report those who were inworld recently)

/vis

- lists current visitors. E.g.:
[Alice] (236)        2.00N 2.00W 0.10a 342
Andras (236)        0.76N 1.30W 0.00a 272

/reportvisitorip

- toggles visitors IP address report

/reportIP

- toggles IPWatch report

/setip x.x.x.x name message

- sets IP to watch. E.g.:  /setip 192.168.0.1 Username dirty language

/delip x.x.x.x

- delete IP to watch

/listip

- List IP watches. E.g.: 80.57.46.201 name=misc Msg=Must be banned! Using a craked "tourist bot" to fill the visitor list

/queryworld 

- Starts a full world query

/addct citnum  right list 

- adds caretaker with rights:

/delct citnum

- deletes caretaker
Those two commands can be executed by a CT who has full rights. If you accidentally change your own full right, you have to modify the CareTaker table entry in the MySQL database.:

+--------+------------------+------+-----+------------+-------+
| Field  | Type             | Null | Key | Default    | Extra |
+--------+------------------+------+-----+------------+-------+
| citnum | int(11)          |      | PRI | 0          |       |
| rights | int(10) unsigned |      |     | 2147483647 |       |
+--------+------------------+------+-----+------------+-------+

/listct

- list caretakers. e.g.:
324 ip visitor
193 ip visitor address

/reload 

-  reloads the bot's database from the MySQL database

/reloadall

-  reloads the bot's database and the object database from the MySQL database

/loc

-  tells you your current location and the potential Customer who owns the Location

/suspend

-  suspends all bot activity except chat logging

/resume

-  resumes bot activity (issue a reload too!)

/recordall

- toggles all move recording versus no straight line check

/newsession

- toggles all enter recording versus only if session changed

/terminate me!

- exits the bot! Don't use it if you can't access the computer where the bot is running.


Portal commands:


/verbose

- Enables URL listing when clicked

/report

- toggles density, ownership report when selecting an object.

/quiet

- Disables URL listing when clicked

/objselect customerID FurnishingType

-  all consecutive object selection will assign the object to the Customer and sets the type to Furnishing type and inserts the object to the Furnishing database if it is not there. e.g.:  objselect 0 LgSign   will remove the current ownership if it is there and add the object to the Large Signs Furnishing issuing another objselect command will turn the feature off

/url URL

-  all consecutive object selection will assign the object a push URL Updates (and delete the previous one if exists)

/url

- disables the URL assigning

/setu URL

- assign URL to the last selected furnishing

/setf customerID FurnishingType

- assign customer to the last selected object (like objselect)

/cust customerID FurnishingID

- assign customer to the Furnishing

/teleport here

-  all consecutive object selection will assign the object a Teleport Updates with your current coordinate

/teleport

- disables the Teleport assigning

/cleart

- clears the last selected furnishing Teleport assignment

/querymode

-  toggles the bot relay MySQL command state. Each command should start with the letter 'q' and that letter is stripped from the command

Weather commands:


/recordweather [pattern name]

-  start/stop recording all world options to the database with the given name. This recorded "weather" sequence can be played back later by the next command. The robot checks for the pattern name uniqueness!

/playweather [pattern name]

-  start/stop playing back a weather pattern

/loopweather [frequency [pattern name]]

-  triggers timed weather pattern playing where frequency is given in minutes

/createweather pattern name elevstart elevend wavemovestart wavemoveend wavespeedstart wavespeedend surfacemovestart surfacemoveend duration numsteps

- undocumented automatic water movement generator. This command generates water movement only.

Entry control commands:


/addenter citnum[-untilcitnum]

  - Add enter right to the citizen(s) within this world. While in classified mode, it will create "General" type citizen entry right list into the Citizen table. EntryList mode will add the range to the Entryrights list;

/delenter citnum[-untilcitnum]

  - Revoke enter right to the citizen(s) within this world. The bot properly handles overlapping ranges.

/reloadenter

  - Reloads enter rights for this world from the database. No need to issue if you use RealTimeEntryDatabase flag.

Back to entry control

Class Control commands:

/classcontrol

- toggles class control feature (literally disables/enables all class control related activities)

/stickychair 

- toggles sticky chair feature: Is the user can leave its seat by moving or only with a given gesture

/stageheight

- sets the height offset of the stage - only use if the stage object center position is different then its top.


Exhibit Control Commands:

/queryhere radius name

- Query radius meter around your avatar and save this template as "name" in the database. Make sure there is no other pieces with the radius which doesn't belong to your template. The center of the templace will be your avatar position and its orientation is your facing angle.

/queryat nscenter wecenter orientationangle nssize wesize name

- Query around the center address a rectangle which size is determined by thenssize and wssize parameters (in meter!). Designate the orientation angle of the template with the orientationangle parameter (in degrees). Example: /queryat  1.1s 3.44e 180 5 10 newname

/buildlot lotname boothtypename

- registers build requests on lotname

/startbuild

- starts all registered build requests

Chat parsing commands.

/reportbadword

- toggles visitors bad word usage reporting

/listbadwords [regexp]

- list the bad words regular expressions (could be a LARGE list!) 

/refreshbadword

- reloads the bad words list from the database (in case someone modified it with a different bot ot in a different world)

/deletebadword# ID

- deletes an item from the bad words list identified by ID

/deletebadword regexp

- deletes all bad words from the list which description has a match with the given regular expression

/addbadword severity,description;regular expression

- adds a new bad word with the given severity value to the table. Description must be terminated by a semicolon followed by the regular expression

/quarantine [severity threshold, quarantine duration [,world name]]

- if called without any parameter, it displays if the quarantine is enabled and what is its parameters (severity,duration,location)
- if severity threshold=0 then it deletes the current world's quarantine entry from the table and disables the quarantine feature
- if threshold and duration is given, the bot inserts the new entry to the quarantine table and enables the quarantine feature.

Database format


Core tracker MySQL tables

Configuration table

+----------+--------------+------+-----+
| Field    | Type         | Null | Key |
+----------+--------------+------+-----+
| isection | varchar(255) |      | PRI |
| ikey     | varchar(255) |      | PRI |
| ivalue   | text         |      |     |
+----------+--------------+------+-----+
3 rows in set (0.03 sec)

TldLanguage table

+-------+--------------------------------+------+-----+---------+-------+
| Field | Type                           | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+-------+
| tld   | char(8)                        |      | PRI | com     |       | Containd the Top Level Domain
| Lang  | enum('EN','NL','DE','FR','HU') | YES  |     | EN      |       | Corresponding language
+-------+--------------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
The following values always added to the table:
+-----+------+
| tld | Lang |
+-----+------+
| com | EN   |
| uk  | EN   |
| at  | DE   |
| de  | DE   |
| nl  | NL   |
| fr  | FR   |
| be  | FR   |
| hu  | HU   |
+-----+------+

IPWatch table

+-----------+-----------------------------+------+-----+---------+-------+
| Field     | Type                        | Null | Key | Default | Extra |
+-----------+-----------------------------+------+-----+---------+-------+
| IP        | int(10) unsigned            |      | PRI | 0       |       |
| name      | char(32)                    |      |     |         |       |
| Message   | char(255)                   |      |     |         |       |
| action    | enum('none','warn','eject') |      |     | warn    |       | Not used yet
| ejecttime | int(11)                     |      |     | 300     |       | Not used yet
+-----------+-----------------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Caretaker table

+--------+------------------+------+-----+------------+-------+
| Field  | Type             | Null | Key | Default    | Extra |
+--------+------------------+------+-----+------------+-------+
| citnum | int(11)          |      | PRI | 0          |       |
| rights | int(10) unsigned |      |     | 2147483647 |       | Use 0x7ffffff for full rights when manually setting it.
+--------+------------------+------+-----+------------+-------+
2 rows in set (0.00 sec)

The bot owner citizen number always added to the list with full rights!
Rights values:
RightToBotControl=1
RightToQuery=2
RightToUpdates=4
RightToIPReport=8
RightToVisitorReport=16
RightToCellReport=32
RightToReceiveIP=64
RightToTeacher=128


Bot table

+---------------+------------------+------+-----+---------------------+-------+
| Field         | Type             | Null | Key | Default             | Extra |
+---------------+------------------+------+-----+---------------------+-------+
| name          | char(34)         |      | PRI |                     |       |
| citnum        | int(11)          |      |     | 0                   |       |
| privilege     | int(11)          |      | PRI | 0                   |       |
| current_world | char(10)         |      |     |                     |       |
| last_entered  | datetime         |      |     | 0000-00-00 00:00:00 |       |
| last_left     | datetime         |      |     | 0000-00-00 00:00:00 |       |
| current_IP    | int(10) unsigned | YES  |     | NULL                |       |
+---------------+------------------+------+-----+---------------------+-------+
7 rows in set (0.00 sec)


Citizen table

+---------------+--------------------------------+------+-----+-------------+-------+
| Field         | Type                           | Null | Key | Default     | Extra |
+---------------+--------------------------------+------+-----+-------------+-------+
| name          | char(34)                       |      |     |             |       |
| citnum        | int(11)                        |      | PRI | 0           |       |
| privilege     | int(11)                        | YES  |     | NULL        |       |
| current_world | char(10)                       | YES  |     | NULL        |       |
| last_entered  | datetime                       | YES  |     | NULL        |       |
| last_left     | datetime                       | YES  |     | NULL        |       |
| current_IP    | int(10) unsigned               | YES  |     | NULL        |       |
| Flags         | int(11)                        |      |     | 0           |       | Flag contains the potential report status
| Lang          | enum('EN','NL','DE','FR','HU') |      |     | EN          |       |
| console       | char(128)                      |      |     | 192 0 0 1 0 |       |
+---------------+--------------------------------+------+-----+-------------+-------+
10 rows in set (0.00 sec)

Tourist table

+---------------+--------------------------------+------+-----+---------------------+-------+
| Field         | Type                           | Null | Key | Default             | Extra |
+---------------+--------------------------------+------+-----+---------------------+-------+
| name          | char(34)                       |      | PRI |                     |       |
| password      | char(10)                       |      | PRI |                     |       |
| privpass      | char(10)                       | YES  |     | NULL                |       |
| email         | char(255)                      | YES  |     | NULL                |       |
| current_world | char(10)                       | YES  |     | NULL                |       |
| last_entered  | datetime                       | YES  |     | NULL                |       |
| last_left     | datetime                       | YES  |     | NULL                |       |
| current_IP    | int(10) unsigned               | YES  |     | NULL                |       |
| Flags         | int(11)                        |      |     | 0                   |       | should never change
| Lang          | enum('EN','NL','DE','FR','HU') |      |     | EN                  |       |
| console       | char(128)                      |      |     | 192 0 0 1 0         |       |
| created       | datetime                       |      |     | 0000-00-00 00:00:00 |       |
+---------------+--------------------------------+------+-----+---------------------+-------+
12 rows in set (0.00 sec)

Location table

+------------+------------------+------+-----+----------+-------+
| Field      | Type             | Null | Key | Default  | Extra |
+------------+------------------+------+-----+----------+-------+
| name       | char(34)         | YES  |     | NULL     |       |
| citnum     | int(11)          | YES  |     | NULL     |       |
| pos_x      | int(11)          | YES  |     | NULL     |       |
| pos_y      | int(11)          | YES  |     | NULL     |       |
| pos_z      | int(11)          | YES  |     | NULL     |       |
| pos_yaw    | int(11)          | YES  |     | NULL     |       |
| pos_tilt   | int(11)          | YES  |     | NULL     |       |
| av_type    | int(11)          | YES  |     | NULL     |       |
| gesture    | int(11)          | YES  |     | NULL     |       |
| timestamp  | int(11)          | YES  |     | NULL     |       |
| action     | int(11)          | YES  |     | NULL     |       |
| current_IP | int(10) unsigned |      |     | 0        |       |
| CustomerID | int(11)          |      |     | 0        |       | Used in Portal mode only
| LocationID | int(11)          |      |     | 0        |       | Used in Portal mode only
| world      | char(8)          | YES  |     | NLStart1 |       |
| msec       | int(11)          | YES  |     | 0        |       |
+------------+------------------+------+-----+----------+-------+
16 rows in set (0.00 sec)

Bad world table

+-------------+-----------+------+-----+---------+----------------+
| Field       | Type      | Null | Key | Default | Extra          |
+-------------+-----------+------+-----+---------+----------------+
| ID          | int(11)   | NO   | PRI | NULL    | auto_increment |
| severity    | int(11)   | NO   |     | 0       |                |
| description | char(255) | NO   |     |         |                |
| pattern     | text      | YES  |     | NULL    |                |
+-------------+-----------+------+-----+---------+----------------+

Quarantine table

+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| Severity | int(11) | NO   |     | 0       |       |
| Duration | int(11) | YES  |     | NULL    |       |
| X        | int(11) | YES  |     | NULL    |       |
| Y        | int(11) | YES  |     | NULL    |       |
| Z        | int(11) | YES  |     | NULL    |       |
| Yaw      | int(11) | YES  |     | NULL    |       |
| World    | char(8) | NO   | PRI |         |       |
+----------+---------+------+-----+---------+-------+

Weather Control MySQL Tables


WeatherSequence table

This table contains the unique weather pattern name and its starting sequence ID

+-----------+-------------------------------------------------+------+-----+
| Field     | Type                                            | Null | Key |
+-----------+-------------------------------------------------+------+-----+
| name      | char(32)                                        |      | PRI |  Unique pattern name you can refer to
| type      | enum('single','repetitive','scheduled','other') | YES  |     |  Not used yet
| start     | int(11)                                         | YES  |     |  Not used yet
| frequency | int(11)                                         | YES  |     |  Not used yet
| sequence  | int(11)                                         | YES  |     |  Not used yet
+-----------+-------------------------------------------------+------+-----+
5 rows in set (0.03 sec)

WeatherAction table

This table refers to the 3.6 version of the world servers.

+---------------------------+-----------+

| Field                     | Type      |
+---------------------------+-----------+
| id                        | int(11)   | primary key, auto increment
| next                      | int(11)   | Next action ID (if zero, then the last in the pattern)
| duration                  | int(11)   | how long this action should stay active (in seconds)
| allow_3_axis_rotation     | int(11)   |
| allow_avatar_collision    | int(11)   |
| allow_citizen_whisper     | int(11)   |
| allow_flying              | int(11)   |
| allow_object_select       | int(11)   |
| allow_passthru            | int(11)   |
| allow_teleport            | int(11)   |
| allow_tourist_whisper     | int(11)   |
| always_show_names         | int(11)   |
| ambient_light_blue        | int(11)   |
| ambient_light_green       | int(11)   |
| ambient_light_red         | int(11)   |
| avatar_refresh_rate       | int(11)   |
| backdrop                  | char(255) |
| bots_right                | char(255) |
| build_capability          | int(11)   |
| build_number              | int(11)   |
| build_right               | char(255) |
| buoyancy                  | double    |
| caretaker_capability      | int(11)   |
| cell_limit                | int(11)   |
| clouds_layer1_mask        | char(255) |
| clouds_layer1_opacity     | int(11)   |
| clouds_layer1_speed_x     | double    |
| clouds_layer1_speed_z     | double    |
| clouds_layer1_texture     | char(255) |
| clouds_layer1_tile        | double    |
| clouds_layer2_mask        | char(255) |
| clouds_layer2_opacity     | int(11)   |
| clouds_layer2_speed_x     | double    |
| clouds_layer2_speed_z     | double    |
| clouds_layer2_texture     | char(255) |
| clouds_layer2_tile        | double    |
| clouds_layer3_mask        | char(255) |
| clouds_layer3_opacity     | int(11)   |
| clouds_layer3_speed_x     | double    |
| clouds_layer3_speed_z     | double    |
| clouds_layer3_texture     | char(255) |
| clouds_layer3_tile        | double    |
| disable_avatar_list       | int(11)   |
| disable_chat              | int(11)   |
| disable_create_url        | int(11)   |
| disable_multiple_media    | int(11)   |
| creation_timestamp        | int(11)   |
| enable_terrain            | int(11)   |
| eject_capability          | int(11)   |
| eject_right               | char(255) |
| eminent_domain_capability | int(11)   |
| eminent_domain_right      | char(255) |
| enter_right               | char(255) |
| entry_point               | char(255) |
| expiration                | int(11)   |
| fog_blue                  | int(11)   |
| fog_enable                | int(11)   |
| fog_green                 | int(11)   |
| fog_minimum               | int(11)   |
| fog_maximum               | int(11)   |
| fog_red                   | int(11)   |
| gravity                   | double    |
| ground                    | char(255) |
| home_page                 | char(255) |
| keywords                  | char(255) |
| light_blue                | int(11)   |
| light_draw_bright         | int(11)   |
| light_draw_front          | int(11)   |
| light_draw_size           | int(11)   |
| light_green               | int(11)   |
| light_mask                | char(255) |
| light_red                 | int(11)   |
| light_texture             | char(255) |
| light_x                   | double    |
| light_y                   | double    |
| light_z                   | double    |
| max_users                 | int(11)   |
| max_light_radius          | int(11)   |
| name                      | char(255) |
| object_count              | int(11)   |
| object_path               | char(255) |
| object_refresh            | int(11)   |
| public_speaker_capability | int(11)   |
| public_speaker_right      | char(255) |
| rating                    | int(11)   |
| restricted_radius         | int(11)   |
| world_size                | int(11)   |
| sky_bottom_blue           | int(11)   |
| sky_bottom_green          | int(11)   |
| sky_bottom_red            | int(11)   |
| sky_east_blue             | int(11)   |
| sky_east_green            | int(11)   |
| sky_east_red              | int(11)   |
| sky_north_blue            | int(11)   |
| sky_north_green           | int(11)   |
| sky_north_red             | int(11)   |
| sky_south_blue            | int(11)   |
| sky_south_green           | int(11)   |
| sky_south_red             | int(11)   |
| sky_top_blue              | int(11)   |
| sky_top_green             | int(11)   |
| sky_top_red               | int(11)   |
| sky_west_blue             | int(11)   |
| sky_west_green            | int(11)   |
| sky_west_red              | int(11)   |
| sound_ambient             | char(255) |
| sound_footstep            | char(255) |
| sound_water_enter         | char(255) |
| sound_water_exit          | char(255) |
| speak_capability          | int(11)   |
| speak_right               | char(255) |
| special_commands_right    | char(255) |
| special_objects_right     | char(255) |
| terrain_ambient           | double    |
| terrain_diffuse           | double    |
| title                     | char(255) |
| water_blue                | int(11)   |
| water_bottom_mask         | char(255) |
| water_bottom_texture      | char(255) |
| water_enabled             | int(11)   |
| water_green               | int(11)   |
| water_level               | double    |
| water_mask                | char(255) |
| water_opacity             | int(11)   |
| water_red                 | int(11)   |
| water_speed               | double    |
| water_surface_move        | double    |
| water_texture             | char(255) |