66 lines
1.5 KiB
Plaintext
66 lines
1.5 KiB
Plaintext
/*
|
|
* 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; |