Almost every moderation action on a CS 1.6 server starts with one thing: the offender's SteamID. You need it to ban the person rather than a name they can change or an IP they share with an ISP. This covers getting the ID while they are connected, digging it out of the logs after they leave, the non-Steam wrinkles, and turning the ID into a ban that survives a restart.
1. Live, from the console: status
The fastest method. In the server console or over RCON:
status
Each connected player prints a block like:
# userid name unique team # 12 "Nova" STEAM_0:1:12345678 CT 45 67ms
The unique column is the SteamID (STEAM_0:x:yyyyyyyy), and the leading #12 is the userid — the transient slot number you use for kick and RCON commands during this session. The SteamID is the stable identity; the userid resets every map.
2. Live, from in-game admin: amx_who
With AMX Mod X, an admin can run in chat or console:
amx_who
It lists every player with their name, SteamID (authid), current access flags and immunity. This is the admin-friendly version of status and it also tells you at a glance who else on the server has admin. It reads identities from configs/users.ini, the same file that defines your admin flags.
3. From the logs, after they left
Server logs live in cstrike/logs/ as dated L*.log files, and every connect line carries the SteamID. Grep for the name or the action:
cd /home/steam/hlds/cstrike/logs grep -i "nova" L*.log
Connect and kill lines embed the ID in angle brackets:
"Nova<12><STEAM_0:1:12345678><CT>" killed "Ghost<9>..."
The three fields in the brackets are name, userid, and SteamID. Even if you missed the player live, the log has their ID as long as logging is on (log on, mp_logdetail 3 — see essential cvars).
4. The non-Steam cases
SteamIDs are only trustworthy on a server that validates them. On a non-Steam server running Reunion or dproto, IDs depend on the client:
- A pending client may briefly show
STEAM_ID_PENDINGbefore resolving. - Reunion can be configured to hand non-Steam clients generated, stable IDs — but two different people with the same cracked client can collide unless it is configured correctly. See duplicate SteamIDs on non-Steam.
- The
0vs1inSTEAM_0:X:is the auth server digit and is part of the ID — do not "normalize" it away when banning.
On a mixed server, treat the SteamID as the identity but keep the IP as a secondary signal for repeat offenders whose IDs you cannot trust.
5. Turn the ID into a persistent ban
Once you have the SteamID, ban it. With AMX Mod X the clean way is a command that writes the ban and boots them in one step:
amx_ban 30 "Nova" cheating // ban a connected player, 30 minutes amx_addban "STEAM_0:1:12345678" 0 cheating // ban by ID, 0 = permanent
At the engine level the same is done with banid, and the crucial second step is persistence:
banid 0 STEAM_0:1:12345678 writeid
writeid is what saves the ban to banned.cfg so it survives a restart; a banid without it evaporates on the next map or reboot. For IP bans the pair is addip / writeip, and listid / listip show the current lists. A menu-driven ban manager or the admin menu wraps all of this so you never fat-finger a raw banid.
Common errors
- Ban gone after restart — you ran
banidwithoutwriteid(oraddipwithoutwriteip). The ban was never written to disk. amx_bansays no such player — the player already disconnected; useamx_addbanwith the SteamID from the logs instead.- Banned the wrong person — you used the userid (
#12) as if it were stable. It is a per-session slot; always ban the SteamID. - Non-Steam ban does not stick — the client's ID changes between sessions. Reunion needs a proper
SteamIdHashSaltand configuration; an IP ban may be the only reliable lever. - SteamID missing from logs — logging was off. Set
log onandmp_logdetail 3before you need it.
Verification
Run status and confirm you can read the SteamID of everyone on the server. After banning, check the list persisted:
listid
The banned SteamID should appear. Restart the server and run listid again — if it is still there, writeid did its job and the ban is permanent. If it vanished, you skipped the write step.









