Overriding the Official Server List in ArmA 3
There is a little-used feature in the ArmA 3 Multiplayer Server list that shows all of their “Official” servers. Currently, there are ~100 players on the official servers. These host games from Endgame to Zues. Stokes figured out how to override this list with the official servers for our mods. It involves a hack-ish way of breaking how ArmA’s config access is supposed to work.
So to start off, I want to explain how the official server list is loaded in ArmA. There is a class in the Dta\Bin.pbo called OfficialServersArma. There are a few more, OfficialServersArgo, and MonetizedServers, but we will be focusing on ArmA’s Official Servers as they have the most use to the modding community. Here is the class:
To start, look at access=2;. Here is the definition of access from the BI Wiki:
Next we look at all of the remaining properties. Here is what I know about each:
- URL is the url reference to the JSON data containing a list of servers
- updateInterval is the time in seconds between updates pulled from the URL and stored in the listFileName
- listDirectory is the folder the data is stored in
- listFileName is the file that stores the updated data from the URL
- tmpListFileName I figure is where active updates are stored until game shutdown
Although I may be wrong about some of the properties, I am correct with how I edit them to work with mods, but onto the important matters…
So, access = 2; means we can only read from this class, we can not modify this class. This should mean that we can’t change any of the values right?
Well arma configs have this neat feature called delete. This allows us to delete any classes we do not want. This is often used when modifying some of the Interfaces like RscDisplayMain. access = 2; does not prevent us from deleting the class entirely. So we should be able to delete the default arma class and recreate it.
We do hit the problem in pboProject that prevents us from deleting a class and recreating the class in the same PBO. So in order to do this we need TWO PBOs. First we need to recognize the PBO load order in arma. Importantly, the fact that the PBOs in the DTA folder are always loaded first. This means that we do not need a field in requiredAddons for our first PBO.
So our first PBO will look something like this:
However, next we need to include our first pbo as a requiredAddon. We also need to structure our own OfficialServersArma class. Giving us something like the following:
Before we finish, we need to setup the properties of our own OfficialServersArma class.
We need to setup a URL that contains our JSON data. This data has to be formatted like this:
Click here to view the default server list.
Next, think of a unique name for listFileName and tmpListFileName. This is to prevent us from overriding the default arma list when our mod is not loaded.
Finally, setup an update interval that is reasonable for how often you plan to update your server list. I never figured out if the update interval is in seconds or minutes. So the example I showed above is either 24 minutes or 24 hours. Either way I felt was reasonable.
Now include those PBOs in your mod and you should see your own official server list.
On another note, I contacted BI and asked if we were allowed to do this and I never got a response… so if anyone gets an answer from them I would love to know. 😛