/*
        Created exclusively for ArmA2:OA - DayZMod.
        Please request permission to use/alter/distribute from project leader (R4Z0R49)
*/
private ["_wreck","_maxlocalspawned","_maxControlledZombies","_iPos","_nearByZed","_nearByPlayer","_rnd","_positions","_zombieChance","_unitTypes","_min","_max","_num","_clean","_obj","_type","_config","_canLoot","_originalPos","_fastRun","_enabled","_i","_Pos"];
_obj = 			_this select 0;
_wreck = false;
if (count _this > 1) then {
	_wreck = 			_this select 1;
};

_type = 		typeOf _obj;
_config = missionConfigFile >> "CfgLoot" >> "Buildings" >> _type;
_canLoot = 		isClass (_config);
_originalPos = 	getPosATL _obj;

_maxlocalspawned = round(dayz_spawnZombies);
//Lets check if we need to divide the amount of zeds
if (r_player_divideinvehicle > 0) then {
	_maxlocalspawned = round(dayz_spawnZombies / r_player_divideinvehicle);
};

_maxControlledZombies = round(dayz_maxLocalZombies);
_enabled = false;

if (_canLoot ) then {
	//Get zombie class
	_unitTypes = 	getArray (_config >> "zombieClass");
	_min = 			getNumber (_config >> "minRoaming");
	_max = 			getNumber (_config >> "maxRoaming");
	_zombieChance =	getNumber (_config >> "zombieChance");

	//Walking Zombies
	_num = (round(random _max)) max _min; // + round(_max / 3);
	//diag_log ("Class: " + _type + " / Zombies: " + str(_unitTypes) + " / Walking: " + str(_num));
	if (!([_originalPos] call DZE_SafeZonePosCheck)) then {
		for "_i" from 0 to _num do
		{
			//_iPos = _obj modelToWorld _originalPos;
			if ((_maxlocalspawned < _maxControlledZombies) and (dayz_CurrentNearByZombies < dayz_maxNearByZombies) and (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
				[_originalPos,true,_unitTypes,_wreck] call zombie_generate;
			};
		};
	};

	//Add Internal Zombies
	if ((random 1) < _zombieChance) then {
		_clean = {alive _x} count ((getPosATL _obj) nearEntities ["zZombie_Base",(sizeOf _type)]) == 0;
		if (_clean) then {
			_positions =	getArray (_config >> "zedPos");
			//diag_log format["Building: %1 / Positions: %2 / Chance: %3",_type,_positions,_zombieChance];
			{
				_Pos = [_x select 0, _x select 1, 0];
				_rnd = random 1;
				if (_rnd < _zombieChance && {!([_Pos] call DZE_SafeZonePosCheck)}) then {
					_iPos = _obj modelToWorld _Pos;
					_nearByZed = {alive _x} count (_iPos nearEntities ["zZombie_Base",(((sizeOf _type) * 2) + 10)]) > 0;
					_nearByPlayer = ({isPlayer _x} count (_iPos nearEntities ["CAManBase",30])) > 0;
					//diag_log ("BUILDING: " + _type + " / " + str(_nearByZed) + " / " + str(_nearByPlayer));
					if ((_maxlocalspawned < _maxControlledZombies) and (dayz_CurrentNearByZombies < dayz_maxNearByZombies) and (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
						if (!_nearByPlayer and !_nearByZed) then {
							[_iPos,false,_unitTypes,false] call zombie_generate;
						};
					};
				};
			} forEach _positions;
		};
	};
};

//diag_log ("2 end");
