1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
Private ['_freeSpace','_futureSpace','_get','_limit','_magazines','_newMag','_newMagIsSide','_newMagSpace','_oldMags','_presentMags','_replacement','_rlIndex','_size','_spaceToReduce','_totalToReplace','_z'];
_newMag = _this select 0;
_oldMags = _this select 1;
_magazines = _this select 2;
_presentMags = [];
_replacement = [];
_size = 0;
_spaceToReduce = 0;
{
Private['_cmag','_ct'];
_cmag = _x;
_ct = {_x == _cmag} count _oldMags;
if (_ct > 0) then {
_get = _cmag Call GetNamespace;
_presentMags = _presentMags + [_cmag];
_spaceToReduce = _spaceToReduce + (_get select QUERYGEARSPACE);
};
} forEach _magazines;
if (_newMag == "") exitWith {_magazines - _presentMags};
_get = _newMag Call GetNamespace;
_newMagSpace = _get select QUERYGEARSPACE;
_newMagIsSide = _get select QUERYGEARHANDGUNPOOL;
_limit = if (_newMagIsSide) then {8} else {12};
if (_newMagIsSide) then {
{
_get = _x Call GetNamespace;
if !(isNil '_get') then {
if (_get select QUERYGEARHANDGUNPOOL) then {
_size = _size + (_get select QUERYGEARSPACE);
};
};
} forEach _magazines;
} else {
{
_get = _x Call GetNamespace;
if !(isNil '_get') then {
if !(_get select QUERYGEARHANDGUNPOOL) then {
_size = _size + (_get select QUERYGEARSPACE);
};
};
} forEach _magazines;
};
_totalToReplace = count _presentMags;
_freeSpace = _size - _spaceToReduce;
_futureSpace = _totalToReplace * _newMagSpace;
while {(_futureSpace + _freeSpace) > _limit} do {
_totalToReplace = _totalToReplace - 1;
_futureSpace = _totalToReplace * _newMagSpace;
};
for [{_z = 0},{_z < _totalToReplace},{_z = _z + 1}] do {_replacement = _replacement + [_newMag]};
_magazines = (_magazines - _presentMags) + _replacement;
_magazines
|