123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- private ["_type", "_base", "_types", "_allVehs", "_class", "_lastIndex", "_tmp_class", "_tmp_type","_vehicles", "_x", "_veh", "_marker", "_markerPos", "_markers", "_exhaustedTypes", "_exhaustedBases", "_done", "_success"];
- _type = [_this,0,"",[""]] call BIS_fnc_param;
- _base = [_this,1,"",["",[],objNull],[2,3]] call BIS_fnc_param;
- if (typeName _base == "OBJECT") then { _base = getPos _base; };
- _types = [];
- _allVehs = [];
- _class = (missionConfigFile >> "AW_rewards");
- _lastIndex = ((count _class) - 1);
- for "_i" from 0 to _lastIndex do
- {
- _tmp_class = (_class select _i);
- _tmp_type = (configName _tmp_class);
- _types = _types + [_tmp_type];
- _vehicles = getArray _tmp_class;
- {
- _allVehs = _allVehs + [[_tmp_type, _x]];
- } forEach _vehicles;
- };
- _veh = "";
- _marker = "";
- _markerPos = [];
- _markers = [];
- _exhaustedTypes = [];
- _exhaustedBases = [];
- _done = false;
- _success = false;
- while { !_done } do
- {
- _skipCheck = false;
- //Get type and vehicle
- if (_type == "") then
- {
- //Nothing specified; grab a random vehicle
- _tmp = _allVehs call BIS_fnc_selectRandom;
- _type = _tmp select 0;
- _veh = _tmp select 1;
- } else {
- if (_type in _types) then
- {
- _tmp = getArray (missionConfigFile >> "AW_rewards" >> _type);
- _veh = _tmp call BIS_fnc_selectRandom;
- } else {
- _veh = _type;
- _class = getText (configFile >> "CfgVehicles" >> _veh >> "vehicleClass");
- if (_class == "Armored" || _class == "Car" || _class == "Static") then
- {
- _type = "land";
- } else {
- if (_class == "Air" || _class == "Autonomous") then
- {
- _type = "air";
- } else {
- _type = "sea";
- };
- };
- };
- };
- //Get available markers
- {
- if ([format["_%1", _type], _x] call BIS_fnc_inString) then
- {
- _markers = _markers + [_x];
- };
- } forEach baseSpawns;
- //Get base intended
- if (typeName _base == "ARRAY" || _base in _exhaustedBases) then
- {
- _base = [_base, _exhaustedBases] call AW_fnc_findNearestBase;
- } else {
- _tmp = _markers;
-
- {
- if (!([_base, _x] call BIS_fnc_inString)) then
- {
- _markers = _markers - [_x];
- };
- } forEach _tmp;
- };
- //Find some valid markers
- while { (count _markers) > 0 } do
- {
- if (_type in _exhaustedTypes) exitWith
- {
- _type = "";
- _skipCheck = true;
- };
- _marker = _markers call BIS_fnc_selectRandom;
- if (isNil "_marker") then { _marker = ""; };
- if (_marker != "") then
- {
- _markerPos = markerPos _marker;
- {
- if ((_x distance _markerPos) < 5) exitWith
- {
- _markers = _markers - [_marker];
- _marker = "";
- };
- } forEach vehicles;
- if (_marker != "") exitWith
- {
- _skipCheck = true;
- _done = true;
- _success = true;
- };
- };
- };
- //Final exhaustion checks
- if (!_skipCheck) then
- {
- _done = true;
- _exhaustedAllTypes = true;
- _exhaustedTypes = _exhaustedTypes + [_type];
- _type = [_this,0,"",[""]] call BIS_fnc_param;
- if (_type == "") then
- {
- {
- if (!(_x in _exhaustedTypes)) exitWith { _exhaustedAllTypes = false; };
- } forEach _types;
- };
- if (_exhaustedAllTypes) then
- {
- _exhaustedBases = _exhaustedBases + [_base];
- _exhaustedTypes = [];
- {
- if (!(_x in _exhaustedBases)) exitWith { _done = false; };
- } forEach basesOwned;
- } else {
- _done = false;
- };
- _veh = "";
- _marker = "";
- };
- };
- _ret = if (_success) then
- {
- [_veh, _markerPos, (markerDir _marker)] call AW_fnc_createVehicle
- } else {
- objNull
- };
- _ret
|