Skip to content

ReHLDS settings

Every setting ReHLDS adds to the Half-Life dedicated server, in plain words, with its default, its values, when to change it and the technical details.

An unofficial reference maintained by Hostsrc. Built from the ReHLDS source and README at commit 550f2d6; descriptions adapted from the README (MIT, the ReHLDS Contributors, see Credits). The official project is ReHLDS on GitHub (external site, opens in a new tab).

The settings ReHLDS adds on top of the original HLDS. Most servers never need to change them: the defaults are chosen to be safe. Each entry says what the setting does in plain words first, and the technical details after.

How to change a setting

A setting (a "cvar", short for console variable) is a name and a value, for example sv_rehlds_maxclients_from_single_ip 5.

  • To keep it: add the line to server.cfg in the game folder (cstrike/server.cfg for Counter-Strike 1.6). The server runs that file when it starts and at every map change.
  • To try it now: type the line on the server console, or send it over rcon (rcon sv_rehlds_maxclients_from_single_ip 5). It lasts until the server restarts or a config file sets it again.
  • To see the current value: type just the name on the console.

New to these words? The glossary explains them.

How to read an entry

  • The first line says what the setting does.
  • Default, Values and Since: the value it has if you set nothing (from the ReHLDS source), the values it takes, and the first ReHLDS release that has it.
  • When to change it: whether you need to touch it at all.
  • Technical details: the exact behaviour, for admins who want it, followed by the description from the ReHLDS README.

All settings

SettingWhat it doesDefault
listipcfgfileThe name of the file where writeip saves your permanent IP bans.listip.cfg
syserror_logfileThe file where the server adds a line each time it stops on a fatal error.sys_error.log
sv_auto_precache_sounds_in_modelsAdds the sounds that the map's models play during their animations to the files players download.0
sv_delayed_spray_uploadAsks players for their custom spray after they have fully joined, instead of while they are still connecting, so the file comes in bigger pieces.0
sv_echo_unknown_cmdPrints a message on the server console when a command or setting name isn't recognised.0
sv_rcon_condebugControls whether RCON commands, and what they print, also show on the server console and in the server log.1
sv_force_ent_intersectionChanges one collision check for players.0
sv_rehlds_force_dlmaxSends large messages and files to players in 1024-byte pieces, whatever piece size their game asks for.0
sv_rehlds_hull_centeringLines up an entity's collision box with the map's collision shapes by its centre instead of by its corner.0
sv_rehlds_movecmdrate_max_avgKicks or bans a player whose game sends more movement commands per second, on average, than this number.1800
sv_rehlds_movecmdrate_avg_punishWhat happens to a player caught by the average move command limit.5
sv_rehlds_movecmdrate_max_burstKicks or bans a player whose game sends a sudden burst of movement commands faster than this many per second.5500
sv_rehlds_movecmdrate_burst_punishWhat happens to a player caught by the move command burst limit.5
sv_rehlds_send_mapcycleSends the contents of your map cycle file to each player as they join, as original HLDS did.0
sv_rehlds_stringcmdrate_max_avgKicks or bans a player whose game sends more text commands per second, on average, than this number.250
sv_rehlds_stringcmdrate_avg_punishWhat happens to a player caught by the average text command limit.5
sv_rehlds_stringcmdrate_max_burstKicks or bans a player whose game sends a sudden burst of text commands faster than this many per second.500
sv_rehlds_stringcmdrate_burst_punishWhat happens to a player caught by the text command burst limit.5
sv_rehlds_dlfile_bucket_sizeHow many file download requests a player can make in a row before the server starts ignoring them.0
sv_rehlds_dlfile_refillrateHow many file download requests per second a player gets back after using up their allowance.50
sv_rehlds_dlfile_punishWhat happens to a player who keeps sending file download requests after the server has started ignoring them.-1
sv_rehlds_userinfo_transmitted_fieldsLimits which of a player's settings (name, model, colours and so on) the server passes on to the other players.empty
sv_rehlds_attachedentities_playeranimationspeed_fixStops a player's leg animation from speeding up when items are attached to them, such as hats or models a plugin adds.0
sv_rehlds_maxclients_from_single_ipHow many connections from one IP address may be in the middle of connecting at the same time.5
sv_rehlds_local_gametimeSends each player a game clock that starts when they loaded the current map, instead of the server's clock since the map started.0
sv_rehlds_allow_large_spraysAllows player sprays bigger than 64 by 64 pixels, up to 256 by 256.1
sv_use_entity_fileLoads a map's entities (spawn points, buy zones, doors, lights and other objects) from a separate .ent file, so you can change them without editing the map.0
sv_usercmd_custom_random_seedMakes the random number seed for each of a player's commands come from the server's clock instead of from a number the player's game also knows.0
sv_net_incoming_decompressionLets players send data compressed with bzip2, which the server unpacks.1
sv_net_incoming_decompression_max_ratioTreats compressed data from a player as suspicious when compression made it smaller by this percentage or more.80.0
sv_net_incoming_decompression_max_sizeThe largest size, in bytes, that compressed data from a player may unpack to.65536
sv_net_incoming_decompression_min_failuresHow many suspicious compressed messages in a short time get a player dropped.4
sv_net_incoming_decompression_max_failuresHow many recent suspicious compressed messages the server remembers for each player.10
sv_net_incoming_decompression_min_failuretimeThe time window, in seconds, in which suspicious compressed messages are counted.0.1
sv_net_incoming_decompression_punishWhat else happens to a player dropped for suspicious compressed data.-1
sv_tagsTags your server reports to Steam with its other details, for server browsers and tools that filter by tag.empty
sv_filterbanDecides whether the IP ban list blocks the addresses on it or lets only those addresses in.1
sv_rehlds_movecmd_max_ticksThe most movement commands the server runs for one player in one server frame.24
sv_rehlds_movecmd_max_null_streakIgnores a player's movement commands that cover no time once too many of them arrive in a row.0
sv_rehlds_movecmd_clamp_interpIgnores movement commands that report an interpolation time outside the normal range.1
sv_rehlds_movecmdtime_samplesHow many movement commands the speed check averages over.120
sv_rehlds_movecmdtime_max_errorHow far, in milliseconds, a player's game clock may drift from the server's before the speed check looks at the player's game speed.300
sv_rehlds_movecmdtime_max_scaleThe game speed above which the speed check flags a player for speedhack, where 2 means twice normal speed.3.0
sv_rehlds_movecmdtime_min_scaleThe game speed below which the speed check flags a player for slow motion, where 0.5 means half normal speed.0.5
sv_rehlds_movecmdtime_max_warningsHow many speed check warnings a player may collect before being punished.-1
sv_rehlds_movecmdtime_punishWhat happens to a player caught by the speed check.-1
sv_reconnect_timeoutAfter a map change, frees the slot of a player whose game hasn't started reconnecting within this many seconds.30

