mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #2390 from BaerMitUmlaut/pass-magazine
Added interaction to quickly pass a magazine
This commit is contained in:
commit
08c5374a99
@ -4,4 +4,11 @@ class ACE_Settings {
|
||||
value = 1;
|
||||
typeName = "BOOL";
|
||||
};
|
||||
class GVAR(enableMagazinePassing) {
|
||||
value = 1;
|
||||
typeName = "BOOL";
|
||||
isClientSettable = 1;
|
||||
displayName = CSTRING(PassMagazineSetting);
|
||||
category = ECSTRING(interact_menu,Category_InteractionMenu);
|
||||
};
|
||||
};
|
||||
|
@ -36,6 +36,32 @@ class CfgVehicles {
|
||||
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
||||
selection = "pelvis";
|
||||
|
||||
class ACE_PassMagazine {
|
||||
displayName = CSTRING(PassMagazine);
|
||||
condition = "";
|
||||
statement = "";
|
||||
showDisabled = 0;
|
||||
priority = 3.3;
|
||||
icon = "\a3\ui_f\data\gui\Rsc\RscDisplayArsenal\cargomag_ca.paa";
|
||||
|
||||
class ACE_PassMagazinePrimary {
|
||||
displayName = CSTRING(PassMagazinePrimary);
|
||||
condition = QUOTE([ARR_3(_player,_target,primaryWeapon _target)] call FUNC(canPassMagazine));
|
||||
statement = QUOTE([ARR_3(_player,_target,primaryWeapon _target)] call FUNC(passMagazine));
|
||||
showDisabled = 0;
|
||||
priority = 3;
|
||||
icon = "\a3\ui_f\data\gui\Rsc\RscDisplayArsenal\primaryweapon_ca.paa";
|
||||
};
|
||||
class ACE_PassMagazineHandgun {
|
||||
displayName = CSTRING(PassMagazineHandgun);
|
||||
condition = QUOTE([ARR_3(_player,_target,handgunWeapon _target)] call FUNC(canPassMagazine));
|
||||
statement = QUOTE([ARR_3(_player,_target,handgunWeapon _target)] call FUNC(passMagazine));
|
||||
showDisabled = 0;
|
||||
priority = 1;
|
||||
icon = "\a3\ui_f\data\gui\Rsc\RscDisplayArsenal\handgun_ca.paa";
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_TeamManagement {
|
||||
displayName = CSTRING(TeamManagement);
|
||||
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)});
|
||||
|
@ -20,6 +20,8 @@ PREP(sendAway);
|
||||
PREP(canJoinGroup);
|
||||
PREP(canJoinTeam);
|
||||
PREP(joinTeam);
|
||||
PREP(canPassMagazine);
|
||||
PREP(passMagazine);
|
||||
PREP(canBecomeLeader);
|
||||
PREP(doBecomeLeader);
|
||||
PREP(canTapShoulder);
|
||||
|
30
addons/interaction/functions/fnc_canPassMagazine.sqf
Normal file
30
addons/interaction/functions/fnc_canPassMagazine.sqf
Normal file
@ -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);
|
57
addons/interaction/functions/fnc_passMagazine.sqf
Normal file
57
addons/interaction/functions/fnc_passMagazine.sqf
Normal file
@ -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);
|
@ -823,5 +823,25 @@
|
||||
<Portuguese>O módulo de gestão de equipe é composto por: a atribuição de cores para os membros da equipe, comando das equipes, juntando-se / deixando equipes.</Portuguese>
|
||||
<Russian>Управление группами позволяет назначать цвета членам групп, брать командование, вступать в группы или покидать их.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_PassMagazine">
|
||||
<English>Pass magazine</English>
|
||||
<German>Magazin geben</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_PassMagazinePrimary">
|
||||
<English>Primary magazine</English>
|
||||
<German>Gewehrmagazin</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_PassMagazineHandgun">
|
||||
<English>Pistol magazine</English>
|
||||
<German>Pistolenmagazin</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_PassMagazineHint">
|
||||
<English>%1 passed you a %2 magazine.</English>
|
||||
<German>%1 hat dir ein %2 Magazin gegeben.</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_PassMagazineSetting">
|
||||
<English>Show "pass magazine" interaction</English>
|
||||
<German>Zeige "Magazine geben" Interaktion</German>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
Loading…
Reference in New Issue
Block a user