Skip to content

Misc – Server extra options

Ilja Jusupov edited this page Jun 13, 2022 · 11 revisions

Update v0.1.69 brings an ability to add extra parameters to servers: a simple INI configuration file hidden in a welcome message. The way it works, message wouldn’t be visible to people with original Assetto Corsa or Assetto Corsa with CSP newer than v0.1.69.

Available options

Racing rules

It might be a good idea to set some strict limit for CSP version if you’re using those (setting it to at least 0.1.69 for basic options), to make sure everybody would race in the same rules and conditions.

[EXTRA_RULES]
ALLOW_WRONG_WAY = 1  ; Allow cars to drive either way

; Available since 0.1.76:
ENFORCE_BACK_TO_PITS_PENALTY = 1  ; Adds penalty during race when using back-to-pits AC command, same 
                                  ; as when using “back to pits” in pause menu
ENFORCE_BACK_TO_PITS_STOP = 1     ; Stops back-to-pits AC command from working if car is moving

; Available since 0.1.77:
LIMIT_LOCK_CONTROLS_TIME = 60        ; Upper cap for each locking controls penalty in seconds
LIMIT_LOCK_CONTROLS_TOTAL_TIME = 90  ; Upper cap for total of locking controls penalty in seconds (on some
                                     ; large laps without it penalty might get so large rejoining server
                                     ; would be the only valid course of action)
UNFIT_FOR_DRIVETHROUGH_PENALTY = X, Y, Z, radius  ; Defines a sphere in which entering pits would not 
                                     ; count as serving drivethrough penalty (like second pitlane on Spa,
                                     ; parameters for it are “-202.04, 12.54, -857.77, 50”)

; Available since 0.1.78 (previous versions had a bug, so please make sure to set 0.1.78 as required):
NO_BACK_TO_PITS = 1                  ; Disallow back-to-pits AC command and “back to pits” in pause menu
                                     ; (admin would still be able to teleport cars back if needed)
NO_BACK_TO_PITS_OUTSIDE_OF_PITS = 1  ; Same, but only if car is not in its pits position 

; Available since 0.1.78:
INVALIDATE_LAP_TIME_IN_PITS = 1      ; Invalidate lap time if car ever goes through pits (for tracks with
                                     ; pitlane surfaces not marked as invalid)
REQUIRED_MODULES = lighting_fx, weather_fx  ; Optional list of required modules (just use the names of
                                     ; their configs), if set, live setting changes are disabled
REQUIRE_NEW_LAP_FOR_DRIVETHROUGH_PENALTY = 1 ; If set, drivers getting drivethrough penalty wouldn’t be
                                     ; able to just reverse back and do it here and now
HIDE_MAP = 1                         ; Hides default AC map app (users could still use third-party apps)

Pit speed limiter settings

Available since 0.1.76. Changes the way pit speed limiter works.

[PITS_SPEED_LIMITER]
DISABLE_FORCED = 1   ; Disable forced pits speed limiter
KEEP_COLLISIONS = 1  ; Activate collisions between cars in pits
SPEED_KMH = 80       ; Alter pits speed limiter value; default is 80
SPEEDING_PENALTY = DRIVE_THROUGH  ; Penalty for violation (for now, either DRIVE_THROUGH
                                  ; or TELEPORT_TO_PITS with locking controls)
SPEEDING_PENALTY_LAPS = 3
SPEEDING_SUBSEQUENT_PENALTY = TELEPORT_TO_PITS  ; Optional, stricter penalty for a second violation 
SPEEDING_SUBSEQUENT_PENALTY_TIME = 30           ; How long controls will be locked, in seconds

Custom Motion

Available since 0.1.77. This option replaces the way position for remote cars online is extrapolated. New implementation fixes an issue with car wheels detaching if car was to jump or flip, improves performance and smooths out cars motion a bit.

[EXTRA_TWEAKS]
CUSTOM_MOTION = 1, flags…  ; flags are optional

Flags:

  • SMOOTH: available since 0.1.78, smooths out motion for cars moving slow to prevent shaking on large tracks.

Also, available since 0.1.78, enabled custom motion allows to disable colliders for remote cars on jumps (caused by connection issues). Nearby cars with colliders disabled would flash blue. Colliders would be disabled for some time, but kept disabled if there is an ongoing contact, so that cars wouldn’t fly away from each other. Here is this feature in action (camera focused on remote “laggy” car losing connection for a bit, collisions in pits enabled).

