nModeManager is a CS2 plugin for CounterStrikeSharp focused on practical mode rotation:
- player voting with
!rtv - map selection per mode
- safe mode switching with delay and cooldown
- admin mode/map override command
!rtvopens a guided flow: mode -> map -> confirm vote.- If a vote is already active, players can only vote for that same mode.
- During an active vote, players can still choose a different map inside that mode.
- If a player already voted and runs
!rtvagain, they receive live vote status in chat. - If a vote expires without enough votes, the plugin announces final vote progress and closes the vote.
- Force mode switch quickly with:
!mode <mode_key> [map] - Reload plugin config and dynamic commands without restarting server:
!nmm_reload - Dynamic vote commands are auto-created from configured mode keys:
if mode key is
retake, command!retakeis available.
- CS2 Dedicated Server
- Metamod 2.0 Dev
- CounterStrikeSharp
- MenuManagerAPI
- Install MenuManagerAPI and confirm the
menu:apicapability is available. - Copy
nModeManager.dll,nModeManager.deps.json, andGameloop.Vdf.dllto:addons/counterstrikesharp/plugins/nModeManager/ - Copy the
langfolder to:addons/counterstrikesharp/plugins/nModeManager/lang/ - Create or edit:
addons/counterstrikesharp/configs/plugins/nModeManager/nModeManager.json - Restart the server (or reload plugins).
{
"language": "en",
"initial_mode_key": "retake",
"apply_initial_mode_on_startup": true,
"reset_command": "exec nmodemanager/reset.cfg",
"vote_ratio": 0.6,
"vote_min_players": 1,
"vote_duration_seconds": 120,
"switch_cooldown_seconds": 20,
"switch_delay_seconds": 5,
"apply_game_type_mode": true,
"debug": false,
"endmatch_map_vote_enabled": true,
"modes": {
"retake": {
"key": "retake",
"display_name": "Retake",
"exec_command": "exec nmodemanager/retake.cfg",
"default_map": "de_inferno",
"map_pool": [
"de_inferno",
"de_nuke",
"de_mirage"
],
"game_type": 0,
"game_mode": 0,
"plugins_to_unload": [],
"plugins_to_load": []
}
}
}For end-match map vote, gamemodes_server.txt and mapgroup prefix mg_nmm_ are hardcoded.
| Command | Description |
|---|---|
!nmm |
Show help |
!modes |
List available modes |
!rtv |
Open RTV vote menu |
!<mode_key> |
Vote directly for a mode (example: !retake) |
| Command | Description |
|---|---|
!mode <mode_key> [map] |
Force a mode switch with optional map |
!rtv <enable|disable> |
Enable or disable RTV voting globally |
!nmm_reload |
Reload config and rebuild dynamic mode commands |
- Player opens vote with
!rtv. - Player selects mode.
- Player selects map.
- Player confirms vote.
- Plugin broadcasts vote progress.
- If quorum is reached, mode switch is scheduled.
- If timer expires before quorum, vote closes and final status is announced.
Important:
- one vote per player identity
- bots and HLTV are excluded from eligible player count
- required votes are calculated as:
ceil(eligible_players * vote_ratio) - while a vote is active, mode choice is locked to the active vote mode
- map target can still be adjusted within that active vote mode
Examples:
!mode retake!mode retake de_nuke
Rules:
- If map is invalid for the selected mode, plugin returns available maps for that mode.
- If selected mode is already active and no map is provided, command is blocked.
- If selected mode is already active and map equals current map, command is blocked.
- If selected mode is already active and map is valid and different, command is allowed.
Supported languages:
enpt-BRes
Set language in config:
"language": "en"
- Keep
map_poolpopulated for each mode to improve vote UX. - Use
switch_delay_secondsto give players warning before switch. - Use
switch_cooldown_secondsto prevent switch spam. - Run
!nmm_reloadafter each config change.
Check if MenuManagerAPI is installed, loaded, and exposing menu:api.
Player must have @css/root permission.
Check mode key under modes and run !nmm_reload.
MIT. See LICENSE.