# cs2-modded-server **Repository Path**: wellwhz/cs2-modded-server ## Basic Information - **Project Name**: cs2-modded-server - **Description**: cs2-modded-server - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-02 - **Last Updated**: 2024-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Counter-Strike 2 (CS2) Modded Dedicated Server If you are looking for the CS:GO version you can still access that [here](https://github.com/kus/csgo-modded-server/tree/csgo). ## About A single modded Counter-Strike 2 (CS2) Modded Dedicated Server that you can [change the active mod](#changing-game-modes) on the server from chat or server console. [Maps are preconfigured per game mode](#what-maps-are-preconfigured-with-each-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](#setting-maps-for-different-game-modes). - 1v1 (with arenas) ([Steam API key](#playing-workshop-mapscollections) required) - Deathmatch ([Steam API key](#playing-workshop-mapscollections) required) - Competitive (using [MatchZy](https://github.com/shobhit-pathak/MatchZy#usage-commands)) - Practice (record grenade throws etc) - Prefire practice - GunGame - Retake - Executes - Wingman (allows more than 4 players) ([Steam API key](#playing-workshop-mapscollections) required) - KZ ([Steam API key](#playing-workshop-mapscollections) required) - BHop ([Steam API key](#playing-workshop-mapscollections) required) - Surf ([Steam API key](#playing-workshop-mapscollections) required) - ScoutzKnivez ([Steam API key](#playing-workshop-mapscollections) required) - Mini Games ([Steam API key](#playing-workshop-mapscollections) required) - Deathrun ([Steam API key](#playing-workshop-mapscollections) required) - Course format (tests players with different traps, kz, surf, bhop) ([Steam API key](#playing-workshop-mapscollections) required) - Battle Royale ([Steam API key](#playing-workshop-mapscollections) required) - Hide n Seek ([Steam API key](#playing-workshop-mapscollections) required) - Soccer ([Steam API key](#playing-workshop-mapscollections) required) 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](#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](#custom-files). The simple quick setup: 1. [Create your firewall rules](#create-firewall-rule) 2. [Provision your server on Google Cloud](#create-instance) 3. [SSH into server](#ssh-to-server) 4. [Install mod](#install-mod) 5. [Create your custom files for hostname, admins etc](#custom-files) 6. Ensure you have followed the steps for creating an [online server](#creating-an-online-server) or [LAN server](#creating-a-lan-server) 7. Kill server if running `./stop.sh` and start again `gcp.sh` (if on Google Cloud) or `install.sh` (on Linux) Your server should be up and running! To check everything is working correctly run the following commands in the server console: - `meta list` and you should see `CounterStrikeSharp` in the output - `css_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](https://www.reddit.com/r/GlobalOffensive/comments/167spzi/cs2_rcon/). > The current work arounds are: > > - I have included [CS2Rcon](https://github.com/LordFetznschaedl/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](https://github.com/fpaezf/CS2-RCON-Tool-V2). Useful things to know: - [Access admin menu](#acessing-admin-menu) - [Changing game mode](#changing-game-modes) - [Changing maps](#changing-maps) - [Player commands](#player-commands) Getting up and running: - [Running on Google Cloud](#running-on-google-cloud) - [Running on Linux](#running-on-linux) - [Running in Docker](#running-in-docker) - [Running on Windows](#running-on-windows) ## Mods installed Mod | Version | Why --- | --- | --- [Metamod:Source](http://www.sourcemm.net/downloads.php?branch=master) | `2.0.0-1314` | Sits between the Game and the Engine, and allows plugins to intercept calls that flow between [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp) | `281` | 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#) [CS2_ExecAfter](https://github.com/kus/CS2_ExecAfter) | `1.0.0` | Executes a command after server event (i.e. OnMapStart) or a delay. [CS2 Remove Map Weapons](https://github.com/kus/CS2-Remove-Map-Weapons) | `1.0.1` | Remove weapons from the map in CS2 as `mp_weapons_allow_map_placed 0` does not work. [CS2_DamageInfo](https://github.com/KitsuneLab-Development/CS2_DamageInfo) | `2.3.4` | 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](https://github.com/nickj609/GameModeManager)| `1.0.43` | A simple Counter-Strike 2 server plugin that helps admins manage game modes and map groups. [Rock The Vote](https://github.com/abnerfs/cs2-rockthevote)| `1.8.5-custombuild` | General purpose cs2 map voting plugin, made with love from scratch [MatchZy](https://github.com/shobhit-pathak/MatchZy) | `0.8.6` | MatchZy is a plugin for CS2 for running and managing practice/pugs/scrims/matches with easy configuration! [MapConfigurator](https://github.com/ManifestManah/MapConfigurator)| `1.0.2` | Allows you to quick and easily create unique configuration files for each map on your server. [SimpleAdmin](https://github.com/connercsbn/SimpleAdmin/)| `0.1.2` | Adds basic administrator functions [CS2Rcon](https://github.com/LordFetznschaedl/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](https://github.com/DEAFPS/SharpTimer/)| `0.2.5` | SharpTimer is a simple Surf/KZ/Bhop/MG/Deathrun/etc CS2 Timer plugin [GunGame](https://github.com/ssypchenko/cs2-gungame)| `1.1.2` | GunGame mode on Counter Strike Sharp [K4-Arenas](https://github.com/KitsuneLab-Development/K4-Arenas)| `1.5.0` | All in one arena plugin, that you can use to have a ladder type gameplay. Support all map, 2v2/3v3/etc [CS2 Retakes](https://github.com/B3none/cs2-retakes)| `2.0.13` | CS2 implementation of retakes. Based on the version for CS:GO by Splewis. [CS2 Retakes Shared](https://github.com/B3none/cs2-retakes)| `2.0.13` | Shared library for CS2 Retakes. [CS2 Instadefuse](https://github.com/B3none/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](https://github.com/yonilerner/cs2-retakes-allocator)| `2.3.10` | Advanced weapon allocation for B3none/cs2-retakes [CS2 Whitelist](https://github.com/PhantomYopta/CS2_WhiteList)| `1.0.0`| Restricts access to the server for SteamID members/employees listed in the whitelist. [How?](#enable-whitelist-so-only-a-list-of-people-can-play) [CS2 Executes](https://github.com/zwolof/cs2-executes)| `1.0.6` | CS2 implementation of executes. Based on the version for CS:GO by Splewis. [CS2 Advertisement](https://github.com/partiusfabaa/cs2-advertisement)| `1.0.8` | Allows you to show ads in chat/center/panel. [How?](#enable-advertisements) [CS2 Deathmatch](https://github.com/NockyCZ/CS2-Deathmatch)| `1.2.1` | Custom Deathmatch CS2 plugin (Includes custom spawnpoints, multicfg, gun selection, spawn protection, etc) [OpenPrefirePrac](https://github.com/lengran/OpenPrefirePrac)| `0.1.41` | Multiple prefire practices on competitive maps and support multiplayer practicing simultaneously. [CS2-CustomVotes](https://github.com/imi-tat0r/CS2-CustomVotes)| `1.0.1` | A plugin for Counter-Strike 2 to create custom votes for settings. [deathrun-manager](https://github.com/leoskiline/cs2-deathrun-manager)| `0.0.8` | Deathrun Manager for CounterStrikeSharp Framework CS2. [AnnouncementBroadcaster](https://github.com/lengran/CS2AnnouncementBroadcaster) | `0.5` | Conditional messages, OnCommand, OnPlayerConnect, OnRoundStart, and TimerMsgs. [CS2FunMatchPlugin](https://github.com/TitaniumLithium/CS2FunMatchPlugin) | `1.1.1` | Random fun mode every round ## Share the love If you appreciate the project then please take the time to star the repository 🙏 Star the project ## Stay up to date Subscribe to release notifications and stay up to date with the latest features and patches: Subscribe to updates ## 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](https://steamcommunity.com/dev/managegameservers), 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](http://steamcommunity.com/dev/apikey) 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](#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`** ## Creating a LAN server Set the environment variable `LAN` to `1`. You also need to create an [authorization key](http://steamcommunity.com/dev/apikey) 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](#environment-variables). ## Environment variables ### Available via environment variable only *On Windows set these in `win.ini`.* 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](http://steamcommunity.com/dev/apikey) `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 `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](#custom-files) `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](https://steamcommunity.com/dev/managegameservers). Your server will not run online without this `SERVER_PASSWORD` | `` | If you want a password protected server `LAN` | `0` | If the server is a LAN only server `EXEC` | `on_boot.cfg` | Config file to run when server boots. If switching gamemode, it's recommended to do a delay see the example `on_boot.cfg` file `DUCK_DOMAIN` | `` | (Linux only) [Duck DNS](https://www.duckdns.org/) domain if you want to utalise the free service to get a domain for your server instead of IP `DUCK_TOKEN` | `` | (Linux only) [Duck DNS](https://www.duckdns.org/) access token to update domain when server boots ## 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](http://steamcommunity.com/dev/apikey) and set `API_KEY` to the key. 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](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](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](#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](#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 [workshop_id] --custom`. Refer to `scripts/add-map.py` for more information. ## Running on Google Cloud ### Create firewall rule ``` gcloud compute firewall-rules create source \ --allow tcp:27015-27020,tcp:80,udp:27015-27020 ``` ### Create instance Ensure you have all the settings for your [environment variables](#environment-variables). If you have issues with the server not handling load, you may want to consider [compute-optimized](https://cloud.google.com/compute/vm-instance-pricing#compute-optimized_machine_types) machine `c2-standard-4`. ``` gcloud beta compute instances create \ --maintenance-policy=TERMINATE \ --project= \ --zone=australia-southeast1-c \ --machine-type=n2-standard-2 \ --network-tier=PREMIUM \ --metadata=RCON_PASSWORD=changeme,STEAM_ACCOUNT=changeme,API_KEY=changeme,DUCK_DOMAIN=changeme,DUCK_TOKEN=changeme,startup-script="echo \"Delaying for 30 seconds...\" && sleep 30 && cd / && /gcp.sh" \ --no-restart-on-failure \ --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/compute.readonly,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \ --tags=source \ --image-family=ubuntu-2204-lts \ --image-project=ubuntu-os-cloud \ --boot-disk-size=60GB \ --boot-disk-type=pd-standard \ --boot-disk-device-name= ``` ### SSH to server ``` gcloud compute ssh \ --zone=australia-southeast1-c ``` ### Install mod ``` sudo su cd / && curl --silent --output "gcp.sh" "https://raw.githubusercontent.com/kus/cs2-modded-server/master/gcp.sh" && chmod +x gcp.sh && bash gcp.sh ``` If the installation has paused for a long time, restart the server and do it again. ### Stop server ``` gcloud compute instances stop \ --zone australia-southeast1-c ``` ### Start server ``` gcloud compute instances start \ --zone australia-southeast1-c ``` ### Delete server ``` gcloud compute instances delete \ --zone australia-southeast1-c ``` ### Push file to server from local machine For example a map: ``` On local: gcloud config set project cd /path/to/folder gcloud compute scp de_kus.vpk root@:/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 ``` ### Download from server `gcloud compute scp root@:/home/steam/cs2/gamecsgo/cfg/comp.cfg ~/Desktop/` ### Turn VM off at 3:30AM every day SSH into the VM Switch to root `sudo su` Check the timezone your server is running in `sudo hwclock --show` Open crontab file `nano /etc/crontab` Append to the end of the crontab file `30 3 * * * root shutdown -h now` Save `CTRL + X` ## Running on Linux Make sure you have **60GB free space**. Ensure you have all the settings for your [environment variables](#environment-variables). - **If setting up internet server:** Set environment variable `STEAM_ACCOUNT` to your [Game Server Login Token](https://steamcommunity.com/dev/managegameservers) Make sure you [port forward](https://portforward.com/router.htm) 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` to `1` ``` 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 see `CounterStrikeSharp` in the output - `css_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](#changing-game-modes). ## Running in Docker *Only tested on Windows 11 with WSL2 integration as backend* Make sure Docker is installed and about 40 GB disk space is free. 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 https://github.com/kus/cs2-modded-server.git` and run your server from inside of it. This way you can simply git pull updates. - **If setting up for internet server:** Set 'STEAM_ACCOUNT' variable in '.env'-file in the root if the repository. For workshop maps set 'API_KEY' in '.env'-file. - **Build docker image:** `docker build -t cs2-modded-server .` - **Run the server** `docker compose up` ## Running on Windows Make sure you have **60GB free space**. You can either [Download this repo](https://github.com/kus/cs2-modded-server/archive/master.zip) 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 https://github.com/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](https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip) and extract it inside `steamcmd` so you should have `\steamcmd\steamcmd.exe`. To download maps from the workshop, your server [needs access](https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive/Dedicated_Servers#Steam_Workshop) to the Steam Web API. To allow this, open `\win.ini` and set `cs_api_key` to your [Steam Web API Key](http://steamcommunity.com/dev/apikey). - **If setting up internet server:** Open `\win.ini` Set `IP` to your [public ip](http://checkip.amazonaws.com/) Set `STEAM_ACCOUNT` to your [Game Server Login Token](https://steamcommunity.com/dev/managegameservers) Set `API_KEY` to your [Steam Web API key](http://steamcommunity.com/dev/apikey) (required to play workshop maps) Make sure you [port forward](https://portforward.com/router.htm) 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.** - **If setting up LAN server:** Open `\win.ini` Set `LAN` to `1` Set `API_KEY` to your [Steam Web API key](http://steamcommunity.com/dev/apikey) (required to play workshop maps) [Add admins](#acessing-admin-menu) Run `win.bat` Accept both Private and Public connections on Windows Firewall. - **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 see `CounterStrikeSharp` in the output - `css_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](#changing-game-modes). ## FAQ ### Player commands #### !rtv Players can start a vote to change the map in the current mod by typing `!rtv` in chat. Vote to change map #### !gamemode Players can start a vote to change the game mode by typing `!gamemode` in chat. Vote to change game mode 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`. ### What maps are preconfigured with each mode? #### mg_active
de_ancient
changelevel de_ancient
de_anubis
changelevel de_anubis
de_inferno
changelevel de_inferno
de_mirage
changelevel de_mirage
de_nuke
changelevel de_nuke
de_dust2
changelevel de_dust2
de_vertigo
changelevel de_vertigo
#### mg_comp
cs_italy
changelevel cs_italy
cs_office
changelevel cs_office
de_vertigo
changelevel de_vertigo
de_ancient
changelevel de_ancient
de_anubis
changelevel de_anubis
de_dust2
changelevel de_dust2
de_inferno
changelevel de_inferno
de_mirage
changelevel de_mirage
de_nuke
changelevel de_nuke
de_overpass
changelevel de_overpass
de_vertigo
changelevel de_vertigo
de_assembly
changelevel de_assembly
de_cbble
host_workshop_map 3070212801
de_cache
host_workshop_map 3070244931
de_pipeline
host_workshop_map 3079872050
de_biome
host_workshop_map 3075706807
mp_raid
host_workshop_map 3070346180
de_mutiny
host_workshop_map 3070766070
cs_assault
host_workshop_map 3070594412
de_ruins_d_prefab
host_workshop_map 3072352643
cs_militia
host_workshop_map 3089953774
de_aztec
host_workshop_map 3070960099
de_akiba
host_workshop_map 3108513658
cs_insertion2
host_workshop_map 3236615060
de_train
host_workshop_map 3070284539
de_mills
changelevel de_mills
de_thera
changelevel de_thera
de_season
host_workshop_map 3073892687
#### mg_wingman
cs_italy
changelevel cs_italy
cs_office
changelevel cs_office
de_vertigo
changelevel de_vertigo
de_ancient
changelevel de_ancient
de_anubis
changelevel de_anubis
de_dust2
changelevel de_dust2
de_inferno
changelevel de_inferno
de_mirage
changelevel de_mirage
de_nuke
changelevel de_nuke
de_overpass
changelevel de_overpass
de_vertigo
changelevel de_vertigo
ar_shoots
changelevel ar_shoots
ar_baggage
changelevel ar_baggage
gd_rialto
host_workshop_map 3085490518
de_safehouse
host_workshop_map 3070550406
de_lake
host_workshop_map 3070563536
de_bank
host_workshop_map 3070581293
de_shortdust
host_workshop_map 3070612859
de_assembly
changelevel de_assembly
de_cbble
host_workshop_map 3070212801
de_cache
host_workshop_map 3070244931
de_pipeline
host_workshop_map 3079872050
de_biome
host_workshop_map 3075706807
mp_raid
host_workshop_map 3070346180
de_mutiny
host_workshop_map 3070766070
cs_assault
host_workshop_map 3070594412
de_ruins_d_prefab
host_workshop_map 3072352643
de_train
host_workshop_map 3070284539
de_sakura
host_workshop_map 3082340867
de_memento
changelevel de_memento
skatepark
host_workshop_map 3309665004
de_palais
host_workshop_map 3257582863
#### mg_dm
cs_italy
changelevel cs_italy
cs_office
changelevel cs_office
de_vertigo
changelevel de_vertigo
de_ancient
changelevel de_ancient
de_anubis
changelevel de_anubis
de_dust2
changelevel de_dust2
de_inferno
changelevel de_inferno
de_mirage
changelevel de_mirage
de_nuke
changelevel de_nuke
de_overpass
changelevel de_overpass
de_vertigo
changelevel de_vertigo
ar_shoots
changelevel ar_shoots
ar_baggage
changelevel ar_baggage
gd_rialto
host_workshop_map 3085490518
de_safehouse
host_workshop_map 3070550406
de_lake
host_workshop_map 3070563536
de_bank
host_workshop_map 3070581293
de_shortdust
host_workshop_map 3070612859
ar_pool_day
changelevel ar_pool_day
fy_iceworld
host_workshop_map 3070238628
daymare
host_workshop_map 3072640420
aim_theorem
host_workshop_map 3070348309
de_assembly
changelevel de_assembly
de_cbble
host_workshop_map 3070212801
de_cache
host_workshop_map 3070244931
de_pipeline
host_workshop_map 3079872050
de_biome
host_workshop_map 3075706807
dm_desk
host_workshop_map 3077599381
fun_bounce
host_workshop_map 3088183343
1v1aim_map_longdustversion_d
host_workshop_map 3082605693
ar_churches_s2r
host_workshop_map 3070291913
mcdonalds
host_workshop_map 3134466699
aim_ag_texture_city_advanced
host_workshop_map 3082113929
traningoutside
host_workshop_map 3080973179
shipment_version_1_0
host_workshop_map 3086555291
aim_ag_texture2
host_workshop_map 3074961197
aim_ag_texture_jungle
host_workshop_map 3095778105
cs2_bloodstrike
host_workshop_map 3071890065
gg_simpsons_vs_flanders_v2
host_workshop_map 3109232789
de_akiba
host_workshop_map 3108513658
cs_facingworlds-99
host_workshop_map 3112806723
de_train
host_workshop_map 3070284539
de_sakura
host_workshop_map 3082340867
de_memento
changelevel de_memento
de_mills
changelevel de_mills
de_thera
changelevel de_thera
de_palais
host_workshop_map 3257582863
school_d_environment_prefab
host_workshop_map 3343693110
#### mg_gg
ar_shoots
changelevel ar_shoots
ar_baggage
changelevel ar_baggage
ar_pool_day
changelevel ar_pool_day
de_assembly
changelevel de_assembly
fy_iceworld
host_workshop_map 3070238628
daymare
host_workshop_map 3072640420
mcdonalds
host_workshop_map 3134466699
aim_theorem
host_workshop_map 3070348309
de_safehouse
host_workshop_map 3070550406
de_lake
host_workshop_map 3070563536
de_bank
host_workshop_map 3070581293
fun_bounce
host_workshop_map 3088183343
1v1aim_map_longdustversion_d
host_workshop_map 3082605693
ar_churches_s2r
host_workshop_map 3070291913
aim_ag_texture_city_advanced
host_workshop_map 3082113929
traningoutside
host_workshop_map 3080973179
shipment_version_1_0
host_workshop_map 3086555291
aim_ag_texture2
host_workshop_map 3074961197
aim_ag_texture_jungle
host_workshop_map 3095778105
cs2_bloodstrike
host_workshop_map 3071890065
gg_simpsons_vs_flanders_v2
host_workshop_map 3109232789
school_d_environment_prefab
host_workshop_map 3343693110
#### mg_1v1
aim_redline_fp
host_workshop_map 3070253400
#### mg_bhop
bhop_at_night
host_workshop_map 3077211069
bhop_ragnarok
host_workshop_map 3077153735
bhop_zunron
host_workshop_map 3077475505
bhop_1derland
host_workshop_map 3077596014
bhop_whiteshit
host_workshop_map 3078523849
bhop_cherryblossom
host_workshop_map 3082038560
bhop_arcturus
host_workshop_map 3088973190
bhop_kiwi_cwfx
host_workshop_map 3095219437
#### mg_kz
only_up
host_workshop_map 3074758439
kz_dima
host_workshop_map 3343029934
ewii_challenge
host_workshop_map 3170668869
kz_hub
host_workshop_map 3070220367
hellcasecyrilchallenge
host_workshop_map 3145779590
kz_checkmate
host_workshop_map 3070194623
kz_victoria
host_workshop_map 3086304337
kz_rc_stonehenge
host_workshop_map 3072219045
kz_sxb2_cxz
host_workshop_map 3083714192
kz_rc_twotowers
host_workshop_map 3083509404
kz_simplyhard
host_workshop_map 3078311932
kz_nomibo
host_workshop_map 3077122656
kz_sxb2_biewan
host_workshop_map 3076000218
kz_ggsh
host_workshop_map 3072744536
kz_ltt
host_workshop_map 3072699538
#### mg_surf
surf_kitsune
host_workshop_map 3076153623
surf_utopia_njv
host_workshop_map 3073875025
surf_beginner
host_workshop_map 3070321829
surf_mesa_revo
host_workshop_map 3076980482
surf_deathstar
host_workshop_map 3080544577
surf_rookie
host_workshop_map 3082548297
surf_benevolent
host_workshop_map 3098972556
surf_ace
host_workshop_map 3088413071
#### mg_minigames
mg_skeet_multigames_v7
host_workshop_map 3082120895
mg_lego_course_2
host_workshop_map 3202752274
mg_warmcup_headshot
host_workshop_map 3076765511
#### mg_battleroyale
br_electrified
host_workshop_map 3330484099
br_stacks
host_workshop_map 3297489255
br_flood
host_workshop_map 3267454508
minecraft
host_workshop_map 3186779271
#### mg_deathrun
deathrun_playground
host_workshop_map 3164611860
deathrun_egypt
host_workshop_map 3311285877
deathrun_civilization
host_workshop_map 3188021118
deathrun_iceworld_cs2
host_workshop_map 3083325292
#### mg_course
cr_devisland_p1_v1
host_workshop_map 3076483842
mg_switch_course_v2
host_workshop_map 3070439729
cr_minecraft_jb_v2
host_workshop_map 3070896876
mg_metro_course_v1
host_workshop_map 3070463151
mg_alley_course_v2
host_workshop_map 3070455802
mg_glave_course_v2
host_workshop_map 3070445185
mg_office_course_v3
host_workshop_map 3070459211
mg_metal_course_v2
host_workshop_map 3070464208
mg_acrophobia_run_v2
host_workshop_map 3070463620
mg_metro_course_s2
host_workshop_map 3071040020
mg_circle_course_v3
host_workshop_map 3070434475
mg_simpsons_course_v2
host_workshop_map 3070447697
mg_sonic_course_v2
host_workshop_map 3070452642
mg_sky_realm_v3
host_workshop_map 3070451616
#### mg_scoutzknivez
scoutzknivez_pure_cs2
host_workshop_map 3073929825
ar_dizzy
host_workshop_map 3070553020
#### mg_hns
infernohideandseek
host_workshop_map 3097563690
seek_town_bs
host_workshop_map 3074479691
winterday_bs
host_workshop_map 3070951079
minus_denhet
host_workshop_map 3070541369
hs_lake
host_workshop_map 3071094345
#### mg_soccer
futsal
host_workshop_map 3293224257
ka_soccer_2009
host_workshop_map 3070198374
#### mg_awp
awp_bhop_rocket
host_workshop_map 3142070597
#### mg_aim
aim_map
host_workshop_map 3084291314
freebet_aim_map
host_workshop_map 3146122036
fy_pool_day
host_workshop_map 3070923343
aim_ak-colt_CS2
host_workshop_map 3078701726
aim_usp
host_workshop_map 3085962528
aim_deagle
host_workshop_map 3075996446
#### mg_prefire
de_ancient
changelevel de_ancient
de_dust2
changelevel de_dust2
de_inferno
changelevel de_inferno
de_mirage
changelevel de_mirage
de_overpass
changelevel de_overpass
de_anubis
changelevel de_anubis
de_nuke
changelevel de_nuke
#### mg_Casual16
as_oilrig
host_workshop_map 3104677430
cs_assult_classic
host_workshop_map 3215705579
de_aztec_classic
host_workshop_map 3213800338
de_dust_classic
host_workshop_map 3078095785
de_dust2_classic
host_workshop_map 3201205818
cs_italy_classic
host_workshop_map 3212419403
cs_militia_classic
host_workshop_map 3144773563
de_nuke_classic
host_workshop_map 3205793205
cs_office_classic
host_workshop_map 3216844784
de_survivor_classic_m
host_workshop_map 3217247541
#### mg_45
de_vertigo_45
host_workshop_map 3276886893
de_anubis_silly
host_workshop_map 3245985233
de_overpass_45
host_workshop_map 3270066070
de_nuke_silly
host_workshop_map 3245245780
de_mirage45
host_workshop_map 3270516952
### How do I connect to RCON remotely? [Download SourceAdminTool](https://nightly.link/Drifter321/admintool/workflows/build/master) ([source](https://github.com/Drifter321/admintool)) for your OS (you can read about it [here](https://forums.alliedmods.net/showthread.php?t=289370)) and click `Servers > Add Servers` and put in the `: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`** ### Acessing admin menu Admins are managed by [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp) using the [Admin Framework](https://docs.cssharp.dev/admin-framework/defining-admins/). 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_example/addons/counterstrikesharp/configs/admins.json](https://github.com/kus/cs2-modded-server/blob/master/custom_files_example/addons/counterstrikesharp/configs/admins.json). To set your admins on your own server use this file as a reference and use the [custom files](#custom-files) system to have your own version. Ensure your `.json` files are valid JSON by using [this website](https://jsonformatter.org/json-viewer). 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`. ### Use number keys to operate menu instead of typing !1 in chat 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" ``` ### Changing maps Admin change map menu 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. ### Changing settings 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. ### Changing game modes Admin change game mode menu 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 | | `!rcon exec awp` | Awp only | | `!rcon exec bhop` | Bunny hop maps | | `!rcon exec br` | Battle Royale | | `!rcon exec comp` | Competitive using [MatchZy](https://github.com/shobhit-pathak/MatchZy#usage-commands) | | `!rcon exec course` | 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 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. ### RCON doesn't work Using RCON whilst connected to the server does not work. See discussion [here](https://www.reddit.com/r/GlobalOffensive/comments/167spzi/cs2_rcon/). The current work arounds are: - I have included [CS2Rcon](https://github.com/LordFetznschaedl/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](https://github.com/fpaezf/CS2-RCON-Tool-V2). 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`** ```bash 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`. ### How do I add more bots? 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](#custom-files)" for this file [custom_bots.cfg](https://github.com/kus/cs2-modded-server/blob/master/game/csgo/cfg/custom_bots.cfg). If you copy [custom_bots.cfg](https://github.com/kus/cs2-modded-server/blob/master/game/csgo/cfg/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`. ### 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`. ### 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](http://www.sourcemm.net/downloads.php?branch=master) and [CounterStrikeSharp](https://github.com/roflmuffin/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: `rsync -rhavz --exclude "._*" --exclude ".DS_Store" --partial --progress --stats ./addons/ /Users/kus/dev/personal/counter-strike/cs2-modded-server/game/csgo/addons/` If you are on Windows, from the [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp/releases) with runtime zip, you need to copy the `api`,`bin`, `dotnet` folders from the `/addons/counterstrikesharp` folder to`game/csgo/addons/windows/counterstrikesharp` in this repo. ### Enable advertisements 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. ### 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)[*](https://wiki.alliedmods.net/Installing_metamod:source). `cd /home/steam/cs2/bin/` and `rm libgcc_s.so.1` and restart the server. ## License See `LICENSE` for more details.