mirror of
https://github.com/acemod/ACE3.git
synced 2025-07-26 05:12:54 +00:00
CSW - Add primary weapon support (#10284)
* Add primary weapon support for CSW * Update addons/csw/functions/fnc_assemble_deployWeapon.sqf Co-authored-by: PabstMirror <pabstmirror@gmail.com> * Update crew-served-weapons-framework.md --------- Co-authored-by: PabstMirror <pabstmirror@gmail.com>
This commit is contained in:
@ -20,4 +20,7 @@ params ["_target", "_player"];
|
||||
|
||||
// If the current launcher has a config-value that defines the tripod, it is a CSW
|
||||
(alive _target) &&
|
||||
{(getText (configFile >> "CfgWeapons" >> secondaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> typeOf _target)) != ""}
|
||||
{
|
||||
(getText (configFile >> "CfgWeapons" >> secondaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> typeOf _target)) != "" ||
|
||||
{(getText (configFile >> "CfgWeapons" >> primaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> typeOf _target)) != ""}
|
||||
}
|
||||
|
@ -21,8 +21,19 @@
|
||||
[{
|
||||
params ["_tripod", "_player"];
|
||||
|
||||
private _tripodClassname = typeOf _tripod;
|
||||
private _assembledClassname = getText (configFile >> "CfgWeapons" >> secondaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname);
|
||||
private _index = 1;
|
||||
|
||||
if (_assembledClassname == "") then {
|
||||
_assembledClassname = getText (configFile >> "CfgWeapons" >> primaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname);
|
||||
_index = 0;
|
||||
};
|
||||
|
||||
if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);};
|
||||
|
||||
// Save magazines and attachments (handle loaded launchers which can become csw like CUP Metis)
|
||||
private _carryWeaponInfo = (getUnitLoadout _player) select 1;
|
||||
private _carryWeaponInfo = (getUnitLoadout _player) select _index;
|
||||
private _carryWeaponClassname = _carryWeaponInfo deleteAt 0;
|
||||
|
||||
// Remove empty entries
|
||||
@ -30,15 +41,9 @@
|
||||
|
||||
TRACE_3("assemble_deployWeapon_carryWeaponClassname",_tripod,_player,_carryWeaponClassname);
|
||||
|
||||
private _tripodClassname = typeOf _tripod;
|
||||
private _weaponConfig = configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON);
|
||||
private _assembledClassname = getText (_weaponConfig >> "assembleTo" >> _tripodClassname);
|
||||
|
||||
if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);};
|
||||
|
||||
_player removeWeaponGlobal _carryWeaponClassname;
|
||||
|
||||
private _deployTime = getNumber (_weaponConfig >> "deployTime");
|
||||
private _deployTime = getNumber (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
||||
|
||||
TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime);
|
||||
|
||||
|
@ -20,9 +20,14 @@
|
||||
|
||||
params ["_target", "_player", "", "_actionData"];
|
||||
|
||||
private _carryWeaponClassname = secondaryWeapon _player;
|
||||
private _assembleTo = getText (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> typeOf _target);
|
||||
private _icon = getText (configFile >> "CfgVehicles" >> _assembleTo >> "picture");
|
||||
TRACE_2("",_assembleTo,_icon);
|
||||
private _tripodClassname = typeOf _target;
|
||||
private _assembledClassname = getText (configFile >> "CfgWeapons" >> secondaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname);
|
||||
|
||||
if (_assembledClassname == "") then {
|
||||
_assembledClassname = getText (configFile >> "CfgWeapons" >> primaryWeapon _player >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname);
|
||||
};
|
||||
|
||||
private _icon = getText (configFile >> "CfgVehicles" >> _assembledClassname >> "picture");
|
||||
TRACE_2("",_assembledClassname,_icon);
|
||||
|
||||
_actionData set [2, _icon];
|
||||
|
@ -58,7 +58,9 @@
|
||||
if (_carryWeaponMag isEqualTo [] && {_carryMag in _carryWeaponMags}) then {
|
||||
TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag);
|
||||
_carryWeaponMag = [_carryMag, _xAmmo];
|
||||
DEC(_xAmmo);
|
||||
|
||||
// Do not return this magazine, as it will be put into the weapon
|
||||
continue;
|
||||
};
|
||||
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
||||
TRACE_2("Removing ammo",_xMag,_carryMag);
|
||||
@ -82,8 +84,19 @@
|
||||
[{
|
||||
params ["_player", "_weaponPos", "_carryWeaponClassname", "_carryWeaponMag", "_turretClassname"];
|
||||
|
||||
private _carryWeaponType = _carryWeaponClassname call EFUNC(common,getWeaponType);
|
||||
|
||||
if !(_carryWeaponType in [1, 2]) exitWith {
|
||||
ERROR_1("bad carry weapon type [%1]",_carryWeaponClassname);
|
||||
|
||||
if (_carryWeaponMag isEqualTo []) exitWith {};
|
||||
|
||||
// Return the ammo, so it doesn't vanish
|
||||
[_player, _carryWeaponMag select 0, _carryWeaponMag select 1] call FUNC(reload_handleReturnAmmo);
|
||||
};
|
||||
|
||||
// Give the weapon to the player if possible
|
||||
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
||||
if ((alive _player) && {([primaryWeapon _player, secondaryWeapon _player] select (_carryWeaponType - 1)) == ""}) exitWith {
|
||||
[_player, _carryWeaponClassname] call CBA_fnc_addWeaponWithoutItems;
|
||||
|
||||
if (_carryWeaponMag isNotEqualTo []) then {
|
||||
|
@ -37,7 +37,7 @@ private _bestMagCount = -1;
|
||||
_bestMagCount = _xAmmo;
|
||||
};
|
||||
};
|
||||
} forEach (getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"));
|
||||
} forEach (compatibleMagazines _weapon);
|
||||
} forEach (_vehicle weaponsTurret _turret);
|
||||
TRACE_3("best fit",_desiredAmmo,_bestMag,_bestMagCount);
|
||||
|
||||
|
@ -39,6 +39,7 @@ class CfgWeapons {
|
||||
### 1.2 Carryable Weapon
|
||||
|
||||
Carried CSW weapons are technically rocket launchers. This allows the player to carry both a CSW weapon and a backpack with magazines for the CSW.
|
||||
ACE 3.18.0 added support for primary weapons to be used as CSW weapons, but not tripods.
|
||||
|
||||
```cpp
|
||||
class CfgWeapons {
|
||||
|
Reference in New Issue
Block a user