sv_allowdownload, sv_allowupload and sv_downloadurl Explained

August 13, 2025 Daemon666 8 min read 13 görüntülenme

Custom content — maps, models, sprays, sounds — only reaches players if the download cvars are set correctly on both ends. Three server cvars and two client cvars govern the whole thing, and admins routinely set one and forget its partner, producing the classic "everyone has missing textures" symptom. This explains each cvar precisely and how they interact.

1. sv_allowdownload — the master switch

sv_allowdownload 1

With this at 1, the server is allowed to hand missing files to connecting clients. At 0, a client that lacks a map or model simply joins without it — purple/black checkerboard textures, silent weapons, an ERROR model where a custom prop should be. This is the first cvar to check when players report missing content. It controls whether downloads happen at all; how they happen (slow in-game transfer vs fast HTTP) is decided by sv_downloadurl.

2. sv_allowupload — sprays and logos

sv_allowupload 1

This governs the reverse direction: clients uploading their spray logo to the server so other players can see it. At 0, sprays still work locally for the person spraying but nobody else sees custom logos. It has nothing to do with map or model downloads — a common confusion. Leave it at 1 for a normal public server unless you specifically want to suppress user sprays (some admins disable it to stop offensive logos, alongside a higher decalfrequency).

3. sv_downloadurl — fast vs slow

sv_downloadurl "http://dl.example.com/cs"

With sv_allowdownload 1 but no sv_downloadurl, downloads still happen — but over the ancient in-game UDP transfer at a few KB/s, so a 20 MB map empties the server on every map change. sv_downloadurl points clients at an HTTP mirror (FastDL) instead, moving transfers to a real web server. The path is the part people break: the engine appends the game-relative path including the cstrike/ folder, so a request for cstrike/maps/de_rats.bsp becomes http://dl.example.com/cs/cstrike/maps/de_rats.bsp. Your web root must contain a cstrike/ directory that mirrors the server. The full setup, with Nginx and Apache examples and bzip2 compression, is in the FastDL setup guide.

4. The client side you cannot control

Two client cvars decide whether a player accepts downloads, and they are set on the player's machine, not yours:

CvarDefaultEffect
cl_allowdownload1Client accepts file downloads from servers.
cl_allowupload1Client uploads its own spray to servers.

If a player set cl_allowdownload 0, they join every server with missing content no matter what you do. You cannot override it from the server; the most you can do is tell them to set it back to 1. It defaults on, so this only affects players who changed it deliberately.

5. Putting it together

A correct public-server download block looks like this in server.cfg:

sv_allowdownload 1
sv_allowupload 1
sv_downloadurl "http://dl.example.com/cs"

The mental model: sv_allowdownload decides whether, sv_downloadurl decides how fast, sv_allowupload is the unrelated spray direction, and the two cl_ cvars are the client's veto. Get all three server cvars right and keep the mirror in sync with your map rotation, and content lands fast.

6. What each side actually decides

It helps to trace one join. A client connects and the server tells it the list of files this map references — the .bsp, any custom models and sounds, sprites. For each file the client does not already have, it checks its own cl_allowdownload; if that is 0, it skips the file and you get missing textures no matter what the server does. If it is 1, the client asks the server for the file. The server checks sv_allowdownload; if that is 0, it refuses and the client joins without the content. If it is 1, the server looks at sv_downloadurl: set, and the client is redirected to fetch over HTTP; empty, and the file dribbles over the slow in-game channel. Nothing about this touches sv_allowupload, which only governs the separate act of a client pushing its spray logo up so others can see it. Keeping those four decisions straight is the whole game — most "downloads broken" tickets are one of them set wrong on one side.

Common errors

  • Everyone has missing texturessv_allowdownload 0, or the file is not on the mirror. Turn it on and confirm the content exists on the FastDL host.
  • Downloads work but crawlsv_downloadurl is empty or unreachable, so the server fell back to the UDP transfer. Test the URL in a browser.
  • Every file 404s over HTTP — the cstrike/ level is missing or doubled in the web root. The client requests <url>/cstrike/maps/...; that exact path must resolve.
  • One player always misses content, others are fine — that player set cl_allowdownload 0. Only they can fix it.
  • Sprays do not show for otherssv_allowupload 0 on the server or cl_allowupload 0 on the client.

Verification

Read the values back in the console by typing each cvar with no argument:

sv_allowdownload
sv_downloadurl

Then delete a custom map from a test client, connect, and watch it pull the file — fast over HTTP if the mirror is right, slow if it fell back. If the client shows missing textures despite everything, confirm cl_allowdownload is 1 on that client. For the mirror itself, open the exact map URL in a browser as described in the FastDL guide.

Katkıda bulunanlar: Daemon666 ✦
Paylaş: