Modded Counter Strike 2 (CS2) Dedicated Server with Metamod and CounterStrikeSharp for Windows and Linux that can automatically be setup on Google Cloud.
License: GNU Lesser General Public License v3.0
Shell 91.51%Batchfile 8.49%
cs2-modded-server's Introduction
Counter-Strike 2 (CS2) Modded Dedicated Server
If you are looking for the CS:GO version you can still access that here.
Every time you want to boot the server, you should run gcp.sh (if on Google Cloud) or install.sh (on Linux) and it will ensure your OS is up to date, CS2 is up to date, and pull down the latest patches from this mod (any updates that I push up).
Obviously, any changes you have made to the files in this mod will be overwritten so I have created a "custom files" folder where you mirror the contents of the game/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. Read more about it here.
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#)
If you appreciate the project then please take the time to star the repository ๐
Stay up to date
Subscribe to release notifications and stay up to date with the latest features and patches:
Custom files
Note
Any reference to a path is always the root of the installation. Which on Linux will typically be /home/steam/cs2/ and on Windows where ever you extracted the zip.
For example on Linux:
/custom_files/addons/counterstrikesharp/configs/admins.json full path is /home/steam/cs2/custom_files/addons/counterstrikesharp/configs/admins.json/game/csgo/addons/counterstrikesharp/configs/admins.json full path is /home/steam/cs2/game/csgo/addons/counterstrikesharp/configs/admins.json
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.
You can see an example of what I use on my server in the /custom_files_example/ directory, which sets the hostname, server image and admins.
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 "shipREKT 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.
Dynamically creates config files in plugin folder
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.
Creating an online server
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 or create a custom file for /game/csgo/cfg/secrets.cfg following the custom files steps (/custom_files/cfg/secrets.cfg) and set it in sv_setsteamaccount.
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.
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
Creating a LAN server
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.
Environment variables
Available via environment variable only
Key
Default value
What is it
API_KEY
changeme
To download maps from the workshop, your server needs access to the steam web api. To allow this you'll need an authorization key which you can generate here
IP
``
Not required. Allows the server IP to be set. Useful if a CS2 server needs to be bound to a specific IP address.
PORT
27015
Server port
TICKRATE
128
Server tickrate MM is 64, Faceit is 128
MAXPLAYERS
32
Max player limit
DUCK_DOMAIN
``
Duck DNS domain if you want to utalise the free service to get a domain for your server instead of IP
DUCK_TOKEN
``
Duck DNS access token to update domain when server boots
CUSTOM_FOLDER
custom_files
Folder of your own modifications to the mod that mirror the csgo/ structure and overwrite the mode files. More on that here
Can be configured via config file in custom files directory
These values can be set via environment variable or a config file in the custom files directory.
Copy /game/csgo/cfg/secrets.cfg to /custom_files/cfg/secrets.cfg and write the values you want and this file will overwrite /game/csgo/cfg/secrets.cfg each time the gcp.sh/install.sh script is ran.
Key
Value
What is it
RCON_PASSWORD
changeme
RCON password to control server from console also remotely configure
STEAM_ACCOUNT
``
To host a server online, you need to create a Steam Game Login Token. Your server will not run online without this
SERVER_PASSWORD
``
If you want a password protected server
Playing workshop maps/collections
To download maps from the workshop, your server needs access to the steam web api. To allow this you'll need an authorization key which you can generate here and set API_KEY to the key.
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.
Setting maps for different game modes
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.
On local:
gcloud config set project <project>
cd /path/to/folder
gcloud compute scp de_kus.vpk root@<instance-name>:/home/steam/cs2/game/csgo/maps --zone australia-southeast1-c
On server SSH:
cd /home/steam/cs2/game/csgo/maps
chown steam:steam de_kus.vpk
chmod 644 de_kus.vpk
Make 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
You can either Download this repo and extract it to where you want your server (i.e. C:\Server\cs2-modded-server) or use git and clone the repo git clone [email protected]:kus/cs2-modded-server.git and run your server from inside of it. This way you can simply git pull updates.
All the following instructions will use the repo folder location as the root.
Create a folder steamcmd and download SteamCMD and extract it inside steamcmd so you should have \steamcmd\steamcmd.exe.
To download maps from the workshop, your server needs access to the Steam Web API. To allow this, open \win.ini and set cs_api_key to your Steam Web API Key.
If setting up internet server:
Copy \game\csgo\cfg\secrets.cfg to your custom files directory \custom_files\cfg\secrets.cfg and set sv_setsteamaccount to your Game Server Login Token
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.
Failed to open libtier0.so
Failed to open libtier0.so (/home/steam/cs2/bin/libgcc_s.so.1: version 'GCC_7.0.0' not found (required by /lib/i386-linux-gnu/libstdc++.so.6))
This is because Valve ships their own copies of those libraries. As modern systems will have newer versions, you can safely delete the listed file from the server install. Do not delete the file in the system path (usually lib or lib32)*.
cd /home/steam/cs2/bin/ and rm libgcc_s.so.1 and restart the server.
How do I connect to RCON remotely?
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
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
Why can't I set the server to start automatically with a mod loaded
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.
Acessing admin menu
Admins are managed by CounterStrikeSharp using the Admin Framework. You define admins and their flags and most plugins now utilise this framework.
Admins can type !map 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 will automatically choose a map from the current mod.
I plan to add more features like !rtv, !nominate etc.
Changing game modes
There is no "menu" feature in CS2, so it's all via the chat window or server console.
The easiest way to manage the server is to use 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:
Tests players with different traps, kz, surf, bhop
!rcon exec dm
Deathmatch
!rcon exec dm-multicfg
Deathmatch Multi Config
!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 prac
Practice (grenade lineups etc)
!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)
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.
RCON doesn't work
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.
Manually updating Metamod:Source and CounterStrikeSharp
If you are on a unix based system, you can run scripts/check-updates.sh which will check the current versions of each plugin installed in this repo vs what the latest is, this makes it easier than going through each one manually.
Go to the Releases page for Metamod:Source and CounterStrikeSharp and download the latest. You need to merge the addons folder from the zips into the /game/csgo/addons of this repo. This is easy to do with unix based systems with rsync:
First open terminal and cd into the folder where you unzipped the zips i.e.: cd ~/Downloads then update the command below with the full path to the repo and run it:
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.
Enable Whitelist so only a list of people can play
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.
Changelog
2024-02-22 v1.0.25
FIXED: Reset sv_showimpacts staying on between MatchZy prac and other modes (Thanks @mavproductions)
Turn sv_cheats on whilst setting all game mode settings then turn off. This will also force cheats to be off if it was turned on then the mode was changed. (Thanks @mavproductions)
Delete MatchZy default savednades.json so it won't overwrite your own saved nades #38 (Thanks @mavproductions)
ADDED: Arms Race (default CS2 mode)
ADDED: CS2 Deathmatch Multi CFG v1.0.4 (Thanks @mavproductions)