Flood and speed hack protection

sv_rehlds_movecmdrate_max_avg

Kicks or bans a player whose game sends more movement commands per second, on average, than this number.

Default: 1800. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Raise it if normal players get dropped with "move commands flooding (Avg)". Set 0 to turn the check off.

Technical details: Move commands carry a player's input: movement, buttons and view angles. Several arrive in each packet. At least every half second, the server updates a smoothed rate for each player: two thirds of the previous rate plus one third of the commands counted since the last update, divided by the seconds that passed. The count also includes the number of the player's packets lost on the way. When the smoothed rate is above this value, the player is punished as sv_rehlds_movecmdrate_avg_punish says. Only players who have spawned into the game are checked. 0 or less turns the check off.

From the ReHLDS README: "Max average level of 'move' cmds for ban."

The ReHLDS README gives the default as 400; the source sets 1800.

sv_rehlds_movecmdrate_avg_punish

What happens to a player caught by the average move command limit: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: 5. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Use a negative value if you want a kick rather than a ban.

Technical details: A positive value bans the player's IP address for that many minutes with addip, and drops the player with "Banned for move commands flooding (Avg)". 0 bans permanently. A negative value only drops the player, with "Kicked for move commands flooding (Avg)". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban. Bans live in memory until they expire, and permanent ones are saved to a file only when someone runs writeip (see listipcfgfile).

From the ReHLDS README: "Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick)."

sv_rehlds_movecmdrate_max_burst

Kicks or bans a player whose game sends a sudden burst of movement commands faster than this many per second.

Default: 5500. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Raise it if normal players get dropped with "move commands flooding (burst)". Set 0 to turn the check off.

Technical details: Each time move commands arrive, the server divides the number received since its last half-second update by the time since that update, counting at least 0.2 seconds so a very short interval doesn't inflate the rate. When the result is above this value, the player is punished as sv_rehlds_movecmdrate_burst_punish says. Because the count starts again at every update, this catches short spikes that the average in sv_rehlds_movecmdrate_max_avg smooths out. Packets the player lost on the way are added to the count. Only players who have spawned into the game are checked. 0 or less turns the check off.

From the ReHLDS README: "Max burst level of 'move' cmds for ban."

The ReHLDS README gives the default as 2500; the source sets 5500.

sv_rehlds_movecmdrate_burst_punish

What happens to a player caught by the move command burst limit: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: 5. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Use a negative value if you want a kick rather than a ban.

Technical details: A positive value bans the player's IP address for that many minutes with addip, and drops the player with "Banned for move commands flooding (burst)". 0 bans permanently. A negative value only drops the player, with "Kicked for move commands flooding (burst)". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban. Bans live in memory until they expire, and permanent ones are saved to a file only when someone runs writeip (see listipcfgfile).

From the ReHLDS README: "Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick)."

sv_rehlds_stringcmdrate_max_avg

Kicks or bans a player whose game sends more text commands per second, on average, than this number.

Default: 250. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Raise it if normal players get dropped with "string commands flooding (Avg)". Set 0 to turn the check off.

Technical details: String commands are the text commands a player's game passes to the server: any console command the game doesn't handle itself, plus the commands it sends while joining. Each one counts once. At least every half second, the server updates a smoothed rate for each player: two thirds of the previous rate plus one third of the commands counted since the last update, divided by the seconds that passed. When the smoothed rate is above this value, the player is punished as sv_rehlds_stringcmdrate_avg_punish says. Only players who have spawned into the game are checked. 0 or less turns the check off.

From the ReHLDS README: "Max average level of 'string' cmds for ban."

The ReHLDS README gives the default as 80; the source sets 250.

sv_rehlds_stringcmdrate_avg_punish

What happens to a player caught by the average text command limit: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: 5. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Use a negative value if you want a kick rather than a ban.

