kellys-heroes.eu

Kellys Heroes ArmA Clan | http://www.kellys-heroes.eu | Faq

Kellys Heroes Guide to ArmA3 Dedicated Server

by [KH]Jman

Please note that this installation guide is for Windows Servers only.

General Information

Contents

Stage One - Install ArmA3 via SteamCMD on your server
Stage Two - Configure ArmA3 Server
Stage Three - Firewall Ports
Stage Four - Launching and updating ArmA3 Server
Further Reading


Stage One - Install ArmA3 via SteamCMD on your server

  • A3_serverOne.bat

    The first step is to install the ArmA3 files. This can be achieved very easily via SteamCMD, the Steam console client which is a new tool to install and update dedicated servers using a command line interface.

    Firstly download SteamCMD and copy it to a folder on your local computer where you would like run it. Note this will not be the location of the ArmA3 server files. For the purposes of this tutorial we will copy it to C:\valve\cmdline
    Next open a text editor and create a new file in C:\valve\cmdline. Again for the purposes of this example we will call it A3_serverOne.bat and enter the following:


  • 1    
    2    
    3    
    4    
    5    
    6    
    7    
    8    
    
    /* 
    A3_serverOne.bat
    Example ArmA3 server SteamCMD bat file
    by [KH]Jman, 27th May 2013.  http://www.kellys-heroes.eu
    */
    
    steamcmd.exe +runscript A3_serverOne.txt
    
    

  • A3_serverOne.txt

    Now we need to create the A3_serverOne.txt file. This file will initially install the ArmA3 files it they do not exist or if they exist it will update or verify them.
    For the purposes of this example we will install our ArmA3 game files in C:\Arma3ServerOne
    Create it in the same directory and enter the following:

  • 1    
    2    
    3    
    4    
    5    
    6    
    7    
    8    
    9    
    10    
    11    
    12    
    13    
    
    /* 
    A3_serverOne.txt
    Example ArmA3 server SteamCMD runscript txt file
    by [KH]Jman, 27th May 2013.  http://www.kellys-heroes.eu
    NOTE: replace USER and PASS with your own Steam account details. 
    The account must have a valid ArmA3 game associated.
    */
    
    login USER PASS
    force_install_dir C:\Arma3ServerOne
    app_update 107410 -beta development validate
    exit
    
    

    Now that we have created the two files we can run the A3_serverOne_bat file either from within it's own directory or by creating a shortcut on our desktop. We can run this file whenever we need to update the server provided that the server instance is not running.

    Go ahead and run it, the bat file will connect to the Steam servers, log into your Steam account and if this is the first run it will download all the ArmA3 files to C:\Arma3ServerOne. The initial download may take some time to complete. Once finished your server is ready to run.

    Creating Multiple Server Instances

    If you need to created multiple ArmA3 server instances it's easy, just make duplcates of the .bat and .txt files and alter the paths accordingly to your desired server path. For example to setup a second dedicated server on the same box, create a .bat file named A3_ServerTwo.bat, point it's contents to A3_ServerTwo.txt and in the .txt edit it so for example it installs the second dedicated server to C:\Arma3ServerTwo. You can use your Steam account to create as many server instances as you like. Each server can then be configured and updated independently of each other.

    Please note that when configuring multiple server instances you must set each server's server.cfg with a unique steamPort and steamQueryPort number. This is explained in more detail below

    Top

Stage Two - Configure ArmA3 Server

