/* * Author: GitHawk * Removes a magazine from the supply. * * Arguments: * 0: Ammo Truck * 1: Magazine Classname * 2: Number of Rounds to withdraw (default: -1) * * Return Value: * Magazine was removed * * Example: * [ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_removeMagazineFromSupply * * Public: Yes */ #include "script_component.hpp" params [["_truck", objNull, [objNull]], ["_magazineClass", "", [""]], ["_numRounds", -1, [0]]]; TRACE_3("removeMagazineFromSupply",_truck,_magazineClass,_numRounds); if (isNull _truck || {_magazineClass isEqualTo ""}) exitWith {false}; private _return = false; ([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; if (GVAR(supply) == 0) then { WARNING("supply setting is set to unlimited"); // func shouldn't have been called _return = true; }; if (GVAR(supply) == 1) then { private _supply = [_truck] call FUNC(getSupplyCount); if (GVAR(level) == 2) then { // Remove partial magazine supply count private _rearmAmount = (REARM_COUNT select _idx); if (_numRounds > 0) then { _rearmAmount = _numRounds; }; private _magazinePart = (_rearmAmount / (getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"))) min 1; if (_supply >= (_cal * _magazinePart)) then { [_truck, (_supply - (_cal * _magazinePart))] call FUNC(setSupplyCount); _return = true; }; } else { // Remove entire magazine supply count if (_supply >= _cal) then { [_truck, (_supply - _cal)] call FUNC(setSupplyCount); _return = true; }; }; }; if (GVAR(supply) == 2) then { private _magazineSupply = _truck getVariable [QGVAR(magazineSupply), []]; private _magazineIdx = -1; { _x params ["_magazine"]; if ((_magazine isEqualTo _magazineClass)) exitWith { _magazineIdx = _forEachIndex; }; } forEach _magazineSupply; if (_magazineIdx == -1) exitWith {false}; (_magazineSupply select _magazineIdx) params ["", "_rounds"]; private _configRounds = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"); if (GVAR(level) == 2) then { // With caliber based rearming, we need to remove the correct amount private _rearmAmount = (REARM_COUNT select _idx); if (_numRounds > 0) then { if (_numRounds > _rearmAmount) then { _rearmAmount = ceil (_numRounds / _rearmAmount); }; }; private _roundsPerTransaction = _rearmAmount min _configRounds; if (_rounds >= _roundsPerTransaction) then { _magazineSupply set [_magazineIdx, [_magazineClass, (_rounds - _roundsPerTransaction)]]; _truck setVariable [QGVAR(magazineSupply), _magazineSupply, true]; _return = true; }; } else { // Remove entire magazine if (_rounds >= _configRounds) then { _magazineSupply set [_magazineIdx, [_magazineClass, (_rounds - _configRounds)]]; _truck setVariable [QGVAR(magazineSupply), _magazineSupply, true]; _return = true; }; }; }; _return