ACE3/addons/magazinerepack/functions/fnc_getMagazineChildren.sqf
Mike-MF 52c19d53af
Magazine Repack - Add ability to disable repacking via class (#10232)
* Magazine Repack - Add ability to disable repacking via class

* Update addons/magazinerepack/functions/fnc_getMagazineChildren.sqf

Co-authored-by: PabstMirror <pabstmirror@gmail.com>

* Bretts suggestion

* Documentation

* Apply suggestions from code review

Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>

* Review missed a line

* Fix getting number instead of config & microoptimisation

---------

Co-authored-by: PabstMirror <pabstmirror@gmail.com>
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
2024-08-20 17:24:58 -05:00

58 lines
2.0 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: PabstMirror, commy2, esteldunedain, Ruthberg
* Gets magazine children for interaction menu.
*
* Arguments:
* 0: Target <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* ChildActions <ARRAY>
*
* Example:
* [player, player] call ace_magazinerepack_fnc_getMagazineChildren
*
* Public: No
*/
params ["_target", "_player"];
private _cfgMagazines = configFile >> "CfgMagazines";
// get all mags and ammo count
private _unitMagazines = [];
private _unitMagCounts = [];
{
_x params ["_xClassname", "_xCount", "_xLoaded", "_xType"];
private _configMagazine = _cfgMagazines >> _xClassname;
private _xFullMagazineCount = getNumber (_configMagazine >> "count");
private _isRepackDisabled = getNumber (_configMagazine >> "ace_disableRepacking") == 1;
//for every partial magazine, that is either in inventory or can be moved there
if ((!_isRepackDisabled) && {_xCount < _xFullMagazineCount} && {_xCount > 0} && {(!_xLoaded) || {GVAR(repackLoadedMagazines) && {[_player, _xClassname] call CBA_fnc_canAddItem}}}) then {
private _index = _unitMagazines find _xClassname;
if (_index == -1) then {
_unitMagazines pushBack _xClassname;
_unitMagCounts pushBack [_xCount];
} else {
(_unitMagCounts select _index) pushBack _xCount;
};
};
} forEach (magazinesAmmoFull _player);
//Create the action children for all appropriate magazines
private _actions = [];
{
if ((count (_unitMagCounts select _forEachIndex)) >= 2) then {// Ignore invalid magazines types (need 2+ partial mags to do anything)
private _displayName = getText (configFile >> "CfgMagazines" >> _x >> "displayName");
private _picture = getText (configFile >> "CfgMagazines" >> _x >> "picture");
private _action = [_x, _displayName, _picture, {_this call FUNC(startRepackingMagazine)}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _player];
};
} forEach _unitMagazines;
_actions