Technical details: A positive value bans the player's IP address for that many minutes with addip, and drops the player with "Banned for string commands flooding (Avg)". 0 bans permanently. A negative value only drops the player, with "Kicked for string commands flooding (Avg)". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban. Bans live in memory until they expire, and permanent ones are saved to a file only when someone runs writeip (see listipcfgfile).

From the ReHLDS README: "Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick)."

sv_rehlds_stringcmdrate_max_burst

Kicks or bans a player whose game sends a sudden burst of text commands faster than this many per second.

Default: 500. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Raise it if normal players get dropped with "string commands flooding (burst)". Set 0 to turn the check off.

Technical details: Each time a string command arrives, the server divides the number received since its last half-second update by the time since that update, counting at least 0.2 seconds so a very short interval doesn't inflate the rate. When the result is above this value, the player is punished as sv_rehlds_stringcmdrate_burst_punish says. Because the count starts again at every update, this catches short spikes that the average in sv_rehlds_stringcmdrate_max_avg smooths out. Only players who have spawned into the game are checked. 0 or less turns the check off.

From the ReHLDS README: "Max burst level of 'string' cmds for ban."

The ReHLDS README gives the default as 400; the source sets 500.

sv_rehlds_stringcmdrate_burst_punish

What happens to a player caught by the text command burst limit: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: 5. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Use a negative value if you want a kick rather than a ban.

Technical details: A positive value bans the player's IP address for that many minutes with addip, and drops the player with "Banned for string commands flooding (burst)". 0 bans permanently. A negative value only drops the player, with "Kicked for string commands flooding (burst)". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban. Bans live in memory until they expire, and permanent ones are saved to a file only when someone runs writeip (see listipcfgfile).

From the ReHLDS README: "Time in minutes for which the player will be banned (0 - Permanent, use a negative number for a kick)."

sv_rehlds_dlfile_bucket_size

How many file download requests a player can make in a row before the server starts ignoring them.

Default: 0. Since: not in a ReHLDS release yet (master).

When to change it: Leave it at 0, which sizes the limit from the map. Set a negative value to turn the limit off.

Technical details: dlfile is the request a player's game sends to download a missing file from the game server itself, not from FastDL. Each request for a regular file costs one token from the player's bucket. Requests for custom sprays (names starting with !) cost nothing. The bucket is filled when the player connects and each time they load a new map. With 0 it holds the number of resources the map has precached plus 16, enough for a player to fetch every missing file in one go. A positive value sets the size directly. A request that arrives with an empty bucket is ignored. After 100 ignored requests in a row, the player is punished as sv_rehlds_dlfile_punish says. Tokens come back at sv_rehlds_dlfile_refillrate per second. A negative value turns the limit off.

From the ReHLDS README: "Max size of the dlfile token bucket. 0 - automatic (map resource list size + 16), a negative number disables dlfile rate limiting."

sv_rehlds_dlfile_refillrate

How many file download requests per second a player gets back after using up their allowance.

Default: 50. Since: not in a ReHLDS release yet (master).

When to change it: Leave it at the default.

Technical details: The server adds this many tokens per second to the player's bucket (see sv_rehlds_dlfile_bucket_size), never above the bucket's size. Fractions count. With 0 or less nothing is added, so the player only has the full bucket they get when connecting and at each map load.

From the ReHLDS README: "How many dlfile tokens are restored per second."

sv_rehlds_dlfile_punish

What happens to a player who keeps sending file download requests after the server has started ignoring them: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: -1. Since: not in a ReHLDS release yet (master).

When to change it: Leave it at the default, which kicks. Set a number of minutes if you want such players banned.

Technical details: The punishment is applied after 100 ignored dlfile requests in a row (see sv_rehlds_dlfile_bucket_size). A value of 0 or more bans the player's IP address for that many minutes with addip, 0 meaning permanent, and drops the player with "Banned for dlfile flooding". A negative value only drops the player, with "Kicked for dlfile flooding". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban.

From the ReHLDS README: "Time in minutes for which the player will be banned for dlfile flooding (0 - Permanent, use a negative number for a kick)."

sv_rehlds_movecmd_max_ticks

The most movement commands the server runs for one player in one server frame. Extra ones are ignored.

Default: 24. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default. Set 0 to remove the limit.

Technical details: The count starts again at every server frame, one pass of the server's main loop. Once a player has sent this many move commands in the same frame, the rest are ignored, not run. There is no kick or ban. Only commands received over the network are counted, so bots are not affected. 0 or less removes the limit.

From the ReHLDS README: "Set maximum amount of movement commands the server is able to process from a single player in a single frame. This includes the commands itself, not packets."

sv_rehlds_movecmd_max_null_streak

Ignores a player's movement commands that cover no time once too many of them arrive in a row.

Default: 0. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at 0 (off) unless you want to block players who send long unbroken runs of zero-time commands, which can keep a player stuck in mid-air.

Technical details: Each move command says how many milliseconds of game time it covers, as a whole number. A player with a very high frame rate can now and then send 0 because of that rounding. With a value above 0, once more than this many zero-time commands have arrived in a row, the next zero-time commands are ignored until one that covers some time arrives. There is no kick or ban.

From the ReHLDS README: "Defines the maximum allowed consecutive movement commands with zero time duration (empty commands). 0 - disables the check."

sv_rehlds_movecmd_clamp_interp

