Arma 3: Server Config File

From Bohemia Interactive Community
Jump to navigation Jump to search
Arma 3 Server Configuration Overview
Setup Arma 3: Dedicated ServerArma 3: Dedicated Server (Chinese Simplified)Arma 3: Dedicated Server (Chinese Traditional)
Files Arma 3: Server Config FileArma 3: Basic Server Config FileArma 3: Server Profile
Other Multiplayer Server CommandsArma 3: Mission votingArma 3: Headless ClientBattlEye

Arma 2: Operation Arrowhead
This page is about Arma 3 server configuration. For previous titles, see Arma 2: Server Config File.

This article deals with the server.cfg, a configuration file which one can use to configure various game server settings such as the difficulty level, how many votes are needed, and welcome messages. The name server.cfg means nothing, and this file can be called anything. The real name is determined by the -config command line option when launching the dedicated server. There is no default name: when no filename is specified, no server configuration file is loaded.

Server Options

Parameter Default Description Since
passwordAdmin = "xyzxyz"; "" Password to protect admin access. N/A
password = "xyz"; "" Password required to connect to server. N/A
serverCommandPassword = "xyzxyz"; "" Password required by alternate syntax of serverCommand server-side scripting (Case-Sensitive). N/A
hostname="My Server"; UNKNOWN Servername visible in the game browser. N/A
maxPlayers = 10; 64 (DS) The maximum number of players that can connect to server. The final number will be lesser between number given here and number of mission slots. N/A
motd[]= {"Welcome to my server.", "Hosted in the net."}; {} Two lines welcome message. Comma is the 'new line' separator. N/A
admins[] = {"<UID>"}; {} Whitelisted clients can use #login without password. See Logged In Admin. Arma 3 logo black.png1.70
headlessClients[] = {"<IP>"}; {} Headless Client IPs. Multiple connections and addresses are allowed in case of multiple Headless Clients. See Arma 3: Headless Client. N/A
localClient[] = {"<IP>"}; {} Indicates clients with unlimited bandwidth and nearly no latency. See Arma 3: Headless Client. N/A
filePatchingExceptions[] = {"<UID>"}; {} Whitelisted clients ignore the rules defined by allowedFilePatching and verifySignatures, allowing them to join the server with any mods of their choice. Signature errors are still logged by the server upon connection.
Signature errors may still kick the user if the error happens before the server knows the clients SteamID, for example when trying to join with completely unsigned pbo's.
This entry has existed since 2016, but only became fully operational in Arma 3 logo black.png2.10
Server Behaviour
voteThreshold = 0.33; UNKNOWN Percentage of votes needed to confirm a vote. 33% in this example. N/A
voteMissionPlayers = 3; UNKNOWN Start mission-voting when X numberOfPlayers connect. N/A
allowedVoteCmds[] = { {"kick", false, false, 0.75} }; {} See Arma 3: Mission voting. N/A
allowedVotedAdminCmds[] = { { "mission", true, true } }; {} See Arma 3: Mission voting. N/A
kickduplicate = 1; UNKNOWN Do not allow duplicate game IDs. Second player with an existing ID will be kicked automatically. 1 means active, 0 disabled. N/A
loopback = true; false Adding this option will force server into LAN mode. This will allow multiple local instances of the game to connect to the server for testing purposes. At the same time it will prevent all non-local instances from connecting. N/A
upnp = true; false Automatically creates port mapping on UPNP/IGD enabled router. This option allows to create a server behind NAT (the router must have public IP and support UPNP/IGD protocol). Read more Internet Gateway Device (IGD) Standardized Device Control Protocol.
When enabled then this setting may delay server start-up by 600s (standard UDP timeout of 10 minutes) if blocked on firewall or bad routing etc. Thus in such case is recommended to disable it.
allowedFilePatching = 0; 0 Prevent or allow file patching for the clients (including the HC)
  • 0 is no clients
  • 1 is Headless Clients only
  • 2 is all clients
