dproto.cfg Configuration Guide (Protocol 47 and 48)

July 2, 2025 Daemon666 8 min read 242 vistas

dproto is the non-Steam connection layer for original Valve HLDS — the counterpart to Reunion on ReHLDS. It answers the client validation the engine would normally hand to Steam, and it is steered entirely by one file, dproto.cfg, in your cstrike/ folder. This guide explains the settings that matter and, in particular, how dproto makes a single server accept both old non-Steam clients (protocol 47) and modern Steam clients (protocol 48) at once.

1. Where dproto.cfg lives and when it is read

The file sits in the game directory next to listenserver.cfg:

cstrike/dproto.cfg

dproto reads it once, at load, while it hooks the engine during startup. Editing it mid-map changes nothing until you fully restart the process — a changelevel is not enough, because the connection hooks are already installed. This is the single most common reason "my dproto.cfg edit did nothing." The shipped file is heavily commented; read those comments, because a few key names have drifted between builds and a setting dproto does not recognise is silently ignored.

2. Protocol 47 vs 48 — the whole point

Two client protocols exist on GoldSrc CS 1.6:

ProtocolWho speaks it
48Modern Steam clients and current non-Steam builds.
47Older non-Steam clients still common in some regions.

dproto can answer both handshakes on the same port, so you do not have to choose one audience. If dproto is pinned to a single protocol your players do not speak, they are bounced with a version-style rejection that looks exactly like a 47/48 protocol mismatch. Leave dproto set to accept both protocols unless you have a specific reason to lock one out.

3. Accept the client types you actually want

dproto decides which client types are allowed: genuine Steam, non-Steam (Steam emulators / Revolution Emulator), or both. The two normal policies are:

  • Both — maximum audience. Steam and non-Steam players share the server. This is the usual public setup.
  • Non-Steam only — a purely no-Steam community.

Match the accepted-client setting in dproto.cfg to your policy. If it is left at Steam-only, non-Steam players are rejected by design — that, not a bug, is why they "cannot join." The detailed rejection walkthrough is in dproto clients rejected.

4. The GameDLL override

dproto.cfg carries a game-library setting (the GameDLLName block, with separate Windows and Linux entries). Leave it blank and dproto loads the default mod library — on Linux that is cstrike/dlls/cs.so, on Windows cstrike/dlls/mp.dll. You only fill it in when you deliberately run a replacement game library and want dproto to load that specific file instead. If you set it wrong, the mod fails to start at all, so if in doubt leave it empty and let the engine pick.

5. SteamID generation for non-Steam players

A non-Steam player has no Valve-issued SteamID, so dproto generates one. The generation mode in dproto.cfg decides how — derived from the player's name, from a client-side unique id, or a LAN-style id. This choice has real consequences for admins and stats: an id derived purely from the name is only as unique as the name, so two players called "player" can collide onto one identity. If you keep admins on a non-Steam server, prefer a generation mode that yields stable, distinct ids, and back it with name+password auth in users.ini rather than trusting the generated id alone. See wrong SteamIDs for the same class of problem and how identity affects admin flags.

6. A minimal working shape

Conceptually a working public dproto.cfg leaves the GameDLL blank, allows both protocols, accepts both client types, and picks a stable id-generation mode:

# cstrike/dproto.cfg (match exact key names to the shipped comments)
# GameDLL: blank = engine default
GameDLLName =
GameDLLName_Linux =
# accept both Steam (48) and non-Steam (47) clients
# generation mode: pick a stable, per-client id source

The exact spelling of the accept-clients and generation keys is printed in the comments of the file you were shipped — use those, not a value copied from a forum for a different dproto build.

Common errors

  • Edit had no effect — you changed map instead of restarting. dproto reads the file only at process start.
  • Non-Steam players rejected — accepted-client type is Steam-only, or the protocol is pinned. Allow both.
  • Mod will not start after editing GameDLL — a wrong library path. Blank it and let the engine load the default.
  • Admins and stats reset — the id-generation mode changed, so every non-Steam id changed with it. Pick a mode and keep it.
  • dproto ignored entirely — you are on ReHLDS, where dproto is the wrong tool. Use Reunion instead.

Verification

Restart the server, connect once with a Steam client and once with a non-Steam client, and run status. Both should join and show an id. If non-Steam players connect and receive a stable id that survives a reconnect, dproto.cfg is doing its job. If either client type is refused, revisit the accepted-client and protocol settings above and restart again.

Colaboradores: Daemon666 ✦
Compartir: