Server Configuration

From ACC Wiki (Unofficial)
Revision as of 12:04, 10 November 2019 by DiRTyDRiVER (talk | contribs)
Jump to navigation Jump to search


Other languages:
Deutsch • ‎English

Installation

Folder Structure Server Folder Structure on your PC
server\accServer.exe ...\Steam\steamapps\common\Assetto Corsa Competizione\server\accServer.exe
server\cfg\configuration.json ...\Steam\steamapps\common\Assetto Corsa Competizione\server\cfg\configuration.json
server\cfg\event.json ...\Steam\steamapps\common\Assetto Corsa Competizione\server\cfg\event.json
server\cfg\eventRules.json ...\Steam\steamapps\common\Assetto Corsa Competizione\server\cfg\eventRules.json
server\cfg\settings.json ...\Steam\steamapps\common\Assetto Corsa Competizione\server\cfg\settings.json

Windows specific

Default Installation Path
C:\Program Files (x86)\Steam\steamapps\common\Assetto Corsa Competizione\server

Change the configuration.json, event.json and settings.js under the cfg Folder for your needs. After that you can Doubleclick on the accServer.exe to Start the Server. Keep in mind that you need to make Port Forwarding on your Router to get Players on your Server. Else it's just Locally accessible.

Linux specific (Ubuntu 18.04)

We need Wine because there is no Nativ Binary for Linux.

sudo apt-get install wine-development

Copy now all Server Files from your Windows System where you have ACC Installed to the Linux Server. After that you can Start your Server with

wine ./accServer.exe

Configuration

The server is exclusively configured via JSON files in UTF16-LE format. In general, it is a good idea to get used to the JSON syntax, and/or test your configurations with an online syntax check.

To get a clean start, you can just remove the .json files and start the server once, it will autogenerate them with current defaults. Additionally, you can reduce the “configVersion” contained in each file to get new properties generated (this is true for all the configs). Certain “advanced” settings will be hidden when the value is set to it’s default during this process.

The configuration is split into different files, which represent different levels of what you would possibly like to keep or change frequently:

configuration.json

  • Here we define the very technical settings that possibly never change and define the server “identity”.
  • The most important thing to know is that both ports must be unique on the system, the firewall allows connections and the ports are accessible from the internet.
File Content Property Description

{
"udpPort": 9201,
"tcpPort": 9201,
"maxConnections": 30,
"lanDiscovery": 1,
"registerToLobby": 1,
"configVersion": 1
}

tcpPort ACC clients will use this port to establish a connection to the server
udpPort Connected clients will use this Port to stream the car positions and is used for the ping test. In case you never see your server getting a ping value, this indicates that the udpPort is not accessible
registerToLobby
  • 0 = this server won’t register to the backend. the server is declared Private Multiplayer. Is useful for LAN sessions.
  • 1 = this server register to the backend. the server is declared Public Multiplayer.
maxConnections The maximum amount of connections a server will accept at a time. If you own the hardware server, you can just set any high number you want. If you rented a 16 or 24 slot server, your Hosting Provider probably has set this here and doesn’t give you write-access to this configuration file. Check also:
lanDiscovery Defines if the server will listen to LAN discovery requests. Can be turned off for dedicated servers.
configVersion ...

Attention: Running a server on a private PC is not recommended. It requires opening and forwarding Ports onto your private system, which makes it vulnerable to random and/or malicious internet traffic. Additionally, private ISP bandwidth is often asymmetrically limited in the upload, which can easily lead to a bad server performance and in the result in a bad multiplayer experience for everyone around.

settings.json

The setting defines your personal server settings, which may be changed from time to time, but also define the server.

File Content Property Description

{
"serverName": "My first Server",
"adminPassword": "pwAdmin",
"trackMedalsRequirement": 3,
"safetyRatingRequirement": 49,
"racecraftRatingRequirement": -1,
"password": "pwAccess",
"spectatorPassword": "pwSpect",
"maxCarSlots": 30,
"dumpLeaderboards": 0,
"isRaceLocked": 1,
"randomizeTrackWhenEmpty": 0,
"centralEntryListPath": "",
"allowAutoDQ": 1,
"shortFormationLap": 0,
"dumpEntryList": 0
}

serverName The server name displayed in the ACC UI pages
adminPassword The password you specify allows a driver or spectator to log in as Server Admin in the chat window (ENTER key) of the server. Check also:
trackMedalsRequirement Defines the amount of track medals that a user has to have for the given track
  • values: 0, 1, 2, 3