Ignores movement commands that report an interpolation time outside the normal range.

Default: 1. Since: ReHLDS 3.15.0.896.

Values: <1|0>

When to change it: Leave it at 1.

Technical details: Each move command carries the player's interpolation time (ex_interp) in milliseconds. With 1, a command with a value below 0 or above 100 ms is ignored, or above 200 ms for an HLTV proxy. There is no kick or ban. With 0 the value is not checked.

From the ReHLDS README: "Defines whether should the server block movement commands with invalid (out of range) "ex_interp" value."

sv_rehlds_movecmdtime_samples

How many movement commands the speed check averages over. 0 turns the speed check off.

Default: 120. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default.

Technical details: The speed check looks for speedhack (a game running faster than real time) and slow motion. It compares the game time a player's move commands claim with the time that passed on the server, and averages both over this many commands to get the player's game speed. A higher value gives a steadier figure but reacts more slowly. 0 or less turns the whole speed check off, including the ignoring of flagged commands. This value also sets how fast warnings wear off: one warning of each kind is removed for every (2 × this value) milliseconds of play at a normal speed.

From the ReHLDS README: "Defines the number of frames the server takes to average the client's movement speed. Higher - more accurate but slower detection, lower - vice versa."

sv_rehlds_movecmdtime_max_error

How far, in milliseconds, a player's game clock may drift from the server's before the speed check looks at the player's game speed.

Default: 300. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default.

Technical details: The server keeps a clock for each player that moves forward by the time each of their move commands claims. If it runs more than this many milliseconds ahead of the server's clock and the player's game speed is above sv_rehlds_movecmdtime_max_scale, the command is flagged as speedhack. If it runs more than this many milliseconds behind and the speed is below sv_rehlds_movecmdtime_min_scale, it is flagged as slow motion. Within that margin nothing is flagged. If the player's clock falls more than twice this far behind, the server resets it to its own time, so time lost to lag is not held against the player.

From the ReHLDS README: "Defines how far a client's internal game clock can go ahead of or behind the server's clock in milliseconds. If this limit is exceeded, the server evaluates the client's game speed. Penalties are ONLY applied if the client also violates the "sv_rehlds_movecmdtime_max_scale" or "sv_rehlds_movecmdtime_min_scale" limits."

sv_rehlds_movecmdtime_max_scale

The game speed above which the speed check flags a player for speedhack, where 2 means twice normal speed.

Default: 3.0. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default.

Technical details: Game speed is the game time a player's commands claim divided by the time that passed on the server, averaged as sv_rehlds_movecmdtime_samples says. A command is flagged only when the speed is above this value and the player's clock is ahead by more than sv_rehlds_movecmdtime_max_error. A flagged command is ignored and its time taken off the player's clock. See sv_rehlds_movecmdtime_max_warnings for what happens next.

From the ReHLDS README: "Defines the max client's base game speed ratio. Clients speeding the game up beyond this multiplier will receive warnings."

sv_rehlds_movecmdtime_min_scale

The game speed below which the speed check flags a player for slow motion, where 0.5 means half normal speed.

Default: 0.5. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default.

Technical details: Game speed is the game time a player's commands claim divided by the time that passed on the server, averaged as sv_rehlds_movecmdtime_samples says. A command is flagged only when the speed is below this value and the player's clock is behind by more than sv_rehlds_movecmdtime_max_error. A flagged command is ignored and its time taken off the player's clock. See sv_rehlds_movecmdtime_max_warnings for what happens next.

From the ReHLDS README: "Defines the min client's base game speed ratio. Clients slowing the game down below this multiplier will receive warnings."

sv_rehlds_movecmdtime_max_warnings

How many speed check warnings a player may collect before being punished. With -1, flagged commands are only ignored and nobody is punished.

Default: -1. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at -1 if ignoring flagged commands is enough for you. Set 0 or more to also punish players, as sv_rehlds_movecmdtime_punish says.

Technical details: Every command the speed check flags is ignored and its time taken off the player's clock, whatever this value is. With 0 or more, each flag also adds a warning of that kind, speedhack or slow motion. When a player has more warnings of one kind than this value, they are punished. 0 punishes at the first flag. Warnings wear off during play at a normal speed (see sv_rehlds_movecmdtime_samples). The speed check itself only turns off when sv_rehlds_movecmdtime_samples is 0.

From the ReHLDS README: "Maximum allowed speedhack/slowmo warnings before the punishment is applied. -1 - disable detection."

Note: The ReHLDS README says -1 turns the detection off. In the code of this ReHLDS version, -1 only turns off the warnings and the punishment; flagged commands are still ignored.

sv_rehlds_movecmdtime_punish

What happens to a player caught by the speed check: minutes of IP ban, 0 for a permanent ban, or a negative number for a kick only.

Default: -1. Since: ReHLDS 3.15.0.896.

When to change it: Leave it at the default, which kicks. It only takes effect once sv_rehlds_movecmdtime_max_warnings is 0 or more.

Technical details: A positive value bans the player's IP address for that many minutes with addip, and drops the player with "Banned for speedhack" or "Banned for slowmo". 0 bans permanently. A negative value only drops the player, with "Kicked for speedhack" or "Kicked for slowmo". The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban.

From the ReHLDS README: "Time in minutes for which the player will be banned for speedhacking/slowing (-1 - Kick, 0 - Permanent, use a negative number for a kick)."

