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_.
- To keep it: add the line to
server.cfgin the game folder (cstrike/server.cfgfor 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_). It lasts until the server restarts or a config file sets it again.rehlds_ maxclients_ from_ single_ ip 5 - 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
| Setting | What it does | Default |
|---|---|---|
listipcfgfile | The name of the file where writeip saves your permanent IP bans. | listip.cfg |
syserror_ | The file where the server adds a line each time it stops on a fatal error. | sys_error.log |
sv_ | Adds the sounds that the map's models play during their animations to the files players download. | 0 |
sv_ | 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. | 0 |
sv_ | Prints a message on the server console when a command or setting name isn't recognised. | 0 |
sv_ | Controls whether RCON commands, and what they print, also show on the server console and in the server log. | 1 |
sv_ | Changes one collision check for players. | 0 |
sv_ | Sends large messages and files to players in 1024-byte pieces, whatever piece size their game asks for. | 0 |
sv_ | Lines up an entity's collision box with the map's collision shapes by its centre instead of by its corner. | 0 |
sv_ | Kicks or bans a player whose game sends more movement commands per second, on average, than this number. | 1800 |
sv_ | What happens to a player caught by the average move command limit. | 5 |
sv_ | Kicks or bans a player whose game sends a sudden burst of movement commands faster than this many per second. | 5500 |
sv_ | What happens to a player caught by the move command burst limit. | 5 |
sv_ | Sends the contents of your map cycle file to each player as they join, as original HLDS did. | 0 |
sv_ | Kicks or bans a player whose game sends more text commands per second, on average, than this number. | 250 |
sv_ | What happens to a player caught by the average text command limit. | 5 |
sv_ | Kicks or bans a player whose game sends a sudden burst of text commands faster than this many per second. | 500 |
sv_ | What happens to a player caught by the text command burst limit. | 5 |
sv_ | How many file download requests a player can make in a row before the server starts ignoring them. | 0 |
sv_ | How many file download requests per second a player gets back after using up their allowance. | 50 |
sv_ | What happens to a player who keeps sending file download requests after the server has started ignoring them. | -1 |
sv_ | Limits which of a player's settings (name, model, colours and so on) the server passes on to the other players. | empty |
sv_ | Stops a player's leg animation from speeding up when items are attached to them, such as hats or models a plugin adds. | 0 |
sv_ | How many connections from one IP address may be in the middle of connecting at the same time. | 5 |
sv_ | Sends 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_ | Allows player sprays bigger than 64 by 64 pixels, up to 256 by 256. | 1 |
sv_ | 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. | 0 |
sv_ | 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. | 0 |
sv_ | Lets players send data compressed with bzip2, which the server unpacks. | 1 |
sv_ | Treats compressed data from a player as suspicious when compression made it smaller by this percentage or more. | 80.0 |
sv_ | The largest size, in bytes, that compressed data from a player may unpack to. | 65536 |
sv_ | How many suspicious compressed messages in a short time get a player dropped. | 4 |
sv_ | How many recent suspicious compressed messages the server remembers for each player. | 10 |
sv_ | The time window, in seconds, in which suspicious compressed messages are counted. | 0.1 |
sv_ | What else happens to a player dropped for suspicious compressed data. | -1 |
sv_tags | Tags your server reports to Steam with its other details, for server browsers and tools that filter by tag. | empty |
sv_filterban | Decides whether the IP ban list blocks the addresses on it or lets only those addresses in. | 1 |
sv_ | The most movement commands the server runs for one player in one server frame. | 24 |
sv_ | Ignores a player's movement commands that cover no time once too many of them arrive in a row. | 0 |
sv_ | Ignores movement commands that report an interpolation time outside the normal range. | 1 |
sv_ | How many movement commands the speed check averages over. | 120 |
sv_ | 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. | 300 |
sv_ | The game speed above which the speed check flags a player for speedhack, where 2 means twice normal speed. | 3.0 |
sv_ | The game speed below which the speed check flags a player for slow motion, where 0.5 means half normal speed. | 0.5 |
sv_ | How many speed check warnings a player may collect before being punished. | -1 |
sv_ | What happens to a player caught by the speed check. | -1 |
sv_ | After 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_ 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_ says. Because the count starts again at every update, this catches short spikes that the average in sv_ 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_ 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_ says. Because the count starts again at every update, this catches short spikes that the average in sv_ 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_ says. Tokens come back at sv_ 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_), 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_). 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_, the command is flagged as speedhack. If it runs more than this many milliseconds behind and the speed is below sv_, 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_ says. A command is flagged only when the speed is above this value and the player's clock is ahead by more than sv_. A flagged command is ignored and its time taken off the player's clock. See sv_ 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_ says. A command is flagged only when the speed is below this value and the player's clock is behind by more than sv_. A flagged command is ignored and its time taken off the player's clock. See sv_ 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_ 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_). The speed check itself only turns off when sv_ 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_ 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_ 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_ 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_ gets the player dropped with "Malformed/abnormal compressed data". The other sv_ 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_. 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_ 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_, the server stores the time. If at least this many of the stored times fall within the last sv_ seconds, the player is dropped with "Malformed/abnormal compressed data" and punished as sv_ 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_ 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_), 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_. The server keeps this value between 1 and 10, and if it is below sv_ 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_. 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_ 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_, 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_). 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).