[EXTRA_TWEAKS]
JUMP_LIMIT = 0.3               ; Jump threshold in meters, fix is applied if remote car would suddenly
                                ; move further than that
JUMP_PAUSE_COLLISIONS_FOR = 5  ; For how long to disable collisions in seconds (default is 5)

Emergency reset

Available since 0.1.78. Resets car back to pits if it is falling through ground or gets stuck in a wall somewhere.

[EMERGENCY_RESET]
FALL = 5       ; Distance in meters, if car is below the ground more than that, it gets reset
COLLISION = 3  ; Time in seconds, if car is stuck in a wall for more than that, it gets reset
PENALTY = 1    ; If this optional parameter is set to 1, resetting would apply the same penalty 
               ; as manually teleporting to pits

Extra data

[EXTRA_DATA]

; Available since 0.1.75:
TYRES_BLOWN_STATE = 0     ; Exchanges data on state of blown tyres for visual effects

; Available since 0.1.77:
CAMBER_TOE_STATE = 1      ; Exchanges toe and camber angles, requires enabled custom motion
CUSTOM_UPDATE_FORMAT = …  ; Custom servers can use custom protocols with variable refresh rate,
                          ; precision, batch packages, sending information about cars nearby more
                          ; frequently, etc.: actual description of those packages is given here

Custom physics

Some basic physics tweaks that don’t require any custom physics stuff.

[CUSTOM_PHYSICS]
REAL_MASS = 1          ; Set to 1 to set real mass for rigidbodies of remote cars, helps with collisions
                       ; not working as expected (acts like multiplier for actual mass, could be above 1
                       ; to get collisions extra bouncy or below 1 to get collisions extra soft)
EXTRAPOLATE_STATE = 1  ; Experimental option making all cars move smoother

; Available since 0.1.77, servers now can completely redefine collision parameters. All the values are 
; optional:
[CUSTOM_COLLISIONS]
SOFT_ERP = 0.99    ; Error reduction parameter
SOFT_CFM = 0.0001  ; Constrain force mixing, the higher it is, the softer is the collision
BOUNCE = 0.01      ; Bounce parameter
FRICTION = 0.25    ; Contact friction
INTENSITY = 1      ; Collision intensity (affects damage, audio and visual effects)
MAX_DEPTH = 0.2    ; If set and collision depth is above that parameter, collision becomes hard: might 
                   ; help with performance

Files verification

Available since 0.1.77. With this server can check existence and integrity of some AC files. You can use an online tool like this to generate a checksum.

[VERIFY_INTEGRITY_...]
FILE = content/cars/…  ; Path to a file relative to AC root folder
CHECKSUM = …           ; SHA256 checksum

[EXTRA_TWEAKS]
VERIFY_STEAM_API_INTEGRITY = 1  ; Set to 1 to verify integrity of “steam_api64.dll”.

Timezone

Available since 0.1.78. Allows to specify exact timezone offset in seconds, as well as latitude and longitude to ensure all clients would be in the same lighting conditions. By default CSP gets those values from its built-in database or track configs, but they might be out of order.

