After 3 weeks of development, I am ready to announce the release of tsuserver 3.3. It includes a near-complete restructuring of the command, storage, and logging backends, intended to fit the architectural needs of the server (whereas the old architecture grew over itself until it became a mess).
Full database integration via SQLite
Existing data will be migrated automatically to the new database format.
SELECT bans.ban_id, ip_bans.ipid, reason FROM bans JOIN ip_bans ON ip_bans.ban_id = bans.ban_id JOIN ipids ON ipids.ipid = ip_bans.ipid;
SELECT event_time, ipid, room_name, char_name, ooc_name, message, type_name FROM room_events JOIN room_event_types ON event_subtype = type_id ORDER BY event_time DESC LIMIT 50;
To run these, use the
sqlite3 command line interface and do
.mode column and
.header on for pretty results.
All logs go through the database, but a limited classic event log is still available in
logs/server.log. Its format has been drastically simplified.
Hot reloading of chat commands
/refresh command will reload all chat commands from their Python source without interruption.
Stricter iniswap checking
You can place
char.ini files in
characters/<character>/char.ini to enforce even more stringent checking for custom content.
If an emote does not have the same preanimation, animation, and SFX as described in the server’s INI file, the emote is blocked.
No more ghost clients
Ghost clients caused by webAO have been fixed.
Change in ban logic
Banning an IPID no longer bans every HDID that was associated with that IPID. Instead, IPID and HDID bans have been separated from each other. HDIDs can still be banned with the
There is a new ban syntax:
/ban <ipid> "reason" ["<N> <minute|hour|day|week|month>(s)|perma"]
By default, bans are 6 hours long.
/ban <ipid> <ban_id>
This commands adds another IPID (or HDID if
/banhdidis used) to an existing ban record.
The last 5 bans can be listed with
/bans. Full ban information (such as who initiated the ban, unban time, affected IPIDs/HDIDs, etc.) can be listed with
The sample config has been commented to include explanations of settings.
A major effort in dead code removal and documentation was made.
I have tried my best to find bugs and test things out. However, there may be some things that broke and things that are still broken (like evidence). Bugs that are related to commands can be hot-patched without restarting the server, but other bugs will require a server restart. Regardless, please help me find these bugs and report them immediately.
You can update via Git or by downloading the latest master zip file. You may also wish to revise the new config sample.
The database migration only goes one way. Be sure you are ready to perform the update before you commit to it.
Git is also a new dependency! You must install Git for the server to work.
After this update, I probably will not be making any further additions to tsuserver. I want to focus on the larger redesign.