Configuring a CS:GO server is much more complicated than any other Counter Strike, though this does allow for a greater amount of customization. There are four basic things you have to edit to configure your server, and then a few optional files.
Game type
The most basic configuration of your GO server is in the server's start command line. This allows you to start a game in a certain game mode. Add these commands to your server's command line to start a game in your desired game type:
Deathmatch:
Code:
+game_type 1 +game_mode 2
ArmsRace:
Code:
+game_type 1 +game_mode 0
Demolition:
Code:
+game_type 1 +game_mode 1
Classic Casual:
Code:
+game_type 0 +game_mode 0
Classic Competitive:
Code:
+game_type 0 +game_mode 1
GameModes_Server.txt
Note: Do
not edit gamemodes.txt. This file gets overwritten every time an update is released. Instead, edit GameModes_Server.txt.
In your game server's /csgo directory, there is a file called GameModes_Server.txt.example. (Once you edit the file to your liking, make sure you save it as GameModes_Server.txt.) This file is loaded first upon launch of the server, and it servers two functions.
- You will use this file to set the server's max player count.
- You will use this server to set up a map group if you are not using the workshop system
Within the following spoiler tags, I've posted an example of the GameModes_Server.txt file for my deathmatch server.
Code:
"GameModes_Server.txt"
{
"gameTypes"
{
"classic"
{
"gameModes"
{
"casual"
{
"maxplayers" "21"
"mapgroupsMP"
{
"mg_deathmatch" ""
}
}
}
}
}
"mapgroups"
{
//
// Map cycle groups
//
"mg_deathmatch"
{
"name" "mg_deathmatch"
"maps"
{
"de_dust" ""
"de_dust2" ""
"cs_italy" ""
"de_nuke" ""
"de_train" ""
"de_inferno" ""
"cs_office" ""
"de_aztec" ""
"de_dust_se" ""
"de_dust2_se" ""
"cs_italy_se" ""
"de_nuke_se" ""
"de_train_se" ""
"de_inferno_se" ""
"cs_office_se" ""
"de_aztec_se" ""
}
}
}
}
server.cfg
The next configuration file that is loaded is the server.cfg file, located in /csgo/cfg. This is a file where you can put basic server configurations that aren't handled by gamemode_<gametype>.cfg, such as fastdl URLs or rcon passwords. Mine contains these things:
Code:
hostname "[AM] 20 slot Competitive 1|competitive maps|128 tick|absurdminds.net"
rcon_password "************"
sv_password "" //Only set this if you intend to have a private server!
sv_allowdownload 1
sv_downloadurl "***************"
log on
logaddress_delall
logaddress_add absurdminds.no-ip.org:27500
exec banned_user.cfg
exec banned_ip.cfg
writeip
writeid
hostport 27019
mp_match_end_restart 0
sv_region 0
sv_allow_lobby_connect_only 1
fps_max 1000
sv_tags "20,absurdminds,vanilla,se,competitive"
sv_hibernate_when_empty 0
sv_hibernate_postgame_delay 0
gamemode_<gametype>_server.cfg
The final file that is loaded is the gamemode_<gametype>.cfg file. Within the /csgo/cfg file, there are five different files, one for each possible game type. Since I am running a competitive server, my interest lies with gamemode_competitive.cfg. This is where I set game-specific configurations, such as bot_quotas, alltalk, or round times. Once you edit your gamemode_competitive.cfg file, save it as gamemode_competitive_server.cfg. If you don't save it thusly, it will be overwritten any time you update the server.
Within the spoiler tags is an example of my gamemode_competitive_server.cfg
Code:
// bot convars
bot_quota_mode fill
bot_quota 0
bot_defer_to_human_items 1
bot_defer_to_human_goals 0
bot_difficulty 3
bot_chatter normal
bot_autodifficulty_threshold_low -2.0 // Value between -20.0 and 20.0 (Amount below avg human contribution score, below which a bot should raise its difficulty)
bot_autodifficulty_threshold_high 0.0 // Value between -20.0 and 20.0 (Amount above avg human contribution score, above which a bot should lower its difficulty)
// friendly fire convars
mp_friendlyfire 1
ff_damage_reduction_grenade 0.85
ff_damage_reduction_bullets 0.33
ff_damage_reduction_other 0.4
ff_damage_reduction_grenade_self 1
cash_player_killed_teammate -3300
//match time convars
mp_maxrounds 30
mp_halftime 1
mp_match_can_clinch 1
mp_warmuptime 35
mp_timelimit 0
mp_roundtime 2
mp_freezetime 10
mp_buytime 30
mp_force_pick_time 15
mp_match_end_restart 0
//camera and speech convars
mp_deathcam_skippable 1
mp_forcecamera 1 // Set to 1 for team only spectating.
spec_freeze_time 5.0
spec_freeze_panel_extended_time 0
sv_alltalk 0
sv_deadtalk 1
//weapon convars
mp_defuser_allocation 0
mp_death_drop_gun 1 // 0=none, 1=best, 2=current or best
mp_death_drop_grenade 2 // 0=none, 1=best, 2=current or best
mp_death_drop_defuser 1
mp_molotovusedelay 0
sv_ignoregrenaderadio 0
mp_weapons_allow_zeus 0
mp_free_armor 0
ammo_grenade_limit_flashbang 2
ammo_grenade_limit_total 4
mp_c4timer 35
//other convars
sv_allow_votes 1 // Voting allowed in this mode
sv_arms_race_vote_to_restart_disallowed_after 0
mp_solid_teammates 1
spec_show_xray 1
//basic cash convars
mp_afterroundmoney 0
mp_playercashawards 1
mp_teamcashawards 1
mp_startmoney 800
mp_maxmoney 16000
//team cash convars
cash_team_terrorist_win_bomb 3500
cash_team_elimination_hostage_map 3000
cash_team_elimination_bomb_map 3250
cash_team_win_by_time_running_out 3250
cash_team_win_by_defusing_bomb 3500
cash_team_win_by_hostage_rescue 3500
cash_team_loser_bonus 1400
cash_team_loser_bonus_consecutive_rounds 500
cash_team_rescued_hostage 750
cash_team_hostage_alive 150
cash_team_planted_bomb_but_defused 800
cash_team_hostage_interaction 150
//player cash convars
cash_player_killed_enemy_default 300
cash_player_killed_enemy_factor 1
cash_player_bomb_planted 300
cash_player_bomb_defused 300
cash_player_rescued_hostage 1000
cash_player_interact_with_hostage 150
cash_player_damage_hostage -30
cash_player_killed_hostage -1000
//UNUSED//
// gungame tr defaults (not used in this mode)
mp_ggtr_bomb_respawn_delay 0
mp_ggtr_bomb_detonation_bonus 1
mp_ggtr_bomb_defuse_bonus 1
mp_ggtr_bomb_pts_for_upgrade 2
mp_ggtr_bomb_pts_for_he 3
mp_ggtr_bomb_pts_for_flash 4
mp_ggtr_bomb_pts_for_molotov 5
mp_ggtr_halftime_delay 0.0
mp_ggtr_end_round_kill_bonus 1
mp_ggtr_last_weapon_kill_ends_half 0
// gungame progressive defaults (not used in this mode)
mp_gungameimmunitytime 4
mp_ggprogressive_round_restart_delay 15
motd.txt
You can edit your motd by editing the file /csgo/motd.txt. You can either edit it with html or you can link to an online page by placing the URL in the file. My motd simply contains a link to
Code:
http://forums.absurdminds.net/motd/motd.html
mapcycle.txt
mapcycle.txt no longer controls the cycle of maps. To control the order of maps, you need to either edit the list in GameModes_Server.txt or edit the order in your workshop collection.
If you are using SourceMod to vote for maps, you can use mapcycle.txt to determine the maps being voted on like this:
First, edit /csgo/addons/sourcemod/configs/maplists.cfg
Code:
"MapLists"
{
/**
* Default requests go right to the mapcyclefile.
*/
"default"
{
"target" "mapcyclefile"
}
/* Admin menu, map menu */
"sm_map menu"
{
"file" "mapcycle.txt"
}
/* Admin menu, map voting menu */
"sm_votemap menu"
{
"file" "mapcycle.txt"
}
/* For the "randomcycle" plugin */
"randomcycle"
{
"target" "default"
}
/* For the "mapchooser" plugin */
"mapchooser"
{
"target" "default"
}
/* For the "nominations" plugin */
"nominations"
{
"target" "default"
}
}
Next, put all of your maps in the mapcycle.txt. If you are using
workshop files, it will look like this
Code:
workshop/279697343/am_grass2
workshop/252175350/am_plain
workshop/328763607/am_nuke2
workshop/252769284/aim_travesty
workshop/288379017/am_desert2
workshop/256601025/am_water
workshop/256877071/am_ramps
workshop/260149928/am_warehouse
workshop/279177142/am_aztec2
workshop/271463360/am_dust
workshop/280544066/am_dust2
workshop/279708083/am_must2
workshop/255301758/am_dust2_cat
workshop/279705991/am_texture2
workshop/285223331/am_twotrains_am
Otherwise, just put the map names in like the default one has.
Steam Game Server Login Tokens
Valve requires every server to be registered with a unique Game Server Login Token. If you run ten servers, you need ten tokens. To generate a token, visit the
Steam Game Server Account Management page. This page gives the specifics of generating this token. The token needs to be set in your server startup command line.