# TrackMania Nations - XASECO release notes v1.16
Information on the XASECO system for TrackMania Nations and Forever (& Original/Sunrise), racing games by Nadeo
Author: Frans P. de Vries
Keywords: TrackMania, Forever, United, Nations, Original, Sunrise, racing, games, XASECO, ASECO, RASP, Jfreu, plugins, records, jukebox, Nadeo

### New features and other changes in the v1.16 release of XASECO:

- new /cptms command to display the checkpoint times (if available, as they're only being stored since v1.06) for all local records on the current track, as a complement to /sectms
- new /dedicptms command to display the checkpoint times for all Dedimania records on the current track, as a complement to /dedisectms
- added the Countable interface to the TMXInfoSearcher class
- removed the <max_recs> setting from dedimania.xml to insure that only the Server and player MaxRank values from the Dedimania master server are used, and to avoid confusion
- resetting the challenges list cache at the start of each challenge is now configurable via new rasp.settings.php setting $reset_cache_start (default: true)
- the PHP memory limit for XASECO2 is no longer set to 50 MB but to 128 MB (the PHP default) unless it is already at least that size (thanks Electron)
- updated the GBXDataFetcher module to the latest version

### Bug fixes in the v1.16 release of XASECO:

- when a map isn't in the database yet, in some situations its name could be stored with stripped colors/formatting – fixed

### New features and other changes in the v1.15b release of XASECO:

- rewrote the GBXDataFetcher module completely to correctly process ManiaPlanet maps and replays – the new GBXChallMapFetcher and GBXReplayFetcher classes are not compatible with the old GBXChallengeFetcher and GBXReplayFetcher ones, but a new GBXChallengeFetcher wrapper class is included for backwards compatibility with third-party plugins
- small update to the TMXInfoFetcher class to support 24-char UIDs
- removed the obsolete ReplayParser class

### Bug fixes in the v1.15b release of XASECO:

- two tiny fixes in Auto TimeLimit handling and /tmxinfo
- the error checking in the TMXInfoSearcher class is slightly too strict – fixed

### New features and other changes in the v1.15 release of XASECO:

- implemented several security enhancements to prevent unauthorised use of chat commands
- in multi-page windows all pages are filled up with empty rows to the same number of rows as the first page to ease browsing (except when using the old TMN-style windows)
- on TMF, the /jukebox, /add, /admin add and /admin addlocal commands now check the chosen track against the server settings and ignore it if it doesn't match
- new support for the Dedimania MaxRank system:
  - the default MaxRank is 30, meaning that players normally cannot attain a record outside the top-30
  - when a server MaxRank has been upgraded (still to be fully implemented by Slig) then all players on that server can attain records up to that larger rank
  - when a player's MaxRank has been upgraded (ditto) then that player can attain records up to his/her rank, or the server MaxRank if that is still larger
  - /dedirecs and /dedisectms show all known records for a track, including those outside the top-30
  - /dedilast and /dedirange also operate on the last known record, even if that is outside the top-30
  - the /dedistats output includes the Server MaxRank and your player MaxRank
- a fatal error is now reported if no masteradmin is configured in config.xml
- added an updatepanels.php script to the DOCS/ directory to allow updating all players' panels of a given type to a new template
- added more logging, including transaction IDs, of copper transactions
- new onDediRecsLoaded event to indicate that the Dedimania records for a new track have been received from the master server (thanks undef.de)
- the checks why Dedimania records are ignored on a track have been improved, and the reasons are now logged always (not just in debug mode)
- improved error checking and handling in the Dedimania system and the local database plugin
- deployed updated web_access.inc.php for Dedimania communication (thanks Slig)
- added a dynamic idle period to the main loop in order to reduce the CPU load if system usage allows it (thanks oliverde8)
- the game mode values are now available as constants Gameinfo::RNDS (0), TA (1), TEAM (2), LAPS (3), STNT (4), CUP (5)
- the game state (racing or scoreboard) is now maintained in $aseco->server->gamestate with constants Server::RACE and Server::SCORE (thanks undef.de)
- improved error reporting in the updated TMXInfoFetcher and TMXInfoSearcher classes
- this release requires the latest server build 2011-02-21

### Bug fixes in the v1.15 release of XASECO:

- in Laps mode, the checkpoints panel isn't updated on the first passage through the finish when a previous best lap time is already known – fixed
- UTF-8 characters in (master)admin/operator titles in adminops.xml are not processed correctly – fixed (thanks TheBigG)
- on TMF the /dedisectms header shows the maximum number of local records instead of Dedimania ones – fixed
- /dedipb causes PHP warnings for a player without Dedimania record on a track with fewer than the maximum number of records – fixed
- tiny code and typo fixes discovered while creating XASECO2

### New features and other changes in the v1.14 release of XASECO:

- new support for TMF relay servers:
  - on the master server, relays are now registered separately rather than considered spectating players
  - on a relay server, the start-up log includes the login and nickname of the master server it relays to
  - new /admin relays command to display (on the master server) the list of connected relay(s), or show (on a relay server) its master server
  - the /admin server output is reorganized to make room for a line about the server's master/relay status on the first page
  - on a relay server, the /server output includes the master server's login/nickname in place of the track count
  - on a relay server are disabled:
    - commands (e.g. /jukebox), events (e.g. checkpoints and finishes) and functionality (e.g. player reranking) that make no sense on a relay
    - commands (e.g. /recs) and functionality (e.g. personal bests) that require information from the master server's database
    - logging of chat messages from the master server (but they are still shown)
  - on relay servers, plugins plugin.autotime.php, plugin.matchsave.php, plugin.rasp_votes.php, chat.dedimania.php and plugin.dedimania.php must be disabled, and third-party plugins may not operate correctly (e.g. Fufi's Menu is fine, but Fufi's Widgets won't work) – you may want to disable plugins such as chat.records.php, chat.records2.php, plugin.checkpoints.php, etc. too, as all their commands are disabled anyway
- improvements in the Dedimania plugins due to API enhancements (thanks Slig):
  - identical logins from different games (e.g. TMN ESWC vs. TMU/TMF) are now associated correctly with their records in relevant commands, new/improved/secured/equalled chat messages, and the reports before and after each track
  - when a login that is banned from Dedimania joins the server, this is announced with a general chat message, and finishes by that login are ignored (you may also want to activate the Dedimania global blacklist in rasp.settings.php to prevent them from joining in the first place)
- on TMF, the challenge list cache is now also refreshed upon external changes (i.e. by remote controllers) to the server's track list
- /admin setgamemode checks whether the game mode is actually being changed, and mode changes are now taken into account when restarting (thanks undef.de)
- the XML parser (parseXml in xmlparser.inc.php) has a new option to preserve UTF-8 encoding on extracted strings (for historical reasons the default is `false`), so now any plugin calling the parser can control UTF-8 encoding
- a new aseco.php configuration definition CONFIG_UTF8ENCODE controls whether UTF-8 encoding on strings in config.xml is preserved (default `false` as above) – config.xml setting `<welcome_utf8encode>` is now obsolete
- tagged all generic warning/error messages from the dedicated server with the invoking method
- all included HTML documentation now passes the W3C validatator

### Bug fixes in the v1.14 release of XASECO:

- the challenge list cache isn't always properly refreshed – fixed (thanks jimos94)
- when XASECO is configured to use the global Dedimania blacklist on a server that didn't use it before, the initial bulk merge doesn't work – fixed (thanks soehest)
- merging the global blacklist causes a bogus warning – fixed

### New features and other changes in the v1.13 release of XASECO:

- new /ignore command to start a chat-based vote to ignore/mute a player – usage and configuration are analogous to /kick, so see the v0.84 release notes for more info
- new /lastwin command (via chat.lastwin.php) to re-open the multi-page window that was most recently closed; on TMN it's opened at the first page, on TMF at the current page – single-page windows are not stored with the player data so those cannot be re-opened
- implemented a challenge list cache mechanism to improve the speed of all /list lists (thanks xai), /best, /worst and /summary, especially on servers with a large number of tracks
- the speed of /toprecs, /topsums and the calculation of all players' server ranks is further improved by optimized MySQL interaction, in addition to the above cache mechanism
- updates for the (TMF-only) music server plugin (thanks undef.de):
  - for http music servers, spaces and other special characters in the server path and/or song filename (and optional subdirectory) are now supported
  - after restarting a track, followed by the scoreboard and ChatTime countdown, the current song is now correctly shown
  - duplicate song removal is handled a litte better
  - upon XASECO shutdown, server music is disabled (thanks Terron)
- rewrote /admin prev and /admin nextenv using the jukebox system so they keep working when tracks are jukeboxed
- new and updated internal events:
  - new onVoteUpdated event for handling the new TMF VoteUpdated callback (requires the latest server build 2011-02-21)
  - new onTracklistChanged event to signal changes to the track list, passing along an action string ('add', 'remove', 'rename', 'juke', 'unjuke', 'read' & 'write') and the pertaining track filename, or null for the 'read' & 'write' actions (thanks undef.de)
  - updated onJukeboxChanged event with action strings 'previous' and 'nextenv'
- implemented a time-out mechanism in the connection of XASECO to the dedicated server (thanks La beuze):
  - the mechanism allows you to (re)start the dedicated server and XASECO at the same time (or right after eachother) from the same script, and XASECO will keep retrying to connect until the server reaches status 4 (Running - Play), or the time-out is exhausted
  - this is especially useful on servers that take a long time to fully start up due to a large number of tracks
  - the time-out (in seconds) is configurable via new config.xml setting `<tmserver><timeout>` – a warning is logged when it is missing
  - the GbxRemote modules have been updated to accommodate this connection time-out
- improved detection of warm-up phase
- enhanced the sorting order of equally-finished players in the rounds reports (Rounds/Team/Cup mode) to match that of the game (thanks .anDy)
- the speed of /best, /worst, /summary and /stats is improved through optimization of the underlying get_recs function (thanks undef.de)
- improved initialisation sequence (and its error handling) of the main program
- on TMF, new 'avatar', 'language' and 'teamid' members in the Player object

### Bug fixes in the v1.13 release of XASECO:

- /admin delrec doesn't work since v1.12 – fixed (thanks Ouwe)
- when using a player ID after /best, /worst, /summary and /stats, that player's records aren't found since v1.12 – fixed
- the help messages for /donate and /admin pay don't display correctly – fixed (thanks xai)
- when using NewRules in Rounds or Team modes, /server shows the normal points limit – fixed, now the NewRules points limit is shown (thanks undef.de)
- when there are no ranked players, /toprecs and /topsums produce gibberish output and PHP warnings – fixed
- /topwins causes PHP warnings for an empty players table – fixed (thanks relaxedracer)
- mysql_query SELECT results aren't always properly freed up with mysql_free_result – fixed

### New features and other changes in the v1.12 release of XASECO:

- new database and query optimizations:
  - these database optimizations are automatically applied once the first time this release is run, but will take a while depending on the size of the database and the speed of your MySQL server, so be patient as they could easily take several minutes (especially the 'rs_times' changes) – interrupting this process could result in a corrupt database, so... don't
  - the Score fields in the 'records' and 'rs_times' tables are converted from MediumInt to Int, increasing the maximum race time from 140 minutes to 596 hours
  - the 'records' Id, 'rs_times' ID and 'players' TimePlayed fields are also increased to Int, and the 'rs_karma' Score field is reduced to TinyInt
  - the keys on the 'records' and 'rs_times' tables are reorganized and expanded to improve the speed of various queries on those tables
  - RASP's clean-up of unused 'records' and 'rs_times' entries at start-up now only happens if `$prune_records_times` in rasp.settings.php is true, resulting in faster start-up
  - the speed of this clean-up is improved by different queries and related processing, and it is logged in more detail
  - preparation of the player stats panels at the scoreboard is sped up with an improved query and related processing
  - the speed of the /server and /nations commands is improved by different queries and related processing
  - the speed of the /topdons command is improved by an appropriate key on the 'players_extra' table
  - you can verify the result of all conversions against the MySQL schema in the localdb/*.sql files using SHOW CREATE TABLE queries or the 'mysqldump --no-data' command
  - XASECO's main tables are created automatically the first time this release is run, analogous to RASP's 'rs_*' tables, thus simplifying installation
  - the 'id' member of the Player object (holding the dedicated server's PlayerId value for a player) is renamed to 'pid' and 'id' now contains the database id from the 'players' table, analogous to the Challenge object – this eliminates most player ID queries
  - thanks to Tyrann for providing dumps of a large database to analyze & test with
- new and updated internal events (thanks undef.de):
  - new onDedimaniaRecord event to indicate a new/improved/secured Dedimania record, including its position – note that a Dedimania record is not official until confirmed after the end of a track
  - the onLocalRecord event also includes a new pos(ition) field
  - new onJukeboxChanged event to signal changes to the jukebox, passing along an action string ('add', 'clear', 'drop', 'play', 'replay', 'replay', 'restart' & 'skip') and the pertaining track data, or null for the 'clear' action
  - new onMusicboxReloaded event to alert that the music server config file (musicserver.xml) was reloaded via /music reload
  - new onDonation event to indicate that a new donation was completed, including login and coppers amount
  - on TMF, restarting when at least one player already has a finish time or a score results in the scoreboard and ChatTime countdown, thus allowing time for the normal onNewChallenge and onEndRace events instead of the onRestartChallenge one – for instant restarts the latter is issued as before, and the two restart types are logged distinctly
- new support for sector times (not to be confused with sector records, as offered by third-party plugins):
  - new /sectms command to display the sector times (if available, as they're only being stored since v1.06) for all local records on the current track
  - new /dedisectms command to display the sector times for all Dedimania records on the current track
  - on TMN there's room for the first 9 sectors, on TMF for the first 12 sectors of each record – a '+' indicates when there are more sectors than can be displayed
- eliminated checkpoints panel toggling due to temporary spectator status changes at the end and start of tracks, thus significantly reducing outgoing ManiaLink traffic during that period – this also reduces the problem with stalled panels and widgets
- PlayerFinish callbacks are now ignored when not in status 4 (Running - Play), again reducing processing overhead during the end and start of tracks
- once a track is being replayed (after /replay or /admin replay), then /playtime and the total playtime message at the end of that track will include the number of replays and the overall playtime (thanks Milenco)
- at start-up the dedicated server connection, LocalDB and RASP messages are now logged with timestamps
- updated the stripColors function to (even) better reproduce the way the game strips incomplete tags (thanks Slig)
- all Dedimania communication now occurs via port :8002 only, and you should remove the RPC4/server.php link from dedimania.xml
- improved debug logging in the Dedimania plugin
- upon shut down (via the /admin commands) or Fatal Error, all ManiaLinks on all connected clients are cleared (thanks Terron)
- various tweaks and corrections to plugin.matchsave.php
- retired chat.vote.php with its obsolete /vote and /score commands – you can manual delete the empty 'votes' table via a DROP TABLE query

### Bug fixes in the v1.12 release of XASECO:

- the onLocalRecord event is also issued for equalled records – fixed
- the /list & /autojuke nofinish & norank commands cause PHP warnings for players without finished tracks – fixed
- missing title or artist tags of .OGG songs can cause PHP warnings – fixed
- the TMXInfoFetcher can cause PHP warnings upon empty results from TMX API calls – fixed

### New features and other changes in the v1.11 release of XASECO:

- new /xaseco command to display a variety of info about your XASECO installation, including uptime, the welcome message (TMF-only), and the masteradmin(s) – the XASECO version is no longer in the /server output
- new /mod command (based on an updated GBXChallengeFetcher class) to show the (file)name for the current track's mod
- if followed by the url (alias loc) parameter, /song and /mod will also display the song's or mod's locator URL (if available), hyperlinked for easy download
- an optional search string after /music list will now list only songs with that string in their filenames or, if <cache_tags> in musicserver.xml is enabled, in the title or artist tags of .OGG songs – the song IDs shown are the original (now possibly non-sequential) ones from the complete list so that jukeboxing still works correctly
- the /chatlog, /pmlog and /admin pmlog output can show the timestamp of each message, configurable via new config.xml setting `<chatpmlog_times>` (default: True)
- new /list option: /list novote to display all tracks the player didn't karma vote for
- new /autojuke option: /autojuke novote to automatically jukebox the first available track from the /list novote selection
- /list karma 0 now correctly lists all tracks without karma votes as well as those with average karma value 0 – previously this command would list tracks with negative or zero karma but not those without any votes
- new `$jukebox_adminnoskip` option in rasp.settings.php to not skip tracks (if `$jukebox_skipleft` is true) that were jukeboxed by admins (of any tier) which left the server
- when a player whose IP address was banned re-enters after the dedicated server was restarted, [s]he is now re-banned instead of just kicked – this insures the dedicated rather than XASECO will keep the player out on subsequent connect attempts, at least until another restart
- updated the Dedimania system to use only the new :8002 communication port (remember to open this port on your firewall/router as well) – the load is now internally distributed on the Dedimania master server
- on TMF, the /stats output now includes the player's client build/version
- changed/added common Rounds points systems on TMF, with f1gp replaced by:
  - f1old: Formula 1 GP Old – 10,8,6,5,4,3,2,1,...
  - f1new: Formula 1 GP New – 25,18,15,12,10,8,6,4,2,1,...
- player wins in Stunts mode are now determined and attributed (thanks nouseforname)
- changed the public appreciation message for large donations to prevent a fraud scheme
- optimized MySQL interaction for calculation of players' server ranks (thanks Nanir)
- upon a Fatal Error, an onShutdown event is issued just before shutting down (thanks nocturne)
- the player/spectator and voting values in the $aseco->server object are refreshed at each track switch in case they've been modified (thanks undef.de)
- the Auto TimeLimit and music server plugins now log an initialization message before loading their respective .xml configs
- deployed updated web_access.inc.php for Dedimania communication (thanks Slig)
- removed all ShareMania support as the site was retired

### Bug fixes in the v1.11 release of XASECO:

- changes in the GameInfo structure aren't detected upon restarts, only upon track switches – fixed
- players that should have been kicked (e.g. for an obsolete client) but weren't, can cause PHP warnings – fixed, and their finishes are ignored
- in Laps mode when /dedicps is active, local records are not detected – fixed (thanks blue)
- there's a global $linelen conflict between plugin.chatlog.php and plugin.msglog.php – fixed
- /list karma is allowed while $feature_karma in rasp.settings.php is false – fixed
- in rare situations /best, /worst and /list best|worst can produce gibberish output – fixed
- following /list with /style ## or any /*panel ## command can cause a PHP warning – fixed
- an XML/RPC communication problem with the Dedimania server can cause a PHP warning – fixed

### New features and other changes in the v1.10 release of XASECO:

- new support for TMF client version checking upon player connects:
  - when players connect on TMF, it is now possible to check their client version for a minimum number
  - if new config.xml setting `<player_client_version>` is empty, checking is disabled; otherwise it must be a valid TMF version number, 2.11.11 or higher
  - if checking is enabled and the player's client version is less than the required number (where the empty version of the initial TMF releases counts as 2.11.11), then the player is kicked with appropriate log and chat messages, and the kick dialog also contains a suitable message (configurable in config.xml)
  - cheating currently happens only with v2.11.11 clients, so in order to prevent potential cheaters (along with other players that haven't upgraded yet) from joining, you can choose to set `<player_client_version>` to 2.11.12 or higher
  - when admins of any tier connect on TMF, it is also possible to check their client version for a separate minimum number
  - if new config.xml setting `<admin_client_version>` is empty, checking is disabled; otherwise it must be a valid TMF version number, 2.11.11 or higher
  - if checking is enabled and the admin's client version is less than the required number (where an empty version again counts as 2.11.11), then the admin is similarly notified and kicked
  - recent client and server versions prevent login spoofing, so it's recommended to set `<admin_client_version>` to 2.11.19 or higher and have all your server's admins upgrade if necessary
  - note that digitally distributed editions of TMF are not easily upgraded with the manual patches – e.g. the Steam edition is currently at 2.11.16 – so be careful about setting the versions too high
- new /settings command to display your personal settings, or those of any player (login or ID) if you're an admin with the new chat_settings ability – the settings are: the /cps and /dedicps values, and on TMF also the /style, /admin panel, /donpanel, /recpanel and /votepanel values (if the pertaining plugins are enabled)
- new /plugins command to display the list of currently active plugins
- new /admin delrec command to delete the specified record (1 - $maxrecs) for the current track, delete the corresponding 'rs_times' entries and, if necessary, move the next best time in as the new last record
- the number of times a track can be replayed via /replay votes is now configurable via new votes.config.php setting `$replays_limit` (default 0 = unlimited)
- admins with the new chat_jukebox ability can now use the /jukebox command even if `$feature_jukebox` in rasp.settings.php is false
- on TMF the /recs output can optionally include the players' logins, configurable via new config.xml setting `<show_rec_logins>` (default: True)
- on TMF the /dedirecs output can optionally include the players' logins, configurable via new dedimania.xml setting `<show_rec_logins>` (default: True)
- new /dedistats command to display a few Dedimania statistics for the current track and, only on TMF, a link to the track's Dedimania page with all its records
- for TMF global blacklists that contain optional <account> fields with values 'United' or 'Nations', the merge feature can now process only the United logins, configurable via new rasp.settings.php setting `$globalbl_united` (default: false)
- a log message now indicates when a Dedimania record is ignored because the pertaining login is banned from Dedimania
- on TMF the Dedimania plugin now verifies that the configured server login is the same as the actual server login
- the /xlist command can now search TMX for track names using multiple words (thanks bmandk)
- added new common Rounds points system on TMF:
  - superstars: Superstars – 20,15,12,10,8,6,4,3,2,1,...
- reduced the MySQL reconnect polling frequency at an empty server to once every second
- optimized the MySQL queries for the /list nofinish and /list norank commands (thanks Pesky)
- the 'GameData/Tracks/Challenges/TMX/' and '.../TMXtmp' directories are now created automatically if they don't exist when starting XASECO for the first time (this also simplifies the installation procedure by one step)
- arguments to /admin clearhist are clipped at $buffersize
- usage of the dedicated server's built-in commands /version and (TMF-only) /serverlogin is now logged as such
- new donate panel BelowCPListRM and record panel RightBottomRM, courtesy of sebik1992 (RoundMania 90k)

### Bug fixes in the v1.10 release of XASECO:

- restarting XASECO triggers required checkpoints warnings for the ongoing race – fixed, the warnings now get enabled after the end (or a restart) of the current track
- after merging a global blacklist, the local blacklist is saved without the newly blacklisted logins – fixed
- blacklisted logins of players that never visited the server (e.g. from a merged global blacklist) can't be unblacklisted – fixed

### New features and other changes in the v1.09 release of XASECO:

- new support for a global blacklist on TMN and (especially) TMF, because at start-up the TMF server now properly loads the global blacklist specified in dedicated_cfg.txt entry <blacklist_url> and merges it with the local blacklist:
  - new /admin mergegbl command to merge a (possibly updated) global blacklist with the server's blacklist at other times than just start-up
  - the default blacklist is configurable via rasp.settings.php setting `$globalbl_url`, and should be the same as <blacklist_url>
  - the /admin mergegbl command optionally accepts a http[s] URL to load another global blacklist, and access to the command is defined in adminops.xml as usual
  - when a MasterAdmin connects, the default global blacklist can automatically be merged, configurable via rasp.settings.php setting `$globalbl_merge` (default: false)
  - after merging, log and chat messages indicate the number of newly blacklisted logins, and the local blacklist is saved just like after a manual /admin black command
- new support for player access control by nation (TMN) or zone (TMF) becomes available when plugin.access.php is enabled (uncommented) in plugins.xml, offering the following features:
  - the control mechanism is inspired by Apache's mod_access and is configured via access.xml, containing the following directives:
    - the Order section, defining the order in which the other two sections are processed
    - the Allow section, containing one or more From fields to specify nations/zones that are allowed access
    - the Deny section, containing one or more From fields to specify nations/zones that are denied access
    - the From values are case-sensitive, upper- and lowercase characters must match exactly with the players' nations/zones you want to control
    - the catch-all value for either the Allow or Deny section is 'all' (lowercase), and in that case this section cannot contain other From fields
    - for more information and examples on these directives, see the comments in access.xml and the aforementioned mod_access page
  - on TMF, a match on a specified zone will also match its subzones, e.g. a match on "Netherlands" will include all Dutch provinces too
  - denied players are kicked with appropriate log and chat messages, and on TMF the kick dialog also contains a suitable message, which can be configured in access.xml
  - the new /admin access command offers the following options:
    - help: Displays help information
    - list: Displays current access control settings
    - reload: Reloads updated access control settings
  - player access control is disabled upon a configuration error in (re)loading access.xml
- new /cpsspec command (TMF-only) to relay the checkpoints panel of the player you're spectating to your own screen:
  - this feature may have some performance impact on busy servers, so it's your choice to enable it via new config.xml setting `<enable_cpsspec>` (default: False)
  - the /cpsspec command toggles tracking the checkpoints of a spectated player
  - if tracking is enabled and you're spectating another player in Follow or Replay camera mode, the checkpoints panel of that player is also shown on your screen, but only if the spectated player has enabled checkpoints tracking him/herself
  - the /cpsspec status is intentionally not saved among a player's personal settings, so it is off upon reconnects
- updates for the music server plugin (TMF-only):
  - the song list can now be automatically shuffled at start-up and upon the /music reload command (configurable via new musicserver.xml setting `<auto_shuffle>`)
  - new /music autoshuffle command to change the automatic shuffle setting; the /music settings output also includes the AutoShuffle value
- on TMF, released the player slot when changing a player into spectator in /admin forcespec, /afk and action 1 (Set to Spectator) for a detected cheater
- in Laps mode, each lap time is now stored in the 'rs_times' table (if `$feature_stats` in rasp.settings.php is true, of course)
- UTF-8 encoding the welcome message, necessary on some systems to display accented characters correctly, can now be configured via new config.xml setting `<welcome_utf8encode>` (default: True)
- on TMF when rank limiting by the full Jfreu plugin is in effect, the kick dialog echoes the explanatory chat message sent to a connecting player who is kicked due to a bad rank
- on TMF when using the /bootme command, the kick dialog can optionally display a 'goodbye' message if new rasp.xml message `<bootme_dialog>` exists
- in the XASECO start-up sequence the onSync event is now issued before the onPlayerConnect events for all current players so that plugins are initialized in a more logical order
- during XASECO start-up global voting explanations (`$global_explain = 2` in votes.config.xml) are temporarily inhibited to prevent a message flood on busy servers
- updated the stripColors function to strip out incomplete color codes before the end of the string, and add an option so that log output doesn't show '$$' for '$'
- in the local database the 'Name' column in table 'challenges' and the 'NickName' column in table 'players' have been increased to 100 characters – for new XASECO installations the updated columns are defined in the localdb/aseco.sql file as usual, and for existing installs they will be modified automatically the first time this release is run
- minor improvements in the GBXChallengeFetcher, GBXReplayFetcher and ReplayParser classes
- this release requires the latest server build 2009-05-25

### Bug fixes in the v1.09 release of XASECO:

- some players with numeric logins still confuse the player ID mechanism – now really fixed
- in Laps mode, improved laps aren't always checked for new Dedimania records – fixed
- the global voting explanation upon a player join doesn't appear in the TMF message window when `$vote_in_window = true` – fixed
- on some OSes a repetitive but harmless warning about "Invalid CRT parameters" in GbxRemote can occur – fixed

### New features and other changes in the v1.08 release of XASECO:

- improved checkpoints & finish processing, anti-cheat testing and Dedimania records handling (if plugin.checkpoints.php is enabled in plugins.xml)
- on TMF, local and Dedimania records that, for any reason, don't have the correct number of checkpoints are ignored with a logged warning (if plugin.checkpoints.php is enabled)
- on TMF, used the new TMF BeginChallenge and EndChallenge callbacks (instead of BeginRace and EndRace) to trigger the onNewChallenge and onEndRace events, respectively
- on TMF, the onNewChallenge and onEndRace events are no longer issued when restarting a track; this prevents, for example, losing the next track from the jukebox and the needless repetition of all messages sent at the start and end of a track – instead a new onRestartChallenge event is issued
- added the onPlayerIncoherence, onTunnelDataReceived and onManualFlowControlTransition events for handling the existing TMF PlayerIncoherence, TunnelDataReceived and ManualFlowControlTransition callbacks, respectively
- checkpoints in Dedimania records are now sent as a comma-separated string to the central Dedimania system in order to reduce data traffic
- on TMF, a new `$specPlayFirst` configuration variable (default: false) in mistral.idlekick.php can be used to first set an idle player into spectator mode (free camera) instead of kicking him/her right away
- removed the 1 second delay to set free camera mode in /admin forcespec, /afk and action 1 (Set to Spectator) for a detected cheater
- challenge names with embedded newlines no longer cause malformed messages and such (due to use of a new stripNewlines function)
- a new stripSizes function that strips only the size-related tags ($n, $w and $o) from strings, is available as alternative to stripColors
- added the new ReplayParser class for future use with the Dedimania system
- updated the GbxRemote modules to the latest versions from Nadeo
- minor code tweaks in many parts of the system
- this release requires the latest server build 2009-05-04

### Bug fixes in the v1.08 release of XASECO:

- an ampersand character (&) in any .xml file crashes the XML parser – fixed this long-standing issue (thanks Assembler Maniac)
- non-ASCII characters in the <welcome> message in config.xml cause the entire message not to be displayed – fixed (thanks dragu)
- using /style # stores the number instead of the style name in the database as the player's preference – fixed (thanks nouseforname)
- players with numeric logins confuse the player ID mechanism – fixed (thanks n4p1)

### New features and other changes in the v1.06 release of XASECO:

- new support for local checkpoints storage:
  - a new 'Checkpoints' column has been added to the local database tables 'records' and 'rs_times', and checkpoints data will be stored for all newly driven records and finish times
  - for new XASECO installations the new columns are defined in the localdb/aseco.sql and rasp.sql files as usual, and for existing installs they will be added automatically the first time this release is run
  - the Repair records script has been updated to handle the extra columns
- functionality of the /cps command is changed analogous to /dedicps:
  - checkpoint references are stored for all players (according to their individual preferences) only at the start of a track, not when entering the /cps command or when the player (re)connects
  - with no parameter (/cps) the player's own local record on each track is selected or, if none is set, the last record on the pertaining track
  - /cps {1-maxrecs} selects local record 1-maxrecs on each track or, if unavailable, again the last record
  - /cps off disables checkpoints tracking altogether
  - if the checkpoints for the chosen local record are invalid (empty, or the last checkpoint doesn't match the finish time) then no record is used as initial reference during that track for the pertaining player(s)
  - checkpoint differences to the chosen reference are now shown from the first run through the track, rather than the second
  - if /dedicps is not set to off, local record tracking is superseded by Dedimania record tracking as per that setting
  - the default setting for `<auto_enable_dedicps>` in config.xml is now False
  - as usual, once a player gains a better finish time than the chosen reference, the checkpoints panel (TMF) or pop-up (TMN) will use those corresponding checkpoints for further updates during the current track
  - explanations why the TMF checkpoints panel doesn't appear immediately when /cps is activated (Stunts mode, spectating, and warm-up phase) are no longer shown
- new support for storing donations and personal settings:
  - a new 'players_extra' table has been added to the local database to store donation totals (on TMUF servers) and setting preferences for each player
  - stored settings are: the /cps and /dedicps values, and on TMF also the /style, /admin panel, /donpanel, /recpanel and /votepanel values
  - for new XASECO installations the new table is defined in the localdb/extra.sql file, and for existing installs it will be added automatically the first time this release is run
  - when a new player first connects, an entry with the server's default values is created in this table, but changed settings are subsequently stored and reloaded each time the player revisits
  - the 'donations' column is updated every time a player donates coppers to the server
  - on TMUF servers, the /stats output now includes the player's donation total
  - new /topdons command to display the top-100 of players that donated the most coppers
- new support for player stats panels during the scoreboard on TMF:
  - on TMF, this feature is configured via new config.xml setting `<sb_stats_panels>` (default: False)
  - enabling the player stats panels during the scoreboard automatically disables the rank chat messages shown at the same time
  - the panel is displayed in the lower-left corner of the scoreboard screen, and is defined by the panels/StatsNations.xml (for TMNF servers) and StatsUnited.xml (for TMUF) templates
  - the panel contains each player's server rank, record average, records total, wins total, session play time, and donation total (on TMUF servers)
  - computing the record totals can be a bit time consuming depending on the number of challenges, players and records in the database, so displaying all scoreboard panels may be slightly delayed
- when a player leaves, the chat message (if either Jfreu plugin is enabled) and the log message now include the amount of time played in that session
- during XASECO start-up, player join messages are temporarily inhibited to prevent a message flood on busy servers
- on TMF, the /server and /admin server output now include the server's ladder points limits
- on TMUF, donate panels are temporarily disabled during the scoreboard at the end of a track, as they aren't immediately responsive anyway
- on TMF in Rounds mode, Dedimania records on lap tracks are now ignored if RoundForcedLaps is not set to the default value 0
- on TMF in Cup mode, commands that restart the current track or switch to the next or previous one now preserve the current match scores
- new /n1 command to send a Nice One message; also, the /gr message no longer includes the word 'All' by default
- added the onEcho event for handling the TMF Echo callback

### Bug fixes in the v1.06 release of XASECO:

- using /dedicps to track checkpoints of existing Dedimania records results in new/improved/secured records not registering in some situations – fixed
- when a player joins during a Laps mode race and completes a lap, an invalid record is registered – fixed (thanks princemichi)
- in Laps mode the finish times of complete races are stored in the 'rs_times' table – fixed, no times are stored in Laps mode
- if <display> in localdatabase.xml is False, other records related commands and features don't work either – fixed
- when using a local path for the music server, and with some http servers, the .OGG comments aren't read from the song files – fixed (thanks HaveDerf_TMu)

### New features and other changes in the v1.05b release of XASECO:

- updated the Dedimania system to randomly choose between the existing :8006, :8007, :8011, :8012 and :8013 and new :8016 through :8021 communication ports (remember to open those ports on your firewall/router as well) in order to distribute the load across more Dedimania servers
- the number of lines in the TMF system message window can now be easily modified with the $winlen variable at the start of plugin.msglog.php
- refined UTF-8 string validation function (thanks Slig)

### Bug fixes in the v1.05b release of XASECO:

- Dedimania records aren't reliably registered due to the new anti-cheat tests – fixed
- Dedimania records on tracks that don't have the full <max_recs> entries aren't registered unless they're better than the existing last record – fixed (thanks lille79)
- in case of Dedimania connection problems persisting across track changes, records data from the previous track is still used on the next one – fixed (thanks schmidi)
- restarting a track causes no further Dedimania records to be registered on that track – fixed
- restarting XASECO triggers the anti-cheat tests for the ongoing race – fixed, the tests now get enabled after the end of the current track
- with the music server configured for local files, /music current and /music settings don't show the song's info – fixed
- on Windows, the /music stripdirs option doesn't work correctly on local files – fixed

### New features and other changes in the v1.05 release of XASECO:

- new checkpoint sanity checks to prevent cheated records (if plugin.checkpoints.php is enabled in plugins.xml):
  - all checkpoint times must be larger than zero
  - each checkpoint time within a player's run must be larger than the preceding one
  - all checkpoint indexes must be zero or larger
  - each checkpoint index within a player's run must be 1 larger than the preceding one
  - the last checkpoint time must be equal to the finish time
  - when any of these requirements isn't met, one of the following actions is taken on the pertaining player, configurable via new config.xml setting `<cheater_action>` (default: 0):
    0: Ignore; 1: Set to Spectator (only on TMF, falls back to 0 on TMN); 2: Kick; 3: Ban (implies Kick); 4: BlackList & Kick; 5: Blacklist & Ban
  - new/updated local and Dedimania records that fail one or more of the aforementioned checks are not stored (even if the above action is 0)
- new Dedimania sanity checks:
  - keeping any of the three <masterserver_account> fields in dedimania.xml at a default or empty value results in a fatal error
  - records are no longer processed if they are less than 6 seconds
  - records are no longer processed for tracks with an author time of less than 8 seconds
- updates for the music server plugin (TMF-only):
  - song files can now be stored locally on the TM server in a path under its GameData/ directory, e.g. Music/, without the need for a remote http server
  - if <auto_nextsong> is disabled a jukeboxed song will no longer be repeated on all subsequent tracks until another song is jukeboxed
- a new config.xml setting `<display_checkpoints>` (default: True) can be set to False to permanently disable checkpoint pop-ups (TMN) or panels (TMF) for all players while still tracking the checkpoints data internally – this allows you to keep plugin.checkpoints.php enabled for anti-cheat checks and the Dedimania system when high player counts cause performance/crash problems
- a global congratulations message can be displayed instead of the regular personal one at a player's win of a track, if that win count reaches a multiple configured via new config.xml setting `<global_win_multiple>` (default: 50)
- if plugin.rpoints.php is enabled on TMF, it's now possible to initialize the TM server with a default Rounds points system at start-up via new config.xml setting `<default_rpoints>` – the value can be a custom system with specified values (X,Y,...,Z) or a common system by name (f1gp, motogp, etc), just like the parameters to the /admin rpoints command; if empty, the standard points system is initialized
- on TMF, automatically setting a player that uses the /afk command into free spectator mode can now be configured via new config.xml setting `<afk_force_spec>` (default: True)
- automatically adding the current IP address for newly added admins and operators can now be configured via new config.xml setting `<auto_admin_addip>` (default: True)
- new /admin autotime command to enable or disable the Auto TimeLimit feature dynamically (assuming plugin.autotime.php is enabled in plugins.xml)
- when restarting a track via a /ladder vote (with votes.config.php setting `$ladder_fast_restart = true`) or /admin restartmap, the Auto TimeLimit is no longer set to next track's value
- successful /donate and /admin pay copper transfers are now logged
- when adminops.xml is written out without any admin or operator entries, bannedips.xml without IPs, jfreu.bans.xml without temporary bans, or jfreu.vips.xml without VIP logins or teams, then a comment block to show the entry syntax is included instead
- if the GD/JPEG libraries are installed in PHP, the GBXChallengeFetcher class now flips the upside-down thumbnail image in a challenge into its upright format
- a message is logged when plugins.xml is being loaded at start-up
- this release requires the latest server build 2008-12-05

### Bug fixes in the v1.05 release of XASECO:

- /players <string> displays an erroneous window if the search string matches no players – fixed, a warning message is shown
- on TMF if plugin.panels.php is not enabled, TMX /add and chat-based votes result in crashes – fixed
- on TMN, running /admin helpall as an Admin (not MasterAdmin or Operator) locks up the client after the second page – fixed (thanks B.A.S.S.)
- a time-out on the version server at the up-to-date check gives an incorrect message – fixed
- some PHP constructs still cause silent notices during strict run-time checks – fixed more of them
- debug logging in the Dedimania system doesn't consistently use CRLF on Windows – fixed

### New features and other changes in the v1.04 release of XASECO:

- new support for custom Rounds points on TMF with the following features:
  - custom points in Rounds mode become available when plugin.rpoints.php is enabled (uncommented) in plugins.xml
  - new /admin rpoints command to list and set common points systems, as well as custom distributions, with the following options:
    - help: Displays help information
    - list: Displays available points systems
    - show: Shows current points system
    - <xxx>: Sets points system labelled <xxx>
    - X,Y,...,Z: Sets custom points system with specified values; X,Y,...,Z must be decreasing integers and there must be at least two values with no spaces
    - off: Disables custom points system
  - the following common points systems are included:
    - f1gp: Formula 1 GP – 10,8,6,5,4,3,2,1,...
    - motogp: MotoGP – 25,20,16,13,11,10,9,8,7,6,5,4,3,2,1,...
    - motogp5: MotoGP + 5 points – 30,25,21,18,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,...
    - fet1: Formula ET Season 1 – 12,10,9,8,7,6,5,4,4,3,3,3,2,2,2,1,...
    - fet2: Formula ET Season 2 – 15,12,11,10,9,8,7,6,6,5,5,4,4,3,3,3,2,2,2,1,...
    - fet3: Formula ET Season 3 – 15,12,11,10,9,8,7,6,6,5,5,4,4,3,3,3,2,2,2,2,1,...
    - champcar: Champ Car World Series – 31,27,25,23,21,19,17,15,13,11,10,9,8,7,6,5,4,3,2,1,...
    - simple5: Simple 5 – 5,4,3,2,1,...
    - simple10: Simple 10 – 10,9,8,7,6,5,4,3,2,1,...
  - note that any players finishing beyond the last points entry get the same number of points (typically 1) as that last entry
  - new /rpoints command to show the current points system
  - additional points systems can be added to `$rounds_points` at the start of the plugin
- an updated and optimized Auto TimeLimit plugin (plugin.autotime.php) by cyrus is now part of the standard distribution:
  - this plugin works only in TimeAttack mode, and defines the timelimit for each track dynamically based on the track's author time
  - the new autotime.xml file contains the plugin's settings to determine the new timelimit (multiplication factor, minimum, maximum and default); this file is loaded only once at start-up, rather than at every track switch
  - as before, a multiplicator of zero will disable the plugin
  - the new display setting controls whether to show a timelimit message in the TMF system message window, the chat window, or not at all; a similar message is always logged
  - the type of timelimit (new, min, max, default) is included in these messages
  - the timelimit is rounded down to seconds in the chat and log messages
  - when there are no active players, the default timelimit is applied because of the way the TM server instantly switches tracks with no opportunity to set a custom limit
- updates for the music server plugin (TMF-only):
  - the song filename extensions can now be excluded in any command that shows songs (configurable via new musicserver.xml setting `<strip_exts>`)
  - new /music stripexts command to change the strip extensions setting; the /music settings output also includes the StripExts value
  - new /music sort command to sort the song list alphabetically by song paths
  - the cache file for .OGG comments can be defined as read-only (configurable via new musicserver.xml setting `<cache_readonly>`)
- in the <ipaddress> fields in config.xml and adminops.xml, it is now possible: to specify class B (e.g. 12.34.*.*) and class C (e.g. 12.34.56.*) wildcards to allow for partial IP checks on admins with dynamics IPs; and to specify multiple comma-separated IPs and/or wildcards (e.g. 12.34.56.78,98.76.54.*)
- note to plugin authors: while the isMasterAdmin, isAdmin, isOperator and isAnyAdmin functions require a player object and check the IP address, new isMasterAdminL, isAdminL, isOperatorL and isAnyAdminL functions are now available that accept a login string (like before v1.03) and don't check the IP address
- significantly optimized calculation of all players' server ranks after each track
- if the Nation field in the player join/leave messages is 15 or more characters, it's abbreviated to the 3-letter country code
- changed the ManiaLink processing to (hopefully) reduce the risk of crashing at high player counts
- a new `<logina>` color is defined in config.xml and used for the admin titles in player join and other relevant messages, as well as admin logins in the /players, /admin players and /jfreu players output
- setting empty player, spectator and referee passwords produces the appropriate log and chat messages about disabling them
- the /admin setrefmode command without parameter now shows the current Referee mode
- the /admin forceshowall command has been renamed to /admin forceshowopp and its 'on' option to 'all'; further, the command now accepts a number (>= 2) to force showing that minimum number of opponents
- the /admin shutdown command will now shut down only XASECO (in order to permit restarts via the external start-up script), while the new /admin shutdownall command terminates both XASECO and the TM server
- the output of /admin players is limited to at most 5000 entries, and the memory limit for the XASECO PHP process is increased to 50 MB, in order to further reduce the chances of memory overruns
- if the Xdebug extension for PHP is installed, a fatal error will automatically log a stack trace
- the /music, /admin and /jfreu commands are now able to handle multiple spaces between their parameters

### Bug fixes in the v1.04 release of XASECO:

- players that instantly reconnect can have their win counts cleared – fixed
- /admin removeadmin and /admin removeop don't work when the <ipaddress> field for the pertaining login is set – fixed
- the /jfreu infomessages command is still boolean – updated the command to recognize the 2/1/0 values of the underlying `$infomessages` variable
- the Auto TimeLimit plugin doesn't work correctly when all connected players are spectating – fixed
- the Auto TimeLimit plugin doesn't work properly on servers with more than 500 tracks – fixed
- when a player doesn't have a Dedimania record but his/her local personal best is better than the last Dedimania record, /dedinext computes the wrong difference – fixed
- /admin setrefmode {0/1} doesn't work correctly – fixed
- /admin forceteam, /admin forcespec and /admin specfree are allowed on offline logins – fixed
- /admin forcespec doesn't always set the spectator into free camera – fixed
- in the music server plugin, messages referring to songs without .OGG comments are not formatted correctly – fixed
- on TMF, a newly connected player's ladder rank in the internal players list can be temporarily erased until he/she becomes official – fixed
- numerous PHP constructs cause silent notices during strict run-time checks – fixed most of them

## Older release notes