Merge pull request #1519 from SilentSpike/gm_revamp

Introducing zeus interaction menu
This commit is contained in:
Nicolás Badano 2015-06-27 17:48:43 -03:00
commit f52babe546
11 changed files with 428 additions and 20 deletions

View File

@ -30,8 +30,6 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
["ACE3 Common", QGVAR(InteractKey), (localize LSTRING(InteractKey)),
{
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement
[0] call FUNC(keyDown)
},{[0,false] call FUNC(keyUp)},
@ -39,8 +37,6 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
["ACE3 Common", QGVAR(SelfInteractKey), (localize LSTRING(SelfInteractKey)),
{
// Conditions: canInteract
if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Statement
[1] call FUNC(keyDown)
},{[1,false] call FUNC(keyUp)},
@ -72,3 +68,11 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
if (GVAR(menuBackground)==1) then {[QGVAR(menuBackground), false] call EFUNC(common,blurScreen);};
if (GVAR(menuBackground)==2) then {(uiNamespace getVariable [QGVAR(menuBackground), displayNull]) closeDisplay 0;};
}] call EFUNC(common,addEventHandler);
// Let key work with zeus open (not perfect, enables all added hotkeys in zeus interface rather than only menu)
["zeusDisplayChanged",{
if (_this select 1) then {
(finddisplay 312) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 312) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
};
}] call EFUNC(common,addEventHandler);

View File

@ -6,6 +6,7 @@ PREP(addActionToClass);
PREP(addActionToObject);
PREP(compileMenu);
PREP(compileMenuSelfAction);
PREP(compileMenuZeus);
PREP(collectActiveActionTree);
PREP(createAction);
PREP(ctrlSetParsedTextCached);
@ -75,4 +76,7 @@ GVAR(lastTimeSearchedActions) = -1000;
["CAManBase"] call FUNC(compileMenu);
["CAManBase"] call FUNC(compileMenuSelfAction);
// Init zeus menu
[] call FUNC(compileMenuZeus);
ADDON = true;

View File

@ -0,0 +1,94 @@
/*
* Author: SilentSpike
* Compile the zeus action menu (only to be done once)
*
* Argument:
* nil
*
* Return value:
* None
*
* Public: No
*/
#include "script_component.hpp";
// Exit if the action menu is already compiled for zeus
if !(isNil {missionNamespace getVariable [QGVAR(ZeusActions), nil]}) exitWith {};
private "_recurseFnc";
_recurseFnc = {
private ["_actions", "_displayName", "_icon", "_statement", "_condition", "_showDisabled",
"_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"];
EXPLODE_1_PVT(_this,_actionsCfg);
_actions = [];
{
_entryCfg = _x;
if(isClass _entryCfg) then {
_displayName = getText (_entryCfg >> "displayName");
_icon = getText (_entryCfg >> "icon");
_statement = compile (getText (_entryCfg >> "statement"));
_condition = getText (_entryCfg >> "condition");
if (_condition == "") then {_condition = "true"};
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));
_showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0;
_enableInside = (getNumber (_entryCfg >> "enableInside")) > 0;
_canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0;
_runOnHover = true;
if (isText (_entryCfg >> "runOnHover")) then {
_runOnHover = compile getText (_entryCfg >> "runOnHover");
} else {
_runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0;
};
_condition = compile _condition;
_children = [_entryCfg] call _recurseFnc;
_entry = [
[
configName _entryCfg,
_displayName,
_icon,
_statement,
_condition,
_insertChildren,
{},
[0,0,0],
10, //distace
[_showDisabled,_enableInside,_canCollapse,_runOnHover],
_modifierFunction
],
_children
];
_actions pushBack _entry;
};
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};
private ["_actionsCfg"];
_actionsCfg = configFile >> "ACE_ZeusActions";
// Create a master action to base zeus actions on
GVAR(ZeusActions) = [
[
[
"ACE_ZeusActions",
localize LSTRING(ZeusActionsRoot),
"\A3\Ui_F_Curator\Data\Logos\arma3_zeus_icon_ca.paa",
{true},
{true},
{},
{},
{[0,0,0]},
10,
[false,true,false]
],
[_actionsCfg] call _recurseFnc
]
];

View File

