/* Spawns infected camps Author: Foxy */ #include "\z\addons\dayz_code\util\Math.hpp" #include "\z\addons\dayz_code\loot\Loot.hpp" //Number of infected camps to spawn #define CAMP_NUM 3 //Minimum distance between camps #define CAMP_MIN_DIST 300 //Base class of objects to add loot to #define CAMP_CONTAINER_BASE "IC_Tent" //Loot per tent #define LOOT_MIN 10 #define LOOT_MAX 20 //Random objects per camp #define OBJECT_MIN 4 #define OBJECT_MAX 12 //Radius around the camp in which random objects are spawned #define OBJECT_RADIUS_MIN 8 #define OBJECT_RADIUS_MAX 13 #define SEARCH_CENTER getMarkerPos "center" #define SEARCH_RADIUS (getMarkerSize "center") select 0 #define SEARCH_EXPRESSION "(5 * forest) + (4 * trees) + (3 * meadow) - (20 * houses) - (30 * sea)" //+ (3 * meadow) - (20 * houses) - (30 * sea) #define SEARCH_PRECISION 30 #define SEARCH_ATTEMPTS 10 private [ "_typeGroup", "_lootGroup", "_objectGroup", "_type", "_position", "_composition", "_compositionObjects", "_objectPos" ]; _typeGroup = Loot_GetGroup("InfectedCampType"); _lootGroup = Loot_GetGroup("InfectedCamp"); _objectGroup = Loot_GetGroup("InfectedCampObject"); for "_i" from 1 to (CAMP_NUM) do { //Select type of camp _type = Loot_SelectSingle(_typeGroup); _composition = _type select 1; //Find a position for "_j" from 1 to (SEARCH_ATTEMPTS) do { _position = ((selectBestPlaces [SEARCH_CENTER, SEARCH_RADIUS, SEARCH_EXPRESSION, SEARCH_PRECISION, 1]) select 0) select 0; _position set [2, 0]; //Check if a camp already exists within the minimum distance if (count (_position nearObjects [CAMP_CONTAINER_BASE,CAMP_MIN_DIST]) < 1) exitWith {}; }; diag_log format ["DEBUG: Spawning an infected camp (%1) at %2", _composition, _position]; //Spawn composition _compositionObjects = [_position, random 360,_composition] call spawnComposition; //Add loot to containers { if (_x isKindOf (CAMP_CONTAINER_BASE)) then { Loot_InsertCargo(_x, _lootGroup, round Math_RandomRange(LOOT_MIN, LOOT_MAX)); }; } forEach _compositionObjects; //Spawn objects around the camp { _objectPos = [_position, OBJECT_RADIUS_MIN, OBJECT_RADIUS_MAX, 5] call fn_selectRandomLocation; Loot_Spawn(_x, _objectPos, ""); } forEach Loot_Select(_objectGroup, round Math_RandomRange(OBJECT_MIN, OBJECT_MAX)); };