Advertisement
secondcoming

ExileServer_world_spawnVehicles.sqf

May 25th, 2016
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 3.45 KB | None | 0 0
  1. private["_max", "_count", "_middle", "_pos", "_maxDist", "_roads", "_road", "_position", "_vehicleToSpawn", "_vehicle", "_hitpoints","_debugMarkers","_vehicleClassNames","_maximumDamage","_damageChance"];
  2.  
  3. _debugMarkers = ((getNumber(configFile >> "CfgSettings" >> "VehicleSpawn" >> "vehiclesDebugMarkers")) isEqualTo 1);
  4. _vehicleClassNames = getArray (configFile >> "CfgSettings" >> "VehicleSpawn" >> "ground");
  5. _maximumDamage = getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "maximumDamage");
  6. _damageChance = getNumber (configFile >> "CfgSettings" >> "VehicleSpawn" >> "damageChance");
  7.  
  8.  
  9. _max = 40;
  10. _count = 0;
  11.  
  12. _middle     = worldSize/2;
  13. _pos  = [_middle,_middle,0];
  14. _maxDist    = _middle;
  15.  
  16. if (worldName == 'Namalsk') then
  17. {
  18.     _max = 30; 
  19. };
  20.  
  21. // Get position of nearest roads
  22. _nearRoads = _pos nearRoads _maxDist;
  23.  
  24. for "_i" from 1 to _max do
  25. {  
  26.     _vehicleToSpawn = (_vehicleClassNames) call BIS_fnc_selectRandom;
  27.     _validspot  = false;
  28.     while{!_validspot} do
  29.     {
  30.         _selectedRoad = (_nearRoads) call BIS_fnc_selectRandom;
  31.         diag_log format["[Random Vehicle Spawning]: Selected road %1 (%2)",_selectedRoad,time];
  32.        
  33.         _road = position _selectedRoad;
  34.         _startPosition = [_road select 0, _road select 1, 0];
  35.  
  36.         _position = _startPosition findEmptyPosition [0,25,_vehicleToSpawn];
  37.        
  38.         if(!isNil "_position" && (count _position != 0)) then
  39.         {
  40.             _validspot = true;
  41.  
  42.             //Check if near player territory
  43.             _nearBase = (nearestObjects [_position,["Exile_Construction_Flag_Static"],500]) select 0;
  44.             if (!isNil "_nearBase") then { _validspot = false;  }; 
  45.  
  46.             // Don't spawn AI near traders and spawn zones
  47.             {
  48.                 switch (getMarkerType _x) do
  49.                 {
  50.                     case "ExileSpawnZone":
  51.                     {
  52.                         if(_position distance (getMarkerPos _x) < 1500) exitWith
  53.                         {
  54.                             _validspot = false;                        
  55.                         };
  56.                     };
  57.                     case "ExileTraderZone":
  58.                     {
  59.                         if(_position distance (getMarkerPos _x) < 1500) exitWith
  60.                         {
  61.                             _validspot = false;                        
  62.                         };
  63.                     };
  64.                 };
  65.             }
  66.             forEach allMapMarkers;
  67.             diag_log format["[Random Vehicle Spawning]: valid spot found from %1 @ %2 (%3)",_startPosition,_position,time];
  68.         };
  69.     };
  70.  
  71.    
  72.     _vehicle = [_vehicleToSpawn, _position, random 360, true] call ExileServer_object_vehicle_createNonPersistentVehicle;
  73.  
  74.     // Add items to vehicle
  75.     clearMagazineCargoGlobal _vehicle;
  76.     clearWeaponCargoGlobal _vehicle;
  77.     clearItemCargoGlobal _vehicle;
  78.  
  79.     _vehicle addItemCargoGlobal     ["Exile_Item_DuctTape", (random 1)];
  80.     _vehicle addItemCargoGlobal     ["Exile_Item_InstaDoc", (random 1)];
  81.     _vehicle addItemCargoGlobal     ["Exile_Item_PlasticBottleFreshWater", (random 2)];
  82.     _vehicle addItemCargoGlobal     ["Exile_Item_EMRE", (random 2)];
  83.            
  84.    
  85.     _hitpoints = (getAllHitPointsDamage _vehicle) select 0;
  86.     {
  87.         if ((random 75) < _damageChance) then
  88.         {
  89.             _vehicle setHitPointDamage [_x, random (_maximumDamage)];
  90.         };
  91.     } forEach _hitpoints;
  92.    
  93.     if (_debugMarkers) then
  94.     {
  95.         _debugMarker = createMarker ["vehicleMarker#"+str _count, _position];
  96.         _debugMarker setMarkerColor "ColorOrange";
  97.         _debugMarker setMarkerType "mil_dot_noShadow";
  98.     };
  99.        
  100.     _logDetail = format["[Random Vehicle Spawning]: creating vehicle %1 @  %2 (%3)",_vehicleToSpawn,_position,time];
  101.     diag_log _logDetail;
  102.    
  103.     _count = _count + 1;
  104. };
  105.  
  106. format ["[Random Vehicle Spawning]: Vehicles Spawned: %1", _count] call ExileServer_util_log;
  107. true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement