A single modded Counter-Strike: Global Offensive Dedicated Server that you can change the active mod on the server from the admin menu and is setup for:
- GunGame +Turbo (get the next weapon straight away) +Deathmatch (respawn) +Quake sounds +Mario (on 3 kills)
- GunGame +FFA (free for all) +Turbo (get the next weapon straight away) +Deathmatch (respawn) +Quake sounds +Mario (on 3 kills)
- Pug Setup (competitive - alternative to WarMod, has captains who can pick team)
- WarMod (competitive)
- Scoutz Knivez
- Deathmatch Free For All
- Prop Hunt / Hide n Seek
- Retakes
- Wingman
- Multi 1v1
- Practice (record grenade throws etc)
- Minigames
- Death Racers (Wipeout) (Steam API key required)
- Jump Training (Steam API key required)
- Squid Game (Steam API key required)
- Red Bull Flick (only Flux map which has surfing and jump pads Steam API key required)
- Fortnite (Steam API key required)
- Go Kart (Steam API key required)
- Fall Guys (Steam API key required)
- WarOwl Teleport Gamemode (Steam API key required)
- Deathrun
- Surf
- Soccer
- Capture The Flag
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, CS:GO 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 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.
The simple quick setup:
- Create your firewall rules
- Provision your server on Google Cloud
- SSH into server
- Install mod
- Install maps/sounds/models/textures for custom maps/mods
- Create your custom files for hostname, admins etc
- Ensure you have followed the steps for creating an online server or LAN server
- Kill server if running
./stop.sh
and start againgcp.sh
(if on Google Cloud) orinstall.sh
(on Linux)
Your server should be up and running!
Useful things to know:
- Access admin menu
- Changing game mode
- If you follow the steps above and use my default settings and config files it will automatically use my FastDL server so users download your assets quickly and takes the strain of the server.
Getting up and running:
Mod | Version | Why |
---|---|---|
Metamod:Source | 1.11.0-1148 |
Sits between the Game and the Engine, and allows plugins to intercept calls that flow between |
SourceMod | 1.11.0-6931 |
SourceMod is server modification for any game that runs on the Half-Life 2 engine |
GunGame | 1.2.16 |
Kill an enemy with the current weapon to get next weapon, first person to go through every weapon wins |
DeathMatch | 1.8.0 |
Required for GunGame to enable spawn protection and other things to the game |
Quake Sounds | 3.5.0 |
Plays sounds and displays text at certain events sometimes based on the number of kills |
NoBlock | 1.4.2 |
Removes player vs player collisions |
csgo-pug-setup | 2.0.7 |
This is a useful plugin for managing pug games, especially 10 mans/gathers |
PugSetup RoundRestore | 1.2 |
Restore the match to the previous round for pug setup |
WarMod | 20.07.15.1214 |
Used for competitive matches, and provides the flexibility to suit any form of competition, including large tournaments down to clan matches |
Practice Mod | 1.3.3 |
Private team/individual practice servers |
KZTimer Jumpstats | 2.3 |
KZTimer Jumpstats With Ownages & More! |
Multi 1v1 | 1.1.9 |
Sets up 2+ players in separate 1v1 arenas, when all the arenas are done fighting, the winners move up an arena and the losers move down an arena |
AbNeR DeathRun Manager | 2.6 |
Automates Deathrun Server |
Map configs | 1.3 |
Load mod settings on map change for mods that don't have exec's on map change |
Deathmatch v2 | 2.0.9 |
Custom deathmatch |
Retakes | 0.3.4 |
Site retake gamemode |
Retakes Autoplant | 2.3.0 |
Automatically plant the bomb at the start of the round |
Retakes MyWeaponAllocator | 2.3 |
This weapon allocator simulates different kinds of rounds |
Instant Defuse | 1.2.1 |
Instantly defuse the bomb if no Terrorists are alive and there is a sufficient amount of time remaining |
RankMe Kento Edition | 3.0.3 |
Stats |
DHooks | 2.2.0-detours17 |
Required by Practice Mod |
SoccerMod | 2017.5.5 |
Soccer gamemode |
Command Time-Traveler | 1.2.0 |
Run a command in the future |
P Tools and Hooks | 1.1.3-build20 |
Additional CS:GO Hooks and Natives |
Gloves | 1.0.5 |
Custom gloves |
Weapon & Knives | 1.7.7-2fa2527 |
Custom weapon skins |
Accelerator | 2.5.0-cd575aa |
Crash Reporting That Doesn't Suck |
Capture the flag | 1.2 |
Capture the flag for CS:GO |
Models in map | 1.2 |
Allows you to place models in map. Required for CTF |
Easy Downloader | 1.03 |
Downloads and Precaches Files/Folders. Required for CTF |
PropHunt | 3.0.0 |
Terrorists choose a model and hide, and CTs try to find and kill them. |
Sound Info Library | 1.0.1 |
Better calculation of sound length and information required for PropHunt |
SpeedRules | 1.0 |
Advanced system to sync speed rules required for PropHunt |
Simple-Downloader | 1.0 |
Force clients to download files (audio for PropHunt) |
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 /csgo/addons/sourcemod/configs/admins_simple.ini
. So to make your tweak to it, you would copy that file to /custom_files/addons/sourcemod/configs/admins_simple.ini
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/sourcemod/configs/admins_simple.ini
and overwrite the default mod file at /csgo/addons/sourcemod/configs/admins_simple.ini
.
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 /csgo/cfg/custom_gg.cfg
to /custom_files/cfg/custom_gg.cfg
and and write hostname "shipREKT GunGame +Deathmatch +Turbo"
and any other settings you want and this file will overwrite /csgo/cfg/custom_gg.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.
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 or create a custom file for /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.
Create a custom file for /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
.
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 |
MOD_URL |
https://github.com/kus/csgo-modded-server/archive/master.zip |
The zip for mod files to download and extract (defaultly this repo) |
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 |
These values can be set via environment variable or a config file in the custom files directory.
Copy /csgo/cfg/secrets.cfg
to /custom_files/cfg/secrets.cfg
and write the values you want and this file will overwrite /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 |
You can source your own maps and update csgo/mapcycle_*
to match or you can use my bundled maps that my server uses.
Linux:
# cd to "csgo" parent directory so you are in the same folder as srcds
cd /home/steam/csgo/
curl --silent --output "automate.sh" "https://raw.githubusercontent.com/kus/csgo-modded-server-assets/master/automate.sh" && chmod +x automate.sh && bash automate.sh
Windows:
Download, unzip and unbzip all the files with 7-Zip and copy the contents from the csgo/ folder into your servers csgo/csgo/ folder.
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 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.
By default the download limit of CS:GO is capped at 20kb/s and also adds additional strain to servers if multiple clients are downloading files at the same time on map changes.
sv_downloadurl allows CS:GO clients to get custom server content (maps/sounds etc) at high speeds from web servers using HTTP which also takes the strain off the game server.
A bash script is included to make this process easy and automatically create the correct directory structure and compress your files with bzip2 and create a "fastdl" folder which you simply host on a webserver.
Create a custom file for /csgo/cfg/env.cfg
following the custom files steps (/custom_files/cfg/env.cfg
) and set sv_downloadurl
to http://yoursite.com/fastdl/csgo
, and sv_allowdownload
to 0
.
Windows users can download this and manually create the directory structure and compress the files. Anything in maps
, sounds
, materials
, models
and you need to keep the same directory structure. You should end up with something like:
fastdl
-csgo
--maps
--sounds
--materials
--models
If you use my bundled maps the env.cfg
is defaultly setup to use my FastDL server so you don't have to change anything.
gcloud compute firewall-rules create source \
--allow tcp:27015-27020,tcp:80,udp:27015-27020
Ensure you have all the settings for your environment variables.
If you have issues with the server not handling load, you may want to consider compute-optimized machine c2-standard-4
.
gcloud beta compute instances create <instance-name> \
--maintenance-policy=TERMINATE \
--project=<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,MOD_URL=https://github.com/kus/csgo-modded-server/archive/master.zip,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=<instance-name>
gcloud compute ssh <instance-name> \
--zone=australia-southeast1-c
sudo su
cd / && curl --silent --output "gcp.sh" "https://raw.githubusercontent.com/kus/csgo-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.
gcloud compute instances stop <instance-name> \
--zone australia-southeast1-c
gcloud compute instances start <instance-name> \
--zone australia-southeast1-c
gcloud compute instances delete <instance-name> \
--zone australia-southeast1-c
For example a map:
On local:
gcloud config set project <project>
cd /path/to/folder
gcloud compute scp soccer_breezeway_lite.bsp root@<instance-name>:/home/steam/csgo/csgo/maps --zone australia-southeast1-c
On server SSH:
cd /home/steam/csgo/csgo/maps
chown steam:steam soccer_breezeway_lite.bsp
chmod 644 soccer_breezeway_lite.bsp
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
If running an internet server, and your Steam Game Server Login Token is tied to your account, Steam has banned the token plus a 30 day cool down for the account that created it in the past. Read about it here. There haven't been any bans in the last few years, and there are plenty of servers running these plugins, so do so at your own risk.
If you want to disable these plugins do the following:
Edit csgo/addons/sourcemod/configs/core.cfg
and change "FollowCSGOServerGuidelines" "no"
to "yes"
Make sure you have 40GB 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. -
If setting up LAN server:
Set environment variable
LAN
to1
sudo su
export RCON_PASSWORD="changeme"
export API_KEY="changeme"
export STEAM_ACCOUNT=""
export MOD_URL="https://github.com/kus/csgo-modded-server/archive/master.zip"
export SERVER_PASSWORD=""
export PORT="27015"
export TICKRATE="128"
export MAXPLAYERS="32"
cd / && curl --silent --output "install.sh" "https://raw.githubusercontent.com/kus/csgo-modded-server/master/install.sh" && chmod +x install.sh && bash install.sh
-
If running for the first time
Once the CS:GO server has started close it
Copy your maps to
/home/steam/csgo/csgo/maps/
or you can use my bundled mapsUpdate each
/csgo/mapcycle_
file to match your mapsOpen
/install.sh
and after it dynamically createscfg/env.cfg
you there is commented out code that will dynamically overwrite/addons/sourcemod/configs/admins_simple.ini
with your own admins. Simply update the Steam ID's and uncomment the lines.Run
./install.sh
again
When you join the server you can change game modes.
Make sure you have 40GB free space.
Download this repo and extract it to where you want your server (i.e. C:\Server\csgo-modded-server
). All the following instructions will use this as the root.
Create a folder steamcmd
and download SteamCMD and extract it inside steamcmd
so you should have \steamcmd\steamcmd.exe
.
-
If setting up internet server:
Open
\csgo\cfg\env.cfg
Set
sv_setsteamaccount
to your Game Server Login TokenOpen
\win.ini
Set
ip_internet
to your public ipMake sure you port forward on your router TCP:
27015
and UDP:27015
&27020
so players can connect from the internet. -
If setting up LAN server:
Open
\csgo\cfg\env.cfg
Set
sv_lan
to1
Run win.bat
Accept both Private and Public connections on Windows Firewall.
-
If running for the first time
Once the CS:GO server has started close it
Copy your maps to
\server\csgo\maps\
or you can use my bundled maps (you need to unzip them all)If you want to use my bundled maps and this server setup you can use
https://raw.githubusercontent.com/kus/csgo-modded-server-assets/master/csgo
for your yoursv_downloadurl
incfg/env.cfg
. Make sure you changesv_allowdownload
to0
.Update each
\csgo\mapcycle_
file to match your mapsRun
win.bat
again
When you join the server you can change game modes.
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/csgo/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 (/home/steam/csgo/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/csgo/bin/
and rm libgcc_s.so.1
and restart the server.
Download SourceAdminTool 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 gg.cfg
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 gg.cfg
.
Run the command exec sourcemod/restart
via the admin menu (Server EXEC > Restart), RCON or from the server console. It is best to restart the server when changing between mods as some code/settings aren't fully removed when changing between mods.
Periodically CS:GO will release updates which break Metamod:Source and SourceMod (the server won't start), and they will patch for the updates and release new updates. These need to be applied for the server to run properly. I will try to keep them up to date here which your server will automatically download if using my Linux gcp script but in the case I haven't updated them you can update them your self by checking the version I have bundled above and downloading the latest and putting on your server manually.
Download Linux and Window and in each folder do the following:
From /addons/sourcemod/
copy bin
, extensions
, gamedata
, sripting
, translations
to your servers /addons/sourcemod/
and Merge All
Download Linux and Window and in each folder do the following:
From /addons/metamod/
copy bin
to your servers /addons/metamod/
and Merge All
Bind a key to sm_admin
from console i.e. bind p sm_admin
then press p
and the admin menu should open.
If you want to add admins, the admins are located at the bottom of this file /addons/sourcemod/configs/admins_simple.ini
but we can't edit it directly as it gets overwritten when the mod updates. So we need to create a custom file following the custom files steps (copy the file to /custom_files/addons/sourcemod/configs/admins_simple.ini
) and add the admin(s) to the bottom i.e. "STEAM_0:0:56050" "9:z"
save the file and if the server is running you will need to close the server and start it again (with gcp.sh
/start.sh
/install.sh
/win.bat
) so the custom file is merged into your server.
If you want to read more about admin flags you can do that here.
Once you are setup as an admin, open up the admin menu and go to Server Commands > Exec Configs and choose a game mode i.e. "Competitive" and you need to change the map for it to properly kick in so open the admin menu again and Server Commands > Maps > de_dust2 and once the server changes map the new game mode will be running.
You can run multiple servers by modifying the launch scripts (install.sh/win.bat) and duplicating the lines that start the server and manually setting the port and optionally set the sourcemod path with +sm_basepath addons/sourcemod_custom +exec custom.cfg +servercfgfile customserver.cfg
You need SourceMod 1.10 to compile and add the following into addons/sourcemod/scripting/includes
tEasyFTP.inc bzip2.inc updater.inc zip.inc and copy the compiled warmod.smx
from addons/sourcemod/scripting/compiled
to addons/sourcemod/plugins/disabled
.
On Windows: Open up a command prompt (Start > Run > "cmd")
cd /d C:\git\csgo-modded-server\csgo\addons\sourcemod\scripting
spcomp warmod.sp -o compiled/warmod.smx
Type !props
in chat to open the props menu.
Stand where you want the T flag and click Spawn models > Ground
(and Ground2
for CT) and a platform should appear in front of you. Enable Move models (On)
and stand near it and grab it with your use key (E) and you can move it around. Rotate with reload (R) and push/pull with attack (Mouse1) and secondary fire (Mouse2).
Once you have it on the floor, click Save models
and close the props menu.
Type !ctf
in chat to open the Capture The Flag menu.
Aim at the floor where you want to place it and push Spawn T flag
and click Save flags
and close the menu.
Repeat this process for CT's and then reload the map and it should have the platform and flags.
See LICENSE
for more details.