File transfers

sv_delayed_spray_upload

Asks players for their custom spray after they have fully joined, instead of while they are still connecting, so the file comes in bigger pieces.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Turn it on if you allow custom sprays and want them uploaded in larger pieces. It only changes when the server asks for the file.

Technical details: A spray the server doesn't have yet must be uploaded by the player. By default the server asks for it during the connection, while the player's game sends data in 128-byte pieces. With 1 the request waits until the player has fully joined, when their game sends pieces of its cl_dlmax size. If sv_rehlds_force_dlmax is also 1, the server first sets the player's cl_dlmax to 1024. Nothing is asked for while sv_allow_upload is 0.

From the ReHLDS README: "Upload custom sprays after entering the game instead of when connecting. It increases upload speed."

sv_rehlds_force_dlmax

Sends large messages and files to players in 1024-byte pieces, whatever piece size their game asks for.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Leave it at 0 unless players download files from the game server itself (not from a FastDL web server set in sv_downloadurl) and you want those transfers in the largest pieces.

Technical details: The server cuts large reliable messages and in-game file downloads into fragments. For a player who has fully joined, the fragment size normally comes from their cl_dlmax setting, kept between 256 and 1024 bytes, and is 256 bytes when they haven't set it. Before the player has fully joined it is always 1024. With 1 the server always uses 1024 bytes and ignores cl_dlmax. When sv_delayed_spray_upload is also 1, the server also sets the player's cl_dlmax to 1024 just before asking for their spray, so the upload uses 1024-byte pieces too.

From the ReHLDS README: "Force a client's cl_dlmax cvar to 1024. It avoids an excessive packets fragmentation."

sv_rehlds_allow_large_sprays

Allows player sprays bigger than 64 by 64 pixels, up to 256 by 256.

Default: 1. Since: ReHLDS 3.15.0.896.

Values: <1|0>

When to change it: Set it to 0 if you only want standard-size sprays on your server.

Technical details: When a player uploads a spray, the server checks the image. With 1 it accepts sprays up to 256 by 256 pixels, the original HLDS limit. With 0 the limit is 64 by 64. A bigger spray is rejected with "Invalid custom decal from" and the player's name on the console, and it is not stored or passed to other players.

From the ReHLDS README: "Allow larger custom logos than 64x64."

sv_net_incoming_decompression

Lets players send data compressed with bzip2, which the server unpacks.

Default: 1. Since: ReHLDS 3.14.0.856.

Values: <1|0>

When to change it: Leave it at 1. With 0, compressed data is refused until the server has sent the player the map's resource list.

Technical details: Large messages and file uploads from a player arrive in fragments, which the player's game may compress with bzip2. With 1 the server always unpacks them. With 0 it ignores compressed fragments from a player who hasn't yet been sent the resource list for the current map, and unpacks them after that. Either way, data that fails to unpack or would unpack to more than sv_net_incoming_decompression_max_size gets the player dropped with "Malformed/abnormal compressed data". The other sv_net_incoming_decompression_* settings add a check on how much the data shrank.

From the ReHLDS README: "When enabled server will decompress of incoming compressed file transfer payloads."

sv_net_incoming_decompression_max_ratio

Treats compressed data from a player as suspicious when compression made it smaller by this percentage or more.

Default: 80.0. Since: ReHLDS 3.14.0.856.

Values: <0|100>

When to change it: Leave it at the default. Set 0 to turn the check off.

Technical details: For each compressed fragment that unpacks correctly, the server works out how much space compression saved, as a percentage of the unpacked size. 80 means the compressed data was one fifth of the unpacked size or smaller. At or above this value, the server records a failure for the player. Enough failures in a short time get the player dropped, see sv_net_incoming_decompression_min_failures. Data that didn't get smaller is never flagged. 0 or less turns the check off.

From the ReHLDS README: "Sets the max allowed ratio between compressed and uncompressed data for file transfer. (A ratio close to 90 indicates large uncompressed data with low entropy)."

sv_net_incoming_decompression_max_size

The largest size, in bytes, that compressed data from a player may unpack to.

Default: 65536. Since: ReHLDS 3.14.0.856.

Values: <16|65536>

When to change it: Leave it at the default.

Technical details: The server unpacks a compressed fragment into a buffer of this size, kept between 16 and 65536 bytes. For a compressed file upload, the buffer is also no bigger than the size the player's game declared for the file. Data that would unpack to more fails, and the player is dropped with "Malformed/abnormal compressed data". This is a kick, not a ban: sv_net_incoming_decompression_punish doesn't apply to it.

From the ReHLDS README: "Sets the max allowed size for decompressed file transfer data."

sv_net_incoming_decompression_min_failures

How many suspicious compressed messages in a short time get a player dropped.

Default: 4. Since: ReHLDS 3.14.0.856.

Values: <0|10>

When to change it: Leave it at the default.

Technical details: Each time compressed data from a player trips sv_net_incoming_decompression_max_ratio, the server stores the time. If at least this many of the stored times fall within the last sv_net_incoming_decompression_min_failuretime seconds, the player is dropped with "Malformed/abnormal compressed data" and punished as sv_net_incoming_decompression_punish says. Times are stored separately for normal messages and for file transfers. The server keeps this value between 1 and 10, and if it is above sv_net_incoming_decompression_max_failures the server swaps the two.

