mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
CSW - Fix missing magazine on assembling (#8880)
* Fix missing magazine on assembling * Fix adding mag when csw is empty * Fix missing magazine when player has launcher
This commit is contained in:
parent
e2a822c828
commit
89badcc71f
@ -21,12 +21,14 @@
|
|||||||
|
|
||||||
// Remove the tripod from the launcher slot
|
// Remove the tripod from the launcher slot
|
||||||
private _secondaryWeaponClassname = secondaryWeapon _player;
|
private _secondaryWeaponClassname = secondaryWeapon _player;
|
||||||
|
// handle loaded launchers which can become csw like CUP Metis
|
||||||
|
private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""];
|
||||||
_player removeWeaponGlobal (secondaryWeapon _player);
|
_player removeWeaponGlobal (secondaryWeapon _player);
|
||||||
|
|
||||||
private _onFinish = {
|
private _onFinish = {
|
||||||
params ["_args"];
|
params ["_args"];
|
||||||
_args params ["_player", "_secondaryWeaponClassname"];
|
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
|
||||||
TRACE_2("deployTripod finish",_player,_secondaryWeaponClassname);
|
TRACE_3("deployTripod finish",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
|
||||||
|
|
||||||
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
|
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
|
||||||
|
|
||||||
@ -34,6 +36,9 @@
|
|||||||
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
|
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
|
||||||
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
|
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
|
||||||
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
|
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
|
||||||
|
if (_secondaryWeaponMagazine isNotEqualTo "") then {
|
||||||
|
_cswTripod setVariable [QGVAR(secondaryWeaponMagazine), _secondaryWeaponMagazine];
|
||||||
|
};
|
||||||
if (!GVAR(defaultAssemblyMode)) then {
|
if (!GVAR(defaultAssemblyMode)) then {
|
||||||
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
|
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
|
||||||
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
|
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
|
||||||
@ -61,12 +66,15 @@
|
|||||||
|
|
||||||
private _onFailure = {
|
private _onFailure = {
|
||||||
params ["_args"];
|
params ["_args"];
|
||||||
_args params ["_player", "_secondaryWeaponClassname"];
|
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
|
||||||
TRACE_2("deployTripod failure",_player,_secondaryWeaponClassname);
|
TRACE_3("deployTripod failure",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
|
||||||
|
|
||||||
_player addWeaponGlobal _secondaryWeaponClassname;
|
_player addWeaponGlobal _secondaryWeaponClassname;
|
||||||
|
if (_secondaryWeaponMagazine isNotEqualTo "") then {
|
||||||
|
_player addWeaponItem [_secondaryWeaponClassname, _secondaryWeaponMagazine, true];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
||||||
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
|
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
|
||||||
}, _this] call CBA_fnc_execNextFrame;
|
}, _this] call CBA_fnc_execNextFrame;
|
||||||
|
@ -37,11 +37,19 @@
|
|||||||
_weaponPos set [2, (_weaponPos select 2) + 0.1];
|
_weaponPos set [2, (_weaponPos select 2) + 0.1];
|
||||||
private _weaponDir = getDir _staticWeapon;
|
private _weaponDir = getDir _staticWeapon;
|
||||||
|
|
||||||
|
private _carryWeaponMag = "";
|
||||||
|
private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLower _x};
|
||||||
LOG("remove ammo");
|
LOG("remove ammo");
|
||||||
{
|
{
|
||||||
_x params ["_xMag", "", "_xAmmo"];
|
_x params ["_xMag", "", "_xAmmo"];
|
||||||
|
if (_xAmmo == 0) then {continue};
|
||||||
|
|
||||||
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
||||||
|
if (_carryWeaponMag isEqualTo "" && {toLower _carryMag in _carryWeaponMags}) then {
|
||||||
|
TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag);
|
||||||
|
_carryWeaponMag = _carryMag;
|
||||||
|
DEC(_xAmmo);
|
||||||
|
};
|
||||||
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
||||||
TRACE_2("Removing ammo",_xMag,_carryMag);
|
TRACE_2("Removing ammo",_xMag,_carryMag);
|
||||||
[_player, _carryMag, _xAmmo] call FUNC(reload_handleReturnAmmo);
|
[_player, _carryMag, _xAmmo] call FUNC(reload_handleReturnAmmo);
|
||||||
@ -62,16 +70,23 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
[{
|
[{
|
||||||
params ["_player", "_weaponPos", "_carryWeaponClassname"];
|
params ["_player", "_weaponPos", "_carryWeaponClassname", "_carryWeaponMag"];
|
||||||
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
||||||
_player addWeapon _carryWeaponClassname;
|
_player addWeapon _carryWeaponClassname;
|
||||||
|
if (_carryWeaponMag isNotEqualTo "") then {
|
||||||
|
_player addWeaponItem [_carryWeaponClassname, _carryWeaponMag, true];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
|
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
|
||||||
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
||||||
_weaponHolder setDir random [0, 180, 360];
|
_weaponHolder setDir random [0, 180, 360];
|
||||||
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
|
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
|
||||||
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
|
if (_carryWeaponMag isEqualTo "") then {
|
||||||
}, [_player, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
|
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
|
||||||
|
} else {
|
||||||
|
_weaponHolder addWeaponWithAttachmentsCargoGlobal [[_carryWeaponClassname, "", "", "", [_carryWeaponMag, 1], [], ""], 1];
|
||||||
|
};
|
||||||
|
}, [_player, _weaponPos, _carryWeaponClassname, _carryWeaponMag]] call CBA_fnc_execNextFrame;
|
||||||
|
|
||||||
LOG("delete weapon");
|
LOG("delete weapon");
|
||||||
deleteVehicle _staticWeapon;
|
deleteVehicle _staticWeapon;
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
|
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Weapon <STRING>
|
* 0: Vehicle <OBJECT>
|
||||||
* 1: Magazine that is carryable <STRING>
|
* 1: Turret <ARRAY>
|
||||||
|
* 2: Magazine that is carryable <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Vehicle Magazine <STRING>
|
* Vehicle Magazine <STRING>
|
||||||
|
@ -68,6 +68,15 @@ TRACE_1("Remove all loaded magazines",_magsToRemove);
|
|||||||
};
|
};
|
||||||
} forEach _magsToRemove;
|
} forEach _magsToRemove;
|
||||||
|
|
||||||
|
if (_staticWeapon getVariable [QGVAR(secondaryWeaponMagazine), ""] isNotEqualTo "") then {
|
||||||
|
private _secondaryWeaponMagazine = _staticWeapon getVariable QGVAR(secondaryWeaponMagazine);
|
||||||
|
private _turret = allTurrets _staticWeapon param [0, []];
|
||||||
|
private _vehicleMag = [_staticWeapon, _turret, _secondaryWeaponMagazine] call FUNC(reload_getVehicleMagazine);
|
||||||
|
TRACE_3("Re-add previous mag",_secondaryWeaponMagazine,_turret,_vehicleMag);
|
||||||
|
if (!isClass (configFile >> "CfgMagazines" >> _vehicleMag)) exitWith {};
|
||||||
|
_staticWeapon addMagazineTurret [_vehicleMag, _turret, 1];
|
||||||
|
_staticWeapon setVariable [QGVAR(secondaryWeaponMagazine), nil];
|
||||||
|
};
|
||||||
|
|
||||||
if (_storeExtraMagazines) then {
|
if (_storeExtraMagazines) then {
|
||||||
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
||||||
|
Loading…
Reference in New Issue
Block a user