[WEATHER_FX]
TIMEZONE = 0       ; Offset from UTC in seconds; if DST is needed, add it here
LATITUDE = 36.25   ; Latitude in degrees, use a number (so 36° 15' becomes 36.25)
LONGITUDE = 121.5  ; Longitude in degrees, also use a number

; Available since 0.1.79:
TIMEZONE_ID = Europe/Paris  ; Timezone ID (TZ database name). If set like that, DST would be computed
                            ; automatically based on the current date, but setting offset explicitly
                            ; with “TIMEZONE” might be a better approach.

Other online tweaks

Some random online tweaks.

[EXTRA_TWEAKS]
FORCE_HEADLIGHTS = 1  ; Forces headlights to stay on

; Available since 0.1.77:
SHOW_DISCONNECTED = 1  ; Show disconnected cars; set to WITH_COLLISIONS instead of 1 and other cars
                       ; could collide with them

; Available since 0.1.78:
ACTUAL_TRACK_TIME = 1  ; Set it to 1 if your time scale is close to 100%; used by things like train
                       ; script to sync their state across clients; without this option train time 
                       ; would be: 12:00 + 2hr × SessionIndex + SessionTime
SPECTATORS_AMOUNT = 1  ; Adjust amount of spectators on track; from 0 to 1, 0 for no spectators

[SPECIAL_CARS]
HIDE_LABELS = …  ; List 0-based indices of cars to hide driver name tags of, and hide them on maps

Freeroam features

Just some extras for special servers.

; Allows to change car color in pits with a simple color picker, works with cars 
; with regular skins:
[CUSTOM_COLOR]
ALLOW_IN_PITS = 1
ALLOW_EVERYWHERE = 1  ; choose one or another; 

; Teleports allow to define a bunch of points for cars to jump to quickly, 
; invalidating their lap times. List of possible destinations and a teleport
; button are available in new chat app. For the whole thing to work, choose cars
; that are allowed to teleport in entry list editor in CM (with that CSP 
; button for each entry). Requires a CSP-only server:
[TELEPORT_DESTINATIONS]
POINT_0 = Name          ; destination name
POINT_0_GROUP = Group   ; optional group
POINT_0_POS = X, Y, Z   ; coordinates, can be determined with Objects Inspector
POINT_0_HEADING = 0     ; heading angle in degrees

; Portals for quick jumping from server to server. For now quite limited: both
; servers would need to have the same entry list, with drivers keeping the same
; cars. Available since 0.1.76:
[PORTALS]
PORTAL_0 = 192.168.1.30:8081  ; server IP and HTTP port
PORTAL_0_POS = X, Y, Z        ; portal position
PORTAL_0_COLOR = 1, 1, 0, 1   ; optional RGB color and transparency

Chat tweaks

[CHAT]
SERVER_MESSAGES_ONLY=1  ; Prevents users from sending chat messages

; Available since 0.1.76:
MESSAGES_FILTER=''           ; Hide matching messages from other players
COMMANDS_NONADMIN_FILTER=''  ; Hides “you are not an admin” response for commands that match this filter
SERVER_MESSAGES_FILTER=''    ; Hides matching server messages

Filters use regular expressions with case-independent partial matching (so to match whole string, use '^…$'). Single quote symbols are not required, but it’s better to keep them to make sure symbols like “[” wouldn’t mess up INI parsing.

Mumble voicechat integration

[MUMBLE]
; Available since 0.1.75:
SCALE = 1.0  ; Scales world for Mumble voice chat
CONTEXT = …  ; Optional context for Mumble; default is server IP and port

Replay clips

Available since 0.1.75. It adds an ability to quickly save a replay of last N seconds of a race as a separate clip, might be helpful in quickly saving potential conflict situations and resolve them further. All of that works out of the box, but extra server config can define an endpoint for drivers to automatically upload those clips once they’re saved.

Replays would be zipped and uploaded by sending a POST request with ZIP binary data in body of the request. Also, X-Car-Index header would contain an entry list index of a client.

; Available since 0.1.75:
[REPLAY_CLIPS]
UPLOAD_URL = 'https://domain.com/endpoint.php?key=X'  ; API endpoint
DURATION = 30  ; Clip duration in seconds, overriding user choice

Temporary and experimental stuff

All this stuff might get removed in the future and replaced with something better.

; Activates rain, requires preview builds of CSP since rain is still in development.
[RAIN_PREVIEW]
INTENSITY = 0.5
REQUIRED = 1
WITH_PHYSICS = 1  ; Forcefully activates rain physics (make sure to enable custom car
                  ; physics in core server settings)

; Settings for rain racing line of RainFX.
[RAIN_RACING_LINE_PREVIEW]
… = …  ; Same keys and values as in “[RACING_LINE_DEV]” section of rain_fx.ini

; Some old experiment in trying to set a new online mode with pursuits. Not sure
; if functional, never really managed to test it properly. Very basic stuff,
; more of a proof-of-concept to see if it would be interesting at all or not.
[PURSUIT_MODE_PREVIEW]
ACTIVE = 1

Online scripts

Available since 0.1.76. Specify a URL to a bit of code to run on client machines (with some restrictions, such as those scripts would not be able to access files outside of track and cars folders, or run processes, or other things like that). Those scripts can be used to display additional HUD elements, access car state and apply custom penalties, teleport cars upon certain conditions, control cameras, alter restrictor and ballast live, break and fix cars, apply extra forces, load and display new models, update textures live, add post-processing color corrections and much more, pretty much the same set of functions track scripts can do and more.

[SCRIPT_...]
SCRIPT = path  ; Path can be either a web URL: for example, you can store your script 
               ; on https://gist.github.com and use the raw link, or you can set a path
               ; relative to “assettocorsa/extension/lua” for development purposes and
               ; edit scripts live.
… = …          ; Any other parameters set in this section can be accessed by the script,
               ; thus allowing to configure the same script to use with different servers.

Script URLs also support parameters substitution, so you can have it set like this:

SCRIPT = 'https://myserver.com/script?s={SessionID}&t={SteamID}&c={CarID}&k={CarSkinID}&v={CSPBuildID}'

With that, some basic server can respond with a different script depending on the client, sending one script to a regular player and another to an admin (also, scripts can verify if player has admin rights live as well). All the parameters:

  • SessionID: 0-based index of entry list used by the player;
  • SteamID: player’s Steam ID;
  • CarID: name of the user’s car folder;
  • CarSkinID: name of the user’s skin folder;
  • CSPBuildID: CSP build number;
  • ServerIP: IP used to connect to the server;
  • ServerName: server name;
  • ServerHTTPPort: server HTTP port;
  • ServerTCPPort: server TCP port;
  • ServerUDPPort: server UDP port;

Server config can specify multiple scripts, although having too many of them might introduce a slight performance overhead. Don’t worry if it’s just, like, a dozen of those, but if it’s more than that, consider regrouping things somehow.

Config encoding

To encode config in welcome message, do following steps (or just set it in Content Manager server panel):

  • Get config bytes (UTF-8 encoding);
  • Compress bytes using common zlib algorithm (for C#, SharpCompress can do it);
  • Encode result as a base64 string (feel free to trim “=” on the end);
  • Append 32 tab symbols and $CSP0: in front of resulting string (this way message would be hidden in original AC);
  • And then attach it to the welcome message.

Here is an example from Content Manager source code:

// Actual encoding:
private static readonly string CspConfigSeparator = RepeatString("\t", 32) + "$CSP0:";

private string BuildWelcomeMessage() {
    if (string.IsNullOrWhiteSpace(CspExtraConfig)) return WelcomeMessage;
    return WelcomeMessage + CspConfigSeparator 
        + ToCutBase64(CompressZlib(Encoding.UTF8.GetBytes(CspExtraConfig)));
}

// Helper functions:
public static string RepeatString(string s, int number) {
    var b = new StringBuilder();
    for (var i = 0; i < number; i++) {
        b.Append(s);
    }
    return b.ToString();
}

public static string ToCutBase64(byte[] decoded) {
    return Convert.ToBase64String(decoded).TrimEnd('=');
}

private static byte[] CompressZlib(byte[] data) {
    using (var m = new MemoryStream()) {
        using (var d = new ZlibStream(m, CompressionMode.Compress, CompressionLevel.Level6)) {
            d.WriteBytes(data);
        }
        return m.ToArray();
    }
}

CSP-only servers and core options

To create a server that can only work with CSP installed, its config has to be slightly altered. Simply replace TRACK property in server_cfg.ini with csp/<X>/../<track ID>, where <X> is minimal required CSP version (build number). By creating a folder content/csp and moving track data such as “data/surfaces.ini” there it can work with original acServer just as well. However, a server like this can still in theory be accessed by somebody without the use of CSP, so another optional layer of protection is to edit “surfaces.ini” stored in server folder (the one acServer uses for integrity verification). Simply replace “[SURFACE_0]” by “[CSPFACE_0]” and it would alter file checksum in a certain way so that only clients running CSP would pass the integrity verification.

Update 0.1.78 also introduces extra options stored the similar way. New format now is csp/<X>/../<O>/../<track ID>, where O is a specifically endoded string storing additional options. Without going into too much detail about encoding with only three options available at this stage, here are the possible values:

  • B: enable custom cars physics;
  • C: enable custom track physics;
  • D: enable both custom cars and track physics;
  • E: hide pit crew;
  • F: hide pit crew and use custom cars physics;
  • G: hide pit crew and use custom track physics;
  • H: hide pit crew and use custom cars and track physics.

It’s just bits of a number, and number is encoded using this string for some sort of base64-encoding with different characters: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-.

Per-car flags

https://files.acstuff.ru/shared/vRhW/20220611-014243.png

These tweaks are stored in skin IDs in “entry_list.ini”. Just use a slash and then base64-encode a structure with first byte for the version, second byte for the actual values and third byte acting like a checksum. Here is how it’s done by Content Manager.

General Information

Car Physics

Track Physics

Car & Track Configs

Car Configs

Instruments
Miscellaneous

Track Configs

Post-processing Filters

Python Apps

Lua Apps

Server Configs

Other Things

Unrelated to Custom Shaders Patch

Clone this wiki locally