From the ReHLDS README: "Sets the min number of decompression failures required before a player's connection is flagged for potential punishment."

sv_net_incoming_decompression_max_failures

How many recent suspicious compressed messages the server remembers for each player.

Default: 10. Since: ReHLDS 3.14.0.856.

Values: <0|10>

When to change it: Leave it at the default.

Technical details: The server stores the times of the last this many failures (see sv_net_incoming_decompression_max_ratio), once for normal messages and once for file transfers, and drops the oldest when the store is full. Only stored failures can be counted toward sv_net_incoming_decompression_min_failures. The server keeps this value between 1 and 10, and if it is below sv_net_incoming_decompression_min_failures the server swaps the two.

From the ReHLDS README: "Sets the max number of decompression failures allowed within a specified time window before action is taken against the player."

sv_net_incoming_decompression_min_failuretime

The time window, in seconds, in which suspicious compressed messages are counted.

Default: 0.1. Since: ReHLDS 3.14.0.856.

Values: <0.1|10.0>

When to change it: Leave it at the default.

Technical details: Only failures from the last this many seconds count toward sv_net_incoming_decompression_min_failures. Older stored failures are ignored. A value of 0 or less is reset to 0.1.

From the ReHLDS README: "Sets the min time in secs within which decompression failures are tracked to determine if the player exceeds the failure thresholds."

sv_net_incoming_decompression_punish

What else happens to a player dropped for suspicious compressed data: minutes of IP ban, 0 for a permanent ban, or a negative number for no ban.

Default: -1. Since: ReHLDS 3.14.0.856.

When to change it: Leave it at the default, which only drops the player. Set a number of minutes if you want such players banned.

Technical details: When the failure count in sv_net_incoming_decompression_min_failures is reached, the player is always dropped with "Malformed/abnormal compressed data". With 0 or more, the server also bans the player's IP address for that many minutes with addip, 0 meaning permanent. The ban is on the IP address, without the port, so it blocks everyone connecting from that address, and it only blocks while sv_filterban is 1. Use whole minutes. The value is passed to addip with one decimal, so anything below 0.05 becomes a permanent ban. Data that fails to unpack at all drops the player without a ban, whatever this value is.

From the ReHLDS README: "Time in minutes for which the player will be banned for malformed/abnormal bzip2 fragments (0 - Permanent, use a negative number for a kick)."

Players and connections

sv_rehlds_userinfo_transmitted_fields

Limits which of a player's settings (name, model, colours and so on) the server passes on to the other players.

Default: empty. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it empty unless you want to stop sending fields other players' games don't need. If you set it, list every field your mod and plugins need on the players' side, because a field that isn't listed is not sent.

Technical details: Userinfo is the list of keys and values a player's game sends to the server, such as name, model, topcolor, rate and cl_updaterate. The server shares it with every player in the game. When this setting is empty, all fields are sent except those whose key starts with _. When it is set, only the listed keys are sent, in the order given. Write the keys one after another, each with a backslash in front, for example \name\model\*sid\*hltv\topcolor\bottomcolor. Keys starting with _ can't be listed, and neither can keys of 127 characters or more. The server prints a console message and skips them. The setting is read up to 511 characters. For the number fields topcolor, bottomcolor, rate, cl_updaterate, cl_lw, cl_lc and *hltv, the value is sent as a whole number and left out when it is 0. The list is read when a map starts, so a change applies from the next map. The server keeps each player's full userinfo for itself. Only what the other players receive is cut.

From the ReHLDS README: "Userinfo fields only with these keys will be transmitted to clients via network. If not set then all fields will be transmitted (except prefixed with underscore). Each key must be prefixed by backslash, for example "\name\model*sid*hltv\bottomcolor\topcolor". See wiki (external site, opens in a new tab) to collect sufficient set of keys for your server."

sv_rehlds_maxclients_from_single_ip

How many connections from one IP address may be in the middle of connecting at the same time.

Default: 5. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Leave it at the default. Raise it if many players share one address and join at the same moment, for example at a LAN event.

Technical details: When a new connection arrives, the server counts the player slots from the same IP address (the port is ignored) that are connected but haven't finished joining. If that count is above this value, the new connection is refused with "Too many connect packets from your ip address" and the attempt is written to the log. Players already in the game are not counted. Original HLDS used a fixed limit of 5.

From the ReHLDS README: "Limit number of connections at the same time from single IP address, not confuse to already connected players."

Note: It counts only players from one address who are still connecting, so it limits a flood of connections, not the number of players from one address. xHLDS adds xhlds_maxclients_per_ip, which also counts players already in game.

sv_usercmd_custom_random_seed

Makes the random number seed for each of a player's commands come from the server's clock instead of from a number the player's game also knows.

Default: 0. Since: ReHLDS 3.9.0.752.

When to change it: Leave it at 0 unless a plugin or mod asks for it.

Technical details: For each move command, the engine passes a random seed to the game code, which uses it to produce random values for that command. By default the seed is the sequence number of the packet the command arrived in, a number the player's game also has. With 1 the seed is made from the server's clock each time a command runs, so the player's game can't work it out in advance.

From the ReHLDS README: "When enabled server will populate an additional random seed independent of the client."

sv_filterban

Decides whether the IP ban list blocks the addresses on it or lets only those addresses in.

Default: 1. Since: ReHLDS 3.7.0.694 or earlier.

Values: <-1|0|1>

