Your server plays de_dust2 forever, or ignores the rotation you wrote in mapcycle.txt entirely. The map cycle in CS 1.6 has a subtle dependency that trips everyone: the cycle only advances when a map ends, and "ending" is governed by completely separate cvars. So an "ignored" mapcycle is usually either a map that never ends, a file the engine is not reading, or a plugin overriding the next map. Here is how to sort which.
1. Confirm the engine is reading the right file
The file the engine uses is set by mapcyclefile, defaulting to mapcycle.txt in cstrike/. If you edited a file the server does not use, nothing changes. Check the cvar from the console:
mapcyclefile
It should print mapcycle.txt (or whatever you intend). Confirm that file actually exists in cstrike/ and is the one you edited — not a copy in the wrong directory. Set it explicitly in server.cfg if in doubt:
mapcyclefile "mapcycle.txt"
2. Make sure maps actually end
This is the real cause most of the time. The cycle advances at map end, and a map ends only when one of the end-of-map limits fires. If all of mp_timelimit, mp_maxrounds, mp_winlimit and mp_fraglimit are 0, nothing ever ends the map and it loops forever — which looks exactly like a broken mapcycle but is not. Set at least one:
mp_timelimit 25
Remember mp_maxrounds and mp_winlimit require ReGameDLL; on stock CS only mp_timelimit and mp_fraglimit work. The full interaction is in the map-flow tuning guide. If your map never changes, check these four cvars before touching the cycle file.
3. Check the file format
mapcycle.txt is one map name per line, no .bsp extension, and every map must exist in cstrike/maps/:
de_dust2 de_inferno de_nuke cs_office
Traps that break it: a Windows CRLF file with stray characters, a trailing blank/space, a map name misspelled, or a hidden .txt.txt extension. A map listed but missing from maps/ is skipped, and if every entry is bad the engine falls back to repeating the current map. Keep names lowercase and exact.
4. Rule out a nextmap/RTV plugin override
If you run AMX Mod X, the nextmap, mapchooser, or a Rock The Vote plugin frequently overrides mapcycle.txt — they pick the next map themselves, sometimes from their own maps.ini or a vote, ignoring the engine cycle. Check what is loaded:
amxx plugins
If a map-management plugin is running, it decides the next map, and the amx cvar amx_nextmap reflects that choice. This is not a bug — it is the plugin doing its job — but it means editing mapcycle.txt has no visible effect. Configure the rotation in the plugin's file (or its vote list) instead. See the RTV and nextmap guide.
5. Check the current nextmap value
You can see what the server thinks is next:
amx_nextmap
If this shows a map you did not expect, a plugin set it. If you run stock (no AMXX), the engine advances through mapcycle.txt in order and wraps at the end — and the position is remembered, so a restart mid-cycle continues from where it was, which can look like it "skipped" your first map.
6. Watch for servercfgfile re-runs
If your rotation seems to reset to the same map after each round or map, check whether a config is re-executing and forcing a map. Some setups put a map or changelevel command, or a hard-coded +map, into a config that runs on every load, which overrides the natural cycle. Grep your server.cfg, amxx.cfg and any ReGameDLL game.cfg for stray map-setting lines. The engine cycle, a nextmap plugin, and a config that forces a map can all be fighting each other; only one should be deciding the next map. Decide which authority you want — engine cycle for a plain server, a nextmap/RTV plugin for an AMXX server — and remove the others.
Common errors
- Same map forever — all four end-of-map limits are
0. Setmp_timelimitor another. - Edited the file, no change — a nextmap/RTV plugin overrides it, or
mapcyclefilepoints elsewhere. - A listed map is skipped — it is missing from
cstrike/maps/or misspelled. - Cycle resets or jumps — the engine remembers its position; a restart continues mid-cycle.
- File looks right but is ignored — hidden
.txt.txtextension or CRLF/encoding junk. Re-save as clean plain text.
Verification
Set a short limit on a test server so maps end quickly:
mp_timelimit 2 mapcyclefile
Confirm mapcyclefile names your file, then let the timelimit expire and watch the server advance to the next entry in mapcycle.txt, not repeat the current one. Run through two or three entries to confirm order and wrap-around. If a plugin is managing rotation, verify amx_nextmap matches your intended sequence instead. Once it advances correctly, restore your real mp_timelimit.









