Checking for near zombies and players in the forEach loop is inappropriate and inefficient. Because it was checking for near zombies, the internal zombies were not spawning at all. It appeared that they were because the walking zombies were using the building position plus the radius option on createAgent. fn_selectRandomLocation using the size of the object as the minimum distance prevents the zombies from potentially spawning into objects and dying. The max distance for the crash site zombies is increased a bit so they can spawn farther away from the object since they are in an open field. The position on the internal zombies should not have the z coordinate automatically set to zero. This prevents the zombies from spawning at positions on upper floors of buildings.
The isClass and config checks are done in player_spawnCheck. There is no reason to do that here. Those variables are being passed in an array during the function call. Global variables dayz_spawnZombies and dayz_maxControlledZombies used in spawn checks are adjusted in player_spawnCheck and zombie_generate. There is no reason to save to local variables.
Zeds and loot should not spawn in trader cities by default, regardless
of whether the server uses safe zones.
For servers that do not use safezones, the only other things affected
are salvage and instant kill for vehicle explosions in trader cities.
Neither is a significant issue. Most servers use safezones anyway.
Following d750f57, changed to exitWith so the check is only called once
instead of multiple times. Also no need to call again in
zombie_generate, since that function is only called by
building_spawnZombies which already checks it.
AFAIK there is no performance difference between configFile and
missionConfigFile.
Using missionConfigFile by default simplifies loot scripts and makes the
extra config variable unnecessary. It's one less step for admins to
customize their tables.