When to change it: Leave it at 1. Any other value turns your ban list into the list of the only addresses allowed in.

Technical details: The IP list is the one addip fills. It is checked for every packet that doesn't belong to a game in progress, which includes connection requests, server browser queries and RCON. With 1, a packet from a listed address gets "You have been banned from this server." and is refused, and every other address gets through. With any other value the list works the other way round: listed addresses get through and every other address is refused, so with an empty list nobody can connect and the server doesn't answer server browser queries. In this ReHLDS version 0 and -1 behave the same way for IP addresses. The Steam ID ban list (banid) is checked when a player's Steam ID is confirmed. With 1 or -1, listed IDs are refused. With 0, only listed IDs may stay.

From the ReHLDS README: "Set packet filtering by IP mode. -1 - All players will be rejected without any exceptions. 0 - No checks will happen. 1 - All incoming players will be checked if they're IP banned (if they have an IP filter entry), if they are, they will be kicked."

Note: The ReHLDS README describes 0 as "no checks" and -1 as "reject everyone". The code of this ReHLDS version works as described above, so check your ban list before you change this setting.

sv_reconnect_timeout

After a map change, frees the slot of a player whose game hasn't started reconnecting within this many seconds. 0 turns it off.

Default: 30. Since: not in a ReHLDS release yet (master).

When to change it: Leave it at the default.

Technical details: On a map change, the server keeps each player's slot and tells their game to reconnect. With a value above 0, a timer starts for every slot at that moment. If the player's game hasn't sent a new connection request within this many seconds, the slot is freed with "Failed to reconnect after level change". The timer stops as soon as the request arrives, before any downloads, so players downloading the new map's files are not affected. This works apart from sv_timeout, which only drops players the server stops hearing from. A game that keeps sending packets but never reconnects would otherwise keep its slot.

From the ReHLDS README: "Hard deadline in seconds for a client to re-initiate its connection after a level change, independent of netchan activity. Closes a phantom-slot exploit where a cheat blocks the "reconnect" command and keeps the netchan warm so sv_timeout never fires. 0 - disabled."

Game and physics

sv_auto_precache_sounds_in_models

Adds the sounds that the map's models play during their animations to the files players download.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Turn it on if custom models on your server play sounds that players never get. Leave it off otherwise, because every sound added counts toward the precache limit.

Technical details: Precaching is how the server registers, at map start, the files players need. With 1, when a map starts the engine goes through every precached studio model (.mdl), reads the sound events (event 5004) in each animation sequence and precaches each sound file named there as a generic resource, sound/ followed by the file name, so players who don't have it download it. Sounds already precached as sounds are skipped. A map can precache up to 4096 generic resources. Going over that stops the map with an error. rescount shows how close you are.

From the ReHLDS README: "Automatically precache sounds attached to models."

sv_force_ent_intersection

Changes one collision check for players. Some plugins ask you to turn it on.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Leave it at 0 unless a plugin you use says it needs 1.

Technical details: A trace is a line or box the engine sweeps through the map to find what is in the way, for its own physics and for game and plugin code. For each entity near the trace, the engine normally runs a quick pre-test first and the exact check only if the pre-test passes. Entities with the solid type SOLID_SLIDEBOX, which players use, skip the pre-test. With 1 they get it too. For a player, the pre-test checks whether the trace line passes through a sphere around them, sized from the bounding box of their current animation. If it doesn't, the player is skipped. Other entities pass the pre-test without a check, so they behave as before.

From the ReHLDS README: "In a 3-rd party plugins used to force colliding of SOLID_SLIDEBOX entities."

sv_rehlds_hull_centering

Lines up an entity's collision box with the map's collision shapes by its centre instead of by its corner.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Leave it at 0 unless a plugin or mod asks for it.

Technical details: A map has pre-built collision hulls for a few box sizes: a standing player, a crouching player and a large object. To test an entity's box against the map or a brush entity such as a door, the engine picks one of these hulls and shifts it so that the box's lower corner matches the hull's. When the box is not exactly the hull's size, the hull ends up off-centre. With 1, on each horizontal axis where the box is centred on the entity's origin (its mins and maxs mirror each other), the engine skips that shift and keeps the hull centred on the entity. Height is handled as before. Boxes 8 units wide or less use the point hull and are not affected.

From the ReHLDS README: "Use center of hull instead of corner."

sv_rehlds_attachedentities_playeranimationspeed_fix

Stops a player's leg animation from speeding up when items are attached to them, such as hats or models a plugin adds.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Turn it on if players with attached items, for example hats from a plugin, look like they run too fast.

Technical details: An attached entity follows a player (movement type MOVETYPE_FOLLOW, with the player as its aim entity). According to the engine's notes, each one makes players' games run the gait animation (the legs) of that player one more time per frame, which speeds it up. With 1, before sending a player's state to others, the server divides that player's animation frame rate by 1 plus the number of entities attached to them. Only entities attached to players are counted.

From the ReHLDS README: "Fixes bug with gait animation speed increase when player has some attached entities (aiments). Can cause animation lags when cl_updaterate is low."

sv_rehlds_local_gametime

Sends each player a game clock that starts when they loaded the current map, instead of the server's clock since the map started.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Consider turning it on if you run one map for many hours without a change. Leave it at 0 otherwise.