Arma 3 logo black.png1.50
allowedLoadFileExtensions[] = {"sqf","txt"}; UNKNOWN Only allow files with listed extensions to be loaded via loadFile command. Not listing any extension means everything is allowed. Defining the setting as empty arrays means nothing is allowed. Arma 3 logo black.png1.20
allowedPreprocessFileExtensions[] = {"sqf","sqs"}; UNKNOWN Only allow files with listed extensions to be loaded via preprocessFile / preprocessFileLineNumbers commands. Not listing any extension means everything is allowed. Defining the setting as empty arrays means nothing is allowed. Arma 3 logo black.png1.20
allowedHTMLLoadExtensions[] = {"htm","html"}; UNKNOWN Only allow files and URLs with listed extensions to be loaded via htmlLoad command. Not listing any extension means everything is allowed. Defining the setting as empty arrays means nothing is allowed. Arma 3 logo black.png1.28
allowedHTMLLoadURIs[] = {""}; UNKNOWN Only allow files from listed URIs and URLs to be loaded via htmlLoad command. Comment out if not used. Can use += to add to the existing list. Not listing any extension means everything is allowed. Defining the setting as empty arrays means nothing is allowed. N/A
disconnectTimeout = 5; 90 Server wait time before disconnecting client after loss of active traffic connection, range 5 to 90 seconds. Arma 3 logo black.png1.56
maxdesync = 150; UNKNOWN Max desync value until server kick the user Arma 3 logo black.png1.56
maxping= 200; UNKNOWN Max ping value until server kick the user Arma 3 logo black.png1.56
maxpacketloss= 50; UNKNOWN Max packetloss value until server kick the user Arma 3 logo black.png1.56
kickClientsOnSlowNetwork[] = { 0, 0, 0, 0 }; UNKNOWN Defines if {<MaxPing>, <MaxPacketLoss>, <MaxDesync>, <DisconnectTimeout>} will be logged (0) or kicked (1) Arma 3 logo black.png1.56
enablePlayerDiag = 1 0 Logs players' bandwidth and desync info every 60 seconds, as well as "network message is pending" owner identity. N/A
callExtReportLimit = 1000; 1000 If server initiated callExtension takes longer than specified limit in milliseconds, the warning will be logged into server .rpt file as well as reflected in the extension return result. N/A
kickTimeout[] = { {0, -1},{1, 180},{2, 180},{3, 180} }; UNKNOWN

kickTimeout[] = { {kickID, timeout}, ... };
kickID (type to determine from where the kick originated e.g. admin or votekick etc.)

  • 0 - manual kick (vote kick, admin kick, bruteforce detection etc.)
  • 1 - connectivity kick (ping, timeout, packetloss, desync)
  • 2 - BattlEye kick
  • 3 - harmless kick (wrong addons, steam timeout or checks, signatures, content etc.)

timeout = in seconds how long until kicked player can return

  • >0 seconds
  • -1 until missionEnd
  • -2 until serverRestart
Arma 3 logo black.png1.90
votingTimeOut = 60; 60 Voting timeout N/A
votingTimeOut[] = {60, 90}; {60, 90} Voteing timeout {ready, notReady} Arma 3 logo black.png1.90
roleTimeOut = 90; 90 Role seleciton timout N/A
roleTimeOut[] = {90, 120}; {90, 120} Role selection timeout {ready, notReady} Arma 3 logo black.png1.90
briefingTimeOut = 60; 60 Briefing timeout N/A
briefingTimeOut[] = {60, 90}; {90, 120} Briefing timeout {ready, notReady} Arma 3 logo black.png1.90
debriefingTimeOut = 45; 45 Briefing timeout N/A
debriefingTimeOut[] = {60, 60}; {90, 120} Debriefing timeout {ready, notReady} Arma 3 logo black.png1.90
lobbyIdleTimeout = 300; 300 Lobby idle timeout

Independent of set lobbyIdleTimeout in the config file, it will be at least
MAX(votingTimeout, lobbyTimeout, briefingTimeout, debriefingTimeout) + 5 seconds by default, this makes it 300 seconds of time for people in lobby and 95 in roleTimeout or briefing screen

Arma 3 logo black.png1.90
missionsToServerRestart = 8; UNKNOWN Number of times missionEnd happens before server initiate process restart (uses actual session startup command-line parameters, not possible to combine with `missionsToShutdown` ) N/A
missionsToShutdown = 8; UNKNOWN Number of times missionEnd happens before server initiate process shutdown (has same behavior as setting named `missionsToHardRestart`) N/A
autoSelectMission = true; false When enabled, the server auto-starts next mission in mission cycle and waits for players in the role selection. This allows full mission information in server browser and then results in proper filtering of the servers. This is lesser-variant (trimmed) of server startup command-line parameter -autoInit. Might collide with campaign linked missions / need mission cycle etc. N/A
randomMissionOrder = true; UNKNOWN When enabled, the server random start / next selection with one of missions from mission rotation list. ( setting goes outside(before) Mission class {}; ) N/A
disableChannels[] = { {0,false,true} }; {}

