ACC Server Admin Handbook
ACC Server Admin Handbook
ACC Server Admin Handbook
Version 1.3
I Discussion & FAQ ....................................................................................................................... 2
II About ACC Multiplayer ............................................................................................................... 2
II.1 Public Multiplayer ................................................................................................................. 2
II.2 Private Multiplayer ................................................................................................................ 2
II.3 Competition (CP) Servers ..................................................................................................... 2
III Basic configuration ...................................................................................................................... 2
III.1 File location ....................................................................................................................... 2
III.2 Configuration files ............................................................................................................. 2
III.2.1 configuration.json .......................................................................................................... 3
III.2.2 settings.json .................................................................................................................... 4
III.2.3 event.json ....................................................................................................................... 5
III.2.4 eventRules.json .............................................................................................................. 8
IV Race weekend simulation........................................................................................................... 11
IV.1 Weather simulation .............................................................................................................. 11
IV.2 Track simulation .................................................................................................................. 12
V Server admin commands ............................................................................................................ 13
VI Entry lists ................................................................................................................................... 16
VI.1 Teams ............................................................................................................................... 18
VI.2 Custom cars ..................................................................................................................... 19
VI.3 Additional BoP ................................................................................................................ 19
VII About Spectators ..................................................................................................................... 20
VIII Session results ......................................................................................................................... 20
VIII.1 Result files ....................................................................................................................... 20
IX Appendix .................................................................................................................................... 23
IX.1 Track name list with slots ................................................................................................ 23
IX.2 Car model list ................................................................................................................... 24
IX.3 Driver Category list ......................................................................................................... 25
IX.4 Cup Category list ............................................................................................................. 25
IX.5 Session type list ............................................................................................................... 25
X Changelog .................................................................................................................................. 25
X.1 1.0 ........................................................................................................................................ 25
X.2 1.0.5 ..................................................................................................................................... 25
X.3 1.0.7 ..................................................................................................................................... 26
X.4 1.1 ........................................................................................................................................ 26
X.5 1.1.1 ..................................................................................................................................... 26
X.6 1.2 ........................................................................................................................................ 26
X.7 1.3 ........................................................................................................................................ 26
X.8 1.3.3 ..................................................................................................................................... 27
III.2.1 configuration.json
Here we define the very technical settings that possibly never change and define the server
“identity”.
{
"udpPort": 9201,
"tcpPort": 9201,
"maxConnections": 85,
"lanDiscovery": 1,
"registerToLobby": 1,
"configVersion": 1
}
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.
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.
Property Remarks
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 When 0, this server won’t register to the backend. Is useful for LAN
sessions. If 0, the server is declared “Private Multiplayer”.
lanDiscovery Defines if the server will listen to LAN discovery requests. Can be turned
off for dedicated servers.
III.2.2 settings.json
The setting defines your personal server settings, which may be changed from time to time, but also
define the server.
{
"serverName": "Kunos Test Server #03",
"adminPassword": " adminPw123",
"trackMedalsRequirement": 3,
"safetyRatingRequirement": 49,
"racecraftRatingRequirement": -1,
"password": "accessPw123",
"spectatorPassword": "spectPw432",
"maxCarSlots": 30,
"dumpLeaderboards": 0,
"isRaceLocked": 1,
"randomizeTrackWhenEmpty": 0,
"centralEntryListPath": "",
"allowAutoDQ": 1,
"shortFormationLap": 0,
"dumpEntryList": 0,
"formationLapType": 3
}
Property Remarks
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, …. 99)
racecraftRatingRequirement Defines the Safety Rating (RC) that a user must have to join this
server (values -1, 0, …. 99)
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.
shortFormationLap Toggles the short and long formation lap. Long formation is
only usable on private servers.
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.
formationLapType Toggles the formation lap type that is permanently used on this
server:
3 – default formation lap with position control and UI
0 – old limiter lap
1 – free (replaces /manual start), only usable for private servers
III.2.3 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.
{
"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
}
]
}
Property Remarks
track The track we run, see “Track name list”. 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.
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).
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.
Values (0.0, 0.1, …. 1.0)
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.
Property Remarks
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
III.2.4 eventRules.json
Defines the pitstop rules. Public MP servers will ignore this json file and use default values.
{
"qualifyStandingType": 1,
"pitWindowLengthSec": -1,
"driverStintTimeSec": -1,
"mandatoryPitstopCount": 0,
"maxTotalDrivingTime": -1,
"maxDriversCount": 1,
"isRefuellingAllowedInRace": true,
"isRefuellingTimeFixed": false,
"isMandatoryPitstopRefuellingRequired": false,
"isMandatoryPitstopTyreChangeRequired": false,
"isMandatoryPitstopSwapDriverRequired": false
}
Property Remarks
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.
Additional notes regarding stints:
- Stint timer (top left corner in the timing HUD) is reset when the car crosses the pit entry and starts
counting down again when crossing the pit exit.
- When serving a penalty, the stint timer will freeze and continue counting down after pit exit
without resetting.
- When a player's total remaining driving time is less than his current stint time, the total driving
time will override the stint timer (!).
When this happens, the stint timer's background turns red, indicating the final stint of the active
driver.
IV Race weekend simulation
Each server cycle will simulate a race weekend. The configuration starts at Friday night, and
simulates weather, track conditions including support program race traffic until the first session
configured. With active dynamic weather this means each weekend is unique and unpredictable,
while the configuration determines how plausible, subtle or crazy the weekend will feel like.
Figure 1:example calculation of 10 days with low/medium randomness; y = rain %, x = hour of day
You see most of the days have some rain mixed in but are dry in most of the time. That means the
chance to witness rain during a 20-minute session is low but can happen. Extending the time by
either longer sessions or higher time multipliers will raise the chance.
Also note that most rain showers are in the “light/medium rain” region, only one day delivered a
full thunderstorm. This is where the baseline of both “cloudLevel” and “rain” play an important
role; raising either will make rain more probable.
Raising the “weatherRandomness” towards the upper end causes more extreme scenarios, where the
weather is changing a lot often per day, and is allowed to leave the baseline values more easily. A
more extreme case would be around values 5 or 6:
It’s clear how both frequencies and amplitudes change. While this looks nice and sensational, we do
not recommend to use extreme values. Even if there is no rain, a value of 2 will already notably
shift around clouds, temperatures and wind – but in a way you can still understand what is going on
while sitting in a race car. If the temperatures for example raise and drop by 5°C within minutes,
most users will constantly have the feeling that something is wrong and they don’t understand what
it is.
So please feel free to experiment with those values and create a cool server setup, but keep in mind
that it doesn’t have to reliably rain and stop twice within a 20 minute race session, and that users
have to have a chance to follow the weather development.
/restart Restarts the current session. Do not use this during the
preparation phase
/kick car race Kicks a user from the server, preventing him to join again
number until the race weekend restarts
/ban car race Bans a user from the server, preventing him to join again
number until the server restarts
/dq car race Instantly disqualifies the car, teleporting it to the pits with
number locked controls
/tp15 car race Adds a 15s penalty to the given car. Can accumulate and
number will be added in the final result and json outputs.
Also comes with a /tp15c variant for special message “for
causing a collision”.
/dt car race Assigns a drivethrough penalty to the given car. As other
number DTs, it has to be served within 3 laps or the car will
become disqualified. In case of a race finish within those 3
laps, the DT will be transformed to a 80s time penalty.
Also comes with a /dtc variant for special message “for
causing a collision”.
/sg10 car race Assigns a Stop&Go 10s penalty to the given car.
number
/sg20 car race Assigns a Stop&Go 20s penalty to the given car.
number
/sg30 car race Assigns a Stop&Go 30s penalty to the given car.
number
/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.
/ballast car race Sets the car’s ballast (in kg) to what you defined. This
number overrides any other ballast this car has been assigned.
Range is 0 to 100.
kg
Example: /ballast 113 15
will give car #113 15kg of ballast
/restrictor car race Sets the car’s restrictor (in %) to what you defined. This
number overrides any other restrictor this car has been assigned.
Range is 0 to 20.
% restrictor
Example: /restrictor 113 7
will give car #113 7% restrictor, resulting in roughly 7%
less hp at max rpm.
Notes:
- The race control commands /tp5, /tp15, /dt have another variant each (/tp5c, /tp15c, /dtc),
which will change the message to a more immersive “for causing a collision”
VI Entry lists
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”.
{
"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,
"ballastKg": 0,
"restrictor": 0,
"customCar": "exampleCar.json",
"overrideCarModelForCustomCar": 1,
"isServerAdmin": 0
}
],
"forceEntryList": 0
}
Property Remarks
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.
Entry definitions:
Property Remarks
drivers List of drivers, see next table. Must at least contain one
driver with the SteamId
forcedCarModel If not set to -1: user cannot join with a different car, see
“Car model list” for the values
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.
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).
ballastKg Assigns ballast in kg for this car. Will be additive to ballast
for the car model (via bop.json), and can be overridden by
the admin command /ballast. Range is 0 to 100.
For each entry in “drivers”, we will need at least the SteamId defining the entry. Other possible
values:
Property Remarks
More options are to come and will be added to the document. Please do not ask for the
undocumented fields that may be auto generated, they aren’t supported or implemented yet.
VI.1 Teams
You may have noticed that entry lists can have more than one driver on a car entry – which is how
we setup Teams for Driver Swaps. Once you declare two drivers, the first driver to join will enter
the car, while the other drivers will join in a special spectator role (they must not use the spectator
password).
While in a team, drivers will see a list in the driving HUD, displaying the connection state of their
mates:
Using the Pit strategy page in the (M)ulti(F)unctional(D)isplay, the driver can assign a driver swap
which will be automatically executed during the next pitstop.
VI.2 Custom cars
With the version 1.2, the livery editor now makes custom skin templates an official feature. You can
simply create a “exampleCar.json” using the livery editor and find the corresponding json file in
Documents\Assetto Corsa Competizione\Customs\Cars.
Given the “exampleCar.json”, the file needs to be located in cfg/cars/example.json (or
customEntryListPath/cars/example.json) in order to have a full server defined car entry.
Each “entry” can be understood as a line with a composite key of track and car model, and the
ballast/restrictor are applied if both math. This way you can apply a small balance to one precise
combination, or create your full blown custom BoP for all kinds of seasons, tracks and cars.
Important notes:
1) The additional BoP is at the moment adjustable on public servers, but we will look at this
closely. If we see bad and overdone efforts that affect the experience of average users, we
will limit the additional BoP to private servers
2) It is very hard to improve the current BoP, much harder than it may look (especially for
2019, where SRO did a great job). Do not fall for the mistake to use hotlap performance as
the reference, and also make sure to start with tiny adjustments.
The values of the bop.json act additive to the entry list, so you can combine a championship penalty
with your track/car specific changes. Any admin command (/ballast or /restrictor) will set the
corresponding value to whatever you define, and overwrite potential configurations until the car
rejoins.
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.
IX Appendix
IX.1 Track name list with slots
Note: Public MP is limited to unique pit box OR 30 at max.
monza 29 60
zolder 34 50
brands_hatch 32 50
silverstone 36 50
paul_ricard 33 60
misano 30 50
spa 82 82
nurburgring 30 50
barcelona 29 50
hungaroring 27 50
zandvoort 25 50
monza_2019 29 60
zolder_2019 34 50
brands_hatch_2019 32 50
silverstone_2019 36 50
paul_ricard_2019 33 60
misano_2019 30 50
spa_2019 82 82
nurburgring_2019 30 50
barcelona_2019 29 50
hungaroring_2019 27 50
zandvoort_2019 25 50
kyalami_2019 40 50
mount_panorama_2019 36 50
suzuka_2019 51 105
laguna_seca_2019 30 50
IX.2 Car model list
Value Car model
3 Audi R8 LMS
7 BMW M6 GT3
14 Jaguar G3
15 Lexus RC F GT3
3 Platinum
2 Gold
1 Silver
0 Bronze
0 Overall
1 ProAm
2 Am
3 Silver
4 National
0 Practice
4 Qualifying
10 Race
X Changelog
X.1 1.0
Initial creation of the document
X.2 1.0.5
- Fixed glitched document reference
- Added section “Custom cars”
- Added EntryList property forceEntryList
- Added EntryList item values overrideCarModelForCustomCar and customCar
- Added Settings randomizeTrackWhenEmpty
- Added “VIII.1” Result files; Leaderboard files are now deprecated
X.3 1.0.7
- Added config.json property lanDiscovery
- Added Setting allowAutoDQ
- Added Setting shortFormationLap
- Added Setting dumpEntryList
- Marked Event property trackTemp as obsolete
- Added Event property postRaceSeconds
- Updated section “Result files” to reflect the 1.0.6 changes
- Added admin commands /manual start, /manual entrylist, /debug formation, /debug
bandwidth, /debug qos
- Revisited the Weather section to small corrections. 1.0.7 has a more reasonable range of
weather randomness values, so 1-5 should be good to use, and 2-4 should feel quite
plausible (on a low time multiplier).
X.4 1.1
- Added pitstop rules
- Added race control commands (/tp5 - /dtc)
- Added 2019 tracks
- Added 2019 cars
X.5 1.1.1
- Replaced maxClients by maxConnections
- Replaced maxClientsOverride by maxCarSlots
- Removed spectatorSlots
X.6 1.2
- Added additional BoP (admin cmd, entrylist, bop.json)
- Removed parts of the custom car configuration, as this is now easier using the livery editor
X.7 1.3
- Added IGT DLC tracks kyalami_2019, mount_panorama_2019, suzuka_2019,
laguna_seca_2019
X.8 1.3.4
- Fixed another freaking comma
- Added unique pit count and max player starts (for private MP with multi-pit-assignment) to
track list
- Added experimental/not supported properties of the event.json
- Added metaData property in the event.json
- Added additional explanations to the event rules (for swap situations)
- Added and updated penalty admin cmds (/clear, /clear_all, /tpX, /dt, /sgX)
X.9 1.3.6
- Flipped values for 0/1 formation lap types