Forked from kus/cs2-modded-server
A single modded Counter-Strike 2 (CS2) Modded Dedicated Server that you can change the active mod on the server from chat or server console. Maps are preconfigured per game mode and change when the game mode changes.
Each game mode has a hand full of maps preset so you are ready to go and it's easy to add more.
- Competitive (using MatchZy)
- Practice (record grenade throws etc) (using MatchZy)
- Wingman (allows more than 4 players) (Steam API key required)
- GunGame (Steam API key required)
- Custom Deathmatch (Steam API key required)
- Prefire practice
- Retakes
- Executes
- 1v1 (with arenas) (Steam API key & MySQL required)
- ScoutzKnivez (Steam API key required)
- KZ (Steam API key required)
- BHop (Steam API key required)
- Surf (Steam API key required)
- Mini Games (Steam API key required)
- Deathrun (Steam API key required)
- Course format (tests players with different traps, kz, surf, bhop) (Steam API key required)
- Hide n Seek (Steam API key required)
- Battle Royale (Steam API key required)
- Soccer (Steam API key required)
- Battle Ball (Steam API key required)
Players can start a vote to change the map in the current mod by typing !rtv
in chat.
Players can start a vote to change the game mode by typing !gamemode
in chat.
You can also start a specific game mode vote by typing !comp
, !wingman
, !dm
, !gg
, !1v1
, !awp
, !aim
, !prefire
, !executes
, !retake
, !prac
, !bhop
, !kz
, !surf
, !minigames
, !deathrun
, !course
, !scoutzknivez
, !hns
, !br
, !soccer
, !1.6
.
For easier team practice, players are assigned random smoke colors when they join the server. Plugin at first tries to assign not already taken colors, and only if the pool is exhausted, goes full random. Following commands come with this plugin:
!color [color] - check your smoke color or change to the new one, just like .changeColor
!colors - list all available colors
!changeColor [color] - change color of your smoke to the one put in place of [color]. If you don't specify color, you'll have another random color assigned.
Available colors: red, green, blue, yellow, cyan, black, white, orange, pruple, teal, pink
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Download SourceAdminTool (source) for your OS (you can read about it here) and click Servers > Add Servers
and put in the <IP>:27015
and when you see the server show in the list, down the bottom left type in your RCON password and click Login
and you should be able to execute commands from the bottom text box i.e. exec dm.cfg
Admins are managed by CounterStrikeSharp using the Admin Framework. You define admins and their flags and most plugins now utilise this framework.
To see an example of my admins you can look at this file /custom_files/addons/counterstrikesharp/configs/admins.json. To set your admins on your own server use this file as a reference and use the custom files system to have your own version.
Ensure your .json
files are valid JSON by using this website.
If you have added the admins correctly you should see Loaded admin data with X admins.
in the server logs when it starts.
If you modify the server whilst the server is on you can run css_admins_reload
and css_groups_reload
to reload the admins and see the admins with css_admins_list
and css_groups_list
.
If you don't like having to type in chat !number every time you want to use a menu item; you can use this trick to bind the corresponding !number command to the number key. So when you press 1 it will select the 1 option:
Note: This is assuming you are using the standard binds. You can change accordingly for your own setup.
bind "1" "slot1; css_1"
bind "2" "slot2; css_2"
bind "3" "slot3; css_3"
bind "4" "slot4; css_4"
bind "5" "slot5; css_5"
bind "6" "slot6; css_6"
bind "7" "slot7; css_7"
bind "8" "slot8; css_8"
bind "9" "slot9; css_9"
bind "0" "slot10; css_0"
Admins can type !maps
in chat and it will bring up a menu of all the maps for the current mod. When a map is selected it will change the map straight away.
At the end of the map (if time runs out or win conditions are met) it a vote will show to choose a map from the current mod.
Admins can type !settings
in chat and it will bring up a menu of all the settings you can enable or disable. i.e.: Bunnyhopping, fun mode etc.
Admins can type !modes
in chat and it will bring up a menu of all the game modes. Simply choose one and it will switch to that game mode and change to a default map for that game mode.
The maps in !maps
will also update to the new game mode when it has changed.
You can also change directly to a game mode with the Rcon commands via chat i.e. !rcon exec dm
will change to deathmatch.
These are all the available chat commands to change the game mode:
Command | Game mode |
---|---|
!rcon exec 1v1 |
1v1 (allows more than 2 players) |
!rcon exec aim |
Aim |
!rcon exec ar |
Arms Race (Valve) |
!rcon exec awp |
Awp only |
!rcon exec battle |
Battle Ball |
!rcon exec bhop |
Bunny hop maps |
!rcon exec br |
Battle Royale |
!rcon exec comp |
Competitive using MatchZy |
!rcon exec course |
Tests players with different traps, kz, surf, bhop |
!rcon exec dm |
Deathmatch |
!rcon exec dm-valve |
Deathmatch (Valve) |
!rcon exec executes |
Executes |
!rcon exec gg |
Gun Game |
!rcon exec hns |
Hide n Seek |
!rcon exec kz |
Kreedz Climbing |
!rcon exec minigames |
Mini Games |
!rcon exec deathrun |
Deathrun |
!rcon exec prac |
Practice (grenade lineups etc) |
!rcon exec prefire |
Prefire practice |
!rcon exec retake |
Retakes |
!rcon exec scoutzknivez |
ScoutzKnivez |
!rcon exec soccer |
Soccer |
!rcon exec surf |
Surf |
!rcon exec wingman |
Wingman (allows more than 4 players) |
!rcon exec 45 |
Competitive with 45 degree maps |
Changing between gamemodes multiple times is not recommended, and it is better if you restart the CS2 server in-between.
To view what other commands are available view the plugins at the top of the page.
To check everything is working correctly run the following commands in the server console:
meta list
and you should seeCounterStrikeSharp
in the outputcss_plugins list
and you should see a few plugins in the output
If you see content in both; everything is working.
Important
Using RCON whilst connected to the server does not work. See discussion here. The current work arounds are:
Mod | Version | Why |
---|---|---|
Metamod:Source | 2.0.0-1344 |
Sits between the Game and the Engine, and allows plugins to intercept calls that flow between |
CounterStrikeSharp | 307 |
Attempts to implement a .NET Core scripting layer on top of a Metamod Source Plugin, allowing developers to create plugins that interact with the game server in a modern language (C#) |
MultiAddonManager | 1.3.5 |
Allows you to use multiple workshop addons at once and have clients download them |
ServerListPlayersFix | 1.0.1-Rebuild-04102024 |
Fixes players not showing up in the server browser |
MovementUnlocker | 1.4 |
Removes max speed limitation from players on the ground, feels like CS:S |
CS2Fixes-RampbugFix | 2024-11-06 |
Minimizes rampbugs |
CS2_ExecAfter | 1.0.0 |
Executes a command after server event (i.e. OnMapStart) or a delay. |
CS2 Remove Map Weapons | 1.0.1 |
Remove weapons from the map in CS2 as mp_weapons_allow_map_placed 0 does not work. |
K4-DamageInfo | 2.4.0 |
Displays the amount of damage players have inflicted on the victim's HP and Armor, as well as the hit groups they have hit. |
GameModeManager | 1.0.51 |
A simple Counter-Strike 2 server plugin that helps admins manage game modes and map groups. |
Rock The Vote | 1.8.5 |
General purpose cs2 map voting plugin, made with love from scratch |
MatchZy | 0.8.8 |
MatchZy is a plugin for CS2 for running and managing practice/pugs/scrims/matches with easy configuration! |
MapConfigurator | 1.0.2 |
Allows you to quick and easily create unique configuration files for each map on your server. |
SimpleAdmin | 0.1.2 |
Adds basic administrator functions |
CS2Rcon | 1.2.0 |
This is a rudimentary implementation of a RCON plugin for CS2 using CounterStrikeSharp as RCON does not work whilst connected to the server |
SharpTimer | 0.3.1w |
SharpTimer is a simple Surf/KZ/Bhop/MG/Deathrun/etc CS2 Timer plugin |
STFixes | 1.0.4 |
A CounterStrikeSharp plugin with common fixes and features for SharpTimer servers |
GunGame | 1.1.2 |
GunGame mode on Counter Strike Sharp |
K4-Arenas | 2.0.4 |
All in one arena plugin, that you can use to have a ladder type gameplay. Support all map, 2v2/3v3/etc How? |
CS2 Retakes | 20.0.17 |
CS2 implementation of retakes. Based on the version for CS:GO by Splewis. |
CS2 Retakes Shared | 20.0.17 |
Shared library for CS2 Retakes. |
CS2 Instadefuse | 2.0.0 |
Allows a CT to instantly defuse the bomb when nothing can prevent defusal. Written in C# for CounterStrikeSharp. |
CS2 Retakes Allocator | 2.4.0 |
Advanced weapon allocation for B3none/cs2-retakes |
CS2 Whitelist | 1.0.0 |
Restricts access to the server for SteamID members/employees listed in the whitelist. How? |
CS2 Executes | 1.0.6 |
CS2 implementation of executes. Based on the version for CS:GO by Splewis. |
CS2 Advertisement | 1.0.8fix |
Allows you to show ads in chat/center/panel. How? |
CS2 Deathmatch | 1.2.8 |
Custom Deathmatch CS2 plugin (Includes custom spawnpoints, multicfg, gun selection, spawn protection, etc) |
OpenPrefirePrac | 0.1.47 |
Multiple prefire practices on competitive maps and support multiplayer practicing simultaneously. |
CS2-CustomVotes | 1.1.3 |
A plugin for Counter-Strike 2 to create custom votes for settings. |
deathrun-manager | 0.1.0 |
Deathrun Manager for CounterStrikeSharp Framework CS2. |
AnnouncementBroadcaster | 0.5 |
Conditional messages, OnCommand, OnPlayerConnect, OnRoundStart, and TimerMsgs. |
CS2FunMatchPlugin | 1.1.1 |
Random fun mode every round |
RollTheDice | 1.3.8 |
Roll the dice to get either a positive or negative effect for the current round. |
CS2-FixRandomSpawn | 1.1.2 |
Fixes ConVar mp_randomspawn for any game mode. |
CS2-MutualScoringPlayers | 1.0.1 |
Keeps score of kills between players. |
PlayerColorSmokes | 1.0.2 |
Changes colors of smokes for easier team practice. |
Any changes you have made to the files in this mod will be overwritten when the update scripts are ran. I have created a folder /custom_files/
in the root of the project, where you mirror the contents of the csgo/
folder, and any files you want to tweak, you put in there in the same spot and they will always overwrite the mods default files.
So this can be used to set the server hostname to something you want, set the RCON or serverpassword or set the admins of the server.
For example; if you want to add yourself as an admin, that file is located /game/csgo/addons/counterstrikesharp/configs/admins.json
. So to make your tweak to it, you would copy that file to /custom_files/addons/counterstrikesharp/configs/admins.json
and add yourself as an admin at the bottom. Then when the update scripts run, it will copy your custom file at /custom_files/addons/counterstrikesharp/configs/admins.json
and overwrite the default mod file at /game/csgo/addons/counterstrikesharp/configs/admins.json
.
If you want to change the server name, or make any changes to any mod settings use the /cfg/custom_MOD.cfg
as it executes at the end and can overwrite any setting. So if you wanted to change the server name for GunGame, you would copy /game/csgo/cfg/custom_dm.cfg
to /custom_files/cfg/custom_dm.cfg
and and write hostname "RRL GunGame +Deathmatch +Turbo"
and any other settings you want and this file will overwrite /game/csgo/cfg/custom_dm.cfg
each time the gcp.sh
/install.sh
/win.bat
script is ran, and these settings will run at the end when you load the GunGame mod.
If a plugin creates a config file in the plugins folder where the dll is (i.e.: /game/csgo/addons/counterstrikesharp/plugins/disabled/Advertisement/advertisement.json
) it will be deleted when the server starts as the addons
folder is deleted to make sure old plugins are removed if I removed them. You need to copy this file and your changes to your /custom_files/
folder so it merges it back in. You would put the example file in /custom_files/addons/counterstrikesharp/plugins/disabled/Advertisement/advertisement.json
and every time the server starts it will merge it back in and you will have your changes.
To generate this directory, you can run the gcp.sh
script (if on Google Cloud), install.sh
script on Linux once or on win.bat
script on Windows where you extracted the mod zip and this is where you would put your custom modifications.
If you are hosting an online server, you need to create a Steam Game Login Token, your server will not run online without this. Put this value in the STEAM_ACCOUNT
environment variable.
You also need to create an authorization key which will allow your server to download maps from the workshop. Put this value in the API_KEY
environment variable.
See all available environment variables.
You must connect to the server from the public IP, not the LAN IP even if you are on the same network. The script logs the public IP Starting server on XXX.XXX.XXX.XXX:27015
Create a custom file for /game/csgo/cfg/env.cfg
following the custom files steps (/custom_files/cfg/env.cfg
) and set sv_lan
to 1
, sv_downloadurl
to ""
and sv_allowdownload
to 1
.
The console command for hosting a workshop map is host_workshop_map fileid
where fileid
is the number that comes after ?id=
in the workshop URL for example: https://steamcommunity.com/sharedfiles/filedetails/?id=2433686680
The console command for hosting a workshop collection is host_workshop_collection collectionid
where collectionid
is the number that comes after ?id=
in the workshop URL for example: https://steamcommunity.com/sharedfiles/filedetails/?id=1092904694. This command will then download all maps in the collection and create a mapgroup out of them, then host it.
Copy the file /game/csgo/gamemodes_server.txt
following the custom files steps (/custom_files/gamemodes_server.txt
) and add the maps you want per gamemode. Most gamemodes fall under casual, but I have created unique groups for each mode so adding your own maps is easy by updating this one file.
It isn't required, but you should add the fileid into /game/csgo/subscribed_file_ids.txt
following the custom files steps (/custom_files/subscribed_file_ids.txt
) so the server keeps it up to date.
If you have python available, you can use our tool available to add a map to your custom game mode map groups: python scripts/add-map.py <group_name> <map_name> [workshop_id] --custom
. Refer to scripts/add-map.py
for more information.
Make sure you have 60GB free space.
Ensure you have all the settings for your environment variables.
-
If setting up internet server:
Set environment variable
STEAM_ACCOUNT
to your Game Server Login TokenMake sure you port forward on your router TCP:
27015
and UDP:27015
&27020
so players can connect from the internet.You must connect to the server from the public IP, not the LAN IP even if you are on the same network. The script logs the public IP
Starting server on XXX.XXX.XXX.XXX:27015
-
If setting up LAN server:
Set environment variable
LAN
to1
sudo su
export RCON_PASSWORD="changeme"
export API_KEY="changeme"
export STEAM_ACCOUNT=""
export SERVER_PASSWORD=""
export PORT="27015"
export TICKRATE="128"
export MAXPLAYERS="32"
cd / && curl --silent --output "install.sh" "https://raw.githubusercontent.com/kus/cs2-modded-server/master/install.sh" && chmod +x install.sh && bash install.sh
- If running for the first time
To check everything is working correctly run the following commands in the server console:
meta list
and you should seeCounterStrikeSharp
in the outputcss_plugins list
and you should see a few plugins in the output
If you see content in both; everything is working.
When you join the server you can change game modes.
Using RCON whilst connected to the server does not work. See discussion here. The current work arounds are:
- I have included CS2Rcon which allows admins to use !rcon in chat.
- You can disconnect from the server and use
rcon_address IP:PORT
in console and you can use rcon commands. - Use an external RCON program which has implemented the RCON protocol such as this.
If it still doesn't work, make sure you try connect from CS2 outside of a game via console:
You must connect to the server from the public IP if hosting an online server, not the LAN IP even if you are on the same network. The script logs the public IP Starting server on XXX.XXX.XXX.XXX:27015
rcon_address ip:port
rcon_password "password"
rcon say "hi"
And check the ports cs2 is using on your OS i.e. on Ubuntu sudo lsof -i -P -n | head -n 1; sudo lsof -i -P -n | grep cs2
.
Workshop maps take up a lot of space! If you want to delete all your workshop maps so the server can run again (it will download the maps you want to play). Stop the server, delete the workshop
and start the server again:
Linux:
cd /home/steam/cs2/game/bin/linuxsteamrt64/steamapps
ls -lah # You should see a workshop folder
du -sh workshop # To get the size of it
rm -rf workshop # Delete the workshop folder
By default bots are enabled in deathmatch, gungame, gungame ffa, retakes, scoutsknives and wingman.
The default is set to add 1 bot if only 1 human is in the server, and then if there is 2 or more humans there will be no bots.
You can overwrite the settings for the bots by creating a "custom file" for this file custom_bots.cfg.
If you copy custom_bots.cfg and put it in the custom_files/cfg/
directory (/home/steam/cs2/custom_files/cfg/
on default Linux setup) and you can modify it and change say bot_quota
to 10
if you want 10 players at all times. When the server starts (on Linux and Windows) it will merge this file into the game cfg and it will execute every time bots.cfg
executes.
You can also just login to RCON rcon_password yourpassword
and use rcon bot_add_ct
and rcon bot_add_t
.
If you want to remove bots you use rcon bot_kick
.
Because the way the server is setup with several mods it's not possible. You can't use +exec
in the server launcher as that executes to quick before SourceMod is loaded. You can monitor the server once it's started (via RCON) and then load a mod i.e. exec dm.cfg
.
If you are on Windows, from the CounterStrikeSharp with runtime zip, you need to copy the api
,bin
, dotnet
folders from the /addons/counterstrikesharp
folder togame/csgo/addons/windows/counterstrikesharp
in this repo.
If you want to enable a whitelist on your server load the plugin by putting this css_plugins load "plugins/disabled/Advertisement/Advertisement.dll"
in one of your .cfg
files.
If you want it to load on every mod on your server, you can put it in your /custom_files/cfg/custom_all.cfg
file.
The config file is located at /game/csgo/addons/counterstrikesharp/plugins/disabled/Advertisement/advertisement.json
which you would put in /custom_files/addons/counterstrikesharp/plugins/disabled/Advertisement/advertisement.json
so it is not overwritten/deleted.
If you want to enable a whitelist on your server load the plugin by putting this css_plugins load "plugins/disabled/WhiteList/WhiteList.dll"
in one of your .cfg
files.
If you want it to load on every mod on your server, you can put it in your /custom_files/cfg/custom_all.cfg
file.
The whitelist file is located at /game/csgo/addons/counterstrikesharp/plugins/disabled/WhiteList/whitelist.txt
which you would put in /custom_files/addons/counterstrikesharp/plugins/disabled/WhiteList/whitelist.txt
so it is not overwritten.
See LICENSE
for more details.