disableChannels[] = { {channelID, text, voice}, ... }>;

  • ChannelID : Number - use single digit of (0 to 6) to define channelID. Default: No restriction to any channels, with text/von chat set to false.
  • text : Boolean - use true to disable usage of text-chat for defined channelID. Default: false
  • voice : Boolean - use true to disable usage of voice-chat (VON) for defined channelID. Default: false

List of channels ID:

  • 0 = Global
  • 1 = Side
  • 2 = Command
  • 3 = Group
  • 4 = Vehicle
  • 5 = Direct
  • 6 = System
Missions which use Description.ext#disableChannels will override any setting of disableChannels[] in the server.cfg.
Other Options
verifySignatures = 2; 0 Enables or disables the signature verification for addons.
  • Verification disabled = 0.
  • 1 Will default back to 2
drawingInMap = false; true Enables or disables the ability to place markers and draw lines in map. Arma 3 logo black.png1.64
disableVoN = 1; 0 Enables or disables the Voice over Net. N/A
vonCodecQuality = 10; 3 Defines VoN codec quality. Value range is from 1 to 20.
  • Since 1.62 supports range 1-20
  • Since 1.64 will support range 1-30
  • 8kHz is 0-10, 16kHz is 11-20, for 21-30 it is 32kHz for SPEEX codec and 48kHz for OPUS codec.
vonCodec = 1; 0 Defines VoN codec type. Value range is from 0 to 1.
  • Since Arma 3 update 1.58 supports value 1
  • Value 0 uses older SPEEX codec, while 1 switches to new IETF standard OPUS codec.