@ -16,6 +16,11 @@ EXPLODE_1_PVT(_this,_menuType);
if (GVAR(openedMenuType) == _menuType) exitWith {true};
// Conditions: canInteract (these don't apply to zeus)
if ((isNull curatorCamera) && {
!([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting"]] call EFUNC(common,canInteractWith))
}) exitWith {false};
while {dialog} do {
closeDialog 0;
};
@ -34,6 +39,7 @@ GVAR(ParsedTextCached) = [];
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap ||
(!isNull curatorCamera) ||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
@ -46,7 +52,12 @@ for "_i" from 0 to (count GVAR(iconCtrls))-1 do {
GVAR(iconCtrls) resize GVAR(iconCount);
if (GVAR(useCursorMenu)) then {
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
// Don't close zeus interface if open
if (isNull curatorCamera) then {
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
} else {
createDialog QGVAR(cursorMenu);
};
(finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
// The dialog sets:

View File

@ -46,6 +46,8 @@ if(GVAR(actionSelected)) then {
};
};
["interactMenuClosed", [GVAR(openedMenuType)]] call EFUNC(common,localEvent);
GVAR(keyDown) = false;
GVAR(keyDownSelfAction) = false;
GVAR(openedMenuType) = -1;
@ -54,6 +56,4 @@ GVAR(expanded) = false;
GVAR(lastPath) = [];
GVAR(menuDepthPath) = [];
["interactMenuClosed", [GVAR(openedMenuType)]] call EFUNC(common,localEvent);
true

View File

@ -118,24 +118,35 @@ _fnc_renderSelfActions = {
} forEach _classActions;
};
_fnc_renderZeusActions = {
{
_action = _x;
[_this, _action, [0.5, 0.5]] call FUNC(renderBaseMenu);
} forEach GVAR(ZeusActions);
};
GVAR(collectedActionPoints) resize 0;
// Render nearby actions, unit self actions or vehicle self actions as appropiate
if (GVAR(openedMenuType) == 0) then {
if (vehicle ACE_player == ACE_player) then {
if (ACE_diagTime > GVAR(lastTimeSearchedActions) + 0.20) then {
// Once every 0.2 secs, collect nearby objects active and visible action points and render them
call _fnc_renderNearbyActions;
if (isNull curatorCamera) then {
if (vehicle ACE_player == ACE_player) then {
if (ACE_diagTime > GVAR(lastTimeSearchedActions) + 0.20) then {
// Once every 0.2 secs, collect nearby objects active and visible action points and render them
call _fnc_renderNearbyActions;
} else {
// The rest of the frames just draw the same action points rendered the last frame
call _fnc_renderLastFrameActions;
};
} else {
// The rest of the frames just draw the same action points rendered the last frame
call _fnc_renderLastFrameActions;
// Render vehicle self actions when in vehicle
(vehicle ACE_player) call _fnc_renderSelfActions;
};
} else {
(vehicle ACE_player) call _fnc_renderSelfActions;
// Render zeus actions when zeus open
(getAssignedCuratorLogic player) call _fnc_renderZeusActions;
};
} else {
ACE_player call _fnc_renderSelfActions;
};

View File

@ -36,7 +36,7 @@ _pos = if((count _this) > 2) then {
};
// For non-self actions, exit if the action is too far away or ocluded
if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
if (GVAR(openedMenuType) == 0 && (vehicle ACE_player == ACE_player) && (isNull curatorCamera) &&
{
private ["_headPos","_actualDistance"];
_headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot");

View File

@ -85,6 +85,9 @@
<Italian>Interazioni con veicoli</Italian>
<Portuguese>Ações de Veículos</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_ZeusActionsRoot">
<English>Zeus Actions</English>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMax">
<English>Interaction - Text Max</English>
<Polish>Interakcja - Tekst max</Polish>
@ -242,4 +245,4 @@
<Czech>Černý obraz</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -0,0 +1,268 @@
class ACE_ZeusActions {
// _target = curatorLogic
// curatorSelected = [objects,groups,waypoints,markers]
class ZeusUnits {
displayName = "$STR_A3_RscDisplayCurator_ModeUnits_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeUnits_ca.paa";
class stance {
displayName = "$STR_A3_RscAttributeUnitPos_Title";
class limited {
displayName = "$STR_A3_RscAttributeUnitPos_Down_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_prone_ca.paa";
statement = "{_x setUnitPos 'DOWN';} forEach (curatorSelected select 0);";
};
class normal {
displayName = "$STR_A3_RscAttributeUnitPos_Crouch_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_crouch_ca.paa";
statement = "{_x setUnitPos 'MIDDLE';} forEach (curatorSelected select 0);";
};
class full {
displayName = "$STR_A3_RscAttributeUnitPos_Up_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_stand_ca.paa";
statement = "{_x setUnitPos 'UP';} forEach (curatorSelected select 0);";
};
class auto {
displayName = "$STR_A3_RscAttributeUnitPos_Auto_tooltip";
icon = "\A3\UI_F_Curator\Data\default_ca.paa";
statement = "{_x setUnitPos 'AUTO';} forEach (curatorSelected select 0);";
};
};
class remoteControl {
displayName = "$STR_A3_CfgVehicles_ModuleRemoteControl_F";
icon = "\A3\Modules_F_Curator\Data\portraitRemoteControl_ca.paa";
statement = "_unit = objNull; { if ((side _x in [east,west,resistance,civilian]) && !(isPlayer _x)) exitWith { _unit = _x; }; } forEach (curatorSelected select 0); bis_fnc_curatorObjectPlaced_mouseOver = ['OBJECT',_unit]; (group _target) createUnit ['ModuleRemoteControl_F',[0,0,0],[],0,''];";
};
};
class ZeusGroups {
displayName = "$STR_A3_RscDisplayCurator_ModeGroups_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeGroups_ca.paa";
class behaviour {
displayName = CSTRING(Zeus_Behaviour);
class careless {
displayName = CSTRING(Zeus_Behaviour_careless);
statement = "{ _x setBehaviour 'CARELESS'; } forEach (curatorSelected select 1);";
};
class safe {
displayName = "$STR_safe";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa";
statement = "{ _x setBehaviour 'SAFE'; } forEach (curatorSelected select 1);";
};
class aware {
displayName = "$STR_aware";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa";
statement = "{ _x setBehaviour 'AWARE'; } forEach (curatorSelected select 1);";
};
class combat {
displayName = "$STR_combat";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa";
statement = "{ _x setBehaviour 'COMBAT'; } forEach (curatorSelected select 1);";
};
class stealth {
displayName = "$STR_stealth";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa";
statement = "{ _x setBehaviour 'STEALTH'; } forEach (curatorSelected select 1);";
};
};
class speed {
displayName = CSTRING(Zeus_Speed);
class limited {
displayName = "$STR_speed_limited";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa";
statement = "{_x setSpeedMode 'LIMITED';} forEach (curatorSelected select 1);";
};
class normal {
displayName = "$STR_speed_normal";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa";
statement = "{_x setSpeedMode 'NORMAL';} forEach (curatorSelected select 1);";
};
class full {
displayName = "$STR_speed_full";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa";
statement = "{_x setSpeedMode 'FULL';} forEach (curatorSelected select 1);";
};
};
class stance {
displayName = "$STR_A3_RscAttributeUnitPos_Title";
class limited {
displayName = "$STR_A3_RscAttributeUnitPos_Down_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_prone_ca.paa";
statement = "{ {_x setUnitPos 'DOWN'} forEach (units _x); } forEach (curatorSelected select 1);";
};
class normal {
displayName = "$STR_A3_RscAttributeUnitPos_Crouch_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_crouch_ca.paa";
statement = "{ {_x setUnitPos 'MIDDLE'} forEach (units _x); } forEach (curatorSelected select 1);";
};
class full {
displayName = "$STR_A3_RscAttributeUnitPos_Up_tooltip";
icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_stand_ca.paa";
statement = "{ {_x setUnitPos 'UP'} forEach (units _x); } forEach (curatorSelected select 1);";
};
class auto {
displayName = "$STR_A3_RscAttributeUnitPos_Auto_tooltip";
icon = "\A3\UI_F_Curator\Data\default_ca.paa";
statement = "{ {_x setUnitPos 'AUTO'} forEach (units _x); } forEach (curatorSelected select 1);";
};
};
class formation {
displayName = CSTRING(Zeus_Formation);
class wedge {
displayName = "$STR_wedge";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa";
statement = "{_x setFormation 'WEDGE';} forEach (curatorSelected select 1);";
};
class vee {
displayName = "$STR_vee";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa";
statement = "{_x setFormation 'VEE';} forEach (curatorSelected select 1);";
};
class line {
displayName = "$STR_line";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa";
statement = "{_x setFormation 'LINE';} forEach (curatorSelected select 1);";
};
class column {
displayName = "$STR_column";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa";
statement = "{_x setFormation 'COLUMN';} forEach (curatorSelected select 1);";
};
class file {
displayName = "$STR_file";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa";
statement = "{_x setFormation 'FILE';} forEach (curatorSelected select 1);";
};
class stag_column {
displayName = "$STR_staggered";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa";
statement = "{_x setFormation 'STAG COLUMN';} forEach (curatorSelected select 1);";
};
class ech_left {
displayName = "$STR_echl";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa";
statement = "{_x setFormation 'ECH LEFT';} forEach (curatorSelected select 1);";
};
class ech_right {
displayName = "$STR_echr";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa";
statement = "{_x setFormation 'ECH RIGHT';} forEach (curatorSelected select 1);";
};
class diamond {
displayName = "$STR_diamond";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa";
statement = "{_x setFormation 'DIAMOND';} forEach (curatorSelected select 1);";
};
};
};
class ZeusWaypoints {
displayName = "Waypoints";
icon = "\A3\UI_F_Curator\Data\CfgCurator\waypoint_ca.paa";
class behaviour {
displayName = CSTRING(Zeus_Behaviour);
class careless {
displayName = CSTRING(Zeus_Behaviour_careless);
statement = "{ _x setWaypointBehaviour 'CARELESS'; } forEach (curatorSelected select 2);";
};
class safe {
displayName = "$STR_safe";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa";
statement = "{ _x setWaypointBehaviour 'SAFE'; } forEach (curatorSelected select 2);";
};
class aware {
displayName = "$STR_aware";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa";
statement = "{ _x setWaypointBehaviour 'AWARE'; } forEach (curatorSelected select 2);";
};
class combat {
displayName = "$STR_combat";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa";
statement = "{ _x setWaypointBehaviour 'COMBAT'; } forEach (curatorSelected select 2);";
};
class stealth {
displayName = "$STR_stealth";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa";
statement = "{ _x setWaypointBehaviour 'STEALTH'; } forEach (curatorSelected select 2);";
};
};
class speed {
displayName = CSTRING(Zeus_Speed);
class limited {
displayName = "$STR_speed_limited";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa";
statement = "{ _x setWaypointSpeed 'LIMITED'; } forEach (curatorSelected select 2);";
};
class normal {
displayName = "$STR_speed_normal";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa";
statement = "{ _x setWaypointSpeed 'NORMAL'; } forEach (curatorSelected select 2);";
};
class full {
displayName = "$STR_speed_full";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa";
statement = "{ _x setWaypointSpeed 'FULL'; } forEach (curatorSelected select 2);";
};
};
class formation {
displayName = CSTRING(Zeus_Formation);
class wedge {
displayName = "$STR_wedge";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa";
statement = "{_x setWaypointFormation 'WEDGE';} forEach (curatorSelected select 1);";
};
class vee {
displayName = "$STR_vee";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa";
statement = "{_x setWaypointFormation 'VEE';} forEach (curatorSelected select 1);";
};
class line {
displayName = "$STR_line";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa";
statement = "{_x setWaypointFormation 'LINE';} forEach (curatorSelected select 1);";
};
class column {
displayName = "$STR_column";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa";
statement = "{_x setWaypointFormation 'COLUMN';} forEach (curatorSelected select 1);";
};
class file {
displayName = "$STR_file";
icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa";
statement = "{_x setWaypointFormation 'FILE';} forEach (curatorSelected select 1);";
};
class stag_column {
displayName = "$STR_staggered";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa";
statement = "{_x setWaypointFormation 'STAG COLUMN';} forEach (curatorSelected select 1);";
};
class ech_left {
displayName = "$STR_echl";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa";
statement = "{_x setWaypointFormation 'ECH LEFT';} forEach (curatorSelected select 1);";
};
class ech_right {
displayName = "$STR_echr";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa";
statement = "{_x setWaypointFormation 'ECH RIGHT';} forEach (curatorSelected select 1);";
};
class diamond {
displayName = "$STR_diamond";
icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa";
statement = "{_x setWaypointFormation 'DIAMOND';} forEach (curatorSelected select 1);";
};
};
};
class ZeusMarkers {
displayName = "$STR_A3_RscDisplayCurator_ModeMarkers_tooltip";
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeMarkers_ca.paa";
};
};

View File

@ -16,3 +16,4 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "Menu_Config.hpp"
#include "ACE_Settings.hpp"
#include "ACE_ZeusActions.hpp"

View File

@ -815,10 +815,22 @@
<Czech>Mohou hráči použít menu správy týmu? Výchozí: Ano</Czech>
</Key>
<Key ID="STR_ACE_Interaction_Module_Description">
<English></English>
<English>Team management allows color allocation for team members, taking team command and joining/leaving teams.</English>
<Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish>
<German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German>
<Czech>Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. </Czech>
</Key>
<Key ID="STR_ACE_Interaction_Zeus_Behaviour">
<English>Behaviour</English>
</Key>
<Key ID="STR_ACE_Interaction_Zeus_Behaviour_careless">
<English>Careless</English>
</Key>
<Key ID="STR_ACE_Interaction_Zeus_Formation">
<English>Formation</English>
</Key>
<Key ID="STR_ACE_Interaction_Zeus_Speed">
<English>Speed Mode</English>
</Key>
</Package>
</Project>
</Project>