--- title: "Setting Up a Stats System (CSStats and Rankings)" excerpt: "How the AMX Mod X csx module and its stats plugins build a ranking from live play, where the csstats.dat file lives, the say /rank and /top15 commands, and how to tune what shows on death." category: "administration" tags: "stats, csstats" image: "" read_time: "8 min read" ---
A working rank system keeps players coming back — they want to climb. On CS 1.6 the standard, no-database way to do this is the csx module that ships with AMX Mod X plus its bundled stats plugins. It tracks kills, deaths, headshots and objectives, computes a rank, and shows a HUD summary when you die. No MySQL, no external service; the data lives in one file on the server.
Ranking is powered by the csx module, not a plugin alone. Check it is enabled in addons/amxmodx/configs/modules.ini (the line csx), then confirm at runtime from the server console:
amxx modules
csx must read running. If it is missing, ranking natives are unavailable and every stats plugin silently does nothing. The module is part of a normal AMX Mod X 1.9 install.
Two plugins do the visible work; add them to addons/amxmodx/configs/plugins.ini if they are commented out:
stats.amxx ; rank commands: /rank /top15 /stats statsx.amxx ; HUD stats shown to a player when they die
Load order is not critical here, but keep them below admin.amxx as usual — see plugins.ini load order. Change the map after editing, because plugins.ini is only re-read on map change or restart.
The rank database is a single binary file:
cstrike/addons/amxmodx/data/csstats.dat
Every player's accumulated kills, deaths, headshots, hits and objective actions live here, keyed by SteamID. Back this file up — losing it wipes every rank. A few cvars control how it grows and behaves; set them in amxx.cfg or a dedicated config:
csstats_maxsize 3000 // max number of players kept in the ranking csstats_reset 0 // set to 1 once to wipe the ranking, then back to 0 csstats_rank 1 // 1 = rank by an algorithm using K/D and more
Raise csstats_maxsize on a busy server or old players get pruned to make room; lower it if the file grows unwieldy. To wipe the ranking cleanly, set csstats_reset 1, change map once, then set it back to 0 so it does not wipe again on every load.
Once stats.amxx runs, players get chat triggers:
say /rank // your rank, kills, deaths, K/D, accuracy say /top15 // the server leaderboard say /stats // detailed personal stats say /statsme // same, alternate trigger on some builds
Advertise these in your MOTD or with an adverts plugin so players discover them. The leaderboard is what drives the competition, so make /top15 visible.
statsx.amxx shows the "you killed / were killed by" breakdown after each death, and it has its own cvars to control how much detail appears:
amx_statsx_mode 1 // 0 off, 1 normal HUD, 2 detailed amx_statsx_duration 12 // seconds the panel stays on screen amx_statsx_freq 2 // how often the round-end summary is shown
Keep the duration short; a stats panel that lingers into the next round annoys players. The weapon icons and names shown come from addons/amxmodx/configs/stats.ini, which maps each weapon to its display — leave it alone unless you add custom weapons.
Players will ask why their rank moved, so it helps to know the model. The csx ranking is not a raw kill count — it weighs kills against deaths, rewards headshots and objective actions (planting, defusing, hostage rescues), and normalizes so a player with 100 kills and 20 deaths outranks one with 200 kills and 250 deaths. Two consequences worth telling players: farming kills while dying constantly barely moves your rank, and objective play counts even when your K/D is mediocre. This is why csstats_rank 1 feels fairer than a pure frag ladder. If you would rather rank purely by kills, some builds accept an alternate value, but the default weighted model is what keeps a public server's ladder honest and is worth leaving on. The one thing that resets everyone's position is a wipe of csstats.dat, so guard that file.
stats.amxx is not in plugins.ini, or the csx module is not running. Check amxx plugins and amxx modules.csstats_reset was left at 1. Set it to 0 after a deliberate wipe.addons/amxmodx/data/, so csstats.dat cannot be saved. Fix the directory ownership.csstats_maxsize is too small for your traffic. Raise it.Play a round, get a kill, then type say /rank — your kill count should increment. Restart the server and check /rank again; if your numbers survived the restart, csstats.dat is being written correctly. Finally, confirm the death HUD from statsx appears and clears within the duration you set. For a database-backed ranking that survives across multiple servers you would move to an SQL stats plugin, but for a single box the csx system above is the reliable default.