skipLobby = false; false If true, joining player will skip role selection. This is only used if no Mission, Campaign or Config setting skipLobby is defined (See Description.ext#skipLobby). N/A
allowProfileGlasses = false; true If false, glasses set in player profile will be ignored. This is only used if no Mission, Campaign or Config setting allowProfileGlasses is defined (See Description.ext - allowProfileGlasses) Arma 3 logo black.png2.06
zeusCompositionScriptLevel = 0; 1
  • 0: all scripts are forbidden
  • 1: only attributes are allowed (including custom attributes added by mods)
  • 2: all scripts are allowed including init scripts

This is only used if no Mission, Campaign or Config setting zeusCompositionScriptLevel is defined (See Description.ext - zeusCompositionScriptLevel).

Arma 3 logo black.png2.06
logFile = "server_console.log"; UNKNOWN Enables output of dedicated server console into textfile. Default location of log is same as crash dumps and other logs. (Local settings) Note that this does not change the location of the "net.log" file, which is enabled with the -netlog command line option. N/A
doubleIdDetected = "command"; "" See Server Side Scripting
onUserConnected = "command"; "" N/A
onUserDisconnected = "command"; "" N/A
onHackedData = "command"; "" N/A
onDifferentData = "command"; "" N/A
onUnsignedData = "command"; "" N/A
onUserKicked = "command"; "" N/A
regularCheck = "command"; "" N/A
BattlEye = 1; 1 Enables or disables the BattlEye anti-cheat engine. Requires installed BattlEye on server and clients joining the server N/A
timeStampFormat = "none"; "" Set the timestamp format used on each report line in server-side RPT file. Possible values are "none", "short", "full". N/A
forceRotorLibSimulation = 0; 0 Enforces the Advanced Flight Model on the server. 0 (up to the player). 1 - forced AFM, 2 - forced SFM. Arma 3 logo black.png1.34
persistent = 1; 0 Mission keeps running when all clients disconnect. Enabling the persistence option will make missions that have either base or instant respawn keep on running after all players have disconnected. The other respawn types will not make a mission persistent. The kind of respawn a certain mission uses is set in its Description.ext. N/A
requiredBuild = xxxxx; UNKNOWN Minimum required client version. Clients with version lower than requiredBuild will not be able to connect. If requiredBuild is set to a large number, like requiredBuild = 999999999; for example, it will automatically be lowered to the current server version. N/A
statisticsEnabled = 1; 1 Allows to opt-out of Arma 3 analytics for the server by using 0 Arma 3 logo black.png1.56
forcedDifficulty = "regular"; "" Enforces the selected difficulty on the server. forcedDifficulty = "<difficultyClass>";
  • If Recruit, Regular or Veteran is passed as the parameter, the particular difficulty options will be taken from data config, from the class CfgDifficultyPresets.
  • If Custom will be passed as the parameter, the particular flags will be taken from CustomDifficulty class from server's profile (only Custom is saved to the profile).
  • If mission cycle is defined in the server.cfg, the difficulty set in the mission cycle overrides the difficulty set by forcedDifficulty parameter.
Arma 3 logo black.png1.56
missionWhitelist[] = {"intro.altis"}; {} Limit the available missions for the admin for the mission change. See Arma 3: MP Mission Names for a full list. Arma 3 logo black.png1.56
steamProtocolMaxDataSize = 1024; 1024 Limit for maximum Steam Query packet length. Increasing this value is dangerous as it can cause Arma 3 server to send UDP packets of a size larger than the MTU. This will cause UDP packets to be fragmented which is not supported by some older routers. But increasing this will fix the modlist length limit in Arma 3: Launcher. Arma 3 logo black.png2.00
class AdvancedOptions
	LogObjectNotFound = true;			// logging enabled
	SkipDescriptionParsing = false;		// parse description.ext
	ignoreMissionLoadErrors = false;	// do not ingore errors
	queueSizeLogG = 1000000;			// if a specific players message queue
										// is larger than 1MB and #monitor is running,
										// dump his messages to a logfile for analysis

Arma 3 logo black.png2.02

  • LogObjectNotFound - false to skip logging "Server: Object not found" messages
  • SkipDescriptionParsing - true to skip parsing of description.ext/mission.sqm. Will show pbo filename instead of configured missionName. OverviewText and such won't work, but loading the mission list is a lot faster when there are many missions

Arma 3 logo black.png2.04

  • ignoreMissionLoadErrors - when set to true, the mission will load no matter the amount of loading errors. If set to false, the server will abort mission's loading and return to mission selection

Arma 3 logo black.png2.08

  • queueSizeLogG - if #monitor is running and a player's Guaranteed Message Queue size (Listed as G: in #monitor) goes above the threshold, all that player's message types and sizes are dumped to a logfile in the RPT directory (see Crash Files); the dumping itself is logged server-side.
Arma 3 logo black.png2.02Arma 3 logo black.png2.04Arma 3 logo black.png2.08
armaUnitsTimeout = 30; 30 Defines how long the player will be stuck connecting and wait for armaUnits data. Player will be notified if timeout elapsed and no units data was received Arma 3 logo black.png2.06

Server Administration

If BattlEye RCon is not in use, there can only be 1 server admin at any given time. There are two ways of becoming admin, through a vote or through login with authenticated credentials.

Voted In Admin

It is possible to become a server administrator through player voting process. Such admin has less abilities than logged in admin.
For example, voted in admin would be able to kick a player, but only logged in admin would be able to ban a player.
For more information on voting and voting configuration see page Server Voting.

Logged In Admin

To log in as admin, one is required to type in#login command followed by server password, which matches password defined in passwordAdmin param.
Since Arma2OA it is possible to add one or several user ids UIDs into admins[] server config parameter, which would allow listed users to log in as admin by simply typing #login without a password.
This presents several advantages for managing the servers. The server owner can have multiple admins selected from the community and doesn't have to provide each one with server admin password.
The adding and removing of UIDs is done on the server side which makes it easy to add and to remove admins if necessary. On the server, admins are handled on first come first served basis.
Here are the rules:

  • If there is already a logged in admin on the server, the new admin will not be able to log in until previously logged in admin logs out
  • If there is a voted in admin on the server, the logged in admin will override voted in admin and take admin role
  • There is no difference between logged in admin that used admin password or logged in admin that was whitelisted with admins[] param

The logged in and voted in admins have different set of Multiplayer Server Commands available to them. See serverCommandAvailable for more information.

Server Security

Several of these settings directly contribute to the security of the server and have been highlighted as important, particularly for running public - no password - servers.

The most updated ones that give a good protection (and are, de facto, the standard for public servers) are
battlEye = 1;
verifySignatures = 2;
allowedFilePatching = 0;
allowedLoadFileExtensions[] = { "hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi" };
allowedPreprocessFileExtensions[] = { "hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi" };
allowedHTMLLoadExtensions[] = { "htm","html","xml","txt" };
// allowedHTMLLoadURIs[] = {};
passwordAdmin = "xyzxyz123";
serverCommandPassword = "xyzxyz456";


The properties allowedLoad*/allowedPreprocess*/allowedHTML* are server.cfg settings with array list of extensions for server-side use only. The above listed examples are for basic game multiplayer modes. Server admins may attempt to make it stricter for their servers. However, if too strict then server's log file will contain warning entries about unable read.

With the exception of allowedHTMLLoadURIs those arrays covers both files inside and outside PBOs so don't change the above defaults w/o testing first as there is a chance it will break the game.
  • To read loadFile , preprocessFile , preprocessFileLineNumbers and to remember, those works on files only-within Arma 3 server directory and its sub-directories!
  • Refer to ArmA: Addon Signatures for current best practices in server mod signing and the use of key signature files.
  • To further increase servers security, remember that BattlEye has the ability to use server-side (including preventing remote execution) and client-side script check filters.
    • These BattlEye filters needs to be written specifically for each mission and mod as the scripting differs in each of them.

Safe Folder Structure

Engine supports absolute outside Arma 3 server folder for command-line parameters -servermod=, -mod= and same for profile directories and config locations. This puts those out of reach by various load script command features which are limited only within Arma 3 folder and it is sub-directories for security reason. thus e.g. safe folder-structure looks like:

  • \arma3server\
  • \arma3server\@publicmods\
  • \arma3server_servermods_secrethash\
  • \arma3server_profiles_and_configs_secrethash\

Note that callExtensions are loaded only from Arma 3 server root / sub-folders

Example Configuration File

Show text

Mission rotation

One can set an automatic mission rotation. Without an admin, the server will automatically select a mission when at least one player is connected. Once the mission is done and if there are still players on the server, it will automatically switch to the next in the cycle.


When difficulty is set to difficulty = "Custom"; the server will look into USERNAME.Arma3Profile file for the definition of custom difficulty, which should look like this: click to see example
class Missions
	class TestMission01
		template = MP_Marksmen_01.Altis;
		difficulty = "veteran";
		class Params {};

	class TestMission02
		template = MP_End_Game_01.Altis;
		difficulty = "veteran";
		class Params {};

	class TestMission03
		template = MP_End_Game_02.Altis;
		difficulty = "veteran";
		class Params {};

	class TestMission04
		template = MP_End_Game_03.Altis;
		difficulty = "veteran";
		class Params {};

Arma 3 Apex - Mission collection

Mainly intended for MP campaigns. If the progress is defined in the MPMissions class, server administrator can simply add the whole campaign by adding campaign class into the server.cfg. See the example below.


class MPMissions
	class Apex
		briefingName = "$STR_A3_CoopCampaignName";

		class EXP_m01
			briefingName = "$STR_A3_exp_m01_missionname";
			directory = "a3\missions_f_exp\campaign\missions\exp_m01.tanoa";

		class EXP_m02
			briefingName = "$STR_A3_exp_m02_missionname";
			directory = "a3\missions_f_exp\campaign\missions\exp_m02.tanoa";

		class EXP_m03
			briefingName = "$STR_A3_exp_m03_missionname";
			directory = "a3\missions_f_exp\campaign\missions\exp_m03.tanoa";


class Missions
	class Apex{};

Also the difficulty of the each mission can be overridden

class Missions
	class Apex
		class EXP_m01
			difficulty = "veteran";

Additional details

For hosting server behind NAT or firewall, please ensure gameport and STEAMports are forwarded and open!
Set the ICMP "echo reply" as allowed so the server is able return ping delay properly.
It's recommended to enable the NAT traversal (so called "Edge traversal" in Windows Firewall) for arma3server.exe, arma3.exe to better support clients/servers behind NAT.

Overriding Mission Parameters

On dedicated server, only an admin can set mission options provided by mission maker via class Params. However as a server owner it is possible to override default setting with your own. See Mission Parameters for more info.