-
Notifications
You must be signed in to change notification settings - Fork 736
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added interaction to quickly pass a magazine #2390
Changes from 5 commits
60afa18
da42367
c26107b
45bfa3e
a29902d
ccf1bf1
8ee1136
d6dcd41
090384c
1effe61
818466d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* 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: | ||
* None | ||
* | ||
* Example: | ||
* [_player, _target, "arifle_MX_F"] call ace_interaction_fnc_canPassMagazine | ||
* | ||
* Public: No | ||
*/ | ||
|
||
#include "script_component.hpp" | ||
params ["_player", "_target", "_weapon"]; | ||
private ["_compatibleMags", "_filteredMags"]; | ||
|
||
_compatibleMags = getArray (configfile >> "CfgWeapons" >> _weapon >> "magazines"); | ||
_filteredMags = [magazinesAmmoFull _player, { | ||
params ["_className", "", "_loaded"]; | ||
_className in _compatibleMags && !_loaded | ||
}] call EFUNC(common,filter); | ||
|
||
if !(_filteredMags isEqualTo []) then { | ||
({_target canAdd (_x select 0)} count _filteredMags) > 0 | ||
} else { | ||
false | ||
}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. could be simplified to: There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. BOOL :D There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. duh |
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; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can use |
||
_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); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What happens if I pass this to a local AI? Reminder for me to test this. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The AI receives the mag and the hint does not appear. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Parent condition can be empty string or just
true
.If there are no children, it won't show because statement is
{}
Will save checking the conditions twice.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed