-
Notifications
You must be signed in to change notification settings - Fork 736
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2390 from BaerMitUmlaut/pass-magazine
Added interaction to quickly pass a magazine
- Loading branch information
Showing
6 changed files
with
142 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* | ||
* Author: BaerMitUmlaut | ||
* Checks if unit has a spare magazine for the specified weapon. | ||
* | ||
* Arguments: | ||
* 0: Unit that passes the magazine <OBJECT> | ||
* 1: Unit to pass the magazine to <OBJECT> | ||
* 2: Weapon classname <STRING> | ||
* | ||
* Return Value: | ||
* Unit can pass magazine <BOOL> | ||
* | ||
* Example: | ||
* [_player, _target, "arifle_MX_F"] call ace_interaction_fnc_canPassMagazine | ||
* | ||
* Public: No | ||
*/ | ||
|
||
#include "script_component.hpp" | ||
params ["_player", "_target", "_weapon"]; | ||
private ["_compatibleMags"]; | ||
|
||
if (!GVAR(enableMagazinePassing)) exitWith {false}; | ||
|
||
_compatibleMags = getArray (configfile >> "CfgWeapons" >> _weapon >> "magazines"); | ||
{ | ||
_x params ["_className", "", "_loaded"]; | ||
if ((_className in _compatibleMags) && {!_loaded} && {_target canAdd _className}) exitWith {true}; | ||
false | ||
} foreach (magazinesAmmoFull _player); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Author: BaerMitUmlaut | ||
* Pass spare magazine for the specified weapon. | ||
* | ||
* Arguments: | ||
* 0: Unit that passes the magazine <OBJECT> | ||
* 1: Unit to pass the magazine to <OBJECT> | ||
* 2: Weapon classname <STRING> | ||
* | ||
* Return Value: | ||
* None | ||
* | ||
* Example: | ||
* [_player, _target, "arifle_MX_F"] call ace_interaction_fnc_magToPassazine | ||
* | ||
* Public: No | ||
*/ | ||
|
||
#include "script_component.hpp" | ||
params ["_player", "_target", "_weapon"]; | ||
private ["_compatibleMags", "_filteredMags", "_magToPass", "_magToPassIndex", "_playerName", "_magToPassDisplayName"]; | ||
|
||
_compatibleMags = getArray (configfile >> "CfgWeapons" >> _weapon >> "magazines"); | ||
_filteredMags = [magazinesAmmoFull _player, { | ||
params ["_className", "", "_loaded"]; | ||
_className in _compatibleMags && !_loaded | ||
}] call EFUNC(common,filter); | ||
|
||
//select magazine with most ammo | ||
_magToPass = _filteredMags select 0; | ||
_magToPassIndex = 0; | ||
{ | ||
_x params ["_className", "_ammoCount"]; | ||
if ((_ammoCount > (_magToPass select 1)) && (_target canAdd _className)) then { | ||
_magToPass = _x; | ||
_magToPassIndex = _forEachIndex; | ||
}; | ||
} foreach _filteredMags; | ||
|
||
//remove all magazines and add them again, except the one to be passed | ||
//needed because of missing commands, see http://feedback.arma3.com/view.php?id=12782 | ||
_magToPass params ["_magToPassClassName", "_magToPassAmmoCount"]; | ||
_player removeMagazines _magToPassClassName; | ||
{ | ||
_x params ["_className", "_ammoCount"]; | ||
if ((_className == _magToPassClassName) && (_forEachIndex != _magToPassIndex)) then { | ||
_player addMagazine [_className, _ammoCount]; | ||
}; | ||
} foreach _filteredMags; | ||
|
||
_player playActionNow "PutDown"; | ||
|
||
_target addMagazine [_magToPassClassName, _magToPassAmmoCount]; | ||
|
||
_playerName = [_player] call EFUNC(common,getName); | ||
_magToPassDisplayName = getText (configFile >> "CfgMagazines" >> _magToPassClassName >> "displayName"); | ||
["displayTextStructured", [_target], [[LSTRING(PassMagazineHint), _playerName, _magToPassDisplayName], 1.5, _target]] call EFUNC(common,targetEvent); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters