Added cse_sys_groups source

This commit is contained in:
Thomas Kooi 2015-01-12 23:27:57 +01:00
parent 1a9b572850
commit a0f98b2e11
24 changed files with 629 additions and 0 deletions

View File

@ -0,0 +1,7 @@
class CfgAddons {
class PreloadAddons {
class cse_sys_groups {
list[] = {"cse_sys_groups"};
};
};
};

View File

@ -0,0 +1,15 @@
class CfgFunctions {
class CSE {
class Groups {
file = "cse\cse_sys_groups\functions";
class unitJoinGroup_GRP { recompile = 1; };
class unitLeaveGroup_GRP { recompile = 1; };
class unitsInGroupLeft_GRP { recompile = 1; };
class unitCanJoinTargetGroup_GRP { recompile = 1; };
class setGroupFormation_GRP { recompile = 1; };
class setUnitGroupLeader_GRP { recompile = 1; };
class canTapShoulder_GRP;
class tapShoulder_GRP;
};
};
};

View File

@ -0,0 +1,41 @@
class CfgVehicles {
class Logic;
class Module_F: Logic {
class ArgumentsBaseUnits {
};
};
class cse_sys_groups: Module_F {
scope = 2;
displayName = "Groups [CSE]";
icon = "\cse\cse_main\data\cse_groups_module.paa";
category = "cseModules";
function = "cse_fnc_initalizeModule_F";
functionPriority = 1;
isGlobal = 1;
isTriggerActivated = 0;
class Arguments {
class allowGroupSwitch {
displayName = "Group switch";
description = "Allow players to join and leave groups";
typeName = "BOOL";
defaultValue = true;
};
class allowFormationSwitch {
displayName = "Formation actions";
description = "Group leaders can order formation changes through the action menu";
typeName = "BOOL";
defaultValue = true;
};
class allowShoulderTap {
displayName = "Shoulder Tap";
description = "Allow usage of shoulder taps";
typeName = "BOOL";
defaultValue = false;
};
};
class ModuleDescription {
description = "Provides players a serie of actions to join or leave their group, as well as formation changes";
sync[] = {};
};
};
};

View File

@ -0,0 +1,27 @@
#define MENU_KEYBINDING 1
#define ACTION_KEYBINDING 2
#define CLIENT_SETTING 3
class Combat_Space_Enhancement {
class cfgModules {
class cse_sys_groups {
init = "call compile preprocessFile 'cse\cse_sys_groups\init_sys_groups.sqf';";
name = "Groups";
class Configurations {
class actionTapShoulder_GRP {
type = ACTION_KEYBINDING;
title = $STR_CSE_SHOULDER_TAP_TITLE;
description = $STR_CS_SHOULDER_TAP_DESC;
value[] = {0,0,0,0};
onPressed = "if ([player, cursorTarget] call cse_fnc_canTapShoulder_GRP) then {[player, cursorTarget] call cse_fnc_tapShoulder_GRP;};";
};
};
};
};
class CustomEventHandlers {
class shoulderTapped {}; // [_caller, _target]
class groupJoined {}; // [_unit, _targetUnit]
};
};

View File

@ -0,0 +1,19 @@
#define _ARMA_
class CfgPatches
{
class cse_sys_groups
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] = {"cse_f_eh","cse_main"};
version = "0.10.0_rc";
author[] = {"Combat Space Enhancement"};
authorUrl = "http://csemod.com";
};
};
#include "CfgAddOns.h"
#include "CfgFunctions.h"
#include "CfgVehicles.h"
#include "Combat_Space_Enhancement.h"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,21 @@
/**
* fn_canTapShoulder_GRP.sqf
* @Descr: Check if caller can tap targets shoulder.
* @Author: Glowbal
*
* @Arguments: [caller OBJECT, target OBJECT]
* @Return: BOOL true if caller can tab target shoulder
* @PublicAPI: true
*/
private ["_caller", "_target"];
_caller = _this select 0;
_target = _this select 1;
if (isnil "CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP") then {
CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = false;
};
if !(CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP) exitwith { false };
(_target isKindOf "CAManBase" && {[_target] call cse_fnc_isAwake} && {[_caller] call cse_fnc_canInteract} && {_caller distance _target < 3} && {_caller != _target})

