/* * Author: Clarky * * * * */ params ["_hq", "_amount", "_player"]; // Grab all Depots at the HQ private _baseDetails = _hq getVariable "baseDetails"; private _depots = _baseDetails get "depots"; if (_depots isEqualTo []) exitWith { [ "CLF_ShowMessage", [ 1, 0, "No connected supply depots found." ], _player ] call CBA_fnc_targetEvent; // Return false; false; }; // Check current materiel available at this base private _currentMateriel = 0; { _currentMateriel = _currentMateriel + (_x getVariable ["currentMateriel", 0]); } forEach _depots; if (_currentMateriel < _amount) exitWith { [ "CLF_ShowMessage", [ 1, 0, "Not enough materiel." ], _player ] call CBA_fnc_targetEvent; // Return false; false; }; // Loop through and subtract materiel from the depots // Might work on a better way to do this eventually (i.e prioritising specific depots depending on reasons) // By this point we have 100% checked and confirmed there is enough materiel to proceed with the requested supply consumption, so this SHOULD BE SAFE AND NOT ALLOW OVERCONSUMPTION :) { // If the _amount is now at 0, exit the loop early if (_amount <= 0) exitWith {}; // Get currently looped depot's materiel and draw down from it private _depotMateriel = _x getVariable "currentMateriel"; private _reduceAmount = _depotMateriel min _amount; _x setVariable ["currentMateriel", _depotMateriel - _reduceAmount, true]; // Update remaining amount to reduce _amount = _amount - _reduceAmount; } forEach _depots; // Return true true;