mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 20:13:13 +03:00
120 lines
3.3 KiB
Plaintext
120 lines
3.3 KiB
Plaintext
private ["_position","_doLoiter","_unitTypes","_isNoone","_loot","_array","_agent","_type","_radius","_method","_nearByPlayer","_myDest","_newDest","_lootType","_isAlive","_rnd","_id"];
|
|
_position = _this select 0;
|
|
_doLoiter = _this select 1;
|
|
_unitTypes = _this select 2;
|
|
|
|
if (dayz_maxCurrentZeds > dayz_maxZeds) exitwith {};
|
|
if (dayz_CurrentZombies > dayz_maxGlobalZombies) exitwith {};
|
|
if (dayz_spawnZombies > dayz_maxLocalZombies) exitwith {};
|
|
|
|
_isNoone = {isPlayer _x} count (_position nearEntities [["AllVehicles","CAManBase"],30]) == 0;
|
|
_loot = "";
|
|
_array = [];
|
|
_agent = objNull;
|
|
|
|
//Exit if a player is nearby
|
|
if (!_isNoone) exitWith {};
|
|
|
|
if (count _unitTypes == 0) then {
|
|
|
|
if (DZE_MissionLootTable) then {
|
|
_unitTypes = []+ getArray (missionConfigFile >> "CfgBuildingLoot" >> "Default" >> "zombieClass");
|
|
} else {
|
|
_unitTypes = []+ getArray (configFile >> "CfgBuildingLoot" >> "Default" >> "zombieClass");
|
|
};
|
|
};
|
|
|
|
_type = _unitTypes call BIS_fnc_selectRandom;
|
|
|
|
//Create the Group and populate it
|
|
//diag_log ("Spawned: " + _type);
|
|
_radius = 0;
|
|
_method = "CAN_COLLIDE";
|
|
if (_doLoiter) then {
|
|
_radius = 40;
|
|
_method = "NONE";
|
|
};
|
|
//diag_log ("Spawned: " + str([_type, _position, [], _radius, _method]));
|
|
_agent = createAgent [_type, _position, [], _radius, _method];
|
|
PVDZE_zed_Spawn = [_agent];
|
|
publicVariableServer "PVDZE_zed_Spawn";
|
|
|
|
if (_doLoiter) then {
|
|
_agent setDir round(random 180);
|
|
_agent setPosATL _position;
|
|
_agent setvelocity [0, 0, 1];
|
|
//_agent setVariable ["doLoiter",true,true];
|
|
} else {
|
|
_agent setVariable ["doLoiter",false,true];
|
|
};
|
|
dayz_spawnZombies = dayz_spawnZombies + 1;
|
|
|
|
//diag_log ("CREATE INFECTED: " + str(_this));
|
|
|
|
_position = getPosATL _agent;
|
|
_nearByPlayer = ({isPlayer _x} count (_position nearEntities [["AllVehicles","CAManBase"],30]) > 0);
|
|
|
|
if (random 1 > 0.7) then {
|
|
_agent setUnitPos "Middle";
|
|
};
|
|
|
|
//diag_log ("CREATED: " + str(_agent));
|
|
if (_nearByPlayer) then {
|
|
deleteVehicle _agent;
|
|
};
|
|
/*
|
|
//_agent setVariable["host",player,true];
|
|
if (!_doLoiter) then {
|
|
_agent setPosATL _position;
|
|
_agent setDir round(random 180);
|
|
if (_nearByPlayer) then {
|
|
deleteVehicle _agent;
|
|
};
|
|
} else {
|
|
if (_nearByPlayer) then {
|
|
_attempt = 0;
|
|
while {_nearByPlayer} do {
|
|
_position = [_position,0,20,10,0,20,0] call BIS_fnc_findSafePos;
|
|
_agent setPos _position;
|
|
_nearByPlayer = ({isPlayer _x} count (_position nearEntities ["CAManBase",30]) > 0);
|
|
_attempt = _attempt + 1;
|
|
if (_attempt > 10) exitWith {};
|
|
};
|
|
_agent setPos _position;
|
|
};
|
|
};
|
|
*/
|
|
if (isNull _agent) exitWith {
|
|
dayz_spawnZombies = dayz_spawnZombies - 1;
|
|
};
|
|
|
|
_isAlive = alive _agent;
|
|
|
|
_myDest = getPosATL _agent;
|
|
_newDest = getPosATL _agent;
|
|
_agent setVariable ["myDest",_myDest];
|
|
_agent setVariable ["newDest",_newDest];
|
|
|
|
//Add some loot
|
|
_rnd = random 1;
|
|
if (_rnd > 0.3) then {
|
|
_lootType = configFile >> "CfgVehicles" >> _type >> "zombieLoot";
|
|
if (isText _lootType) then {
|
|
|
|
_array = [];
|
|
if (DZE_MissionLootTable) then {
|
|
_array = getArray (missionConfigFile >> "cfgLoot" >> getText(_lootType));
|
|
} else {
|
|
_array = getArray (configFile >> "cfgLoot" >> getText(_lootType));
|
|
};
|
|
if (count _array > 0) then {
|
|
_loot = _array call BIS_fnc_selectRandomWeighted;
|
|
if(!isNil "_array") then {
|
|
_agent addMagazine _loot;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
//Start behavior
|
|
_id = [_position,_agent] execFSM "\z\AddOns\dayz_code\system\zombie_agent.fsm"; |