Dedicated Server – Arma 3
WORK IN PROGRESS
Introduction
Apart from being informative, this page will also take you through a step by step process to install, configure and run your server
The majority of directories and paths are customiseable, however those defined are all consistent with the tutorial instructions.
The majority of content has been extracted from this Tutorial thread, or threads linked from it
Installation
Requirements
- Steam Account
- Ownership of Arma 3
- Supported Operating System
- Windows: 2008 or later
- Linux: (TBA)
- Minimum Hardware:
- CPU:
- RAM:
- Disk
Instructions (Windows o/s)
The following instructions will guide you through setting up one Arma 3 server on 1 box, however they will also set the foundations for installing multiple servers on that same box
- Install the latest version of DirectX
- Create the following empty directories
- D:\Apps\Steam
- D:\Games\ArmA3\A3Master
- D:\Games\ArmA3\A3Files
- Download steamcmd.exe and save it to your targetted Steam install directory (E.g D:\Apps\Steam)
- Run the steamcmd.exe. (This will download and install the required steam files to your custom steam directory)
- Create an #Arma3server_steamcmd_example.cmd file and save it to D:\Games\ArmA3\A3Files
- Run the #Arma3server_steamcmd_example.cmd file
- Just after logging into Steam, the console window will hang and ask for a validation key
- Steam will have automatically sent you an email with this validation code, which you then need to input at the command prompt
- The Update console window should then continue to run and install ArmA3 ((DEV or STABLE) version to the target directory as defined in the .cmd file) eg (D:\Games\ArmA3\A3Master)
- Create a shortcut for the ArmA3Server.exe on the server desktop
- Add the following parameters to the Target Line in the shortcut tab of the newly created desktop shortcut
- -port=2302 (Required if running multiple server instances including any previous ArmA2 instances)
- "-profiles=d:\Games\Arma3\A3Master"
- -config=CONFIG_Vanilla.cfg
- -world=empty
- so it looks something similar to the following
- "D:\Games\Arma3\A3Master\arma3server.exe" "-profiles=d:\Games\Arma3\A3Master" -port=2302 -config=CONFIG_Vanilla.cfg -world=empty
- Setup the #Port Forwarding in your firewall accordingly
- Create a simple Notepad document called "CONFIG_Vanilla.cfg" and save it to the root folder of your ArmA3 install on the server D:\Games\ArmA3\A3Master
- Start up your shortcut, check the server runs. (You will see a console pop up in your desktop after a few seconds)
- Close the console window down, then you will need to edit the following files which will have been automatically created
- D:\Games\Arma3\A3Master\Users\Adminstrator\Administrator.Arma3Profile
- D:\Games\Arma3\A3Master\Users\Administrator\Arma3.cfg
- Restart the server
- Start up your client Arma3.exe (Running the same branch as the server, (eg Stable or DEV) and you should then be able to see your server in the server browser (Filters are available to reduce the server list)
- Login to your server using the password you defined in #CONFIG_Vanilla.cfg by typing "/" to open the chat window and then type (#login ADMINPASSWORD) followed by enter
Warning: Make sure you never forget the '#' in front of any server command!
- Once logged in you will be presented with a mission list, select one of the missions to start the game
- Prove the stability of your server by running BIS missions initially before you start adding user made content
Instructions (Linux o/s)
- Create a dedicated user account for the steam user (eg useradd steam) and configure the password (eg passwd steam)
- Log in as the steam user you just created and download the Steam Command Line client for Linux
- Extract the Steam client into your steam user account home directory
- Execute steamcmd.sh. It will install the rest of the Steam client and start the Steam client shell
- At the Steam client shell, login with your Steam username and password: "login xxxx"
- Install the Linux dedicated server with "app_update 233780"
- (Optional) Once the server is installed, create a symlink with "ln -s Steam/steamapps/common/Arma 3 Server/ arma3"
- In the steam user home directory, create the following directory structure (if it does not already exist) to store the profile files and Arma3.cfg file: "mkdir -p ~/.local/share/Arma 3" and "mkdir -p ~/.local/share/Arma 3 - Other Profiles"
- Change to the ~/arma3 directory and create and edit your server.cfg file
- Run the server with "./arma3server -name=server -config=server.cfg"
- The first time you run the server it will auto-create a profile file under ~/.local/share/Arma 3 - Other Profiles/server/server.Arma3Profile. Edit the profile file to customise difficulty settings
WORK IN PROGRESS
Additional Info
Useful Links
Further Reading
- Steam Cmd Tutorial
- Dedicated Server Status (Linux info)
- Kelly's Heroes Dedicated server guide
- In Game server commands
- In Game admin commands
- Command line params
- Basic.cfg
- Steam Difficulty settings
- Server Configuration
- Sim-link GUI
Tools
- Arma3 Server Monitor
- Firedeamon
- ArmA3 server using TA2DST Method
- A You-Tube video tutorial by Kirkwood364 which uses Tophe's Arma 2 Dedicated Server Tool to administer and run an A3 server
- (Links for all the files required are available in the 1st comment of his You-Tube video)
- ArmaCon
- Currently in BETA Looking for Testers
- Built by an Arma Community who felt all of the tools out there did not meet the needs of a community once the server was running
- This is a management tool for once the server is running. In game admin commands, automated messaging, database and stats tracking
Useful Addons
- Zeu_Serverskills (AI Skill setting addon)
- Zeu_ServerBriefing (Inject server information to all missions automatically
File Locations
Some files are automatically created when you use certain commandline parameters Some files have to be created manually. If you have followed the instructions accurately, you will now have the following files and directories in addition to the clean install
- d:\Games\Arma3\A3Master\ Users\Administrator\Administrator.Arma3Profile (Difficulty settings)
- d:\Games\Arma3\A3Master\ Users\Administrator\Administrator.vars.Arma3Profile (Some binarised content which you cannot edit)
- d:\Games\Arma3\A3Master\ Users\Administrator\Arma3.cfg (Bandwidth settings)
- d:\Games\Arma3\A3Master\ MPMissions\ This is where custom made mission.pbo's need to be placed)
- d:\Games\Arma3\A3Master\ arma3.rpt (Debug Log, automatically created every time the arma3server.exe is started)
- d:\Games\Arma3\A3Master\ CONFIG_Vanilla.cfg (Manually created)
- d:\Games\ArmA3\A3Files\ Arma3server_steamcmd_example.cmd (Manually created)
- d:\Apps\Steam\
Port Forwarding
Arma 3 uses the same default ports as Arma 2 with the addition of 2 steam ports. So if you intend running A2 and A3 servers on the same machine, you need to edit the ports used.
Default ports are all UDP and as follows
Incoming:
- 2302 (Arma3 Game port) + (VON is now part of main gameport due to NAT issues)
- 2303 (Server reporting)
- 8766 (Steam port)
- 27016 (Steam query port)
Outgoing:
DST Port | Proto | Destination | Comment |
---|---|---|---|
27900 | UDP | 69.10.30.248 | GameSpy - arma3pc.master.gamespy.com |
2344 | TCP+UDP | 81.0.236.111 | BattlEye - arma31.battleye.com |
2345 | TCP | 81.0.236.111 | BattlEye - arma31.battleye.com |
2300-2305 | UDP | any | Arma Server to Client Traffic |
8766 | UDP | any | Arma Server to STEAM master traffic |
27016 | UDP | any | Arma Server to STEAM master traffic |
TODO: Steam Ports
To define the ArmA3 Game port used,
state -port= **** in your command line arguments (Where *** is the new initial Arma 3 Game eg 2302)
and to define your Steam ports add the following lines to your CONFIG_Vanilla.cfg (editing the actual port numbers as required)
// STEAM steamport=8766; steamqueryport=27016;
If you are running multiple servers, i would suggest the following format
SERVER 1
2300 UDP (steamport)
2301 UDP (Steam query port)
2302 UDP (used for game)
2303 UDP (used for server reporting)
2304 UDP (? no information available for this port useage)
2305 UDP (used for VoN transmissions)
so open ports 2300-2305
and leave at least 10 ports between the next server set
SERVER 2
2320 UDP (steamport)
2321 UDP (Steam query port)
2322 UDP (used for game)
2323 UDP (used for server reporting)
2324 UDP (? no information available for this port useage)
2325 UDP (used for VoN transmissions)
so open ports 2320-2325
leave at least 10 ports then repeat the process for No3 server etc
Configuring for stable or Dev branch
Edit the Arma3server_steamcmd_example.cmd as defined below then run it
- To select Development version
SET A3BRANCH=107410 -beta development
- To select stable build (Dedicated server package)
SET A3BRANCH=233780 -beta
- To select stable build (Full client\server package)
SET A3BRANCH=107410
Important Feature
Since 12th March 2013 the development branch and the stable branch versions are no longer compatible. this means:
Only DEV clients can connect to a DEV server
Only Stable clients can connect to stable servers
Advanced Configuration
WORK IN PROGRESS
Bandwidth Optimisation
WORK IN PROGRESS
Multiple Server configuration
There are various methods available to run multiple Dedicated Arma 3 servers on the same box. Each server instance requires
- Its own unique set of ports
- Its own profile
- Its own config
This Post explains it more in depth
Each method has some pro's and cons To select the preferred methodology that suits your requirements you need to have considered the following
- The useage of the "Keys" folder
- The useage of the "MpMissions" folder
- Available Hard drive space
- Update management
METHOD 1
see THIS POST for more detailed information This is copy of the master install into a different directory As may times as you have space for
Pros
- Most robust
- Unique MpMissions folder
- Unique "keys" folder
- Allows ability to run seperate instances of different branches of the game, (E.g Dev or Stable)
Cons
- Uses more drive space
- Requires more effort to create and automate the updating process
METHOD 2
This uses 1 master install folder and has renamed arma3server.exe's in sub folders of the master see THIS POST for more detailed information
Pros (Compared to Method 1)
- Uses less space than Method 1
- Updating will be easier
Cons (Compared to Method 1)
- Not very Robust
- Shares MpMissions folders with all the other exe's (Will create a very cluttered MpMissions folder and allows admins to select addon required missions for a mod this server instance isn't running
- Shares "keys" folder with all other exe's (This can cause an issue when running various differing -mod servers)
- Will not allow you to run seperate instances of different branches of the game
METHOD 3
This is a hybrid of method 1, in that it is essentially a "Virtual" copy of the master install in a different directory the difference being that many folders are sim linked to the initial Master directory simlink GUI:
Pros (Compared to Method 1)
- Uses less drive space (As you wont have multiple copies of the addons folder)
- Allows for unique MpMissions folder if desired
- Allows for unique "keys" folder if desired
- Updating will be easier
Cons (Compared to Method 1)
- Requires more effort to initially create the simlinks and directories
- Will not allow you to run seperate instances of different branches of the game at the same time, (E.g Dev or Stable)
METHOD 4
You could of course mix n match all 3 methods to suit your specific requirements
Dedicated Server & Client configuration
The only known issue, is to make sure you start the server up before you start the steam client Failing to do this causes steam port issues and your client will not be able to connect to the server
Headless Client
--JacmacBrian (talk) 22:14, 23 February 2014 (CET)
A Headless Client can be used by missions to offload AI processing to a dedicated client, freeing up the dedicated server process from most AI processing. Thus more AI units can be spawned and the server process will be able to dedicate most of it's processing towards communication with the clients. For a Headless Client/Dedicated Server to function together efficiently, they both need to be connected to each other via extremely low latency and high bandwidth. Effectively, they need to be on the same LAN at least, but preferably running on the same computer.
Setup and Execution
- Headless Client for ARMA 3 requires a valid active Steam account logged in to function (Dwarden Post)
- A Headless Client is simply Arma3.exe run from the command line with parameters, for example:
arma3.exe -connect=localhost -port=2444 -client -nosound -password=some_server_password -name=HC -profile=HC -mod=@CBA_A3;@blah;@blah;@blah
In the example above, the headless client is running on the same host as the dedicated server. It uses a profile called HC and connects to the server with a password as required by the server (the password is for password protected servers, optional). The server in this example is running on port 2444, alter this to the port of your server.
- The Headless Client profile needs to be created like any other profile in Arma 3 (Note: It is best if you name this profile HC)
No configuration of the profile is necessary, but after creation, edit HC.Arma3Profile located in C:\Users\yourusername\Documents\Arma 3 - Other Profiles\HC and add this line:
battleyeLicense=1;
Alternatively, you can use the full Arma 3 client to connect to any multiplayer server with BattlEye enabled and accept the BattlEye License Agreement, which will do the same thing as manually editing HC.Arma3Profile.
Once the profile is ready, copy the profile directory to C:\Users\yourusername\Documents\Arma 3 - Other Profiles on the server (if the profile was not created on the server). If the profile was created on the server or is not going to run on the server and is already on the computer it is going to run on, then it is ready to go.
- If the Headless Client is on the server, the server's cfg must have the local loopback address as seen below (e.g. A3Server.cfg):
localClient[]={127.0.0.1}; battleyeLicense=1;
Dwarden suggests that battleyeLicense=1; be in the server's config, but it is unclear whether this is actually necessary. (Dwarden Post)
- If the Headless Client is running on a different computer, the server's config has to have the address in localClient[]=x.x.x.x. This will allow the server to communicate with the Headless Client using unrestricted bandwidth. Multiple headless clients at different addresses can be added:
localClient[]={127.0.0.1, 192.168.1.10, 192.168.1.210}; battleyeLicense=1;
Headless Client on a Dedicated Server Notes
If the Arma 3 Headless Client and a Arma 3 Dedicated Server are running on the same Windows computer (VM or physical), it may be beneficial to set processor affinity to prevent execution intensive threads from being scheduled across the same (v)CPUs. The operating system will generally schedule threads efficiently, but manual CPU allocation is possible. This can be achieved by right-clicking on the process (e.g. Arma3Server.exe(*32)) in the processes tab of the Windows Task Manager and selecting Set Affinity.... Be aware that on a physical intel CPU, the odd numbered CPUs are Hyper-thread cores.
Note: You can use automated solution for affinity assign via batch file with commandline CMD /AFFINITY HEXvalue e.g. CMD /C START /AFFINITY 0xF3 arma3server.exe
It has been observed that although the ARMA server and client processes will kick off multiple threads, the bulk of processing is used up by only one or two threads. For example, spawning 50 AI units does not generate 50 threads. There is one thread in the process that handles all of the AI units, irrespective of how many have been spawned. In this way, the ARMA server and client processes do not make maximal use of the processing capability found in modern processors and so AI counts do not scale easily. As such, faster CPU core speed is king and offloading the AI to multiple headless clients on the same computer will probably produce the best possible results for complex missions involving many AI units (albeit an expensive way to get the results).
Example Files
Arma3server_steamcmd_example.cmd
- Standalone Server Package (no need for game ownership on STEAM account)
- Note: it needs to be ran twice (1st STEAMcmd update itself, (when done, quit), 2nd update the Server package)
- Code:
@echo off @rem http://media.steampowered.com/installer/steamcmd.zip SETLOCAL ENABLEDELAYEDEXPANSION :: DEFINE the following variables where applicable to your install SET STEAMLOGIN=mylogin mypassword SET A3serverBRANCH=233780 -beta :: For stable use 233780 -beta :: For Dev use 233780 -beta development :: Note, the missing qotation marks, these need to be wrapped around the entire "+app_data......" :: There is no DEV branch data yet for Arma 3 Dedicated Server package !!! SET A3serverPath=C:\A3server\ SET STEAMPATH=C:\STEAMcmd\ :: _________________________________________________________ echo. echo You are about to update ArmA 3 server echo Dir: %A3serverPath% echo Branch: %A3serverBRANCH% echo. echo Key "ENTER" to proceed pause %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %A3serverPath% +"app_update %A3serverBRANCH%" validate +quit echo . echo Your ArmA 3 server is now up to date echo key "ENTER" to exit pause
CONFIG_Vanilla.cfg
// // server.cfg // // comments are written with "//" in front of them. // STEAM steamport =8766; //default 8766, needs to be unique if multiple serves on same box steamqueryport =27016; //default 27016, needs to be unique if multiple servers on same box // GLOBAL SETTINGS hostname = "My Server: My Teamspeak address"; // The name of the server that shall be displayed in the public server list //password = "ServerAccessPassword"; // Password for joining, eg connecting to the server passwordAdmin = "AdminPassword"; // Password to become server admin. When you're in Arma MP and connected to the server, type '#login xyz' reportingIP = "arma3pc.master.gamespy.com"; // This is the default setting. Leave empty for private servers if you do not want your server listed publicly logFile = "arma3server.log"; verifySignatures = 2; equalModRequired = 0; // kick if data/mods aren't equal requiredSecureId = 2; // was used to define type of secureID // WELCOME MESSAGE ("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 Arma 3 Server", "TS3 Server: teamspeak.somewhere.com", "Web: www.example.com" }; motdInterval = 30; // Time interval (in seconds) between each message // JOINING RULES maxPlayers = 40; // Maximum amount of players. Civilians and watchers, beholder, bystanders and so on also count as player. kickDuplicate = 1; // Each ArmA version has its own ID. If kickDuplicate is set to 1, a player will be kicked //requiredBuild = 12345 // Require clients joining to have at least build 12345 of game, preventing obsolete clients to connect // VOTING voteMissionPlayers = 1; // Tells the server how many people must connect so that it displays the mission selection screen. voteThreshold = 0.33; // 33% or more players need to vote for something, for example an admin or a new map, to become effective //voteMissionPlayers = 0; // INGAME SETTINGS disableVoN = 1; // If set to 1, Voice over Net will not be available vonCodecQuality = 0; // supports range 1-30 //8kHz is 0-10 (narrowband), 16kHz is 11-20 (wideband), 32kHz is 21-30 (ultrawideband) persistent = 1; // If 1, missions still run on even after the last player disconnected. timeStampFormat = "short"; // Set the timestamp format used on each report line in server-side RPT file. Possible values are "none" (default),"short","full". BattlEye = 1; // Server to use BattlEye system allowedLoadFileExtensions[] = {"txt","hpp"}; // only allow files with ".txt" and ".hpp" extension to be loaded via loadFile command (since Arma 3 1.19.124216) // SCRIPTING ISSUES onUserConnected = ""; // onUserDisconnected = ""; // doubleIdDetected = ""; // // SIGNATURE VERIFICATION onUnsignedData = "kick (_this select 0)"; // unsigned data detected onHackedData = "kick (_this select 0)"; //"ban (_this select 0)"; // tampering of the signature detected onDifferentData = "";
// MISSIONS CYCLE (see below) class Missions {
class Mission1 { template="co_xx_mymission.stratis"; difficulty="Regular"; };
};
****.Arma3Profile
version=2; viewDistance=3000; preferredObjectViewDistance=3000; terrainGrid=12.5; activeKeys[]= { }; class Difficulties { class recruit { class Flags { Armor=1; FriendlyTag=0; EnemyTag=0; MineTag=1; HUD=1; HUDPerm=1; HUDWp=1; HUDWpPerm=1; HUDGroupInfo=1; AutoSpot=1; Map=1; WeaponCursor=1; AutoGuideAT=1; ClockIndicator=1; 3rdPersonView=1; UltraAI=0; CameraShake=0; UnlimitedSaves=1; DeathMessages=1; NetStats=1; VonID=1; ExtendetInfoType=1; }; skillFriendly=0.6; skillEnemy=0.6; precisionFriendly=0.28; precisionEnemy=0.28; }; class regular { class Flags { Armor=1; FriendlyTag=1; EnemyTag=0; MineTag=1; HUD=1; HUDPerm=1; HUDWp=1; HUDWpPerm=1; HUDGroupInfo=1; AutoSpot=1; Map=1; WeaponCursor=1; AutoGuideAT=1; ClockIndicator=1; 3rdPersonView=1; UltraAI=0; CameraShake=1; UnlimitedSaves=1; DeathMessages=1; NetStats=1; VonID=1; ExtendetInfoType=1; }; skillFriendly=0.6; skillEnemy=0.6; precisionFriendly=0.28; precisionEnemy=0.28; }; class veteran { class Flags { Armor=0; FriendlyTag=0; EnemyTag=0; MineTag=1; HUD=1; HUDWp=1; HUDWpPerm=1; HUDGroupInfo=1; AutoSpot=0; WeaponCursor=0; ClockIndicator=1; 3rdPersonView=1; UltraAI=0; CameraShake=0; DeathMessages=0; NetStats=1; VonID=1; ExtendetInfoType=0; }; skillFriendly=0.6; skillEnemy=0.6; precisionFriendly=0.28; precisionEnemy=0.28; }; class mercenary { class Flags { HUD=1; AutoSpot=0; WeaponCursor=0; DeathMessages=0; NetStats=1; VonID=1; }; skillFriendly=0.6; skillEnemy=0.6; precisionFriendly=0.28; precisionEnemy=0.28; }; }; difficulty="veteran";
Arma3.cfg
language="English"; adapter=-1; MinBandwidth=800000; MaxBandwidth=25000000; MaxMsgSend=384; MaxSizeGuaranteed=512; MaxSizeNonguaranteed=256; MinErrorToSend=0.003; MaxCustomFileSize=100000; Windowed=0; serverLongitude=0; serverLatitude=52; serverLongitudeAuto=0; serverLatitudeAuto=52;
Support & Troubleshooting
Known Issues
- My server has 2500ms ping in server browser (This is caused by running the steam client as Non Administrator) see http://feedback.arma3.com/view.php?id=9374
- MaxMsgSend default is 128, higher values can create Desync problems if the server's available processing and/or bandwidth can not support the higher value
- if you run Arma 3 Dedicated server data package on system where is also installed client there is possibility the server will load the full client data instead server data package, this is caused by precedence check in registry, the solution/workaroudn to this issue is to use arma3server.exe "-mod=" (where empty modline ensure it loads data from where server is placed)
Live Help
For Live help, join the Skype group channel
Quote Originally Posted by Dwarden all server hosters, we have Skype channel for collaborative work of server admins http://forums.bistudio.com/showthread.php?131825-Skype-groups-amp-other-contact-groups ... thanks
F.A.Q
WORK IN PROGRESS