Before I discuss the server launch process various configuration files must be written by the server administrator.

  • server.cfg

    The server.cfg can actually be called any name as specified in the launch command line discussed later in this document. The server.cfg defines several key components such as connection passwords, message of the day, mission rotations.
    .
  • 1    
    2    
    3    
    4    
    5    
    6    
    7    
    8    
    9    
    10    
    11    
    12    
    13    
    14    
    15    
    16    
    17    
    18    
    19    
    20    
    21    
    22    
    23    
    24    
    25    
    26    
    27    
    28    
    29    
    30    
    31    
    32    
    33    
    34    
    35    
    36    
    37    
    38    
    39    
    40    
    41    
    42    
    43    
    44    
    45    
    46    
    47    
    48    
    49    
    50    
    51    
    52    
    53    
    54    
    55    
    56    
    57    
    58    
    59    
    60    
    61    
    62    
    63    
    64    
    65    
    66    
    67    
    68    
    69    
    70    
    71    
    72    
    73    
    74    
    75    
    76    
    77    
    78    
    79    
    80    
    81    
    82    
    83    
    84    
    85    
    86    
    87    
    88    
    89    
    90    
    91    
    92    
    93    
    94    
    95    
    96    
    97    
    98    
    99    
    100    
    101    
    102    
    103    
    104    
    105    
    106    
    107    
    108    
    109    
    110    
    111    
    112    
    113    
    114    
    115    
    116    
    117    
    118    
    119    
    120    
    121    
    122    
    123    
    124    
    125    
    126    
    127    
    128    
    129    
    130    
    131    
    132    
    133    
    134    
    135    
    136    
    137    
    138    
    139    
    140    
    141    
    142    
    143    
    144    
    145    
    146    
    147    
    148    
    149    
    150    
    151    
    152    
    153    
    154    
    155    
    156    
    157    
    158    
    159    
    160    
    161    
    162    
    163    
    164    
    165    
    166    
    167    
    168    
    169    
    170    
    171    
    172    
    173    
    174    
    175    
    
    /* 
    Example ArmA3 server configuration file
    by [KH]Jman, 27th May 2013.  http://www.kellys-heroes.eu
    */
    
    // Password for private servers. Uncomment this if you wish to run a private server
    // password = "my password"; 
    
    /*
    Password to protect admin access
    type: #login mypassword 
    in ingame client chatbox to login as admin
    type: #missions 
    in ingame client chatbox to display the mission list
    */
    passwordAdmin = "mypassword"; 
    
    
    /*
    default 8766, defines port for communication with STEAM services, 
    needs to be unique for each dedicated server within one OS instance / network interface
    */
    steamPort=8766;
    
    /*
    default 27016, defines port for server's STEAM query,
    needs to be unique for each dedicated server within one OS instance / network interface
    */
    steamQueryPort=27016;
    
    
    // The name of the server that shall be displayed in the public server list
    hostname="My Server Name";
    
    /*
    Message of the day. It can be several lines, separated by comma
    empty messages "" will not be displayed at all but are only for increasing the interval
    */
    motd[]=
    {
    "Welcome to my server name",
    "hello world",
    };
    
    
    // Time interval (in seconds) between each message of the day
    motdInterval=50;
    
    /* 
    25% or more players need to vote for mission to become effective
    set to 1.5 to turn off missions voting
    */
    voteThreshold=0.25;
    
    
    /*
    Maximum amount of server slots
    server will always display 64 slots if maxPlayers is >64 and server is empty
    */
    maxPlayers=80;
    
    
    /*
    Gamespy reporting url for public server list inclusion
    use 127.0.0.1 for LAN server
    */
    reportingIP="arma2pc.master.gamespy.com";
    
    
    /*
    If specified player connects/disconnects and player id are written to file.
    log file is persistant and appends data on server restart.
    */
    logfile="myserver.log";
    
    
    /* 
    Specifies the mission rotation and related difficulty settings.
    leave blank i.e   class Missions {};
    to enable player's selection from mission list & difficulty settings
    (voted on if no admin logged in)
    */   
    class Missions
    {
    class Mission_01   // name for the mission, can be anything
    {
    template = mymission.Stratis; // omit the .pbo suffix
    /* 
    difficulty: recruit, regular, veteran & expert 
    as specified in *.Arma2profile
    */
    difficulty = "regular";   
    /* 
    The following options are seen in the lobby of a multiplayer game. These 
    options can be useful for setting time limits and score limits in such games 
    as Capture the Flag and Death Matches. Other popular uses include 
    accelerate time, setting the mission difficulty or switching the intro on/off.
    */
    param1 =   
    param2 = 
    };
    class Mission_02
    {
    template = anothermission.Stratis; 
    difficulty = "veteran";
    param1 =   
    param2 = 
    };
    };
    
    
    // If class missions is blank start voting when 1 players connect.
    voteMissionPlayers=1; 
    
    // Do not allow players with duplicate ids to connect
    kickduplicate=1;
    
    // If set to 1 players must use exactly the same -mod= startup parameter as the server.
    equalModRequired=0;
    
    // If set to 1, Voice over Net will not be available
    disableVoN=0;
    
    /* 
    Quality from 1 to 10
    refer to: 
    http://community.bistudio.com/wiki/ArmA:_Multiplayer#VOIP_support 
    for codec info. 7 is the best.
    */
    vonCodecQuality=7;
    
    
    /* 
    Set the timestamp format used on each report line in server-side RPT file.
    possible values are:
    none (default), short & full
    */
    timeStampFormat=full;
    
    /* 
    Enables persistent battlefield
    dependent on the mission specifiying persistence, otherwise has no effect.
    missions must contain either instant respawn or base respawn options located in the missions description.ext file
    */
    persistent=1;
    
    /* 
    Enables signature verification for addons
    this will prevent pbo hacks by only allowing pbos that pass servers public key checks
    */
    verifySignatures=2;
    
    // Signature timeout fix
    regularcheck="";
    
    /* To indicate clients with unlimited bandwidth */
    localClient[]={127.0.0.1};
    
    /* Unsigned data detected - recommend you leave this remmed out */
    // onUnsignedData = "kick (_this select 0)";	
    
    /* Tampering of the signature detected - recommend you leave this remmed out*/
    // onHackedData = 	"kick (_this select 0)";	
    
    /* Data with a valid signature, but different version than the one present on server detected */
    onDifferentData = "";				
    
    
    
    
    
    // See ArmA Biki for additional signature commands
    
    // EOF
    
    

  • Download example server.cfg


  • arma3.cfg

    The arma3.cfg just like the server.cfg can be called any name as specified in the launch command line.  The arma3.cfg file contains important information concerning server data rates which may be adjusted based on the server's hardware and network connection. Client custom faces and sounds size and control can be controlled from within this file.

    1    
    2    
    3    
    4    
    5    
    6    
    7    
    8    
    9    
    10    
    11    
    12    
    13    
    14    
    15    
    16    
    17    
    18    
    19    
    20    
    21    
    22    
    23    
    24    
    25    
    26    
    27    
    28    
    29    
    30    
    31    
    32    
    33    
    34    
    35    
    36    
    37    
    38    
    39    
    40    
    41    
    42    
    43    
    44    
    45    
    46    
    47    
    48    
    49    
    50    
    51    
    52    
    53    
    54    
    55    
    56    
    57    
    58    
    59    
    60    
    61    
    62    
    63    
    64    
    65    
    66    
    
    /* 
    Example ArmA3 configuration file
    by [KH]Jman, 27th May 2013.  http://www.kellys-heroes.eu
    These example numbers are for a i7-2600 QuadCore Xeon on a 1GBit connection. 
    */
    
    
    /*
    Bandwidth the server is guaranteed to have (in bps). 
    This value helps server to estimate bandwidth available. 
    Increasing it to too optimistic values can increase lag and CPU load
    as too many messages will be sent but discarded. Default: 131072
    */
    MinBandwidth=2097152;
    
    /*
    Bandwidth the server is guaranteed to never have. 
    This value helps the server to estimate bandwidth available.
    */
    MaxBandwidth=2097152000;
    
    /*
    Maximum number of messages that can be sent in one simulation cycle. 
    Increasing this value can decrease lag on high upload bandwidth servers. Default: 128
    */
    MaxMsgSend = 1024;
    
    /*
    Maximum size of guaranteed packet in bytes (without headers). 
    Small messages are packed to larger frames. 
    Guaranteed messages are used for non-repetitive events like shooting. Default: 512
    */
    MaxSizeGuaranteed = 512;
    
    /*
    Maximum size of non-guaranteed packet in bytes (without headers). 
    Non-guaranteed messages are used for repetitive updates like soldier or vehicle position. 
    Increasing this value may improve bandwidth requirement, but it may increase lag. Default: 256
    */
    MaxSizeNonguaranteed = 256;
    
    
    /*
    Minimal error to send updates across network. 
    Using a smaller value can make units observed by binoculars or sniper rifle to move smoother. 
    Default: 0.01
    */
    MinErrorToSend = 0.001;
    
    
    /*
    Minimal error to send updates across network for near units.
    Using larger value can reduce traffic sent for near units. Used to control client to server traffic as well.
    */
    MinErrorToSendNear=0.01;
    
    
    /*
    Users with custom faces or custom sounds larger than this size are kicked when trying to connect.
    Use this wisely as it can be the cause of alot of Join in Progress lag.
    1600000 = 160k
    */
    MaxCustomFileSize=0;
    
    // EOF
    
    

  • Download example arma3.cfg


  • default.arma3profile

    The default.arma3profile can be called any name as specified in the launch command line.  The default.arma3profile contains server difficulty levels and visual settings, friendly and enemy AI quality, HUD, crosshair, 3rd person view, clock indicator and so on. Rather than listing it line by line here in this document please download the example file below which contains my comments.
    I have omitted any commands that have no effect on the multiplayer system.
    While connected to the dedicated server, you can use the admin command #monitor to monitor server resource usage. (You have to be logged in as or voted as game admin to do this.)
    The server never runs at more than 50 fps. When running slower, it always uses all available CPU processing power to maintain the smoothest possible gameplay. When running at less than 15 fps, you can consider the server overloaded – the mission currently played is probably too complex for given server.
    If you see the server is not using bandwidth that it could use, you can try increasing values MaxMsgSend and MinBandwidth in the ArmA3.cfg.

  • 1    
    2    
    3    
    4    
    5    
    6    
    7    
    8    
    9    
    10    
    11    
    12    
    13    
    14    
    15    
    16    
    17    
    18    
    19    
    20    
    21    
    22    
    23    
    24    
    25    
    26    
    27    
    28    
    29    
    30    
    31    
    32    
    33    
    34    
    35    
    36    
    37    
    38    
    39    
    40    
    41    
    42    
    43    
    44    
    45    
    46    
    47    
    48    
    49    
    50    
    51    
    52    
    53    
    54    
    55    
    56    
    57    
    58    
    59    
    60    
    61    
    62    
    63    
    64    
    65    
    66    
    67    
    68    
    69    
    70    
    71    
    72    
    73    
    74    
    75    
    76    
    77    
    78    
    79    
    80    
    81    
    82    
    83    
    84    
    85    
    86    
    87    
    88    
    89    
    90    
    91    
    92    
    93    
    94    
    95    
    96    
    97    
    98    
    99    
    100    
    101    
    102    
    103    
    104    
    105    
    106    
    107    
    108    
    109    
    110    
    111    
    112    
    113    
    114    
    115    
    116    
    117    
    118    
    119    
    120    
    121    
    122    
    123    
    124    
    125    
    126    
    127    
    128    
    129    
    130    
    131    
    132    
    133    
    134    
    135    
    136    
    137    
    138    
    139    
    140    
    141    
    142    
    
    /*
    Example ArmA2Profile configuration file
    by [KH]Jman, 1st July 2009.  http://www.kellys-heroes.eu 
    */
    
    class Difficulties
    {
    class Recruit
    {
    class Flags
    {
    
    Armor=1;		// Gives you improved body armor, tank armor etc
    FriendlyTag=1;		// Displays information on friendly units. ONLY WORKS WITH 'Weaponcursor=0', eg crosshair on.
    EnemyTag=1;		// Displays information on enemy units
    HUD=1;			// Shows you leaders location and your position in formation
    HUDPerm=1;		// Shows HUD permanently
    HUDWp=1;		// Shows Waypoints right after they're ordered to you
    HUDWpPerm=1;		// Shows Waypoints permanently
    WeaponCursor=1;		// Shows the crosshair for your weapon
    AutoAim=1;		// Enables auto aim when you're not looking through your weapon's scope. Also works with crosshair off
    AutoGuideAT=1;		// AT missiles will be automatically guided to their target. If 0, player has to lock onto the target.
    3rdPersonView=1;	// This turns 3rd(third) person view and group leader view on or off. Please never talk of this as "3D view" - ArmA is not an arcade game !
    ClockIndicator=1;	// Displays the clock indicator on the left of your screen when giving/receiving orders like "At 11 o'clock, enemy man at 200 meters"
    Map=1;			// Shows symbols for all objects known to your gruop on the map. This will NOT disable the map itself !
    Tracers=1;		// Displays tracers even of small arms that in real life would not have tracers
    AutoSpot=1;		// If you're close enough to an enemy, you'll report it without right-clicking
    UltraAI=0;		// Enables super AI, hear and see more and increased tactics. This is for both friendly and enemy sides.
    DeathMessages=1;	// Displays death messages i.e. playerA kill playerB
    NetStats=1;		// Displays score board
    VonID=1;		// Displays VON player name in window
    
    
    };
    // These are the skills. Value may range from 0.000000 to 1.000000
    skillFriendly=0.34999999;
    skillEnemy=0.34999999;
    precisionFriendly=0.20;
    precisionEnemy=0.20;
    };
    
    class Regular
    {
    class Flags
    {
    Armor=1;
    FriendlyTag=1;
    EnemyTag=0;
    HUD=1;
    HUDPerm=0;
    HUDWp=1;
    HUDWpPerm=1;
    WeaponCursor=1;
    AutoAim=0;
    AutoGuideAT=0;
    3rdPersonView=1;
    ClockIndicator=1;
    Map=1;
    Tracers=1;
    AutoSpot=0;
    UltraAI=0;
    DeathMessages=1;	
    NetStats=1;		
    VonID=1;		
    };
    skillFriendly=0.44999999;
    skillEnemy=0.44999999;
    precisionFriendly=0.35;
    precisionEnemy=0.35;
    };
    class Veteran
    {
    class Flags
    {
    Armor=0;
    FriendlyTag=0;
    EnemyTag=0;
    HUD=1;
    HUDPerm=0;
    HUDWp=1;
    HUDWpPerm=1;
    WeaponCursor=0;
    AutoAim=0;
    AutoGuideAT=0;
    3rdPersonView=0;
    ClockIndicator=1;
    Map=0;
    Tracers=1;
    AutoSpot=0;
    UltraAI=0;
    DeathMessages=0;	
    NetStats=0;	
    VonID=1;		
    };
    skillFriendly=0.74999999;
    skillEnemy=0.74999999;
    precisionFriendly=0.75;
    precisionEnemy=0.75;
    };
    class Expert
    {
    class Flags
    {
    Armor=0;
    FriendlyTag=0;
    EnemyTag=0;
    HUD=1;
    HUDPerm=0;
    HUDWp=1;
    HUDWpPerm=1;
    WeaponCursor=0;
    AutoAim=0;
    AutoGuideAT=0;
    3rdPersonView=0;
    ClockIndicator=1;
    Map=0;
    Tracers=1;
    AutoSpot=0;
    UltraAI=0;
    DeathMessages=0;	
    NetStats=0;		
    VonID=0;		
    };
    skillFriendly=0.94999999;
    skillEnemy=0.94999999;
    precisionFriendly=0.95;
    precisionEnemy=0.95;
    };
    };
    
    
    // Sets the server default view distance.
    // Render distance is 3/4 of view distance - for 2000 metres, objects will be render up to 1500 metres
    // This maybe overidden by the mission 
    viewDistance=2000;
    
    // Sets the server default terrain quality. Very High:10, Low:50
    // This maybe overidden by the mission 
    terrainGrid=25;
    
    // EOF
    
    

  • Download example default.arma3profile

