Dedicated server for Steel Division 2
10K+
Steel Division 2 is thrilling in single-player mode with its new dynamic campaign system, and also offers an extensive multiplayer mode where up to 20 players can compete against each other simultaneously.
You must have installed docker engine on the host server.
If the host server run on Windows, you will need to start the commands using a shell compatible with Linux commands (git bash for example).
The latest image is available on Docker Hub. Downloading it is somewhat automatic when used for the first time, but you'll need to manually pull it to get any updates later on.
docker pull eugensystems/steeldivision2
Any person willing to run a dedicated server must request access by contacting us at [email protected]. Please provide the email you used to create your EugNet account. We will send you back a login and apikey pair to use.
Note that if you already own a dedicated key from one of Eugen other games, you don't have to contact the support. You can use your dedicated key with the associated login.
Besides, you must know that a pair login/apikey will allow you to start maximum 5 servers.
With that information, we'll be able to start a simple server as example.
We'll create an empty settings folder and add login.ini and variables.ini inside like that:
mkdir settings
cat <<EOF > settings/login.ini
login="mylogin"
dedicated_key="apikey"
EOF
cat <<EOF > settings/variables.ini
Name = My Custom Server
EOF
Replace mylogin and apikey with the information provided by the support.
You can then bind this folder in the container with a command line option like --mount type=bind,src=$(pwd)/settings,target=/server/settings.
It is recommended to start the docker in the host network but you can freely use some other private network as long as the correct public visible IP and Port are set. Just make sure you forward both UDP and the TCP to the exposed port because the server needs both to work.
export EXPOSEDIP=XX.XX.XX.XX
export EXPOSEDPORT=XXXX
docker run -d --net host --name sd2-server -e EXPOSEDIP -e EXPOSEDPORT --mount type=bind,src=$(pwd)/settings,target=/server/settings eugensystems/steeldivision2
EXPOSEDIP should be set to the visible server IP. If your server is behind a router, just make sure the packets will be forwarded from the public IP.
EXPOSEDPORT will be the server port used and the one where the game clients will try to connect to.
If you'd rather not or cannot use the host network (for example, if you start the Docker in a Windows host), you can instead publish the port to the host. Remember to publish both TCP and UDP.
docker run -d --name sd2-server -e EXPOSEDIP -e EXPOSEDPORT --mount type=bind,src=$(pwd)/settings,target=/server/settings -p $EXPOSEDPORT:$EXPOSEDPORT/udp -p $EXPOSEDPORT:$EXPOSEDPORT eugensystems/steeldivision2
Please note that these command can't be launched in a Windows "cmd". If you are on Windows, you must use another terminal (like git bash).
You can use rcon protocol to kick/ban people or change some server properties at runtime.
First you need to enable rcon by setting a password and port. You do that with the command line options -rcon_password and -rcon_port. You should then be able to connect using a rcon client.
docker run -d --net host --name sd2-server -e EXPOSEDIP -e EXPOSEDPORT --mount type=bind,src=$(pwd)/settings,target=/server/settings eugensystems/steeldivision2 -rcon_password YYYYYYY -rcon_port 12000 -p 12000:12000
Don't forget to change the rcon_password (which is YYYYYYY in the command line)
Once you connected to the server with a rcon client, you can use those commands:
display_all_clients -> Display the list of connected clients with their Id
kick CLIENT_ID -> Kick the client with Id CLIENT_ID
kick CLIENT_PSEUDO -> Kick the client with pseudo CLIENT_PSEUDO (CLIENT_PSEUDO can be a part of his real pseudo)
ban CLIENT_ID DELAY_IN_HOUR -> Ban the player with Id CLIENT_ID for DELAY_IN_HOUR hours
ban CLIENT_PSEUDO DELAY_IN_HOUR -> Ban the player with pseudo CLIENT_PSEUDO for DELAY_IN_HOUR hours (CLIENT_PSEUDO can be a part of his real pseudo)
unban CLIENT_ID -> Unban the player with Id CLIENT_ID
setsvar VARIABLE_NAME VARIABLE_VALUE -> Allow you to change one of the settings of the server (have a look at variables.ini)
variables.iniUnless otherwise mentionned, all the durations are in seconds.
ServerName
Server name as it will be shown on the server browser in the game.
NbMaxPlayer
How many players can join the server. Maximum of 20.
NbMinPlayer
Number of players needed to start a game. It shouldn't be set to a value higher than NbMaxPlayer.
The server will start a countdown to launch the game when that number is reached.
GameType Faction settings.
InitMoney
Amount of money which will be shared between players at game start.
Defaults to 750
TimeLimit
Game maximum duration. 0 means unlimited. Defaults to 1200.
ScoreLimit
Score to reach to win. Defaults to 4000.
WarmupCountdown
Time before the game automatically starts once the minimum number of players is reached. Value must be set to 10 at least.
LoadingTimeMax
Time the server will wait for all the clients to finish loading before starting the Deployment phase. Any user that doesn't finish the loading in time will be at risk of getting kicked. Value must be set to 60 at least.
DeploiementTimeMax
Deployment phase duration before it forces the game to start even if all players aren't ready yet. Value must be set to 10 at least.
DebriefingTimeMax
Debriefing maximum duration. During that time players will decide if they want to stay in the server for the next game or not.
DeltaMaxTeamSize
Specify the maximum difference in player count between the two teams. Players will not be allowed to join the bigger team if it breaks this rule. Defaults to 10
MaxTeamSize
Maximum number of players in each team.
IncomeRate
Income is the amount of money over time the players gain.
0. None
PhaseADuration
Duration of the first gameplay phase.
PhaseBDuration
Duration of the second gameplay phase.
DivisionTagFilter
Force players to restrict themselves to some deck types.
If unspecified, it allows them any deck. Set to East or West to filter accordingly.
Password
Set a password to protect access to the server.
AllowObservers
Allow observer type players to join and watch the game. 0 means no, others mean yes. Defaults to 1
ObserverDelay Observers see a delayed version of the game to minimise cheating. Default value is 120
Each map is available in multiple variants, of size or game setting rules. Not all settings are possible though. Refer to the map list table for more details on that.
For example, let's say we want to use the Bobr map. We can see in the table that the map base id is _2x2_Urban_River_Bobr_LD_1v1. Also, the map is more meant for 1v1 so it's rather small. And it can only do Conquest, Breakthrough and Close Quarter modes.
We'll pick the Breakthrough mode. This means we need to add the suffix _BKT to the map base id. With that, we now have all the information we need to configure the server. We'll just use that configuration block in variables.ini:
Map = _2x2_Urban_River_Bobr_LD_1v1_BKT
VictoryCond = 5
CombatRule = 2
| Mode | Map id suffix | VictoryCond | CombatRule |
|---|---|---|---|
| Conquest | 2 | 2 | |
| Breakthrough | BKT | 5 | 2 |
| Close Quarter | CQC | 3 | 2 |
| Destruction | DEST | 2 | 1 |
| Destruction Close Quarter | DEST_CQC | 3 | 1 |
Conquest doesn't have a suffix at all so the id to use is just the value you can find in the map table bellow. For Bobr it would just be _2x2_Urban_River_Bobr_LD_1v1 then.
MapRotationType
If you want the server to cycle through multiple maps, you can use this property for that. Once set to a value other than 0, the Map property above will be ignored. Instead you need to fill a maps.ini file with one map per line and put that in the settings folder.
1 Simple rotation mode. Will cycle through the map list in order.2 Random rotation mode. The server will pick a map mostly at random from the list between each games.Since VictoryCond and CombatRule is set outside of the map list, you cannot have a server that cycles between different game modes as a technical limitation.
InverseSpawnPoints
Defaults to 0. Set to 1 to swap the two sides starting points in the map.
If you want to include computer players, you need to set for them a list of decks to use. For that you must create a file named params_for_ai.json in the settings folder.
This file has a pretty simple format. Here's an example one:
{
"0": [
{
"name": "Deck name in the lobby",
"deckContent": "JSGssa0xrjGvEa4BrkGuUa3xrGKtAq2RrWGvQq6CrnGr4a7hrSGu0a6RrzGtUa3RrmKt4azhrJGsIaxRrKGsAavxrUE=",
"iaLevel": 1
}
],
"1": [
{
"name": "Deck name in the lobby",
"deckContent": "Gx6Bgbehg4GDsYFxgsGD8YJBghGA4YSRhKG8YYMhgMGDAoNyhCGE0YRSg5GBoYJhgTGCsYKhgxGFMoKShVI=",
"iaLevel": 2
}
]
}
The "0" and the "1" sections contains a list of decks for the first and the second side of the fight respectively. Computer players will select one of the decks at random. What those sides are depends on the GameType variable.
For example, if GameType is 0 meaning Allies vs Axis, the "0" section will have the decks for the Allies computer players, and the "1" the Axis computer players.
For each deck, we have those values:
name is the display name of the deck in the lobby. No other use.iaLevel is the computer player difficulty level. From 1 to 6 where 1 is the easiest.deckContent is a deck code with the same format you can export and import from the game.CoopVsAI
Mode where all players are on one side and computer players fill in the other team
AutoFillAI
Allows the server to spawn computer player to fill in any missing player slot when the game launches. This isn't compatible with a CoopVsAI mode.
DeltaTimeCheckAutoFillAI
Delay between each computer player joining the server to fill in the missing slots. Defaults to 60
| Name | Map Base Id | Conquest | Breakthrough | Close Quarter | Destruction | Destruction Close Quarter |
|---|---|---|---|---|---|---|
| Orsha, north | _2x1_Proto_levelBuild_Orsha_N_LD_1v1 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Tsel | _2x2_Foret_Tsel_LD_1v1 | ✔ | ✔ | ✔ | ||
| Kostritsa | _2x2_Kostritsa_LD_1v1 | ✔ | ✔ | ✔ | ||
| Sianno | _2x2_Lacs_Sianno_LD_1v1 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Lenina | _2x2_Lenina_LD_1v1 | ✔ | ✔ | ✔ | ||
| Ostrowno | _2x2_Ostrowno_LD_1v1 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Orsha, east | _2x2_Plateau_Central_Orsha_E_LD_1v1 | ✔ | ✔ | ✔ | ||
| Krupa | _2x2_River_Swamp_Krupa_LD_1v1 | ✔ | ✔ | ✔ | ||
| Shchedrin | _2x2_Shchedrin_LD_1v1 | ✔ | ✔ | ✔ | ||
| Slutsk, east | _2x2_Slutsk_E_LD_1v1 | ✔ | ✔ | ✔ | ||
| Slutsk | _2x2_Slutsk_LD_1v1 | ✔ | ✔ | ✔ | ||
| Slutsk, west | _2x2_Slutsk_W_LD_1v1 | ✔ | ✔ | ✔ | ||
| Bobr | _2x2_Urban_River_Bobr_LD_1v1 | ✔ | ✔ | ✔ | ||
| Haroshaje | _2x2_Ville_Centrale_Haroshaje_LD_1v1 | ✔ | ✔ | ✔ | ||
| Novka | _3x2_Astrouna_Novka_LD_2v2 | ✔ | ✔ | ✔ | ||
| Beshankovichy | _3x2_Beshankovichy_LD_2v2 | ✔ | ✔ | ✔ | ||
| Smolyany | _3x2_Bridges_Smolyany_LD_3v3 | ✔ | ✔ | ✔ | ||
| Vitebsk, east | _3x2_East_Vitebsk_LD_2v2 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Autobahn zur Hölle | _3x2_Highway_LD | ✔ | ✔ | ✔ | ||
| Ilomantsi | _3x2_Ilomantsi_LD_1v1 | ✔ | ✔ | ✔ | ||
| Ilomantsi | _3x2_Ilomantsi_LD_2v2 | ✔ | ✔ | ✔ | ||
| Losnica | _3x2_Island_Losnica_LD_2v2 | ✔ | ✔ | ✔ | ||
| Lenina | _3x2_Lenina_LD_2v2 | ✔ | ✔ | ✔ | ||
| Lenina | _3x2_Lenina_LD_3v3 | ✔ | ✔ | ✔ | ||
| Lipen | _3x2_Lipen_LD_3v3 | ✔ | ✔ | ✔ | ||
| Lyakhavichy | _3x2_Lyakhavichy_LD_3v3 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Naratch lake | _3x2_Marecages_Naratch_lake_LD_3v3 | ✔ | ✔ | ✔ | ||
| Mogilev #10vs10 | _3x2_Mogilev_LD_10v10 | ✔ | ||||
| Mogilev | _3x2_Mogilev_LD_3v3 | ✔ | ✔ | ✔ | ||
| Ostrowno | _3x2_Ostrowno_LD_2v2 | ✔ | ✔ | ✔ | ||
| Ostrowno | _3x2_Ostrowno_LD_3v3 | ✔ | ✔ | ✔ | ||
| Pleshchenitsy, south | _3x2_Rivers_Pleshchenitsy_S_LD_3v3 | ✔ | ✔ | ✔ | ||
| Shchedrin | _3x2_Shchedrin_LD_2v2 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Shchedrin | _3x2_Shchedrin_LD_3v3 | ✔ | ✔ | ✔ | ||
| Siedlce | _3x2_Siedlce_LD_1v1 | ✔ | ✔ | ✔ | ||
| Siedlce | _3x2_Siedlce_LD_2v2 | ✔ | ✔ | ✔ | ||
| Slutsk | _3x2_Slutsk_LD_2v2 | ✔ | ✔ | ✔ | ||
| Slutsk | _3x2_Slutsk_LD_3v3 | ✔ | ✔ | ✔ | ||
| Tali Ihantala | _3x2_Tali_Ihantala_LD_1v1 | ✔ | ✔ | ✔ | ||
| Tali Ihantala | _3x2_Tali_Ihantala_LD_2v2 | ✔ | ✔ | ✔ | ||
| Tali Ihantala | _3x2_Tali_Ihantala_LD_3v3 | ✔ | ✔ | ✔ | ||
| Krupki #10vs10 | _3x2_Urban_roads_Krupki_LD_10v10 | ✔ | ||||
| Krupki | _3x2_Urban_roads_Krupki_LD_3v3 | ✔ | ✔ | ✔ | ||
| Veselovo | _3x2_Veselovo_LD_2v2 | ✔ | ✔ | ✔ | ||
| Bobrujsk, west | _3x2_West_Bobrujsk_LD_2v2 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Brest, west | _3x2_West_Brest_LD_1v1 | ✔ | ✔ | ✔ | ||
| Brest, west | _3x2_West_Brest_LD_2v2 | ✔ | ✔ | ✔ | ||
| Brest, west | _3x2_West_Brest_LD_3v3 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Zbuczyn | _3x2_Zbuczyn_LD_1v1 | ✔ | ✔ | ✔ | ||
| Zbuczyn | _3x2_Zbuczyn_LD_2v2 | ✔ | ✔ | ✔ | ||
| Lenina | _4x2_Lenina_LD_4v4 | ✔ | ✔ | ✔ | ||
| Ostrowno | _4x2_Ostrowno_LD_4v4 | ✔ | ✔ | ✔ | ||
| Shchedrin | _4x2_Shchedrin_LD_4v4 | ✔ | ✔ | ✔ | ||
| Slutsk DEST #10vs10 | _4x2_Slutsk_LD_10v10 | ✔ | ✔ | |||
| Slutsk | _4x2_Slutsk_LD_4v4 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Gora Kalwaria | _4x2_Vistula_Gora_Kalwaria_LD_1v1 | ✔ | ✔ | ✔ | ||
| Gora Kalwaria | _4x2_Vistula_Gora_Kalwaria_LD_4v4 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Tannenberg | _4x2_tannenberg_10vs10 | ✔ | ||||
| Tannenberg 1v1 | _4x2_Tannenberg_LD_1v1 | ✔ | ✔ | ✔ | ||
| Tannenberg 2v2 | _4x2_Tannenberg_LD_2v2 | ✔ | ✔ | ✔ |
Content type
Image
Digest
Size
78.1 MB
Last updated
over 5 years ago
docker pull eugensystems/steeldivision2