mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
56eae4060c
Code formatting changes from 9234
112 lines
4.1 KiB
Plaintext
112 lines
4.1 KiB
Plaintext
#include "..\script_component.hpp"
|
|
/*
|
|
* Author: tcvm, PabstMirror
|
|
* Dumps ammo to container.
|
|
*
|
|
* Arguments:
|
|
* 0: CSW <OBJECT>
|
|
* 1: Using advanced assembly <BOOL>
|
|
* 2: Empty weapon <BOOL>
|
|
*
|
|
* Return Value:
|
|
* None
|
|
*
|
|
* Example:
|
|
* [cursorObject, false] call ace_csw_fnc_staticWeaponInit_unloadExtraMags
|
|
*
|
|
* Public: No
|
|
*/
|
|
|
|
params ["_vehicle", "_assemblyMode", "_emptyWeapon"];
|
|
TRACE_3("staticWeaponInit_unloadExtraMags",_vehicle,_assemblyMode,_emptyWeapon);
|
|
if (!_assemblyMode) exitWith {};
|
|
|
|
private _desiredAmmo = getNumber (configOf _vehicle >> QUOTE(ADDON) >> "desiredAmmo");
|
|
private _storeExtraMagazines = GVAR(handleExtraMagazines);
|
|
if (_emptyWeapon) then {
|
|
_desiredAmmo = 0;
|
|
_storeExtraMagazines = false;
|
|
};
|
|
TRACE_3("settings",_emptyWeapon,_desiredAmmo,_storeExtraMagazines);
|
|
|
|
private _magsToRemove = [];
|
|
private _loadedMagazineInfo = [];
|
|
private _containerMagazineClassnames = [];
|
|
private _containerMagazineCount = [];
|
|
|
|
{
|
|
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
|
|
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
|
if (_carryMag != "") then {
|
|
if ((_desiredAmmo > 0) && {_loadedMagazineInfo isEqualTo []}) then {
|
|
private _loadedMagAmmo = _desiredAmmo min _xAmmo;
|
|
_loadedMagazineInfo = [_xMag, _xTurret, _loadedMagAmmo];
|
|
_xAmmo = _xAmmo - _loadedMagAmmo;
|
|
TRACE_1("",_loadedMagAmmo);
|
|
};
|
|
if (_xAmmo > 0) then {
|
|
_magsToRemove pushBackUnique [_xMag, _xTurret];
|
|
private _index = _containerMagazineClassnames find _carryMag;
|
|
if (_index < 0) then {
|
|
_index = _containerMagazineClassnames pushBack _carryMag;
|
|
_containerMagazineCount pushBack 0;
|
|
};
|
|
_containerMagazineCount set [_index, (_containerMagazineCount select _index) + _xAmmo];
|
|
};
|
|
} else {
|
|
if ((_xMag select [0,4]) != "fake") then { WARNING_1("Unable to unload [%1] - No matching carry mag",_xMag); };
|
|
};
|
|
} forEach (magazinesAllTurrets _vehicle);
|
|
|
|
|
|
TRACE_1("Remove all loaded magazines",_magsToRemove);
|
|
{
|
|
_vehicle removeMagazinesTurret _x;
|
|
if ((_loadedMagazineInfo select [0,2]) isEqualTo _x) then {
|
|
TRACE_1("Re-add the starting mag",_loadedMagazineInfo);
|
|
_vehicle addMagazineTurret _loadedMagazineInfo;
|
|
};
|
|
} forEach _magsToRemove;
|
|
|
|
private _secondaryWeaponMagazines = _vehicle getVariable [QGVAR(secondaryWeaponMagazines), []];
|
|
|
|
if (_secondaryWeaponMagazines isNotEqualTo []) then {
|
|
// Check if the static weapon can take magazines
|
|
private _turret = (allTurrets _vehicle) param [0, []];
|
|
private _compatibleMagazinesTurret = flatten ((_vehicle weaponsTurret _turret) apply {compatibleMagazines _x});
|
|
private _container = objNull;
|
|
|
|
{
|
|
private _vehicleMag = [_vehicle, _turret, _x select 0] call FUNC(reload_getVehicleMagazine);
|
|
TRACE_3("Re-add previous mag",_x select 0,_turret,_vehicleMag);
|
|
|
|
// If the magazine can be added to the static weapon, do it now
|
|
if (_vehicleMag in _compatibleMagazinesTurret) then {
|
|
_vehicle addMagazineTurret [_vehicleMag, _turret, _x select 1];
|
|
} else {
|
|
// Find a suitable container to place items in if necessary
|
|
if (isNull _container) then {
|
|
_container = (nearestObjects [_vehicle, ["GroundWeaponHolder"], 10]) param [0, objNull];
|
|
|
|
// Create ammo storage container
|
|
if (isNull _container) then {
|
|
_container = createVehicle ["GroundWeaponHolder", getPosATL _vehicle, [], 0, "NONE"];
|
|
};
|
|
};
|
|
|
|
// If the mag can't be added to the static weapon, add it to the ground holder
|
|
_container addMagazineAmmoCargo [_x select 0, 1, _x select 1];
|
|
};
|
|
} forEach _secondaryWeaponMagazines;
|
|
|
|
_vehicle setVariable [QGVAR(secondaryWeaponMagazines), nil, true];
|
|
};
|
|
|
|
if (_storeExtraMagazines) then {
|
|
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
|
{
|
|
[_vehicle, _x, _containerMagazineCount select _forEachIndex] call FUNC(reload_handleReturnAmmo);
|
|
} forEach _containerMagazineClassnames;
|
|
};
|