Top

Stage Three - Firewall Ports


ArmA3 server requires the following ports open to UDP network traffic. TCP is not needed.

  • port          2302        UDP         ArmA3 game network communication.
  • port+1      2303        UDP         Gamespy public server reporting.
  • port+3      2305        UDP         Voice Over Net transmission.
  • port          8766        UDP         Communication with STEAM services.
  • port          27016      UDP         Communication with STEAM query.

Top

Stage Four - Launching and updating ArmA3 Server

ArmA3 dedicated server is run by launching the ArmA3Server.exe with a series of command line switches I have listed the important ones below.

  • -cfg          Specifies the arma3 config to use.
  • -profiles    Specifies a specific location for server's profile files.
  • -config      Specifies the server config file to use.
  • -mod        Extra command to run folder mods.
  • -netlog      *Command to record traffic from the game server.
  • -port         Port for the server to listen on. Defaults to 2302
  • -name      Specifies the server name broadcast to clients.


Please read bullet point 4 of this guide's general information section.

You cannot specify an IP address with which to bind the server to i.e.  -ip = xxx.xxx.x.xxx
ArmA3 server defaults to the primary ip address of the server and cannot be changed.
If you wish to setup multiple instances of ArmA3 server on the same server it is only possible by specifying alternative ports with -port.

