123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- private ["_spawnedUnits", "_side", "_soldiers", "_vehicles", "_toSpawn", "_type", "_pos", "_randomUnit", "_i", "_c", "_group", "_amount", "_loc", "_radius"];
- // Set defaults
- _side = [_this,0,EAST,[EAST]] call BIS_fnc_param;
- _amount = [_this,1,5,[0]] call BIS_fnc_param;
- _loc = [_this,2,[0,0,0],[[],""],[2,3]] call BIS_fnc_param;
- _radius = [_this,3,100,[[],0],[2]] call BIS_fnc_param;
- // Grab enemy units
- _spawnedUnits = [];
- _soldiers = getArray (missionConfigFile >> "enemy" >> "infantry");
- _vehicles = getArray (missionConfigFile >> "enemy" >> "vehicles");
- _static = getArray (missionConfigFile >> "enemy" >> "static");
- _boats = getArray (missionConfigFile >> "enemy" >> "boats");
- _air = getArray (missionConfigFile >> "enemy" >> "air");
- _unitTypes = ["infantry", "vehicle", "air", "static"];
- _chances = [0.75, 0.15, 0.03, 0.07];
- // Creation loop
- for [{_i = 0}, {_i < _amount}, {_i = _i + 1}] do
- {
- _toSpawn = [];
- _ret = [];
- _lName = typeName _loc;
- _type = [_unitTypes, _chances] call BIS_fnc_selectRandomWeighted;
- _pos = switch (_lName) do
- {
- case "ARRAY":
- {
- _rName = typeName _radius;
- _ret = switch (_rName) do
- {
- case "ARRAY":
- {
- [_loc, (_radius select 0), (_radius select 1), 1, 0, 2000, 0] call BIS_fnc_findSafePos
- };
- case "SCALAR":
- {
- [[[_loc, _radius]], ["water", "out"]] call BIS_fnc_randomPos
- };
- };
- _ret
- };
- case "STRING":
- {
- _tempPos = [_loc] call AW_fnc_randomPosTrigger;
- _ret = [_tempPos, 0, 50, 2, 0, 2000, 0] call BIS_fnc_findSafePos;
- _ret
- };
- };
- switch (_type) do
- {
- case "infantry":
- {
- _rand = round(6 + random(4));
- for [{_c = 0}, {_c < _rand}, {_c = _c + 1}] do
- {
- _randomUnit = _soldiers call BIS_fnc_selectRandom;
- _toSpawn = _toSpawn + [_randomUnit];
- };
- _group = [_pos, _side, _toSpawn] call BIS_fnc_spawnGroup;
- {
- _x addEventHandler ["killed", { (_this select 0) call AW_fnc_addDead; }];
- } foreach (units _group);
- _spawnedUnits = _spawnedUnits + [_group];
- };
- case "vehicle":
- {
- _randomUnit = _vehicles call BIS_fnc_selectRandom;
- _group = [_pos, random 360, _randomUnit, _side] call BIS_fnc_spawnVehicle;
- {
- {
- _x addEventHandler ["killed", { (_this select 0) call AW_fnc_addDead; }];
- } forEach _x;
- } forEach [[(_group select 0)], (_group select 1)];
- _spawnedUnits = _spawnedUnits + [_group select 2];
- _spawnedUnits = _spawnedUnits + [_group select 0];
- };
- case "air": // Needs splitting into "plane" and "helicopter"
- {
- _randomUnit = _air call BIS_fnc_selectRandom;
- _group = [_pos, random 360, _randomUnit, _side] call BIS_fnc_spawnVehicle;
- {
- {
- _x addEventHandler ["killed", { (_this select 0) call AW_fnc_addDead; }];
- } foreach _x;
- } foreach [[(_group select 0)], (_group select 1)];
- _spawnedUnits = _spawnedUnits + [_group select 2];
- _spawnedUnits = _spawnedUnits + [_group select 0];
- };
- case "static":
- {
- _randomUnit = _static call BIS_fnc_selectRandom;
- _group = [_pos, random 360, _randomUnit, _side] call BIS_fnc_spawnVehicle;
- {
- {
- _x addEventHandler ["killed", { (_this select 0) call AW_fnc_addDead; }];
- } foreach _x;
- } foreach [[(_group select 0)], (_group select 1)];
- _spawnedUnits = _spawnedUnits + [_group select 2];
- _spawnedUnits = _spawnedUnits + [_group select 0];
- };
- };
- };
- _spawnedUnits
|