Technical details: The server sends the game time to players as a 32-bit floating-point number, which gets less precise as the number grows. With 1, the time each player receives counts from the moment they last loaded the map, on connecting or after a map change, so the number stays small. Time values in entity updates are shifted the same way. For Half-Life, Counter-Strike and Condition Zero, the engine also shifts the timer fields of weapon data (fuser2 and fuser3, and for Counter-Strike and Condition Zero m_fAimedDamage). It doesn't convert weapon data for other games.

From the ReHLDS README: "A feature of local gametime which decrease "lags" if you run same map for a long time."

sv_use_entity_file

Loads a map's entities (spawn points, buy zones, doors, lights and other objects) from a separate .ent file, so you can change them without editing the map.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

When to change it: Set it to 1 if you edit entities for some maps. Use 2 once to have the server write out .ent files for you to edit.

Technical details: Every map carries a list of entities. With 0 the server always uses that list. With 1 or 2, at map load the server looks for maps/ followed by the map name and .ent (for example maps/de_dust2.ent). If the file exists, the server loads the entities from it instead and prints Using custom entity file: with the path. If it doesn't exist, the server uses the map's own list and prints Using default entities.... With 2 it also writes the map's own list to that file first, so the next load finds it.

From the ReHLDS README: "Use custom entity file for a map. Path to an entity file will be "maps/[map name].ent". 0 - use original entities. 1 - use .ent files from maps directory. 2 - use .ent files from maps directory and create new .ent file if not exist."

Console, logs and server info

listipcfgfile

The name of the file where writeip saves your permanent IP bans.

Default: listip.cfg. Since: ReHLDS 3.7.0.694 or earlier.

Values: <filename>

When to change it: Leave it as it is unless you keep your ban list in a file with another name, for example one shared by several servers.

Technical details: writeip writes every permanent IP ban (one added with 0 minutes) to this file as one addip 0 line per address or range, replacing what the file held. Temporary bans are not written. The engine does not run this file by itself. To get the bans back after a restart, run it from server.cfg with exec followed by the file name. Original HLDS always used listip.cfg.

From the ReHLDS README: "File for permanent ip bans."

syserror_logfile

The file where the server adds a line each time it stops on a fatal error.

Default: sys_error.log. Since: ReHLDS 3.7.0.694 or earlier.

Values: <filename>

When to change it: Leave it at the default. Set it to an empty value if you don't want the file.

Technical details: When the engine hits a fatal error and shuts down, it appends one line to this file with the date and time (in the L dd/mm/yyyy - hh:mm:ss: form of the server log), the map that was running and the error message. The error also goes to the normal server log as FATAL ERROR (shutting down). An empty value turns the file off.

From the ReHLDS README: "File for the system error log."

sv_echo_unknown_cmd

Prints a message on the server console when a command or setting name isn't recognised.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Turn it on while you write or check config files, so typing mistakes show up.

Technical details: With 1, a command run from the server console or a config file that matches no command, alias or setting prints unknown command followed by its name. Commands sent by players are not affected. The engine only checks whether the value starts with 1.

From the ReHLDS README: "Echo in the console when trying execute an unknown command."

sv_rcon_condebug

Controls whether RCON commands, and what they print, also show on the server console and in the server log.

Default: 1. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Leave it at 1 so you can see who ran which command. Set it to 0 if a tool sends RCON commands often and fills your console and logs.

Technical details: RCON (remote console) runs server commands from another computer with rcon_password. With 1, the original HLDS behaviour, each RCON request prints Rcon from with the sender's address and the request on the console, and writes an Rcon: line to the server log, or Bad Rcon: when the request fails. The logged request is the full text the sender sent, password included. The command's output is printed on the server console as well as sent back to the sender. With 0 the server neither prints nor logs the request, and the output goes only to the sender.

From the ReHLDS README: "Print rcon debug in the console."

sv_rehlds_send_mapcycle

Sends the contents of your map cycle file to each player as they join, as original HLDS did.

Default: 0. Since: ReHLDS 3.7.0.694 or earlier.

Values: <1|0>

When to change it: Leave it at 0 unless something you run expects the map cycle in the join message.

Technical details: When a player joins, the server sends a server info message with the map name, host name and other details. Original HLDS always put the whole map cycle file (mapcyclefile, normally mapcycle.txt) in it. ReHLDS sends an empty text there unless this setting is 1. With 1 it sends the file, cut to 8190 bytes so the player's game can read the message, or mapcycle failure if the file can't be read.

From the ReHLDS README: "Send mapcycle.txt in serverinfo message (HLDS behavior, but it is unused on the client)."

sv_tags

Tags your server reports to Steam with its other details, for server browsers and tools that filter by tag.

Default: empty. Since: ReHLDS 3.14.0.856.

Values: <comma-delimited string list of tags>

When to change it: Set it if you want your server findable by tags, for example a game mode. Leave it empty otherwise.

Technical details: Write the tags in one line separated by commas. The engine turns the text into lower case and passes it to Steam each time it sends the server's details, so a change goes out with the next update. Up to 127 characters are sent.

From the ReHLDS README: "Sets a string defining the "gametags" for this server, this is optional, but if it is set it allows users/scripts to filter in the matchmaking/server-browser interfaces based on the value."

We also maintain xHLDS, our ReHLDS fork, with its own docs.

Something wrong or unclear on this page? Email office@hostsrc.com or tell us on Discord (external site, opens in a new tab).