View File

@ -0,0 +1,21 @@
/**
* fn_setGroupFormation_GRP.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
private ["_unit", "_formation", "_groupUnits"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
_formation = [_this, 1, "", [""]] call BIS_fnc_Param;
if (([_unit] call cse_fnc_canInteract) && (formationLeader _unit == _unit)) then {
(group _unit) setFormation _formation;
[format["Setting formation of group %1 to %2",group _unit, _formation]] call cse_fnc_debug;
} else {
[format["cant set formation of group %1 to %2 because: %3 %4",group _unit, _formation, ([_unit] call cse_fnc_canInteract), (formationLeader _unit == _unit)]] call cse_fnc_debug;
};

View File

@ -0,0 +1,28 @@
/**
* fn_setUnitGroupLeader_GRP.sqf
* @Descr: Sets unit as the leader of units group.
* @Author: Glowbal
*
* @Arguments: [unit OBJECT]
* @Return: void
* @PublicAPI: true
*/
private ["_unit","_groupMembers"];
_unit = _this select 0;
if !(_unit isKindOf "CAManBase") exitwith {};
_groupMembers = units group _unit;
{
if (_x != _unit) then {
[_x] call cse_fnc_unitLeaveGroup_GRP;
};
}foreach _groupMembers;
{
if (_x != _unit) then {
[_x, _unit] call cse_fnc_unitJoinGroup_GRP;
};
}foreach _groupMembers;
true;

View File

@ -0,0 +1,27 @@
/**
* fn_tapShoulder_GRP.sqf
* @Descr: Tap units shoulder.
* @Author: Glowbal
*
* @Arguments: [caller OBJECT, target OBJECT (Unit that will be tapped)]
* @Return: void
* @PublicAPI: true
*/
private ["_caller", "_target"];
_caller = _this select 0;
_target = _this select 1;
// If the target isn't local, we need to execute this function on the targets locality.
if (!local _target) exitwith {
[[_caller, _target], "cse_fnc_tapShoulder_GRP", _target] call BIS_fnc_MP;
};
[[_caller, _target],"shoulderTapped"] call cse_fnc_customEventHandler_F;
// No need to execute this for non player units. We exit here for non player units, because we do want to execute the custom eventhandler.
if (!isPlayer _target) exitwith {};
// Display information for player to indicate that players should was tapped.
// This is done through a camShake and a display Message on the screen.
addCamShake [4, 0.5, 4];
[_target,localize "STR_CS_SHOULDER_TAP_GRP",format[localize "STR_CSE_SHOULDER_TAPPED_GRP", [_caller] call cse_fnc_getName]] call cse_fnc_sendDisplayMessageTo;

View File

