Since the real unit database is down we have to rely on the Spooky database in order to get our unit info. This has a couple problems, one of which is being out of date witht he current patches, which is fixable pretty easily, and another which I'll get into below. Before we begin, I just want to say that I love the Spooky database for FAF and it's design and how it works, it's much superior to the default FAF version in terms of design. However, it isn't always reliable and here is why.
Above we see a comparison among the four T2 Mobile Flaks in the game. They all have a similar DPS, except for the Sky Boxer. Why? Well, the Skyboxer projectile has a much lower damage than the other three, and to compensate for that the Sky Boxer launches two projectiles per shot instead of one like all the others, however the fire cycle shown here shows that it only shoots one projectile per half-second, when we know it shoots two. Because the database thinks the Sky Boxer shoots less projectiles than it does it calculates its DPS incorrectly.
Here is the code for how it calculates all of these. As highlighted in the red box, the code calls for the variable MuzzleSalvoSize from the unit blueprint and uses it as the number of projectiles the unit fires in a firing cycle. Let's look at that variable in the Sky Boxer's blueprint:
Huh, that can't be right, the MuzzleSalvoSize variable equals one. And this was extracted from the nx2 file from the FAF client, so we know it's correct. But the Sky Boxer shoots twice per cycle. What's going on?
Well, as it turns out, it's not the variable we actually want...
This is what we want, ProjectilePerOnFire, which for the Sky Boxer equals two, just as it should be. So the database's code for calculating the firing cycle doesn't pull the right variable. That seems odd.
It turns out Spooky made a slight mistake. The MuzzleSalvoSize variable does tell you how many shots a unit takes in a firing cycle, but only if the shots are taken in succession like with the Ravager, but the ProjectilePerOnFire variable tells you how many shots are taken at the same time. So units like the Summit Class and Pillar will have the number of projectiles the fire governed by the ProjectilePerOnFire variable (and thus will suffer from this glitch) and units like the Ravager will have the number of shots they take governed by the MuzzleSalvoSize variable, and thus will not. The Mongoose both suffers and doesn't suffer from this glitch, since it's plasma gattling cannon won't be affected by this but it's grenade launcher will (the database says it launches 4 shots per 6.7 seconds but it actually shoots 3 grenades per round, so it's DPS is underestimated by two-thirds)
Normally to fix this I would recommend to just multiply weapon.MuzzleSalvoSize by weapon.ProjectilesPerOnFire, but it isn't that simple, at least as far as I can tell. We're getting into territory that I am uncertain about, so I may be wrong, but I don't believe it actually reads the unit blueprint files, instead it reads from these two json files in the source code.
Both of these files look like this:
So basically dumps of all the blueprint data into one file. The second file is smaller than the first though and it looks like it has a lot of information stripped from it that is present in the first file but seems irrelevant, things like animation bones and audio cues and things like that. This leads me to believe that the database reads from the smaller second file for all of it's information.
Unfortunately one of the pieces of information stripped from the second file is ProjectilesPerOnFire. It doesn't appear anywhere. D'oh.
So that would need to be added back into the file....and unfortunately that's where my usefullness ends. I looked through the rest of the program and I found what looks like the files used to dump and strip the blueprint files of their data, but I can't find anywhere that says what data it stripped and which data it didn't. For what it's worth, here's where I believe it strips the data from the index.fat.json file:
And I'm not a javascript programmer (or any kind of programmer for that matter, unless you count extremely rudimentary QBasic) and I can't find anything in this part that says which parts are kept and which parts are stripped, and it references files I can't find anywhere else in the databases source code. Hopefully Spooky himself knows and can fix it.
Taken from my original post about this on Imgur, http://imgur.com/a/TJlCa I decided to transcribe it here. Also I'm pretty sure that this kind of thing can go on this forum, but if it doesn't I apologize.