From f5d73318471ef08c835ea95ec477a8361d4043e3 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 20:57:55 +0200 Subject: [PATCH] no team management on the dead or unconscious units, fix #803 --- addons/interaction/CfgVehicles.hpp | 40 +++++++++---------- addons/interaction/XEH_preInit.sqf | 2 + .../functions/fnc_canJoinGroup.sqf | 12 ++++++ .../interaction/functions/fnc_canJoinTeam.sqf | 12 ++++++ 4 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 addons/interaction/functions/fnc_canJoinGroup.sqf create mode 100644 addons/interaction/functions/fnc_canJoinTeam.sqf diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 0408192919..f6f39808b9 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -35,7 +35,7 @@ class CfgVehicles { class ACE_TeamManagement { displayName = "$STR_ACE_Interaction_TeamManagement"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)}); statement = ""; showDisabled = 0; priority = 3.2; @@ -44,7 +44,7 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = "$STR_ACE_Interaction_JoinTeamRed"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_red_ca.paa); @@ -53,7 +53,7 @@ class CfgVehicles { }; class ACE_JoinTeamGreen { displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_green_ca.paa); @@ -62,7 +62,7 @@ class CfgVehicles { }; class ACE_JoinTeamBlue { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -71,7 +71,7 @@ class CfgVehicles { }; class ACE_JoinTeamYellow { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -81,7 +81,7 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _player != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -92,8 +92,8 @@ class CfgVehicles { class ACE_JoinGroup { displayName = "$STR_ACE_Interaction_JoinGroup"; - condition = QUOTE(side group _player == side group _target && {group _player != group _target}); - statement = QUOTE([_player] joinSilent group _target;); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinGroup)); + statement = QUOTE([_player] joinSilent group _target); showDisabled = 0; priority = 2.6; icon = PATHTOF(UI\team\team_management_ca.paa); @@ -223,7 +223,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'BLUE')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.2; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -233,7 +233,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'YELLOW')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -244,7 +244,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_LeaveTeam"; condition = QUOTE(assignedTeam _player != 'MAIN'); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'MAIN')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.5; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -252,9 +252,9 @@ class CfgVehicles { }; class ACE_BecomeLeader { displayName = "$STR_ACE_Interaction_BecomeLeader"; - condition = QUOTE(_this call FUNC(canBecomeLeader)); + condition = QUOTE(_this call DFUNC(canBecomeLeader)); exceptions[] = {"isNotInside"}; - statement = QUOTE(_this call FUNC(doBecomeLeader)); + statement = QUOTE(_this call DFUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -405,7 +405,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -423,7 +423,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -443,7 +443,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -461,7 +461,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -479,7 +479,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Push"; distance = 6; condition = QUOTE(getMass _target < 1000 && {alive _target}); - statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push);); + statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call DFUNC(push);); showDisabled = 0; priority = -1; }; @@ -490,7 +490,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -509,7 +509,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 6f10a4e834..34c225c8f0 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -8,6 +8,8 @@ PREP(addSelectableItem); PREP(applyButtons); PREP(canBecomeLeader); PREP(canInteractWithCivilian); +PREP(canJoinGroup); +PREP(canJoinTeam); PREP(canTapShoulder); PREP(doBecomeLeader); PREP(getDoor); diff --git a/addons/interaction/functions/fnc_canJoinGroup.sqf b/addons/interaction/functions/fnc_canJoinGroup.sqf new file mode 100644 index 0000000000..d299524925 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinGroup.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {side group _unit == side group _target} +&& {group _unit != group _target} diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf new file mode 100644 index 0000000000..45f96393a9 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinTeam.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {!([_target] call EFUNC(common,isPlayer))} +&& {_target in units group _unit}