@ -0,0 +1,27 @@
/**
* fn_unitCanJoinTargetGroup_GRP.sqf
* @Descr: Check if a unit can join the target group
* @Author: Glowbal
*
* @Arguments: [unit OBJECT, target OBJECT]
* @Return: BOOL True if unit can join the targets group
* @PublicAPI: true
*/
private ["_unit", "_targetUnit", "_currentGroup", "_targetGroup", "_return"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
_targetUnit = [_this, 1, objNull, [objNull]] call BIS_fnc_Param;
_return = false;
if (_unit != _targetUnit) then {
if (_unit iskindof "CaManBase" && (_targetUnit isKindOf "CAManBase")) then {
if (side _unit == side _targetUnit) then {
_currentGroup = group _unit;
_targetGroup = group _targetUnit;
if (_currentGroup != _targetGroup) then {
_return = true
};
};
};
};
_return

View File

@ -0,0 +1,27 @@
/**
* fn_unitJoinGroup_GRP.sqf
* @Descr: unit joins target group and removes old group if no members are left.
* @Author: Glowbal
*
* @Arguments: [unit OBJECT, target OBJECT]
* @Return: void
* @PublicAPI: true
*/
private ["_unit", "_targetUnit", "_currentGroup", "_targetGroup"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
_targetUnit = [_this, 1, objNull, [objNull]] call BIS_fnc_Param;
if ([_unit, _targetUnit] call cse_fnc_unitCanJoinTargetGroup_GRP) then {
_currentGroup = group _unit;
_targetGroup = group _targetUnit;
if (_currentGroup != _targetGroup) then {
[_unit] joinSilent _targetGroup;
if (count (units _currentGroup) == 0) then {
deleteGroup _currentGroup;
};
[[_unit, _targetUnit],"groupJoined"] call cse_fnc_customEventHandler_F;
};
};

View File

@ -0,0 +1,21 @@
/**
* fn_unitLeaveGroup_GRP.sqf
* @Descr: unit leaves current group and joins an empty group.
* @Author: Glowbal
*
* @Arguments: [unit OBJECT]
* @Return: void
* @PublicAPI: true
*/
private ["_unit", "_currentGroup", "_newgroup"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
if (_unit iskindof "CaManBase" && [_unit] call cse_fnc_canInteract) then {
_currentGroup = group _unit;
_newgroup = createGroup (side _unit);
[_unit] joinSilent _newgroup;
if (count (units _currentGroup) == 0) then {
deleteGroup _currentGroup;
};
};

View File

@ -0,0 +1,17 @@
/**
* fn_unitsInGroupLeft_GRP.sqf
* @Descr: Check if the group has more as one member
* @Author: Glowbal
*
* @Arguments: [unit OBJECT]
* @Return: BOOL Returns true if group of unit contains more units as 1
* @PublicAPI: true
*/
private ["_unit", "_currentGroup", "_newgroup"];
_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param;
if (_unit iskindof "CaManBase") then {
(count (units (group _unit)) > 1)
} else {
false;
};

View File

@ -0,0 +1,80 @@
private ["_args", "_entries"];
_args = _this;
if (!hasInterface) exitwith {};
CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP = false;
CSE_SYS_GROUPS_ALLOW_FORMATIONSWITCH_GRP = false;
CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = false;
{
if (_x select 0 == "allowGroupSwitch") then {
CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP = (_x select 1);
};
if (_x select 0 == "allowFormationSwitch") then {
CSE_SYS_GROUPS_ALLOW_FORMATIONSWITCH_GRP = (_x select 1);
};
if (_x select 0 == "allowShoulderTap") then {
CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = (_x select 1);
};
}foreach _args;
waituntil {!isnil "cse_gui"};
if (CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP) then {
_entries = [
[localize "STR_CSE_GROUP_LEAVEGRP_SHORT", {([player] call cse_fnc_unitsInGroupLeft_GRP)}, "cse\cse_sys_groups\data\icons\icon_group.paa", {closeDialog 0; [player] call cse_fnc_unitLeaveGroup_GRP}, localize "STR_CSE_GROUP_LEAVEGRP_TOOLTIP"],
[localize "STR_CSE_GROUP_REQUESTJOINGRP_SHORT", {(([_this select 0, _this select 1] call cse_fnc_unitCanJoinTargetGroup_GRP))}, "cse\cse_sys_groups\data\icons\icon_group.paa", {
closeDialog 0;
[player, _this select 1, "cse_sys_Groups_requestJoinGrp", "STR_CSE_GROUP_REQUESTJOINGRP_MESSAGE", "if !(_this select 2) exitwith {}; [player, _this select 1] call cse_fnc_unitJoinGroup_GRP;"] call cse_fnc_sendRequest_f;
}, localize "STR_CSE_GROUP_REQUESTJOINGRP_TOOLTIP"]
];
["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F;
};
if (CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP) then {
cse_displaygroupActions_switchFormationMenu_GRP = {
[ _this select 3,
[
[localize "STR_CSE_GROUP_FORM_COLUMN_SHORT", "cse\cse_sys_groups\data\icons\icon_column.paa", {closeDialog 0; [player, "COLUMN"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_COLUMN_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_STAG_SHORT","cse\cse_sys_groups\data\icons\icon_stag_column.paa", {closeDialog 0; [player, "STAG COLUMN"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_STAG_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_WEDGE_SHORT", "cse\cse_sys_groups\data\icons\icon_wedge.paa", {closeDialog 0; [player, "WEDGE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_WEDGE_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_ECHL_SHORT", "cse\cse_sys_groups\data\icons\icon_ech_l.paa", {closeDialog 0; [player, "ECH LEFT"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_ECHL_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_ECHR_SHORT", "cse\cse_sys_groups\data\icons\icon_ech_r.paa", {closeDialog 0; [player, "ECH RIGHT"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_ECHR_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_VEE_SHORT", "cse\cse_sys_groups\data\icons\icon_vee.paa", {closeDialog 0; [player, "VEE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_VEE_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_LINE_SHORT", "cse\cse_sys_groups\data\icons\icon_line.paa", {closeDialog 0; [player, "LINE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_LINE_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_FILE_SHORT", "cse\cse_sys_groups\data\icons\icon_column.paa", {closeDialog 0; [player, "FILE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_FILE_TOOLTIP"],
[localize "STR_CSE_GROUP_FORM_DIAMOND_SHORT", "cse\cse_sys_groups\data\icons\icon_diamond.paa", {closeDialog 0; [player, "DIAMOND"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_DIAMOND_TOOLTIP"]
],
_this select 1, CSE_SELECTED_RADIAL_OPTION_N_GUI, true
] call cse_fnc_openRadialSecondRing_GUI;
};
_entries = [
[localize "STR_CSE_GROUP_SWITCHFORMATION_SHORT", {(([player] call cse_fnc_canInteract) && (formationLeader player == player))}, "cse\cse_sys_groups\data\icons\icon_group.paa", cse_displaygroupActions_switchFormationMenu_GRP, localize "STR_CSE_GROUP_SWITCHFORMATION_TOOLTIP"]
];
["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F;
_requestGroupLeader = {
closeDialog 0;
[player, leader (group player), "cse_sys_Groups_requestLeader", "STR_CSE_GROUP_REQUESTLEADER_MESSAGE", "if !(_this select 2) exitwith {};
[player] call cse_fnc_setUnitGroupLeader_GRP;
"] call cse_fnc_sendRequest_f;
};
_entries = [
[localize "STR_CSE_GROUP_REQUESTLEADER_SHORT", {(([player] call cse_fnc_canInteract) && (leader (group player) != player))}, "cse\cse_sys_groups\data\icons\icon_group.paa", _requestGroupLeader, localize "STR_CSE_GROUP_REQUESTLEADER_TOOLTIP"]
];
["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F;
};
if (CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP) then {
_entries = [
[localize "STR_CSE_SHOULDER_TAP_TITLE", {(([player, _this select 1] call cse_fnc_canTapShoulder_GRP) && (isPlayer (_this select 1)))}, CSE_ICON_PATH + "icon_interact.paa", {closeDialog 0; [player, _this select 1] call cse_fnc_tapShoulder_GRP;}, localize "STR_CSE_SHOULDER_TAP_TITLE"]
];
["ActionMenu","interaction", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F;
};

View File

@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project name="Combat Space Enhancement">
<Package name="cse_sys_groups">
<Container ID="Groups">
<Key ID="STR_CSE_GROUP_FORM_COLUMN_SHORT">
<Original>Column</Original>
<English>Column</English>
<German>Kolonne</German>
<Polish>Kolumna</Polish>
<Spanish>Columna</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_STAG_SHORT">
<Original>Stag Column</Original>
<English>Stag Column</English>
<German>Gest.Kolonne</German>
<Polish>Kolumna rozpr.</Polish>
<Spanish>Columna Esc.</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_WEDGE_SHORT">
<Original>Wedge</Original>
<English>Wedge</English>
<German>Keil</German>
<Polish>Klin</Polish>
<Spanish>Cuña</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_ECHL_SHORT">
<Original>Echelon L</Original>
<English>Echelon L</English>
<German>Staffel L</German>
<Polish>Eszelon L</Polish>
<Spanish>Escalón Izq.</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_ECHR_SHORT">
<Original>Echelon R</Original>
<English>Echelon R</English>
<German>Staffel R</German>
<Polish>Eszelon P</Polish>
<Spanish>Escalon Der.</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_VEE_SHORT">
<Original>Vee</Original>
<English>Vee</English>
<German>V-Form.</German>
<Polish>Formacja V</Polish>
<Spanish>Formación V</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_LINE_SHORT">
<Original>Line</Original>
<English>Line</English>
<German>Linie</German>
<Polish>Tyraliera</Polish>
<Spanish>Línea</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_FILE_SHORT">
<Original>File</Original>
<English>File</English>
<German>Komp.Kolonne</German>
<Polish>Plik</Polish>
<Spanish>Hilera</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_DIAMOND_SHORT">
<Original>Diamond</Original>
<English>Diamond</English>
<German>Raute</German>
<Polish>Diament</Polish>
<Spanish>Diamante</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_COLUMN_TOOLTIP">
<Original>Column</Original>
<English>Column</English>
<German>Kolonnenformation</German>
<Polish>Formacja kolumna/Polish></Polish>
<Spanish>Columna</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_STAG_TOOLTIP">
<Original>Staggered Column</Original>
<English>Staggered Column</English>
<German>Gestaffelte Kolonne</German>
<Polish>Formacja rozproszona kolumna</Polish>
<Spanish>Columna Escalonada</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_WEDGE_TOOLTIP">
<Original>Wedge formation</Original>
<English>Wedge formation</English>
<German>Keilformation</German>
<Polish>Formacja klin</Polish>
<Spanish>Formación Cuña</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_ECHL_TOOLTIP">
<Original>Echelon Left</Original>
<English>Echelon Left</English>
<German>Staffel Links</German>
<Polish>Formacja eszelon lewy</Polish>
<Spanish>Escalón Izquierda</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_ECHR_TOOLTIP">
<Original>Echelon Right</Original>
<English>Echelon Right</English>
<German>Staffel Rechts</German>
<Polish>Formacja eszelon prawy</Polish>
<Spanish>Escalón Derecha</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_VEE_TOOLTIP">
<Original>Vee formation</Original>
<English>Vee formation</English>
<German>V-Formation</German>
<Polish>Formacja w kształcie litery 'V'</Polish>
<Spanish>Formación V</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_LINE_TOOLTIP">
<Original>Line formation</Original>
<English>Line formation</English>
<German>Linienformation</German>
<Polish>Formacja linia</Polish>
<Spanish>Formación Línea</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_FILE_TOOLTIP">
<Original>File formation</Original>
<English>File formation</English>
<German>Kompakte Kolonnenformation</German>
<Polish>Formacja kompaktowa kolumna</Polish>
<Spanish>Formación Hilera</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_FORM_DIAMOND_TOOLTIP">
<Original>Diamond formation</Original>
<English>Diamond formation</English>
<German>Rautenformation</German>
<Polish>Formacja obrona okrężna</Polish>
<Spanish>Formación Diamante</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_SWITCHFORMATION_SHORT">
<Original>Formations</Original>
<English>Formations</English>
<German>Formationen</German>
<Polish>Formacje</Polish>
<Spanish>Formaciones</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_SWITCHFORMATION_TOOLTIP">
<Original>Order Formation</Original>
<English>Order Formation</English>
<German>Formationsbefehl</German>
<Polish>Zmień formację</Polish>
<Spanish>Ordenar Formaciones</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTLEADER_SHORT">
<Original>Lead Group</Original>
<English>Lead Group</English>
<German>Gruppe anführen</German>
<Polish>Przejmij dowodzenie</Polish>
<Spanish>Grupo de cabeza</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTLEADER_TOOLTIP">
<Original>Request group leader to take over group leader</Original>
<English>Request group leader to take over group leader</English>
<German>Gruppenführerschaft anfordern</German>
<Polish>Poproś aktualnego dowódcę o przejęcie roli dowodzenia</Polish>
<Spanish>Requerir un lider para que tome el control del grupo</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTLEADER_MESSAGE">
<Original>%1 requests to be leader of this group</Original>
<English>%1 requests to be leader of this group</English>
<German>%1 bittet um Gruppenführerschaft</German>
<Polish>%1 prosi o przejęcie dowodzenia nad tą grupą</Polish>
<Spanish>%1 pide liderazgo de grupo</Spanish>
</Key>
<Key ID="STR_CSE_SHOULDER_TAPPED_GRP">
<Original>Your shoulder was tapped!</Original>
<English>Your shoulder was tapped!</English>
<German>Jemand hat dich angestupst!</German>
<Polish>Zostałeś klepnięty w ramię!</Polish>
<Spanish>Te han tocado el hombro¡</Spanish>
</Key>
<Key ID="STR_CSE_SHOULDER_TAP_GRP">
<Original>Shoulder Tap</Original>
<English>Shoulder Tap</English>
<German>Schultergriff</German>
<Polish>Klepnij w ramię</Polish>
<Spanish>Toque en el hombro</Spanish>
</Key>
<Key ID="STR_CSE_SHOULDER_TAP_TITLE">
<Original>Shoulder Tap</Original>
<English>Shoulder Tap</English>
<German>Schultergriff</German>
<Polish>Klepanie w ramię</Polish>
<Spanish>Toque en el hombro</Spanish>
</Key>
<Key ID="STR_CS_SHOULDER_TAP_DESC">
<Original>When pressed, you tap the shoulder of the unit in front of you. This depends on the Shoulder Tap settings from the Groups Module.</Original>
<English>When pressed, you tap the shoulder of the unit in front of you. This depends on the Shoulder Tap settings from the Groups Module.</English>
<German>Stupst die Einheit vor dir an der Schulter an. Dies hängt von den Schulter-Check Einstellungen im Gruppenmodul ab.</German>
<Polish>Przy użyciu klepniesz w ramię osobę przed tobą. Ta opcja zależna jest od ustawień klepania w ramię w module grupy.</Polish>
<Spanish>Cuando se selecciona, tocas el hombro de la unidad que tengas en frente. Depende de la configuración del Módulo Grupos.</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTJOINGRP_SHORT">
<Original>Join Group</Original>
<Polish>Dołącz do grupy</Polish>
<Spanish>Unirse al Grupo</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTJOINGRP_TOOLTIP">
<Original>Join target Group</Original>
<Polish>Dołączasz do wybranej grupy</Polish>
<Spanish>Unirse al Grupo</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_REQUESTJOINGRP_MESSAGE">
<Original>%1 requests to join your group</Original>
<Polish>%1 pragnie dołączyć do twojej grupy</Polish>
<Spanish>%1 pide unirse a su grupo</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_LEAVEGRP_SHORT">
<Original>Leave Group</Original>
<Polish>Opuść grupę</Polish>
<Spanish>Salir del Grupo</Spanish>
</Key>
<Key ID="STR_CSE_GROUP_LEAVEGRP_TOOLTIP">
<Original>Leave Current Group</Original>
<Polish>Opuszczasz aktualną grupę</Polish>
<Spanish>Salir del Grupo</Spanish>
</Key>
</Container>
</Package>
</Project>