How to Configure your ARMA 3 Server - All Options Explained

Though the initial setup of a dedicated Arma 3 server is quick, honing in configuration options is a little more complex. Unlike other servers, Bohemia Interactive gives control over aspects like bandwidth usage, packet sizes, and more. You may be wondering how to change Arma 3’s max player count, how to optimize server bandwidth, or how to add missions. This guide will cover these parameters and multiple methods to change them.

How to edit your Arma 3 config

Before you jump in, you should consider which configuration method is best for you. If you have a Windows host, TDSAT is a great tool to quickly tune your performance, difficulty, missions, mods, and more. The open-source tool is available free of charge and only requires you to extract it and point it to your server binary.

For manual configuration, you’ll want to right-click your arma3server.exe and select create shortcut. In the shortcut’s Properties, add the following after its file location in the Target field:

“-profiles=[Your server directory] -config=arma3server.cfg "-cfg= basic.cfg"-world=empty”

Remember to remove the brackets after entering your server location. You’ll then want to create a new text document and save it as arma3server.cfg.  While you’re there, craft a basic.cfg. We’ll be breaking down the all the options you can populate it with shortly.

Linux users will also want to edit their server config manually. We highly recommend you follow our Arma 3 linux server setup guide for use of LinuxGSM, which will automatically populate it with default values. You can edit it with nano lgsm/config-lgsm/arma3server/arma3server.cfg. You may have to log in to your server user account via terminal, which can be achieved with su – arma3server.

Arma 3 configuration parameters explained

With that said, we can jump right into the various options for Arma 3 configuration. Remember to replace x with an appropriate number.

Arma3server.cfg parameters

hostname = “My Arma 3 Server”;

This one is easy. It determines the name players will see when looking for servers. You’ll want it to be something unique and may want to add details like the location of your server in square brackets at the end.

Password = “SecurePassword”;

You only need to enable this one if you want your server private. This will stop random players from joining if you just want to play with friends. You can delete it from the config or comment it out by placing // in front.

passwordAdmin = “AdminPassword”;

Perhaps the most important option of them all. Admins will use this to login via chat, so make sure it’s very secure and changed regularly. You don’t want a random playing guessing it and causing havoc on your server.

maxPlayers = x;

This is fairly self-explanatory, but there are a couple of things to consider here. This number considers headless clients and includes admins. If you set it too low you might not be able to join at peak periods.

Persistent = x;

This makes it so missions will continue even if everyone has left the server. If you’re using the -autoInit startup parameter, you’ll want this as 1. Otherwise, set it to 0.

Motd[] = {“Line 1”, “Line 2”, “”, “Line 3”, };

This one controls the message of the day, which is sent to players when they join to remind them of rules, Discord server links, and other information. Lines should be surrounded with quotes, separated by commas, with an comma at the end.

motdInterval = x;

The number of seconds between each line. If set to 5, our example would send players Line 1, wait five seconds, and send Line 2. Generally, you want this to be long enough for players to read each message. If one is disproportionally long, you can add empty quotes the line before or after to double the time it’s displayed, like after Line 2.

disableVoN = x;

Determines whether or not voice chat is disabled. Enter 1 to turn voice chat off, and 0 to keep it on.

vonCodecQuality = x;

Changes the quality of in-game voice chat. The higher the number, the better the quality. 1-10 is 8KHz, or narrowband, 11-20 wideband, at 16KHz, and 21-30 32kHz, known as ultrawideband. It caps at thirty, and the higher you set it, the more bandwidth it will require. The default option is 10.

VoteMissionPlayers = x;

Sets the minimum number of players before the mission selection screen appears, if one hasn’t already been set by the admin. Default is 1.

VoteThreshold = x;

Players can vote for admins, missions, or to kick other players. This affects the global percentage of votes required for a change to take effect. By default, it’s 0.33, meaning 33 players would have to vote for a change in a 100-player server for it to take. You can set this to 999 to disable voting entirely.