safetyRatingRequirement Defines the Safety Rating (SA) that a user must have to join this server
  • values: -1, 0, 1, 2, 3, 4, .... 97, 98, 99
racecraftRatingRequirement Defines the Safety Rating (RC) that a user must have to join this server
  • values: -1, 0, 1, 2, 3, 4, .... 97, 98, 99
password Password required to enter this server. If a password is set, the server is declared Private Multiplayer.
spectatorPassword Password to enter the server as spectator. Must be different to “password” if both is set.
maxCarSlots Replaces “maxClientsOverride” and “spectatorSlots”. Defines the amount of car slots the server can occupy; this value is overridden if the pit count of the track is lower, or with 30 for public MP. The gap between maxCarSlots and maxConnections defines how many spectators or other irregular connections (ie entry list entries) can be on the server.
dumpLeaderboards If set to 1, any session will write down the result leaderboard in a “results” folder (must be manually created). See ”Session results”
isRaceLocked If set to 0, the server will allow joining during a race session. Is not useful in “Public Multiplayer”, as the user-server matching will ignore ongoing race sessions.
randomizeTrackWhenEmpty If set to 1, the server will change to a random track when the last drivers leaves (which causes a reset to FP1). The “track” property will only define the default state for the first session.
centralEntryListPath Can override the default entryList path “cfg/entrylist.json”, so multiple ACC servers on the machine can use the same entrylist (and custom car files). Set a full path like “C:/customEntryListSeriesA/”, where the entrylist is stored.

Attention: The path seperators have to be slashes (/), backslashes (\) will not work.

allowAutoDQ If set to 0, the server won’t automatically disqualify drivers, and instead hand out Stop&Go (30s) penalties. This way a server admin / race director has 3 laps time to review the incident, and either use /dq or /clear based on his judgement.
shortFormationLap
dumpEntryList Will save an entry list at the end of any Qualifying session. This can be a quick way to collect a starting point to build an entry list, and is a way to save the defaultGridPositions which can be used to run a race without Qualifying session and predefined grid. Also see the corresponding admin command.

event.json

Defines the race weekend the server runs. This configuration file is meant to be swappable, so you can easily switch between different event templates by renaming/overwriting them.

File Content Property Description

{
"track": "spa",
"preRaceWaitingTimeSeconds": 60,
"sessionOverTimeSeconds": 120,
"ambientTemp": 26,
"cloudLevel": 0.3,
"rain": 0.0,
"weatherRandomness": 3,
"configVersion": 1,
"sessions": [
{
"hourOfDay": 10,
"dayOfWeekend": 1,
"timeMultiplier": 1,
"sessionType": "P",
"sessionDurationMinutes": 20
},
{
"hourOfDay": 17,
"dayOfWeekend": 2,
"timeMultiplier": 8,
"sessionType": "Q",
"sessionDurationMinutes": 10
},
{
"hourOfDay": 16,
"dayOfWeekend": 3,
"timeMultiplier": 3,
"sessionType": "Q",
"sessionDurationMinutes": 20
}
]
}

track The track we run. Check also:

Setting a wrong value will also print out the available track keys in the log. With the 1.1 update containing the 2019 season content, each track has a _2019 variant. Using this track will set the BoP and track grip correspondingly.

preRaceWaitingTimeSeconds Preparation time before a race. Cannot be less than 30s.
sessionOverTimeSeconds Time after that a session is forcibly closing after the timer reached '0:00. Something like 107% of the expected laptime is recommended.
Careful: default 2 minutes does not properly cover tracks like Spa or Silverstone
ambientTemp Sets the baseline ambient temperature in °C. Check also:
cloudLevel Sets the baseline cloud level, see “Race weekend simulation”. Values (0.0, 0.1, .... 1.0)
rain If weather randomness is off, defines the static rain level. With

dynamic weather, it increases the rain chance.

  • 0.0 = dry
  • to 0.2 light rain
  • to 0.5 rain
  • to 0.7 heavy rain
  • to 1.0 very heavy

Values greater than 0.1 can override the value of cloudLevel.

weatherRandomness Sets the dynamic weather level:
  • 0 = static weather
  • 1 - 4 = fairly realistic weather
  • 5 - 7 = more sensational
postQualySeconds The time after the last driver is finished (or the sessionOverTimeSeconds passed) in Q sessions and the race start. Should not be set to 0, otherwise grid spawning is not secure.
postRaceSeconds Additional time after the race ended for everyone, before the next race weekend starts.
sessions A list of session objects, see the next table
Property Description
hourOfDay Session starting hour of the day (values 0 - 23)
dayOfWeekend Race weekend day: 1 = Friday, 2 = Saturday, 3 = Sunday. check also: Race weekend simulation
timeMultiplier Rate at which the session time advances in realtime. Values 0, 1, ... 24
sessionType Race session type: P, Q, R for (P)ractice, (Q)ualy, (R)ace
sessionDurationMinutes Session duration in minutes

Remarks:

  • 1) At least one non-race session must be set up
  • 2) Setting up unreasonable day and hours ( also consider time multipliers! ) can lead to wrong track and weather behaviour, e.g. avoid jumping from Saturday to Friday

eventRules.json

Defines the pitstop rules. Public MP servers will ignore this json file and use default values.

The basic pitstop features offer a huge array of combinations and different aspects you can set up your non-public races. Not every combination does make sense though, so it’s your responsibility to setup the rules so drivers have a good experience. It should be entirely possible to create a race in the style of a single Sprint series race as well as a 3-24h endurance race with or without driver swaps. Of course this shouldn’t limit you to think about your series and especially race event durations, and possibly add more fairness to balance fuel efficient cars – or allow a certain depth of tactics.

File Content Property Description

{
"qualifyStandingType": 1,
"pitWindowLengthSec": -1,
"driverStintTimeSec": -1,
"mandatoryPitstopCount": 0,
"maxTotalDrivingTime": -1,
"maxDriversCount": 1,
"isRefuellingAllowedInRace": true,
"isRefuellingTimeFixed": false,
"isMandatoryPitstopRefuellingRequired": false,
"isMandatoryPitstopTyreChangeRequired": false,
"isMandatoryPitstopSwapDriverRequired": false
}

qualifyStandingType 1 = fastest lap, 2 = average lap (running Endurance mode for multiple Q sessions) . Use 1, averaging Qualy is not yet officially supported.
pitWindowLengthSec Defines a pit window at the middle of the race. Obviously covers the Sprint series format. -1 will disable the pit window. Use this combined with a mandatoryPitstopCount = 1.
driverStintTimeSec Defines the maximum time a driver can stay out without getting a penalty. Can be used to balance fuel efficient cars in endurance races. The stint time resets in the pitlane, no real stop is required. - 1 will disable the stint times.
mandatoryPitstopCount Defines the basic mandatory pit stops. If the value is greater zero, any car that did not execute the mandatory pitstops will be disqualified at the end of the race. The necessary actions can be further configured using the “isMandatoryPitstopXYRequired” properties. A value of zero disables the feature.
maxTotalDrivingTime Restricts the maximum driving time for a single driver. Is only useful for driver swap situations and allows to enforce a minimum driving time for each driver (IRL this is used to make sure mixed teams like Pro/Am have a fair distributions of the slower drivers). -1 disables the feature.
maxDriversCount In driver swap situations, set this to the maximum number of drivers on a car. The maxTotalDrivingTime property will be scaled down to apply to teams with less drivers.
isRefuellingAllowedInRace Defines if refuelling is allowed during the race pitstops.
isRefuellingTimeFixed If set to true, any refuelling will take the same amount of time. If turned off, refuelling will consume time linear to the amount refuelled. Very useful setting to balance fuel efficient cars, especially if combined with other features.
isMandatoryPitstopRefuellingRequired Defines if a mandatory pitstop requires refuelling.
isMandatoryPitstopTyreChangeRequired Defines if a mandatory pitstop requires changing tyres.
isMandatoryPitstopSwapDriverRequired Defines if a mandatory pitstop requires a driver swap. Will only be effective for cars in driver swap situations; even in a mixed field this will be skipped for cars with a team size of 1 driver.

entrylist.json

Using entry lists a server admin can setup special roles that link drivers (by Steam Id) to those configuration entries.

It allows the server to identify persons, and allows to force or allow various aspects. Entry list entries will always bypass Rating Requirements, and will be able to join servers even if they are full (as long as we have pit slots left, and the driver number is smaller than configuration.json/ maxClients).

To start, just add a new file called entrylist.json in the “cfg” folder. Using an entry list does not interfere with the classification of “Public” or “Private” MP, and you can selectively use an entry to e.g. reserve a slot for you in a Public MP server. Serious groups might use slots for their members and run a race with a 90 SA restriction in Public MP to fill up their rows with highly capable “randoms”.

File Content
Example: 1x Driver as Admin / 2 Drivers as Team
Property Description

{
"entries": [
{
"drivers": [
{
"playerID": "S765611xxxxxxxxxx1"
}
],
"raceNumber": 88,
"forcedCarModel": -1,
"overrideDriverInfo": 0,
"isServerAdmin": 1
}
{
"drivers": [
{
"firstName": "First",
"lastName": "Driver",
"shortName": "NO1",
"driverCategory": 2,
"playerID": "S765611xxxxxxxxxx3"
},
{
"firstName": "Another",
"lastName": "Person",
"shortName": "NO2",
"driverCategory": 1,
"playerID": "S765611xxxxxxxxxx4"
}
],
"raceNumber": 114,
"forcedCarModel": -1,
"overrideDriverInfo": 0,
"defaultGridPosition": -1,
"customCar": "exampleCar.json",
"overrideCarModelForCustomCar": 1,
"isServerAdmin": 0
}
]
"forceEntryList": 0
}

entries List of entries
drivers List of drivers, see next table. Must at least contain one driver with the SteamId
raceNumber The preferred race number if set, -1 if the driver may decide by picking his car. Values 1 - 998
forcedCarModel If not set to -1: user cannot join with a different car, see “Car model list” for the values
overrideDriverInfo If set to 1, the driver’s name and category will be overridden by what is setup in the entry list. If set to 0, it’s up to the client joining.
customCar If set to a filename, the car, team and appearance will be used no matter what the user chose (Exception: overrideCarModelForCustomCar). This is useful for leagues and events, where we want consistent car appearance and the chosen car model for the corresponding driver/team. The custom car file has to be located in a “cars” folder next to the entrylist.json (also works for centralEntryListPath).

Leave blank (“”, =default) to let the user chose the car via car selection UI.

overrideCarModelForCustomCar If customCar is used, this setting will apply the car model configured if the value is set to 1 (which is the default). If set to 0, all values except the carModel are applied, so the user is free to pick a car but while team name and appearance will be applied.
isServerAdmin If set to 1, that user will be automatically elevated to server admin when he joins.
defaultGridPosition If set to a value of 1 or greater, this car will obtain this grid position if a race starts without any qualifying session before (e.g. P -> R).
forceEntryList Will reject drivers that are not in the entry list. Default is 0, which allows the partial definition of entries in a “normal” server configuration. Cannot be used on public servers.
For each entry in “drivers”, we will need at least the SteamId defining the entry. Other possible. values:
firstName First name of the driver, if “overrideDriverInfo” is set to 1
lastName Last name of the driver, if “overrideDriverInfo” is set to 1
shortName Short name of the driver, if “overrideDriverInfo” is set to 1
driverCategory Bronze/Silver/Gold/Platinum category, if “overrideDriverInfo” is set to 1. See “Driver Category list” for values
playerID Steam64 Id for this client; Add a “S” in the front

Result Files

Using the “dumpLeaderboards”: 1 option, any session that is finished will write the final standing into a .json file in the “results” folder. Those files are generated with a filename in the pattern of “190806_193009_R.json”, including date, time and session type (P, Q, R).

File Content

{
"sessionType": "R",
"trackName": "silverstone",
"sessionIndex": 1,
"sessionResult": {
"bestlap": 117915,
"bestSplits": [
34770,
49359,
33258
],
"isWetSession": 0,
"type": 1,
"leaderBoardLines": [
{
"car": {
"carId": 1073,
"raceNumber": 912,
"carModel": 0,
"cupCategory": 0,
"teamName": "",
"drivers": [
{
"firstName": "Somebody",
"lastName": "Else",
"shortName": "SOE",
"playerId": "S76561191111111111"
}
]
},
"currentDriver": {
"firstName": "Somebody",
"lastName": "Else",
"shortName": "SOE",
"playerId": "S76561191111111111"
},
"currentDriverIndex": 0,
"timing": {
"lastLap": 119223,
"lastSplits": [
35286,
50178,
33759
],
"bestLap": 118404,
"bestSplits": [
35265,
49659,
33438
],
"totalTime": 719894,
"lapCount": 6,
"lastSplitId": 0
},
"missingMandatoryPitstop": 0,
"driverTotalTimes": [
0.0
]
}, ...
]
},
"laps": [
{
"carId": 1073,
"driverIndex": 0,
"laptime": 125511,
"isValidForBest": true,
"splits": [
40197,
51537,
33777
]
}, ...
],
"penalties": [
{
"carId": 1079,
"driverIndex": 0,
"reason": "Cutting",
"penalty": "DriveThrough",
"penaltyValue": 3,
"violationInLap": 0,
"clearedInLap": 1
},
{
"carId": 1081,
"driverIndex": 0,
"reason": "PitSpeeding",
"penalty": "StopAndGo_20",
"penaltyValue": 20,
"violationInLap": 4,
"clearedInLap": 5
}
]
}

In a nutshell, the root object contains information about the session and track, next to a leaderboard representation, a complete list of laps and a complete list of penalties for this session. The properties should be self-explanatory, in case of doubts and questions please do not hesitate to join the official support forum.

Spactator Mode

To join a server as spectator, just enter the “spectatorPassword” in the password box in the Multiplayer Server List. You won’t occupy a car or pitslot, but still can chat and elevate to admin. Spectators still use server resources, so they will be limited by the total “maxClients” count – however spectator slots are not limited by the global limit of 30 cars, nor do they occupy pit slots.

ID Lists

Track Name ID's
Value
monza
zolder
brands_hatch
silverstone
paul_ricard
misano
spa
nurburgring
barcelona
hungaroring
zandvoort
monza_2019
zolder_2019
brands_hatch_2019
silverstone_2019
paul_ricard_2019
misano_2019
spa_2019
nurburgring_2019
barcelona_2019
hungaroring_2019
zandvoort_2019
Car Models
Value Car Model
0 Porsche 991 GT3
1 Mercedes AMG GT3
2 Ferrari 488 GT3
3 Audi R8 LMS
4 Lamborghini Huracan GT3
5 Mclaren 650s GT3
6 Nissan GT R Nismo GT3 2018
7 BMW M6 GT3
8 Bentley Continental GT3 2018
9 Porsche 991.2 GT3 Cup
10 Nissan GT-R Nismo GT3 2017
11 Bentley Continental GT3 2016
12 Aston Martin Vantage V12 GT3
13 Lamborghini Gallardo R-EX
14 Jaguar G3
15 Lexus RC F GT3
16 Lamborghini Huracan GT3 Evo (2019)
17 Honda NSX GT3
18 Lamborghini Huracan SuperTrofeo
19 Audi R8 LMS Evo (2019)
20 AMR V8 Vantage (2019)
21 Honda NSX Evo (2019)
22 McLaren 720S GT3 (Special)
23 Porsche 911 II GT3 R (2019)
Driver Categorys
Value Category
3 Platinum
2 Gold
1 Silver
0 Bronze
Cup Categorys
Value Category
0 Overall
1 ProAm
2 Am
3 Silver
4 National
Session Types
Value Session Type
0 Practice
4 Qualifying
10 Race

Admin Commands

While connected to a server (both as driver and spectator), users can elevate to “server admins” if they are aware of the password. That allows them to use a few special commands. Version 1.0 start with a limited set, which is expected to be extended in future versions. To elevate to admin, hit “enter” to use the chat and type /admin adminPw123. A notification will tell you if successful. Additionally, you can setup an “Entry lists” entry for the admin(s) steamids. Once elevated, you can use several commands:

Command Number Description
/next Skips the current session
/restart Restarts the current session. Do not use this during the preparation phase
Insert a space between the command and the start number
/kick 1 to 998 Kicks a user from the server, preventing him to join again until the race weekend restarts
/ban 1 to 998 Bans a user from the server, preventing him to join again until the server restarts
/dq 1 to 998 Instantly disqualifies the car, teleporting it to the pits with locked controls
/tp5 1 to 998 + 5s second penalty time (reusable)
/tp5c 1 to 998 + 5s second penalty time + Indication of the reason: collision (reusable)
/tp15 1 to 998 + 15s second penalty time (reusable)
/tp15c 1 to 998 + 15s second penalty time + Indication of the reason: collision (reusable)
/clear 1 to 998 Removes pending penalties (e.g. Drivethrough or Stop&Go)
/manual start When applied during the pre-session phase of a race, it will remove the automatic throttle for the next formation lap. No rules apply, so they have to be sorted by the drivers and race director.
/manual entrylist Manually creates an entry list json file containing the drivers connected in this moment (see also Settings -> dumpEntryList)
/debug formation Prints information about the current cars and their states. Useful information to report bugs during the formation lap
/debug bandwidth Let’s the server console print the current bandwidth relevant data for both TCP and UDP traffic. Type again to turn it off
/debug qos Let’s the server console print the current network connection quality data. Type again to turn it off.

References

  1. Server Admin Handbook (PDF) - find in ACC Install under ..:\Steam\steamapps\common\Assetto Corsa Competizione\server
  2. Server Admin Handbook (Forum) - https://www.assettocorsa.net/forum/index.php?threads/the-server-admin-handbook-thread.59017