A typical start up command line for Arma3Server should look something like below
Run this from an dos batch file or ideally run this as a service using Firedaemon. 
In this document  I won't cover how to setup ArmA3 server with Firedaemon but I may write a separate tutorial on the subject if many users request it.

  • "[drive]\[path to arma3]\ArmA3Server.exe" -port=2302 -name=default -config=default\server.cfg -cfg=default\Arma3.cfg -profiles=default

In the example above, the default.arma3profile will be located in: ...\ArmA3\default\users\default\default.arma3profile. You also need to place your "arma3.cfg" & "server.cfg" files into "...\ArmA3\default" folder as this folder is now defined as the folder where your cfg & profile files reside with those parameters.

If the profile path contains spaces, the parameter should be enclosed by quotation marks.
Upon launching, the server console will appear. 
Once successfully loaded the console will display the following:

hh:mm:ss Dedicated host created.
hh:mm:ss Host identity created.


The server is now ready to receive incoming connections.
The console window does not accept direct user input, it only displays system messages.
Closing the console window will shutdown the server. ALT and F4 is the keyboard shortcut to shutdown the server.

To update your ArmA3 server instance, make sure your server is not running and simply run the .bat file you created, in our example A3_ServerOne.bat

Top

Further Reading

How secure is your server?
BattlEye GUID banning

If you require any further information please visit the Bohemia Interactive Wiki  or my virtual residence Kellys Heroes Forums
I will update this document in line with any relevant ArmA3 patch updates or new information.

Last updated: 17th Jan 2014

Top