allowedVoteCmds[]={

{“admin”, false, false},

{“kick”, false, true, 0.51}

{"missions", false, false},

{"mission", false, false},

{"restart", false, false},

{"reassign", false, false},

This piece of code changes what players can vote for. The first value is the command. The second enables a preinit vote, which means it’s forced each time a mission starts, but before objects load.  The third enables postinit, which is when the mission starts, but after objects are initialized. You can add a fourth, numerical value after these which overrides the global VoteThreshold percentage for that command.

class Missions

{

class Mission1

{

template = "MyMission.Altis"; // Filename of pbo in MPMissions folder

difficulty = "Regular"; // "Recruit", "Regular", "Veteran", "Custom"

};

};

Effects the missions played and difficulty options. Once you’ve crafted a mission, you should place it in your arma3server/mpmissions folder. The template name should be the name of the mission’s pbo.

timeStampFormat = "short";

logFile = "server_console.log";

These both control the logfile options. The first defines the format of the timestamp, with the options of “none”, “short”, or “full”. None is the default, but having a timestamp can be incredibly useful when troubleshooting. The second just determines the output name of the log file.

BattlEye = x;

Disables/enables anti-cheat on the server. You probably want this on if you’re playing with randoms. 0 to turn it off, 1 to turn it on.

verifySignatures = x;

Setting this to 2 stops players with unknown mods from joining. It’s a good idea to keep this on.

kickDuplicate = x;

This will kick a player if they have an ID that’s exactly the same as an existing player on the server. Good for stopping imitation.

allowedFilePatching = x;

This controls whether users who have file patching enabled can join. File patching is the ability to use external, unpacked data. You’ll likely want to set this to 1, which allows headless clients. 2 opens it completely, while 0 will kick players with it enabled before they join.

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","php","xml","txt"};

Lots of code here, but it’s quite self-explanatory. This defines the filetype your server can load when the loadFile command is run. There’s no real reason to change this from the above, unless you have concerns over one of the above filetypes.

headlessClients[] = {"127.0.0.1",”192.168.1.200};

You should add the IP address of headless clients here to ensure they’ll be able to connect, if you’re using them.

localClient[] = {"127.0.0.1"};

IP addresses in here will have access to unlimited bandwidth.

Arma 3 basic.cfg parameters

This file is where you’ll dive into the networking aspects of your server. You can control the number of packets per frame, max bandwidth, and more. We highly recommend this guide by terox, which was created after talking to Bohemia. Here’s a quick breakdown:

MinBandwidth = x;

This should be set to a value, in bps (bits per second), that a server should always have available. Essentially, in a worst case scenario. It helps the server to estimate available bandwidth and can cause lag if you’re too optimistic. On a 100 Mbps connection, terox recommends 10485760, which would translate to 10 Mbits per second. For a gigabit connection, 107374182 (100 Mbits) is a good starting point. The default is 131072.

MaxBandwith = x;

Basically, the opposite on min bandwidth. You want to set this as the bytes per second your connection can achieve in a best-case scenario.

MaxMsgSend = x;

Maximum amount of packets that can be sent to a client in one frame. The default is 128, but setting it higher can decrease lag if your server has a good upload speed. As a result, it’s good practice to set this as 2048 and lower it by 256 until your performance is good.

MaxSizeNonguaranteed = x;

Max size of non-guaranteed packets, which are used to update repetitive elements like solider of vehicle positioning. This time, setting it higher can lower your bandwidth requirements, but too much and you’ll lag. Set it to 224 and increase in increments of 16. Default is 256.

MaxSizeGuaranteed = x;

Guaranteed packets are used for events that are less predictable, like shooting. The default is 512, but you should set it to 958 and lower by 64 at a time if you lag.

MinErrorToSend = x;

This is a fairly complex setting. To avoid long-explanations, all you need to know is that smaller values can make units and other objects you see through a sniper or scope smoother, but will increase bandwidth. High values will cause them to teleport. You can leave it as default (0.001), or set it to 0.002 if you need the bandwidth.

MinErrorToSendNear = x;

Like the above, but for nearby units. 0.02 is a good starting point, but admins often go between 3 and 12 times higher.

Conclusion and Resources

There’s a lot to configure here, and it’s likely you won’t want to be typing it all in yourself. You can grab an example server.cfg here, and basic.cfg here. However, note that these are examples from Bohemia, and the default settings may not be updated to reflect Arma 3. You’ll want to go in and change settings to your liking.

It’s good practice to change settings in a methodical way, in pre-defined increments, to find what works for your server. This can be time-consuming, but you’ll only have to do it once for most parameters. For additional information on configuration, you can refer to these resources: