AGM_Interaction pre CBA

This commit is contained in:
Nicolás Badano 2015-01-11 16:32:51 -03:00
parent 2452884acb
commit 6769189e7c
68 changed files with 3765 additions and 0 deletions

View File

@ -0,0 +1,632 @@
#define HSPACE 0.5-2.0/16/2
#define VSPACE 0.5-0.3/9/2
class RscStructuredText;
class AGM_Interaction_Button_Base {
tooltip = "";
//action = "AGM_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = AGM_Interaction_Buttons select AGM_Interaction_SelectedButton;AGM_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};";
action = "";
idc = -1;
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;
style = 2;
x = 0;
y = 0;
w = 2.0 / 16 * safezoneW;
h = 0.3 / 9 * safezoneH;
offsetX = 0.003;
offsetY = 0.003;
offsetPressedX = 0.002;
offsetPressedY = 0.002;
borderSize = 0;
colorText[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,1};
colorBackground[] = {0,0,0,0.8};
colorBackgroundDisabled[] = {0,0,0,0.8};
colorBackgroundActive[] = {1,1,1,0};
colorFocused[] = {1,1,1,1};
colorShadow[] = {0,0,0,0};
colorBorder[] = {1,1,1,0.8};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
};
#define ICON_BORDER 0.05
// Old command rose
class AGM_Interaction_Dialog {
idd = 1713999;
enableSimulation = 1;
movingEnable = 0;
onLoad = "_dlgInteractionDialog = _this select 0; for '_a' from 10 to 19 do {(_dlgInteractionDialog displayCtrl _a) ctrlShow false}; uiNamespace setVariable ['AGM_Interaction_Dialog', _dlgInteractionDialog];";
objects[] = {};
class controls {
class Interaction_BackgroundMain: AGM_Interaction_Button_Base {
type = 0;
style = 2;
idc = 2;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = "(0.5-1.8/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.55/9/2 + 0 * 0.04) * safezoneH + safezoneY";
w = "1.8 / 16 * safezoneW";
h = "0.55 / 9 * safezoneH";
};
class Interaction_ButtonMain: AGM_Interaction_Button_Base {
action = "-1 call AGM_Interaction_fnc_onClick;";
style = 2;
tooltip = "";
text = "Interaction Menu";
idc = 3;
sizeEx = "0.6 / 40 / (getResolution select 5)";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
x = "(0.5-1.8/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.55/9/2 + 0 * 0.04) * safezoneH + safezoneY";
w = "1.8 / 16 * safezoneW";
h = "0.55 / 9 * safezoneH";
};
class Interaction_Background0: AGM_Interaction_Button_Base {
type = 0;
style = 2;
idc = 40;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background1: Interaction_Background0 {
idc = 41;
x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background2: Interaction_Background0 {
idc = 42;
x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background3: Interaction_Background0 {
idc = 43;
x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background4: Interaction_Background0 {
idc = 44;
x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background5: Interaction_Background0 {
idc = 45;
x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background6: Interaction_Background0 {
idc = 46;
x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background7: Interaction_Background0 {
idc = 47;
x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background8: Interaction_Background0 {
idc = 48;
x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Background9: Interaction_Background0 {
idc = 49;
x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Icon0: AGM_Interaction_Button_Base {
tooltip = "";
text = "";
idc = 20;
type = 0;
style = 48;
colorBackground[] = {0,0,0,0};
x = (0.5-(2.0-ICON_BORDER)/16/2 + 0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 - 2.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon1: Interaction_Icon0 {
idc = 21;
x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 - 1.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon2: Interaction_Icon0 {
idc = 22;
x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.25 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 - 0.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon3: Interaction_Icon0 {
idc = 23;
x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.25 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 + 0.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon4: Interaction_Icon0 {
idc = 24;
x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 + 1.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon5 : Interaction_Icon0 {
idc = 25;
x = (0.5-(2.0-ICON_BORDER)/16/2 + 0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 + 2.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon6: Interaction_Icon0 {
idc = 26;
x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 + 1.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon7: Interaction_Icon0 {
idc = 27;
x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.25 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 + 0.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon8: Interaction_Icon0 {
idc = 28;
x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.25 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 - 0.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Icon9: Interaction_Icon0 {
idc = 29;
x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.0 * 0.1) * safezoneW + safezoneX;
y = (0.5-(0.3-ICON_BORDER)/9/2 - 1.5 * 0.04) * safezoneH + safezoneY;
w = (0.3-ICON_BORDER) / 16 * safezoneW;
h = (0.3-ICON_BORDER) / 9 * safezoneH;
};
class Interaction_Shortcut0: AGM_Interaction_Button_Base {
tooltip = "";
text = "";
idc = 30;
style = 2;
colorBackground[] = {0,0,0,0};
x = "(0.5+2.0/16/2-0.3/16 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut1: Interaction_Shortcut0 {
idc = 31;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut2: Interaction_Shortcut0 {
idc = 32;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut3: Interaction_Shortcut0 {
idc = 33;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut4: Interaction_Shortcut0 {
idc = 34;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut5 : Interaction_Shortcut0 {
idc = 35;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut6: Interaction_Shortcut0 {
idc = 36;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut7: Interaction_Shortcut0 {
idc = 37;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut8: Interaction_Shortcut0 {
idc = 38;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Shortcut9: Interaction_Shortcut0 {
idc = 39;
type = 0;
x = "(0.5+2.0/16/2-0.3/16 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "0.3 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button0: AGM_Interaction_Button_Base {
action = "0 call AGM_Interaction_fnc_onClick;";
style = 2;
tooltip = "";
text = "";
idc = 10;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button1: Interaction_Button0 {
action = "1 call AGM_Interaction_fnc_onClick;";
idc = 11;
x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button2: Interaction_Button0 {
action = "2 call AGM_Interaction_fnc_onClick;";
idc = 12;
x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button3: Interaction_Button0 {
action = "3 call AGM_Interaction_fnc_onClick;";
idc = 13;
x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button4: Interaction_Button0 {
action = "4 call AGM_Interaction_fnc_onClick;";
idc = 14;
x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button5: Interaction_Button0 {
action = "5 call AGM_Interaction_fnc_onClick;";
idc = 15;
x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button6: Interaction_Button0 {
action = "6 call AGM_Interaction_fnc_onClick;";
idc = 16;
x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button7: Interaction_Button0 {
action = "7 call AGM_Interaction_fnc_onClick;";
idc = 17;
x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button8: Interaction_Button0 {
action = "8 call AGM_Interaction_fnc_onClick;";
idc = 18;
x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
class Interaction_Button9: Interaction_Button0 {
action = "9 call AGM_Interaction_fnc_onClick;";
idc = 19;
x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX";
y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY";
w = "2.0 / 16 * safezoneW";
h = "0.3 / 9 * safezoneH";
};
};
};
class RscListbox;
class IGUIBack;
class RscText;
#define X_OFFSET 0.2
class RscAGM_SelectAnItem {
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.6;
h = 0.71;
colorBackground[] = {0, 0, 0, 0.2};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.59;
h = 0.05;
style = 0x02;
text = "";
};
class itemList:RscListBox {
onMouseButtonDblClick = "_this call AGM_Interaction_fnc_onSelectMenuDblClick";
idc = 8866;
x = X_OFFSET + 0.005;
w = 0.59;
h = 0.54;
y = 0.06;
};
class cancelBtnBackground: AGM_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
};
class approveBtnBackground: AGM_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
};
class cancelBtn: AGM_Interaction_Button_Base {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
style = 2;
text = $STR_AGM_Interaction_Back; //$STR_AGM_Interaction_CancelSelection;
action = "call AGM_Interaction_fnc_hideMenu;"; //'Default' call AGM_Interaction_fnc_openMenu; 'Default' call AGM_Interaction_fnc_openMenuSelf;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
class approveBtn: AGM_Interaction_Button_Base {
idc = 8860;
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
style = 2;
text = $STR_AGM_Interaction_MakeSelection;
action = "call AGM_Interaction_fnc_hideMenu;";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
};
};
#define GUI_GRID_W (0.025)
#define GUI_GRID_H (0.04)
class RscPicture;
class RscInteractionIcon: RscPicture {
x = 19.25 * GUI_GRID_W;
y = 15.75 * GUI_GRID_H;
w = 2*GUI_GRID_H;
h = 2*GUI_GRID_H;
};
class RscInteractionHelperIcon: RscInteractionIcon {
x = 20 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = GUI_GRID_H;
h = GUI_GRID_H;
};
class RscInteractionText: RscText{
x = 21 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = 8 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
};
class RscTitles {
class AGM_FlowMenu {
idd = 9920;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['AGM_Flow_Display', _this select 0];";
class controls {
class RearIcon: RscInteractionIcon{
idc = 999;
text = "AGM_interaction\UI\CenterIcon_ca.paa";
x = 17.9 * GUI_GRID_W;
y = 10 * GUI_GRID_H;
w = 3.7 * GUI_GRID_H;
h = 5.75 * GUI_GRID_H;
};
class TopIcon: RscInteractionIcon{
idc = 1200;
h = 1 * GUI_GRID_H;
y = 9 * GUI_GRID_H;
};
class FirstIcon: RscInteractionIcon{
idc = 1201;
y = 10.25 * GUI_GRID_H;
h = 1.5 * GUI_GRID_H;
};
class SelectedItemIcon: RscInteractionIcon{
idc = 1202;
y = 12 * GUI_GRID_H;
};
class ThirdIcon: RscInteractionIcon{
idc = 1203;
y = 14.25 * GUI_GRID_H;
h = 1.5 * GUI_GRID_H;
};
class BottomIcon: TopIcon{
idc = 1204;
y = 16 * GUI_GRID_H;
};
class ItemName: RscText{
idc = 1000;
style = 0x01;
x = 5.25 * GUI_GRID_W;
y = 12.15 * GUI_GRID_H;
w = 13 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
colorBackground[] = {0.3, 0.3, 0.3, 0.8};
};
class BackIcon: RscInteractionIcon{
idc = 1210;
text = "AGM_interaction\UI\backArrow_ca.paa";
x = 18.25 * GUI_GRID_W;
y = 12.69 * GUI_GRID_H;
w = 0.5 * GUI_GRID_W;
h = 0.5 * GUI_GRID_H;
};
class ItemDetails: RscStructuredText{
idc = 1100;
style = 0x0c;
x = 23.5 * GUI_GRID_W;
y = 11 * GUI_GRID_H;
w = 13 * GUI_GRID_W;
h = 3.9 * GUI_GRID_H;
colorBackground[] = {0, 0, 0, 0.4};
};
};
};
class AGM_InteractionHelper {
idd = 9930;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['AGM_Helper_Display', _this select 0];";
class controls {
class SelectIcon: RscInteractionHelperIcon{
idc = 1200;
text = "AGM_interaction\UI\mouse_left_ca.paa";
y = 17.5 * GUI_GRID_H;
};
class SelectText: RscInteractionText{
idc = 1000;
y = 17 * GUI_GRID_H;
text = $STR_AGM_Interaction_MakeSelection;
};
class GoBackIcon: RscInteractionHelperIcon{
idc = 1201;
text = "AGM_interaction\UI\mouse_right_ca.paa";
y = 19.5 * GUI_GRID_H;
};
class GoBackText: RscInteractionText{
idc = 1001;
y = 19 * GUI_GRID_H;
text = $STR_AGM_Interaction_Back;
};
class ScrollIcon: RscInteractionHelperIcon{
idc = 1202;
text = "AGM_interaction\UI\mouse_scroll_ca.paa";
y = 18.5 * GUI_GRID_H;
};
class ScrollText: RscInteractionText{
idc = 1002;
y = 18 * GUI_GRID_H;
text = $STR_AGM_Interaction_ScrollHint;
};
};
};
};

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.

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,12 @@
// by commy2 and CAA-Picard
if (!hasInterface) exitWith {};
AGM_Interaction_isOpeningDoor = false;
AGM_Dancing = false;
// restore global fire teams for JIP
{
_team = _x getVariable ["AGM_assignedFireTeam", ""];
if (_team != "") then {_x assignTeam _team};
} forEach allUnits;

View File

@ -0,0 +1,664 @@
class CfgPatches {
class AGM_Interaction {
units[] = {};
weapons[] = {};
requiredVersion = 0.60;
requiredAddons[] = {AGM_Core};
version = "0.95";
versionStr = "0.95";
versionAr[] = {0,95,0};
author[] = {"commy2", "KoffeinFlummi", "CAA-Picard", "bux578"};
authorUrl = "https://github.com/commy2/";
};
};
class CfgFunctions {
class AGM_Interaction {
class AGM_Interaction {
file = "\AGM_interaction\functions";
class addInteraction;
class addInteractionSelf;
class AddSelectableItem;
class addToTooltip;
class applyButtons;
class canInteractWith;
class canLockDoor;
class canTapShoulder;
class getActions2;
class GetActions;
class getDoor;
class getDoorAnimations;
class getDown;
class getSelectedButton;
class hideMenu;
class hideMouseHint;
class initialiseInteraction;
class isInRange;
class joinTeam;
class lockDoor;
class menuKeyInput;
class moduleInteraction;
class moveDown;
class onButtonDown;
class onButtonDownSelf;
class onButtonUp;
class onClick;
class onSelectMenuDblClick;
class openDoor;
class openMenu;
class openMenuSelectUI;
class openMenuSelf;
class openSelectMenu;
class openSubMenu;
class openSubMenuSelf;
class prepareSelectMenu;
class push;
class removeInteraction;
class removeInteractionSelf;
class removeTag;
class sendAway;
class showMenu;
class showMouseHint;
class sortOptionsByPriority;
class tapShoulder;
class updateTooltipPosition;
// backwards compatibility, remove in some patches
class getCaptivityStatus;
class setCaptivityStatus;
};
};
};
class Extended_PostInit_EventHandlers {
class AGM_Interaction {
clientInit = "call compile preprocessFileLineNumbers '\AGM_Interaction\clientInit.sqf'";
};
};
class Extended_GetIn_EventHandlers {
class All {
class AGM_AutoCloseMenu {
clientGetIn = "if (_this select 2 == AGM_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}";
};
};
};
class Extended_GetOut_EventHandlers {
class All {
class AGM_AutoCloseMenu {
clientGetOut = "if (_this select 2 == AGM_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}";
};
};
};
class AGM_Core_Default_Keys {
class openInteractionMenuNew {
displayName = "$STR_AGM_Interaction_InteractionMenu";
condition = "true";
statement = "call AGM_Interaction_fnc_onButtonDown";
conditionUp = "!isNull (findDisplay 1713999) && {profileNamespace getVariable ['AGM_Interaction_AutoCloseMenu', false]}";
statementUp = "if (AGM_Interaction_MenuType mod 2 == 0) then {call AGM_Interaction_fnc_onButtonUp};";
exceptions[] = {"AGM_Drag_isNotDragging", "AGM_Medical_canTreat", "AGM_Interaction_isNotEscorting", "AGM_Interaction_isNotSwimming"};
key = 219;
shift = 0;
control = 0;
alt = 0;
};
class openInteractionMenuSelfNew {
displayName = "$STR_AGM_Interaction_InteractionMenuSelf";
condition = "true";
statement = "call AGM_Interaction_fnc_onButtonDownSelf";
conditionUp = "!isNull (findDisplay 1713999) && {profileNamespace getVariable ['AGM_Interaction_AutoCloseMenu', false]}";
statementUp = "if (AGM_Interaction_MenuType mod 2 == 1) then {call AGM_Interaction_fnc_onButtonUp};";
exceptions[] = {"AGM_Drag_isNotDragging", "AGM_Medical_canTreat", "AGM_Interaction_isNotEscorting", "AGM_Interaction_isNotSwimming", "AGM_Core_notOnMap"};
key = 219;
shift = 0;
control = 1;
alt = 0;
};
class openDoor {
displayName = "$STR_AGM_Interaction_OpenDoor";
condition = "!AGM_Interaction_isOpeningDoor && {[2] call AGM_Interaction_fnc_getDoor select 1 != ''}";
statement = "call AGM_Interaction_fnc_openDoor";
conditionUp = "AGM_Interaction_isOpeningDoor";
statementUp = "AGM_Interaction_isOpeningDoor = false";
key = 57;
shift = 0;
control = 1;
alt = 0;
};
// disabled for now
/*class lockDoor {
displayName = "$STR_AGM_Interaction_LockDoor";
condition = "[true] call AGM_Interaction_fnc_canLockDoor && {!AGM_Interaction_isOpeningDoor}";
statement = "[true] call AGM_Interaction_fnc_lockDoor";
key = 57;
shift = 0;
control = 0;
alt = 1;
};
class unlockDoor {
displayName = "$STR_AGM_Interaction_UnlockDoor";
condition = "[false] call AGM_Interaction_fnc_canLockDoor";
statement = "[false] call AGM_Interaction_fnc_lockDoor";
key = 57;
shift = 0;
control = 1;
alt = 1;
};*/
class tapShoulder {
displayName = "$STR_AGM_Interaction_TapShoulder";
condition = "[_player, cursorTarget] call AGM_Interaction_fnc_canTapShoulder";
statement = "[_player, cursorTarget] call AGM_Interaction_fnc_tapShoulder";
key = 20;
shift = 1;
control = 0;
alt = 0;
};
class modifierKey {
displayName = "$STR_AGM_Interaction_ModifierKey";
condition = "";
statement = "AGM_Modifier = 1;";
conditionUp = "";
statementUp = "AGM_Modifier = 0;";
exceptions[] = {"AGM_Drag_isNotDragging"};
key = 29;
shift = 0;
control = 0;
alt = 0;
};
};
class AGM_Core_Options {
class Interaction_FlowMenu {
displayName = "$STR_AGM_Interaction_FlowMenu";
default = 0;
};
class Interaction_AutoCloseMenu {
displayName = "$STR_AGM_Interaction_AutoCloseMenu";
default = 0;
};
class Interaction_AutoCenterCursor {
displayName = "$STR_AGM_Interaction_AutoCenterCursor";
default = 1;
};
};
class AGM_Parameters {
AGM_Modifier = 0;
};
class AGM_Parameters_Boolean {
AGM_Interaction_EnableTeamManagement = 1;
};
class AGM_Core_canInteractConditions {
class AGM_Interaction_isNotEscorting {
condition = "!(_player getVariable ['AGM_isEscorting', false])";
};
class AGM_Interaction_isNotCaptive {
condition = "!(_player getVariable ['AGM_isCaptive', false])";
};
class AGM_Interaction_isNotSurrendering {
condition = "!(_player getVariable ['AGM_isSurrender', false])";
};
class AGM_Interaction_isNotSwimming {
condition = "!underwater _player";
};
};
#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \
name = #ITEM; \
count = COUNT; \
};
class CfgVehicles {
class Module_F;
class AGM_ModuleInteraction: Module_F {
author = "$STR_AGM_Core_AGMTeam";
category = "AGM";
displayName = "Interaction System";
function = "AGM_Interaction_fnc_moduleInteraction";
scope = 2;
isGlobal = 1;
icon = "\AGM_Interaction\UI\IconInteraction_ca.paa";
class Arguments {
class EnableTeamManagement {
displayName = "Enable Team Management";
description = "Should players be allowed to use the Team Management Menu? Default: Yes";
typeName = "BOOL";
class values {
class Yes { default = 1; name = "Yes"; value = 1;};
class No { name = "No"; value = 0; };
};
};
};
};
class Man;
class CAManBase: Man {
class AGM_Actions {
class AGM_TeamManagement {
displayName = "$STR_AGM_Interaction_TeamManagement";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player} && {AGM_Interaction_EnableTeamManagement}";
statement = "";
showDisabled = 0;
priority = 3.2;
icon = "\AGM_Interaction\UI\team\team_management_ca.paa";
subMenu[] = {"AGM_TeamManagement", 0};
hotkey = "M";
enableInside = 1;
class AGM_JoinTeamRed {
displayName = "$STR_AGM_Interaction_JoinTeamRed";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player}";
statement = "[_target, 'RED'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
icon = "\AGM_Interaction\UI\team\team_red_ca.paa";
priority = 2.4;
hotkey = "R";
enableInside = 1;
};
class AGM_JoinTeamGreen {
displayName = "$STR_AGM_Interaction_JoinTeamGreen";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player}";
statement = "[_target, 'GREEN'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
icon = "\AGM_Interaction\UI\team\team_green_ca.paa";
priority = 2.3;
hotkey = "G";
enableInside = 1;
};
class AGM_JoinTeamBlue {
displayName = "$STR_AGM_Interaction_JoinTeamBlue";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player}";
statement = "[_target, 'BLUE'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
icon = "\AGM_Interaction\UI\team\team_blue_ca.paa";
priority = 2.2;
hotkey = "B";
enableInside = 1;
};
class AGM_JoinTeamYellow {
displayName = "$STR_AGM_Interaction_JoinTeamYellow";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player}";
statement = "[_target, 'YELLOW'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
icon = "\AGM_Interaction\UI\team\team_yellow_ca.paa";
priority = 2.1;
hotkey = "Y";
enableInside = 1;
};
class AGM_LeaveTeam {
displayName = "$STR_AGM_Interaction_LeaveTeam";
distance = 4;
condition = "alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}";
statement = "[_target, 'MAIN'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
icon = "\AGM_Interaction\UI\team\team_white_ca.paa";
priority = 2.5;
hotkey = "N";
enableInside = 1;
};
};
class AGM_TapShoulder {
displayName = "$STR_AGM_Interaction_TapShoulder";
distance = 4;
condition = "[_player, _target] call AGM_Interaction_fnc_canTapShoulder";
statement = "[_player, _target] call AGM_Interaction_fnc_tapShoulder";
showDisabled = 1;
priority = 2.8;
hotkey = "Q";
enableInside = 1;
};
class AGM_JoinGroup {
displayName = "$STR_AGM_Interaction_JoinGroup";
distance = 4;
condition = "side group _player == side group _target && {group _player != group _target}";
statement = "[_player] joinSilent group _target;";
showDisabled = 0;
priority = 2.6;
icon = "\AGM_Interaction\UI\team\team_management_ca.paa";
hotkey = "J";
enableInside = 1;
};
class AGM_GetDown {
displayName = "$STR_AGM_Interaction_GetDown";
distance = 4;
condition = "[_target] call AGM_Interaction_fnc_canInteractWith";
statement = "[_target] call AGM_Interaction_fnc_getDown";
showDisabled = 0;
priority = 2.2;
};
class AGM_SendAway {
displayName = "$STR_AGM_Interaction_SendAway";
distance = 4;
condition = "[_target] call AGM_Interaction_fnc_canInteractWith";
statement = "[_target] call AGM_Interaction_fnc_sendAway";
showDisabled = 0;
priority = 2.0;
};
class AGM_Pardon {
displayName = "$STR_AGM_Interaction_Pardon";
distance = 4;
condition = "rating _target < -2000 && {alive _target} && {side group _player == side group _target}";
statement = "[_target, '{_this addRating -rating _this}', _target] call AGM_Core_fnc_execRemoteFnc";
showDisabled = 0;
priority = 2.5;
enableInside = 1;
};
};
class AGM_SelfActions {
class AGM_TeamManagement {
displayName = "$STR_AGM_Interaction_TeamManagement";
condition = "AGM_Interaction_EnableTeamManagement";
statement = "";
showDisabled = 1;
priority = 3.2;
icon = "\AGM_Interaction\UI\team\team_management_ca.paa";
subMenu[] = {"AGM_TeamManagement", 1};
enableInside = 1;
hotkey = "M";
class AGM_JoinTeamRed {
displayName = "$STR_AGM_Interaction_JoinTeamRed";
condition = "true";
statement = "[_player, 'RED'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
priority = 2.4;
icon = "\AGM_Interaction\UI\team\team_red_ca.paa";
enableInside = 1;
hotkey = "R";
};
class AGM_JoinTeamGreen {
displayName = "$STR_AGM_Interaction_JoinTeamGreen";
condition = "true";
statement = "[_player, 'GREEN'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
priority = 2.3;
icon = "\AGM_Interaction\UI\team\team_green_ca.paa";
enableInside = 1;
hotkey = "G";
};
class AGM_JoinTeamBlue {
displayName = "$STR_AGM_Interaction_JoinTeamBlue";
condition = "true";
statement = "[_player, 'BLUE'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
priority = 2.2;
icon = "\AGM_Interaction\UI\team\team_blue_ca.paa";
enableInside = 1;
hotkey = "B";
};
class AGM_JoinTeamYellow {
displayName = "$STR_AGM_Interaction_JoinTeamYellow";
condition = "true";
statement = "[_player, 'YELLOW'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
priority = 2.1;
icon = "\AGM_Interaction\UI\team\team_yellow_ca.paa";
enableInside = 1;
hotkey = "Y";
};
class AGM_LeaveTeam {
displayName = "$STR_AGM_Interaction_LeaveTeam";
condition = "assignedTeam _player != 'MAIN'";
statement = "[_player, 'MAIN'] call AGM_Interaction_fnc_joinTeam";
showDisabled = 1;
priority = 2.5;
icon = "\AGM_Interaction\UI\team\team_white_ca.paa";
enableInside = 1;
hotkey = "N";
};
class AGM_BecomeLeader {
displayName = "$STR_AGM_Interaction_BecomeLeader";
condition = "count (units group _player) > 1 && {leader group _player != _player}";
statement = "_newGroup = createGroup side group _player; (units group _player) joinSilent _newGroup; _newGroup selectLeader _player;";
showDisabled = 1;
priority = 1.0;
icon = "\AGM_Interaction\UI\team\team_white_ca.paa";
enableInside = 1;
hotkey = "L";
};
class AGM_LeaveGroup {
displayName = "$STR_AGM_Interaction_LeaveGroup";
condition = "count (units group _player) > 1";
statement = "_oldGroup = units group _player; _newGroup = createGroup side _player; [_player] joinSilent _newGroup; {_player reveal _x} forEach _oldGroup;";
showDisabled = 1;
priority = 1.2;
icon = "\AGM_Interaction\UI\team\team_management_ca.paa";
enableInside = 1;
hotkey = "M";
};
};
/* DANCE ANIMATION DOESN'T WORK :(
class AGM_Dance {
displayName = "$STR_AGM_Interaction_Dance";
condition = "isClass (configFile >> 'CfgPatches' >> 'AGM_Movement') and !AGM_Dancing";
statement = "AGM_Dancing = true; [-2, {_this switchMove 'TestDance';}, player] call CBA_fnc_globalExecute;";
showDisabled = 0;
priority = -1.2;
};
class AGM_StopDancing {
displayName = "$STR_AGM_Interaction_StopDancing";
condition = "AGM_Dancing";
statement = "AGM_Dancing = false; [-2, {_this switchMove '';}, player] call CBA_fnc_globalExecute;";
showDisabled = 0;
priority = -1.2;
};
*/
class AGM_Gestures {
displayName = "$STR_AGM_Interaction_Gestures";
condition = "canStand _target";
statement = "";
showDisabled = 1;
priority = 3.5;
subMenu[] = {"AGM_Gestures", 1};
icon = "AGM_Interaction\UI\gestures_ca.paa";
hotkey = "G";
/*class AGM_Gesture_Advance {
displayName = "$STR_AGM_Interaction_Gestures_Attack";
condition = "canStand _target";
statement = "_target playActionNow 'gestureAttack';";
showDisabled = 1;
priority = 2.0;
};*/
class AGM_Gesture_Advance {
displayName = "$STR_AGM_Interaction_Gestures_Advance";
condition = "canStand _target";
statement = "_target playActionNow 'gestureAdvance';";
showDisabled = 1;
priority = 1.9;
hotkey = "1";
};
class AGM_Gesture_Go {
displayName = "$STR_AGM_Interaction_Gestures_Go";
condition = "canStand _target";
statement = "_target playActionNow (['gestureGo', 'gestureGoB'] select (floor random 2));";
showDisabled = 1;
priority = 1.8;
hotkey = "2";
};
class AGM_Gesture_Follow {
displayName = "$STR_AGM_Interaction_Gestures_Follow";
condition = "canStand _target";
statement = "_target playActionNow 'gestureFollow';";
showDisabled = 1;
priority = 1.7;
hotkey = "3";
};
/*class AGM_Gesture_Point {
displayName = "$STR_AGM_Interaction_Gestures_Point";
condition = "canStand _target";
statement = "_target playActionNow 'gesturePoint';";
showDisabled = 1;
priority = 1.6;
};*/
class AGM_Gesture_Up {
displayName = "$STR_AGM_Interaction_Gestures_Up";
condition = "canStand _target";
statement = "_target playActionNow 'gestureUp';";
showDisabled = 1;
priority = 1.5;
hotkey = "4";
};
class AGM_Gesture_Cover {
displayName = "$STR_AGM_Interaction_Gestures_Cover";
condition = "canStand _target";
statement = "_target playActionNow 'gestureCover';";
showDisabled = 1;
priority = 1.4;
hotkey = "5";
};
class AGM_Gesture_CeaseFire {
displayName = "$STR_AGM_Interaction_Gestures_Cease_Fire";
condition = "canStand _target";
statement = "_target playActionNow 'gestureCeaseFire';";
showDisabled = 1;
priority = 1.3;
hotkey = "6";
};
class AGM_Gesture_Freeze {
displayName = "$STR_AGM_Interaction_Gestures_Freeze";
condition = "canStand _target";
statement = "_target playActionNow 'gestureFreeze';";
showDisabled = 1;
priority = 1.2;
hotkey = "7";
};
class AGM_Gesture_Yes {
displayName = "$STR_AGM_Interaction_Gestures_Yes";
condition = "canStand _target";
statement = "_target playActionNow (['gestureYes', 'gestureNod'] select (floor random 2));";
showDisabled = 1;
priority = 1.1;
hotkey = "8";
};
class AGM_Gesture_No {
displayName = "$STR_AGM_Interaction_Gestures_No";
condition = "canStand _target";
statement = "_target playActionNow 'gestureNo';";
showDisabled = 1;
priority = 1.0;
hotkey = "9";
};
class AGM_Gesture_Hi {
displayName = "$STR_AGM_Interaction_Gestures_Hi";
condition = "canStand _target";
statement = "_target playActionNow (['gestureHi', 'gestureHiB', 'gestureHiC'] select (floor random 3));";
showDisabled = 1;
priority = 0.9;
hotkey = "0";
};
};
class AGM_Equipment {
displayName = "$STR_AGM_Interaction_Equipment";
condition = "true";
statement = "";
showDisabled = 1;
priority = 4.5;
icon = ""; // @todo
subMenu[] = {"AGM_Equipment", 1};
enableInside = 1;
hotkey = "E";
class AGM_Dummy {
displayName = "";
condition = "false";
statement = "";
showDisabled = 1;
priority = -99;
icon = "AGM_Core\UI\blank_CO.paa";
enableInside = 1;
};
};
};
};
class LandVehicle;
class Car: LandVehicle {
class AGM_Actions {};
class AGM_SelfActions {};
};
class Tank: LandVehicle {
class AGM_Actions {};
class AGM_SelfActions {};
};
class Air;
class Helicopter: Air {
class AGM_Actions {};
class AGM_SelfActions {};
};
class Plane: Air {
class AGM_Actions {};
class AGM_SelfActions {};
};
class Ship;
class Ship_F: Ship {
class AGM_Actions {
class AGM_Push {
displayName = "$STR_AGM_Interaction_Push";
distance = 4;
condition = "getMass _target < 1000 and alive _target";
statement = "[_target, [2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5]] call AGM_Interaction_fnc_push;";
showDisabled = 0;
priority = -1;
};
};
class AGM_SelfActions {};
};
class StaticWeapon: LandVehicle {
class AGM_Actions {};
class AGM_SelfActions {};
};
class StaticMortar;
class Mortar_01_base_F: StaticMortar {
class AGM_Actions {};
class AGM_SelfActions {};
};
class Box_NATO_Support_F;
class AGM_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(AGM_CableTie,24)
};
};
};
class CfgWeapons {
class AGM_ItemCore;
class InventoryItem_Base_F;
class AGM_CableTie: AGM_ItemCore {
displayName = "$STR_AGM_Interaction_CableTie_Name";
descriptionShort = "$STR_AGM_Interaction_CableTie_Description";
model = "\AGM_Interaction\agm_cabletie.p3d";
picture = "\AGM_Interaction\UI\agm_cabletie_x_ca.paa";
scope = 2;
class ItemInfo: InventoryItem_Base_F {
mass = 1;
};
};
};
#include <Menu_Config.hpp>

View File

@ -0,0 +1,40 @@
/*
Name: AGM_Interaction_fnc_AddSelectableItem
Author: Garth de Wet (LH)
Description:
Adds an item to the select menu
Parameters:
0: ARRAY/NUMBER - List container
1: String - Display Name
2: String - Picture
3: String/code - data
Returns:
ARRAY/Number
Example:
*/
private ["_container", "_displayName", "_picture", "_data", "_index"];
_container = _this select 0;
_displayName = _this select 1;
_picture = _this select 2;
_data = _this select 3;
if (_picture == "" || _picture == "PictureThing") then {
_picture = "AGM_Interaction\UI\dot_ca.paa";
};
if ((profileNamespace getVariable ["AGM_Interaction_FlowMenu", false])) then {
//[_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey]
_container pushBack [_displayName, nil, {true},0,[], _picture, "", {true}, [], 4, "", _data];
}else{
_index = lbAdd [_container, _displayName];
lbSetData [_container, _index, str _data];
lbSetPicture [_container, _index, _picture];
};
_container

View File

@ -0,0 +1,154 @@
/*
Name: AGM_Interaction_fnc_GetActions
Author:
commy2
Garth de Wet (LH)
Description:
Parameters:
0: OBJECT - target
1: ARRAY - Parents of the target object
2: ARRAY - Actions
3: ARRAY - Patches
4: CONFIG - Parent config (ConfigFile >> "CfgVehicles"/MissionConfigFile >> "CfgVehicles")
5: BOOL - Is mission config file?
6: STRING - Classname ("AGM_Actions"/"AGM_SelfActions")
7: STRING - Sub-class
Returns:
Nothing
Example:
[player, [configfile >> "CfgVehicles" >> typeOf player, true] call BIS_fnc_returnParents, [], [],configfile >> "CfgVehicles", false, "AGM_Actions"] call AGM_Interaction_fnc_GetActions;
[player, [configfile >> "CfgVehicles" >> typeOf player, true] call BIS_fnc_returnParents, [], [],configfile >> "CfgVehicles", false, "AGM_SelfActions"] call AGM_Interaction_fnc_GetActions;
*/
#define DEFAULT_ICON "\AGM_Interaction\UI\dot_ca.paa"
private ["_target", "_parents", "_actions", "_patches", "_baseConfig", "_actionType", "_i","_index", "_missionConfig", "_stdConfig"];
_target = _this select 0;
_parents = _this select 1;
_actions = _this select 2;
_patches = _this select 3;
_baseConfig = _this select 4;
_missionConfig = _this select 5;
_actionType = _this select 6;
_subClass = _this select 7;
_stdConfig = (configFile >> "CfgVehicles" >> typeOf _target >> _actionType);
if (_subClass != "") then {
_stdConfig = _stdConfig >> _subClass;
};
_count = count _parents;
for "_i" from 0 to (_count - 1) do {
_config = _baseConfig >> _parents select _i >> _actionType;
if (_subClass != "") then {
_config = _config >> _subClass;
};
_count = count _config;
if (_count > 0) then {
for "_index" from 0 to (_count - 1) do {
private ["_action", "_displayName", "_distance","_condition","_statement","_showDisabled", "_priority", "_tooltip", "_hotkey",
"_subMenu", "_conditionShow", "_exceptions", "_icon", "_actionToCache", "_cacheActions", "_cache", "_indexCache", "_configName"];
_action = if (_missionConfig) then {_config select _index} else {_stdConfig >> configName (_config select _index)};
_cache = missionNamespace getVariable ["AGM_Interaction_MenuCache", [[], [], []]];
if (count _action > 0) then {
_configName = configName _action;
_cacheConfigs = _cache select 0;
_cacheActions = _cache select 1;
_cacheIndices = _cache select 2;
_indexCache = _cacheConfigs find _action;
if (_indexCache == -1) then {
_displayName = getText (_action >> "displayName");
_distance = getNumber (_action >> "distance");
_priority = getNumber (_action >> "priority");
_subMenu = getArray (_action >> "subMenu");
_tooltip = getText (_action >> "tooltip");
_hotkey = getText (_action >> "hotkey");
_enableInside = getNumber (_action >> "enableInside");
// Condition
_condition = getText (_action >> "condition");
if (_condition == "") then {_condition = "true"};
_condition = _condition + format [" && {%1 call AGM_Core_canInteract} && {[AGM_player, AGM_Interaction_Target] call AGM_Core_fnc_canInteractWith}", getArray (_action >> "exceptions")];
if (_enableInside != 1) then {_condition = _condition + " && {_player == _vehicle}"};
_condition = compile _condition;
// Condition to show the action
_conditionShow = getText (_action >> "conditionShow");
_conditionShow = if (_conditionShow == "") then {{true}} else {compile _conditionShow};
_showDisabled = getNumber (_action >> "showDisabled") == 1;
if (isText (_action >> "conditionShow")) then {
_showDisabled = [_object, _player] call _conditionShow;
};
// Exceptions to the general conditions that have to be true
_exceptions = getArray (_action >> "exceptions");
// statement
_statement = getText (_action >> "statement");
_statement = compile _statement;
if (profileNamespace getVariable ["AGM_Interaction_FlowMenu", false]) then {
_statement = if (getText (_action >> "statement") == "" && {count _subMenu > 1}) then {
compile format ["call AGM_Interaction_fnc_hideMenu;if(%2 == 1)then{['%1'] call AGM_Interaction_fnc_openSubMenuSelf;}else{['%1'] call AGM_Interaction_fnc_openSubMenu;};", _subMenu select 0, _subMenu select 1];
} else {
compile ("call AGM_Interaction_fnc_hideMenu;" + getText (_action >> "statement"));
};
};
// icon
_icon = getText (_action >> "Icon");
if (_icon == "") then {
_icon = DEFAULT_ICON;
};
_actionToCache = [_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey];
if (!(_configName in _patches) && {_showDisabled || {[_object, _player] call _condition}} && {_distance == 0 || {[_object, _distance] call AGM_Interaction_fnc_isInRange}}) then {
_actions pushBack _actionToCache;
_patches pushBack _configName;
};
_indexCache = _cacheActions find _actionToCache;
if (_indexCache == -1) then {
_indexCache = count _cacheActions;
_cacheActions pushBack _actionToCache;
};
_cacheConfigs pushBack _action;
_cacheIndices pushBack _indexCache;
_cache = [_cacheConfigs, _cacheActions, _cacheIndices];
["InteractionMenu", _action, {format ["%1 loaded into cache", _this]}] call AGM_Debug_fnc_log;
} else {
["InteractionMenu", _action, {format ["%1 loaded from cache", _this]}] call AGM_Debug_fnc_log;
_cachedAction = _cacheActions select (_cacheIndices select _indexCache);
_showDisabled = getNumber (_action >> "showDisabled") == 1;
if (isText (_action >> "conditionShow")) then {
_showDisabled = [_object, _player] call (_cachedAction select 7);
};
if (!(_configName in _patches) && {_showDisabled || {[_object, _player] call (_cachedAction select 2)}} && {[_object, (_cachedAction select 9)] call AGM_Interaction_fnc_isInRange || {(_cachedAction select 9) == 0}}) then {
_actions pushBack _cachedAction;
_patches pushBack _configName;
};
};
};
AGM_Interaction_MenuCache = _cache;
};
};
};
[_actions, _patches]

View File

@ -0,0 +1,66 @@
/*
Name: AGM_Interaction_fnc_MoveDown
Author: Garth de Wet (LH)
Description:
Depending on the passed value, either scrolls down through the list or up.
Parameters:
NUMBER - Amount to increase current interaction target
Returns:
Nothing
Example:
1 call AGM_Interaction_fnc_MoveDown;
-1 call AGM_Interaction_fnc_MoveDown;
*/
#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}})
if (isNil "AGM_Interaction_MainButton") exitWith{};
if (isNil "AGM_Interaction_Buttons") exitWith{};
_count = (count AGM_Interaction_Buttons)- 1;
AGM_Interaction_SelectedButton = CLAMP(AGM_Interaction_SelectedButton + _this, 0, _count);
_target = AGM_Interaction_Target;
_player = AGM_player;
_vehicle = vehicle _player;
disableSerialization;
_dlgInteractionDialog = uiNamespace getVariable "AGM_Flow_Display";
_top = AGM_Interaction_SelectedButton - 2;
_i = 0;
while {_i <= 4} do {
_index =_i + _top;
_ctrl = _dlgInteractionDialog displayCtrl (1200 + _i);
if (_index >= 0 && {_index <= _count}) then {
_action = AGM_Interaction_Buttons select _index;
_ctrl ctrlShow true;
_ctrl ctrlSetText (_action select 5);
_color = [1,1,1,1];
if !([_target, _player] call (_action select 2)) then {
_color = [0.3,0.3,0.3,0.8];
};
if (_i == 0 || _i == 4) then {
_color set [3, 0.5];
};
if (_i == 1 || _i == 3) then {
_color set [3, 0.75];
};
_ctrl ctrlSetTextColor _color;
}else{
_ctrl ctrlShow false;
};
_i = _i + 1;
};
_ctrl = _dlgInteractionDialog displayCtrl 1000;
_ctrl ctrlSetText ((AGM_Interaction_Buttons select AGM_Interaction_SelectedButton) select 0);
_ctrl = _dlgInteractionDialog displayCtrl 1100;
_current = (AGM_Interaction_Buttons select AGM_Interaction_SelectedButton);
_infoText = "";
if !([_target, _player] call (_current select 2)) then {
_infoText = "Unavailable";
};
_ctrl ctrlSetText _infoText;
_ctrl ctrlShow (_infoText != "");

View File

@ -0,0 +1,55 @@
/*
* Author: commy2
*
* Add an AGM action to an object. Note: This function is global.
*
* Argument:
* 0: Object the action should be assigned to (Object)
* 1: Name of the action shown in the menu (String)
* 2: Distance the player can be away from the object (Number)
* 3: Condition (Code or String)
* 4: Statement (Code or String)
* 5: Show the action even if the conditon is not met (Bool or Number)
* 6: Priority (Number, optional default: 0)
*
* Return value:
* ID of the action (used to remove it later).
*/
private ["_object", "_displayName", "_distance", "_condition", "_statement", "_showDisabled", "_priority", "_actionsVar", "_id", "_actionIDs", "_actions"];
_object = _this select 0;
_displayName = _this select 1;
_distance = _this select 2;
_condition = _this select 3;
_statement = _this select 4;
_showDisabled = _this select 5;
_priority = _this select 6;
if (typeName _condition == "STRING") then {
_condition = compile _condition;
};
if (typeName _statement == "STRING") then {
_statement = compile _statement;
};
if (typeName _showDisabled == "SCALAR") then {
_showDisabled = _showDisabled > 0;
};
if (isNil "_priority") then {
_priority = 0;
};
_actionsVar = _object getVariable ["AGM_Interactions", [-1, [], []]];
_id = (_actionsVar select 0) + 1;
_actionIDs = _actionsVar select 1;
_actions = _actionsVar select 2;
_actionIDs pushBack _id;
_actions pushBack [_displayName, _distance, _condition, _statement, _showDisabled, _priority];
_object setVariable ["AGM_Interactions", [_id, _actionIDs, _actions], true];
_id

View File

@ -0,0 +1,55 @@
/*
* Author: commy2
*
* Add an AGM self action to the player. Execute this on the local machine of the player.
*
* Argument:
* 0: Name of the action shown in the menu (String)
* 1: Condition (Code or String)
* 2: Statement (Code or String)
* 3: Show the action even if the conditon is not met (Bool or Number)
* 4: Priority (Number, optional default: 0)
*
* Return value:
* ID of the action (used to remove it later).
*/
private ["_displayName", "_condition", "_statement", "_showDisabled", "_priority", "_actionsVar", "_id", "_actionIDs", "_actions"];
_displayName = _this select 0;
_condition = _this select 1;
_statement = _this select 2;
_showDisabled = _this select 3;
_priority = _this select 4;
if (typeName _condition == "STRING") then {
_condition = compile _condition;
};
if (typeName _statement == "STRING") then {
_statement = compile _statement;
};
if (typeName _showDisabled == "SCALAR") then {
_showDisabled = _showDisabled > 0;
};
if (isNil "_priority") then {
_priority = 0;
};
_actionsVar = AGM_player getVariable ["AGM_InteractionsSelf", [-1, [], []]];
_id = (_actionsVar select 0) + 1;
_actionIDs = _actionsVar select 1;
_actions = _actionsVar select 2;
_actionIDs pushBack _id;
_actions pushBack [_displayName, _condition, _statement, _showDisabled, _priority];
AGM_player setVariable ["AGM_InteractionsSelf", [_id, _actionIDs, _actions], false];
_id

View File

@ -0,0 +1,3 @@
// by commy2
AGM_Interaction_CurrentTooltip pushBack (_this select 0);

View File

@ -0,0 +1,51 @@
// by commy2
private ["_object", "_actions", "_dlgInteractionDialog", "_ctrlInteractionDialog", "_index", "_ctrlInteractionDialogIcon"];
_object = AGM_Interaction_Target;
_actions = AGM_Interaction_Buttons;
disableSerialization;
_dlgInteractionDialog = uiNamespace getVariable "AGM_Interaction_Dialog";
/*
for "_a" from 0 to (_count - 1) do {
_action = AGM_Interaction_Buttons select _a;
_ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _a);
_ctrlInteractionDialog ctrlShow true;
_ctrlInteractionDialog ctrlSetText (_action select 0);
_ctrlInteractionDialog ctrlEnable (call (_action select 2));
};
*/
_ctrlInteractionDialog = _dlgInteractionDialog displayCtrl 3;
AGM_Interaction_MainButton = "(findDisplay 1713999) closeDisplay 1;";
if (_object isKindOf "Man") then {
_ctrlInteractionDialog ctrlSetText (if (alive _object) then {name _object} else {_object getVariable ["AGM_Name", "Unknown"]});
} else {
_ctrlInteractionDialog ctrlSetText (getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName"));
};
for "_index" from 0 to 9 do {
_ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _index);
_ctrlInteractionDialog ctrlShow true;
_ctrlInteractionDialogIcon = _dlgInteractionDialog displayCtrl (20 + _index);
if (_index < _count) then {
_action = AGM_Interaction_Buttons select _index;
_ctrlInteractionDialog ctrlSetText (_action select 0);
_ctrlInteractionDialog ctrlEnable (call (_action select 2));
_ctrlInteractionDialogIcon ctrlSetText (_action select 5);
} else {
_ctrlInteractionDialog ctrlSetText "";
_ctrlInteractionDialog ctrlEnable false;
_ctrlInteractionDialogIcon ctrlSetText "";
};
};

View File

@ -0,0 +1,12 @@
// by commy2
private ["_unit", "_isCivilian"];
_unit = _this select 0;
_isCivilian = _this select 1;
if (isNil "_isCivilian") then {_isCivilian = true};
alive _unit
&& [side _unit != side AGM_player, side group _unit == civilian] select _isCivilian
//&& {count (weapons _unit) == 0}

View File

@ -0,0 +1,16 @@
// by commy2
private ["_mode", "_info", "_house", "_door", "_id"];
_mode = _this select 0; //lock: true, unlock: false
_info = [2] call AGM_Interaction_fnc_getDoor;
_house = _info select 0;
_door = _info select 1;
_id = _info select 2;
!isNull _house
&& {_door == "door"}
&& {!_mode || {_house animationPhase format ["door_%1_rot", _id] <= 0}}
&& {(_house getVariable [format ["BIS_Disabled_Door_%1", _id], 0] != 1) isEqualTo _mode}

View File

@ -0,0 +1,11 @@
// by commy2
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
_target isKindOf "CAManBase" &&
{alive _target} &&
{_unit distance _target < 4} &&
{!(_target getVariable ["AGM_isUnconscious", false])}

View File

@ -0,0 +1,120 @@
// commy2
private ["_object", "_config", "_type", "_actions", "_configs"];
_object = _this select 0;
_config = _this select 1; // configFile, missionConfigFile
_type = _this select 2; // "AGM_CfgInteractions", "AGM_CfgInteractionsSelf"
_actions = _this select 3; // [];
_configs = "_object isKindOf configName _x" configClasses (_config >> _type);
// cache
private ["_cache", "_cacheConfigs", "_cacheActions", "_cacheIndices"];
_cache = uiNamespace getVariable ["AGM_Interaction_MenuCache", [[], [], []]];
_cacheConfigs = _cache select 0;
_cacheActions = _cache select 1;
_cacheIndices = _cache select 2;
// get interactions
{
private "_configActions";
_configActions = "true" configClasses (_config >> _type >> configName _x);
{
private ["_action", "_configName", "_indexCache"];
_action = _x;
_configName = configName _action;
_indexCache = _cacheConfigs find _action;
if (_indexCache == -1) then {
private ["_displayName", "_distance", "_priority", "_subMenu", "_tooltip", "_hotkey", "_enableInside", "_condition", "_conditionShow", "_showDisabled", "_exceptions", "_statement", "_icon"];
_displayName = getText (_action >> "displayName");
_distance = getNumber (_action >> "distance");
_priority = getNumber (_action >> "priority");
_subMenu = getArray (_action >> "subMenu");
_tooltip = getText (_action >> "tooltip");
_hotkey = getText (_action >> "hotkey");
_enableInside = getNumber (_action >> "enableInside");
// Condition
_condition = getText (_action >> "condition");
if (_condition == "") then {_condition = "true"};
_condition = _condition + format [" && {%1 call AGM_Core_canInteract} && {[AGM_player, AGM_Interaction_Target] call AGM_Core_fnc_canInteractWith}", getArray (_action >> "exceptions")];
if (_enableInside != 1) then {_condition = _condition + " && {_player == _vehicle}"};
_condition = compile _condition;
// Condition to show the action
_conditionShow = getText (_action >> "conditionShow");
_conditionShow = if (_conditionShow == "") then {{true}} else {compile _conditionShow};
_showDisabled = getNumber (_action >> "showDisabled") == 1;
if (isText (_action >> "conditionShow")) then {
_showDisabled = [_object, _player] call _conditionShow;
};
// Exceptions to the general conditions that have to be true
_exceptions = getArray (_action >> "exceptions");
// statement
_statement = getText (_action >> "statement");
_statement = compile _statement;
if (profileNamespace getVariable ["AGM_Interaction_FlowMenu", false]) then {
_statement = if (getText (_action >> "statement") == "" && {count _subMenu > 1}) then {
compile format ["call AGM_Interaction_fnc_hideMenu;if(%2 == 1)then{['%1'] call AGM_Interaction_fnc_openSubMenuSelf;}else{['%1'] call AGM_Interaction_fnc_openSubMenu;};", _subMenu select 0, _subMenu select 1];
} else {
compile ("call AGM_Interaction_fnc_hideMenu;" + getText (_action >> "statement"));
};
};
// icon
_icon = getText (_action >> "Icon");
if (_icon == "") then {
_icon = DEFAULT_ICON;
};
private "_actionToCache";
_actionToCache = [_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey];
if ((_showDisabled || {[_object, _player] call _condition}) && {_distance == 0 || {[_object, _distance] call AGM_Interaction_fnc_isInRange}}) then {
_actions pushBack _actionToCache;
};
_indexCache = _cacheActions find _actionToCache;
if (_indexCache == -1) then {
_indexCache = count _cacheActions;
_cacheActions pushBack _actionToCache;
};
_cacheConfigs pushBack _action;
_cacheIndices pushBack _indexCache;
_cache = [_cacheConfigs, _cacheActions, _cacheIndices];
["InteractionMenu", _action, {format ["%1 loaded into cache", _this]}] call AGM_Debug_fnc_log;
} else {
["InteractionMenu", _action, {format ["%1 loaded from cache", _this]}] call AGM_Debug_fnc_log;
private ["_cachedAction", "_showDisabled"];
_cachedAction = _cacheActions select (_cacheIndices select _indexCache);
_showDisabled = getNumber (_action >> "showDisabled") == 1;
if (isText (_action >> "conditionShow")) then {
_showDisabled = [_object, _player] call (_cachedAction select 7);
};
if ((_showDisabled || {[_object, _player] call (_cachedAction select 2)}) && {[_object, (_cachedAction select 9)] call AGM_Interaction_fnc_isInRange || {(_cachedAction select 9) == 0}}) then {
_actions pushBack _cachedAction;
};
};
} forEach _configActions; //Actions of this CfgVehicles class
} forEach _configs; //CfgVehicles class
uiNamespace setVariable ["AGM_Interaction_MenuCache", _cache];
_actions

View File

@ -0,0 +1,3 @@
// by commy2
_this call AGM_Core_fnc_getCaptivityStatus;

View File

@ -0,0 +1,31 @@
// by commy2
private ["_distance", "_position0", "_position1", "_intersections", "_count", "_house", "_door", "_index", "_id"];
_distance = _this select 0;
_position0 = positionCameraToWorld [0, 0, 0];
_position1 = positionCameraToWorld [0, 0, _distance];
_intersections = lineIntersectsWith [ATLToASL _position0, ATLToASL _position1, objNull, objNull, true];
_count = count _intersections;
if (_count == 0) exitWith {[objNull, ""]};
_house = _intersections select (_count - 1);
// shithouse is bugged
if (typeOf _house == "") exitWith {[objNull, ""]};
_intersections = [_house, "GEOM"] intersect [_position0, _position1];
_door = _intersections select 0 select 0;
if (isNil "_door") exitWith {[_house, ""]};
[_house, _door]
/*
_house = cursorTarget;
_actions = "true" configClasses (configFile >> "CfgVehicles" >> typeOf _house >> "UserActions");
_actions = [_actions, {getText (_x >> "statement")}] call AGM_Core_fnc_map;
_actions
*/

View File

@ -0,0 +1,106 @@
// by commy2
private ["_house", "_door", "_animations", "_lockedVariable"];
_house = _this select 0;
_door = _this select 1;
_index = [
"door_1",
"door_2",
"door_3",
"door_4",
"door_5",
"door_6",
"door_7",
"door_8",
"door_9",
"door_10",
"door_11",
"door_12",
"door_13",
"Door_14",
"door_15",
"door_16",
"door_17",
"door_18",
"door_19",
"door_20",
"door_21",
"door_22",
"hatch_1",
"hatch_2",
"hatch_3",
"hatch_4",
"hatch_5",
"hatch_6"
] find toLower _door;
if (_index == -1) exitWith {[[],""]};
_animations = [
["Door_1_rot", "Door_Handle_1_rot_1", "Door_Handle_1_rot_2"],
["Door_2_rot", "Door_Handle_2_rot_1", "Door_Handle_2_rot_2"],
["Door_3_rot", "Door_Handle_3_rot_1", "Door_Handle_3_rot_2"],
["Door_4_rot", "Door_Handle_4_rot_1", "Door_Handle_4_rot_2"],
["Door_5_rot", "Door_Handle_5_rot_1", "Door_Handle_5_rot_2"],
["Door_6_rot", "Door_Handle_6_rot_1", "Door_Handle_6_rot_2"],
["Door_7_rot", "Door_Handle_7_rot_1", "Door_Handle_7_rot_2"],
["Door_8_rot", "Door_Handle_8_rot_1", "Door_Handle_8_rot_2"],
["Door_9_rot", "Door_Handle_9_rot_1", "Door_Handle_9_rot_2"],
["Door_10_rot", "Door_Handle_10_rot_1", "Door_Handle_10_rot_2"],
["Door_11_rot", "Door_Handle_11_rot_1", "Door_Handle_11_rot_2"],
["Door_12_rot", "Door_Handle_12_rot_1", "Door_Handle_12_rot_2"],
["Door_13_rot", "Door_Handle_13_rot_1", "Door_Handle_13_rot_2"],
["Door_14_rot", "Door_Handle_14_rot_1", "Door_Handle_14_rot_2"],
["Door_15_rot", "Door_Handle_15_rot_1", "Door_Handle_15_rot_2"],
["Door_16_rot", "Door_Handle_16_rot_1", "Door_Handle_16_rot_2"],
["Door_17_rot", "Door_Handle_17_rot_1", "Door_Handle_17_rot_2"],
["Door_18_rot", "Door_Handle_18_rot_1", "Door_Handle_18_rot_2"],
["Door_19_rot", "Door_Handle_19_rot_1", "Door_Handle_19_rot_2"],
["Door_20_rot", "Door_Handle_20_rot_1", "Door_Handle_20_rot_2"],
["Door_21_rot", "Door_Handle_21_rot_1", "Door_Handle_21_rot_2"],
["Door_22_rot", "Door_Handle_22_rot_1", "Door_Handle_22_rot_2"],
["Hatch_1_rot"],
["Hatch_2_rot"],
["Hatch_3_rot"],
["Hatch_4_rot"],
["Hatch_5_rot"],
["Hatch_6_rot"]
] select _index;
_lockedVariable = [
["BIS_Disabled_Door_1", "Door_Handle_1_rot_1", "Door_Locked_1_rot"],
["BIS_Disabled_Door_2", "Door_Handle_2_rot_1", "Door_Locked_2_rot"],
["BIS_Disabled_Door_3", "Door_Handle_3_rot_1", "Door_Locked_3_rot"],
["BIS_Disabled_Door_4", "Door_Handle_4_rot_1", "Door_Locked_4_rot"],
["BIS_Disabled_Door_5", "Door_Handle_5_rot_1", "Door_Locked_5_rot"],
["BIS_Disabled_Door_6", "Door_Handle_6_rot_1", "Door_Locked_6_rot"],
["BIS_Disabled_Door_7", "Door_Handle_7_rot_1", "Door_Locked_7_rot"],
["BIS_Disabled_Door_8", "Door_Handle_8_rot_1", "Door_Locked_8_rot"],
["BIS_Disabled_Door_9", "Door_Handle_9_rot_1", "Door_Locked_9_rot"],
["BIS_Disabled_Door_10", "Door_Handle_10_rot_1", "Door_Locked_10_rot"],
["BIS_Disabled_Door_11", "Door_Handle_11_rot_1", "Door_Locked_11_rot"],
["BIS_Disabled_Door_12", "Door_Handle_12_rot_1", "Door_Locked_12_rot"],
["BIS_Disabled_Door_13", "Door_Handle_13_rot_1", "Door_Locked_13_rot"],
["BIS_Disabled_Door_14", "Door_Handle_14_rot_1", "Door_Locked_14_rot"],
["BIS_Disabled_Door_15", "Door_Handle_15_rot_1", "Door_Locked_15_rot"],
["BIS_Disabled_Door_16", "Door_Handle_16_rot_1", "Door_Locked_16_rot"],
["BIS_Disabled_Door_17", "Door_Handle_17_rot_1", "Door_Locked_17_rot"],
["BIS_Disabled_Door_18", "Door_Handle_18_rot_1", "Door_Locked_18_rot"],
["BIS_Disabled_Door_19", "Door_Handle_19_rot_1", "Door_Locked_19_rot"],
["BIS_Disabled_Door_20", "Door_Handle_20_rot_1", "Door_Locked_20_rot"],
["BIS_Disabled_Door_21", "Door_Handle_21_rot_1", "Door_Locked_21_rot"],
["BIS_Disabled_Door_22", "Door_Handle_22_rot_1", "Door_Locked_22_rot"],
["", ""],
["", ""],
["", ""],
["", ""],
["", ""],
["", ""]
] select _index;
[_animations, _lockedVariable]

View File

@ -0,0 +1,33 @@
/*
* Author: KoffeinFlummi
*
* Forces a civilian to the ground. (chance of failure).
*
* Arguments:
* 0: Unit to be sent away (Object)
*
* Return value:
* none
*/
#define RADIUS 10
private ["_unit", "_chance", "_x"];
_unit = _this select 0;
AGM_player playActionNow "GestureGo"; // put something else here.
if (count (weapons AGM_player) > 0) then {
_chance = 0.8;
} else {
_chance = 0.5;
};
{
if (count (weapons _unit) == 0 and random 1 < _chance) then {
[-2, {
_this setUnitPos "DOWN";
}, _x] call CBA_fnc_globalExecute;
};
} foreach (_unit nearEntities ["Civilian", RADIUS]);

View File

@ -0,0 +1,23 @@
// by commy2
#define MIN_DISTANCE 0.0065
private ["_position", "_distance", "_angle"];
_position = uiNamespace getVariable ['AGM_Interaction_CursorPosition', [0.5, 0.5, 0]];
_position = [((_position select 1) - 0.5) / safezoneH, ((_position select 2) - 0.5) / safezoneW, 0];
_distance = [0, 0, 0] vectorDistanceSqr _position;
// is in center
if (_distance < MIN_DISTANCE) exitWith {-1};
_angle = (_position select 0) atan2 (_position select 1);
// rotate circle
_angle = 180 - _angle + 360 / 10 / 2;
if (_angle < 0) then {_angle = _angle + 360};
_angle = floor (_angle / 360 * 10);
if (_angle == 10) then {0} else {_angle}

View File

@ -0,0 +1,22 @@
/*
Name: AGM_Interaction_fnc_hideMenu
Author: Garth de Wet (LH)
Description:
Closes the Interaction menu
Parameters:
Nothing
Returns:
Nothing
Example:
call AGM_Interaction_fnc_hideMenu;
*/
closeDialog 0;
(findDisplay 1713999) closeDisplay 1;
(uiNameSpace getVariable "AGM_Flow_Display") closeDisplay 0;
AGM_Interaction_MainButton = nil;
call AGM_Interaction_fnc_hideMouseHint;

View File

@ -0,0 +1,22 @@
/*
Name: AGM_Interaction_fnc_hideMouseHint
Author(s):
Garth de Wet (LH)
Description:
Hides the interaction helper text with the mouse buttons at the bottom middle of the screen
Parameters:
Nothing
Returns:
Nothing
Example:
call AGM_Interaction_fnc_hideMouseHint;
*/
if (isNull (uiNamespace getVariable ["AGM_Helper_Display", objNull])) exitWith{};
("AGM_InteractionHelper" call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
showHUD true;

View File

@ -0,0 +1,167 @@
/*
Name: AGM_Interaction_fnc_initialiseInteraction
Author:
commy2
Garth de Wet (LH)
Description:
Initialises the interaction click handlers.
Parameters:
0 : CODE - code to call when right clicking/center button
1 : BOOLEAN - Submenu
2 : BOOLEAN - Flow Menu
3 : BOOLEAN - Self interaction
4 : OBJECT - Target
Returns:
Nothing
Example:
[{"Default" call AGM_Interaction_fnc_openMenu;}, true, (profileNamespace getVariable ["AGM_Interaction_FlowMenu", false]), AGM_Interaction_Target] call AGM_Interaction_fnc_initialiseInteraction;
*/
private ["_subMenu", "_selfMenu", "_target"];
AGM_Interaction_MainButton = _this select 0;
_subMenu = _this select 1;
_selfMenu = _this select 3;
_target = _this select 4;
_player = AGM_player;
_vehicle = vehicle _player;
//_object = [AGM_Interaction_Target, _player] select (AGM_Interaction_MenuType % 2 == 1);
if !([_target, 5] call AGM_Interaction_fnc_isInRange) exitWith {};
AGM_Interaction_Shortcuts = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1];
// Flow menu
if (_this select 2) then {
("AGM_FlowMenu" call BIS_fnc_rscLayer) cutRsc ["AGM_FlowMenu", "PLAIN",0.5, false];
AGM_Interaction_SelectedButton = 0;
(findDisplay 1713999) closeDisplay 1;
if (_player getVariable ["AGM_AcceptAction", -1] == -1) then {
[{if(isNil {AGM_Interaction_MainButton} || {!(profileNamespace getVariable ['AGM_Interaction_FlowMenu', false])})exitWith{false};(-(_this select 0) / 1.2) call AGM_Interaction_fnc_MoveDown;true}] call AGM_Core_fnc_addScrollWheelEventHandler;
_player setVariable ["AGM_AcceptAction", [_player, "DefaultAction", {(!isNil {AGM_Interaction_MainButton}) && {(profileNamespace getVariable ['AGM_Interaction_FlowMenu', false])}}, {_action = AGM_Interaction_Buttons select AGM_Interaction_SelectedButton;_target = AGM_Interaction_Target;_player = AGM_player;_vehicle = vehicle _player;if ([_target, _player] call (_action select 2)) then {call AGM_Interaction_fnc_hideMenu;if(count _action == 12) then{(_action select 11) call (_action select 1);}else{[_target, _player] call (_action select 1);};};}] call AGM_core_fnc_addActionEventHandler];
_player setVariable ["AGM_AcceptAction", [_player, "menuBack", {(!isNil {AGM_Interaction_MainButton}) && {(profileNamespace getVariable ['AGM_Interaction_FlowMenu', false])}}, {call AGM_Interaction_MainButton;}] call AGM_core_fnc_addActionEventHandler];
};
0 call AGM_Interaction_fnc_moveDown;
[localize "STR_AGM_Interaction_MakeSelection", if (_subMenu)then{localize "STR_AGM_Interaction_Back"}else{""}, localize "STR_AGM_Interaction_ScrollHint"] call AGM_Interaction_fnc_showMouseHint;
((uiNamespace getVariable "AGM_Flow_Display") displayCtrl (1210)) ctrlShow _subMenu;
}else{ // Rose
if (!isNull(uiNamespace getVariable "AGM_Flow_Display")) then {
(uiNameSpace getVariable "AGM_Flow_Display") closeDisplay 0;
call AGM_Interaction_fnc_hideMouseHint;
};
if (!_subMenu || {isNull (findDisplay 1713999)}) then {
(findDisplay 1713999) closeDisplay 1;
(findDisplay 46) createDisplay "AGM_Interaction_Dialog";
// Add eventhandlers
(findDisplay 1713999) displayAddEventHandler ["KeyDown", "_this call AGM_Core_onKeyDown"];
(findDisplay 1713999) displayAddEventHandler ["KeyUp", "_this call AGM_Core_onKeyUp"];
(findDisplay 1713999) displayAddEventHandler ["KeyDown", "_this call AGM_Interaction_fnc_menuKeyInput"];
};
disableSerialization;
_dlgInteractionDialog = uiNamespace getVariable "AGM_Interaction_Dialog";
_ctrlInteractionDialog = _dlgInteractionDialog displayCtrl 3;
if (profileNamespace getVariable ["AGM_Interaction_AutoCenterCursor", true]) then {setMousePosition [0.5, 0.5]};
if !(_subMenu) then {
_ctrlInteractionDialog ctrlSetText ([_target] call AGM_Core_fnc_getName);
} else {
_ctrlInteractionDialog ctrlSetText localize "STR_AGM_Interaction_Back";
};
_buttons = AGM_Interaction_Buttons;
_count = count _buttons;
for "_i" from 0 to 9 do {
_ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _i);
_ctrlInteractionDialog ctrlShow true;
_ctrlInteractionDialogIcon = _dlgInteractionDialog displayCtrl (20 + _i);
_ctrlInteractionDialogShortcut = _dlgInteractionDialog displayCtrl (30 + _i);
//_ctrlInteractionDialogBackground = _dlgInteractionDialog displayCtrl (40 + _i);
if (_i < _count) then {
_action = _buttons select _i;
_ctrlInteractionDialog ctrlSetText (_action select 0);
_ctrlInteractionDialog ctrlEnable ([_target, _player] call (_action select 2));
_ctrlInteractionDialog ctrlSetTooltip (_action select 6);
_ctrlInteractionDialogIcon ctrlSetText (_action select 5);
_ctrlInteractionDialogShortcut ctrlSetText (_action select 10);
//_ctrlInteractionDialogBackground ctrlShow true;
AGM_Interaction_Shortcuts set [_i, [_action select 10] call AGM_Core_fnc_letterToCode];
} else {
_ctrlInteractionDialog ctrlSetText "";
_ctrlInteractionDialog ctrlEnable false;
_ctrlInteractionDialog ctrlSetTooltip "";
_ctrlInteractionDialogIcon ctrlSetText "";
_ctrlInteractionDialogShortcut ctrlSetText "";
//_ctrlInteractionDialogBackground ctrlShow false;
};
};
// Update Buttons
terminate (missionNamespace getVariable ["AGM_Interaction_updateMenuHandle", scriptNull]);
AGM_Interaction_updateMenuHandle = 0 spawn {
disableSerialization;
_dlgMenu = uiNamespace getVariable ["AGM_Interaction_Dialog", displayNull];
_ctrlTooltip = _dlgMenu displayCtrl 40;
_player = AGM_player;
_vehicle = vehicle _player;
_target = [AGM_Interaction_Target, _player] select (AGM_Interaction_MenuType % 2 == 1);
waitUntil {
if !([_target, 5] call AGM_Interaction_fnc_isInRange) exitWith {
(findDisplay 1713999) closeDisplay 1
};
AGM_Interaction_Tooltips = [[], [], [], [], [], [], [], [], [], []];
{
_ctrlText = _dlgMenu displayCtrl (10 + _forEachIndex);
_ctrlIcon = _dlgMenu displayCtrl (20 + _forEachIndex);
_condition = _x select 2;
_conditionShow = _x select 7;
_distance = _x select 9;
AGM_Interaction_CurrentTooltip = [];
_enable = (_distance == 0 || {[_target, _distance] call AGM_Interaction_fnc_isInRange}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow};
if (isNil "_enable") then {_enable = false};
AGM_Interaction_Tooltips set [_forEachIndex, AGM_Interaction_CurrentTooltip];
// apply conditional tooltips
/*if (_forEachIndex == call AGM_Interaction_fnc_getSelectedButton) then {
_tooltip = _x select 6;
_showTooltip = _tooltip != "";
_tooltip = text _tooltip;
{
_showTooltip = true;
_tooltip = composeText [_tooltip, lineBreak, _x];
} forEach (AGM_Interaction_Tooltips select _forEachIndex);
_ctrlTooltip ctrlSetStructuredText _tooltip;
_ctrlTooltip ctrlShow _showTooltip;
};*/
_ctrlText ctrlEnable _enable;
_ctrlIcon ctrlEnable _enable;
} forEach AGM_Interaction_Buttons;
sleep 0.5;
isNull (findDisplay 1713999)
};
};
};

View File

@ -0,0 +1,49 @@
/*
* Author: commy2
*
* Check if the vehicle is in range of the player.
*
* Argument:
* 0: Vehicke (Object)
* 1: Distance in meters (Number)
*
* Return value:
* (Bool)
*/
private ["_vehicle", "_distance", "_player"];
_vehicle = _this select 0;
_distance = _this select 1;
_player = AGM_player;
if (_vehicle isKindOf "Man") exitWith {_player distance _vehicle < _distance};
private ["_position0", "_position1"];//, "_direction"];
_position0 = getPosASL _player;
_position1 = getPosASL _vehicle;
/*
_direction = _position1 vectorDiff _position0;
_direction = _direction vectorMultiply (_distance / (vectorMagnitude _direction));
_position0 = eyePos _player;
_position1 = _position0 vectorAdd _direction;
_vehicle in lineIntersectsWith [_position0, _position1] || {_player distance _vehicle < _distance}
*/
_position0 = ATLToASL positionCameraToWorld [0, 0, 0];
_position0 set [2, (_position0 select 2) - (getTerrainHeightASL _position0 min 0)];
_position1 = ATLToASL positionCameraToWorld [0, 0, _distance];
_position1 set [2, (_position1 select 2) - (getTerrainHeightASL _position1 min 0)];
if (_vehicle in lineIntersectsWith [_position0, _position1] || {_player distance _vehicle < _distance}) then {
true
} else {
["Not in Range"] call AGM_Interaction_fnc_addToTooltip;
false
}

View File

@ -0,0 +1,20 @@
// by commy2
private ["_unit", "_team", "_message"];
_unit = _this select 0;
_team = _this select 1;
_unit setVariable ["AGM_assignedFireTeam", _team, true];
[_unit, format ["{_this assignTeam '%1'}", _team]] call AGM_Core_fnc_execRemoteFnc;
if (_unit == AGM_player) then {
_message = if (_team == "MAIN") then {
localize "STR_AGM_Interaction_LeftTeam";
} else {
_team = localize format ["STR_AGM_Interaction_Team%1", _team];
format [localize "STR_AGM_Interaction_JoinedTeam", _team];
};
[_message] call AGM_Core_fnc_displayTextStructured;
};

View File

@ -0,0 +1,27 @@
// by commy2
private ["_mode", "_info", "_house", "_door", "_id", "_phase"];
_mode = _this select 0; //lock: true, unlock: false
_info = [2] call AGM_Interaction_fnc_getDoor;
_house = _info select 0;
_door = _info select 1;
_id = _info select 2;
if (isNull _house) exitWith {};
/*
_phase = [1, 0] select _mode;
_house animate [format ["%1_%2_rot", _door, _id], _phase];
_house animate [format ["%1_Handle_%2_rot_1", _door, _id], _phase];
_house animate [format ["%1_Handle_%2_rot_2", _door, _id], _phase];
*/
_house setVariable [format ["BIS_Disabled_%1_%2", _door, _id], [0, 1] select _mode];
playSound "AGM_Sound_Click";
[localize (["STR_AGM_Interaction_UnlockedDoor", "STR_AGM_Interaction_LockedDoor"] select _mode)] call AGM_Core_fnc_displayTextStructured;

View File

@ -0,0 +1,16 @@
// by commy2
private "_key";
_key = _this select 1;
if (_key in [28, 57, 156, 200, 208, 203, 205, 201, 209]) exitWith {true};
_index = AGM_Interaction_Shortcuts find _key;
if (_index != -1 && {ctrlEnabled (findDisplay 1713999 displayCtrl (_index + 10))}) exitWith {
_index call AGM_Interaction_fnc_onClick;
true
};
false

View File

@ -0,0 +1,20 @@
/*
* Author: bux578
*
* Initializes the Interaction module.
*
* Arguments:
* Whatever the module provides. (I dunno.)
*
* Return Value:
* None
*/
_logic = _this select 0;
_activated = _this select 2;
if !(_activated) exitWith {};
[_logic, "AGM_Interaction_EnableTeamManagement", "EnableTeamManagement"] call AGM_Core_fnc_readBooleanParameterFromModule;
diag_log text "[AGM]: Interaction Module Initialized.";

View File

@ -0,0 +1,14 @@
// by commy2
if (dialog) exitWith {
closeDialog 0;
};
if (isNull (findDisplay 1713999)) then {
if (AGM_player == vehicle AGM_player) then {"" call AGM_Interaction_fnc_openMenu} else {[AGM_player, vehicle AGM_player] call AGM_Interaction_fnc_openMenuSelectUI};
setMousePosition [0.5, 0.5];
} else {
(findDisplay 1713999) closeDisplay 1;
};
[_player, "interactionMenuOpened", [_player, AGM_Interaction_Target, 0]] call AGM_Core_fnc_callCustomEventHandlers;

View File

@ -0,0 +1,14 @@
// by commy2
if (dialog) exitWith {
closeDialog 0;
};
if (isNull (findDisplay 1713999)) then {
"" call AGM_Interaction_fnc_openMenuSelf;
setMousePosition [0.5, 0.5];
} else {
(findDisplay 1713999) closeDisplay 1;
};
[_player, "interactionMenuOpened", [_player, AGM_Interaction_Target, 1]] call AGM_Core_fnc_callCustomEventHandlers;

View File

@ -0,0 +1,44 @@
// by commy2
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_statement", "_condition", "_conditionShow", "_exceptions", "_distance"];
_player = AGM_player;
_vehicle = vehicle _player;
_target = [AGM_Interaction_Target, _player] select (AGM_Interaction_MenuType % 2 == 1);
_count = count AGM_Interaction_Buttons;
_index = call AGM_Interaction_fnc_getSelectedButton;
_action = if (_index != -1 && {_index < _count}) then {
AGM_Interaction_Buttons select _index
} else {
["", {}, {false}, 0, [], "", "", {false}, [], 0]
};
(findDisplay 1713999) closeDisplay 1;
closeDialog 0;
_statement = _action select 1;
_condition = _action select 2;
_conditionShow = _action select 7;
_exceptions = _action select 8;//
_distance = _action select 9;
if ((_distance == 0 || {[AGM_Interaction_Target, _distance] call AGM_Interaction_fnc_isInRange}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then {
[_target, _player] call _statement;
};

View File

@ -0,0 +1,44 @@
// by commy2
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_subMenu", "_statement", "_condition", "_conditionShow", "_exceptions", "_distance"];
_player = AGM_player;
_vehicle = vehicle _player;
_target = [AGM_Interaction_Target, _player] select (AGM_Interaction_MenuType % 2 == 1);
_count = count AGM_Interaction_Buttons;
_index = _this; //call AGM_Interaction_fnc_getSelectedButton;
_action = if (_index != -1 && {_index < _count}) then {
AGM_Interaction_Buttons select _index
} else {
["", {}, {false}, 0, [], "", "", {false}, [], 0]
};
_subMenu = _action select 4;
// back
if (_index == -1) exitWith {
call AGM_Interaction_MainButton;
};
if (count _subMenu < 2) then {
(findDisplay 1713999) closeDisplay 1;
closeDialog 0;
_statement = _action select 1;
_condition = _action select 2;
_conditionShow = _action select 7;
_exceptions = _action select 8;//
_distance = _action select 9;
if ((_distance == 0 || {[AGM_Interaction_Target, _distance] call AGM_Interaction_fnc_isInRange}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then {
[_target, _player] call _statement;
};
} else {
if (_subMenu select 1 < 1) then {
[_subMenu select 0] call AGM_Interaction_fnc_openSubMenu;
} else {
[_subMenu select 0] call AGM_Interaction_fnc_openSubMenuSelf;
};
};

View File

@ -0,0 +1,3 @@
// by CorruptedHeart, commy2
call compile (lbData [8866, lbCurSel 8866]) call AGM_Interaction_SelectAccept;

View File

@ -0,0 +1,56 @@
// by commy2
private ["_info", "_house", "_door", "_animations", "_lockedVariable"];
_info = [2] call AGM_Interaction_fnc_getDoor;
_house = _info select 0;
_door = _info select 1;
if (isNull _house) exitWith {};
_animations = [_house, _door] call AGM_Interaction_fnc_getDoorAnimations;
_lockedVariable = _animations select 1;
_animations = _animations select 0;
if (count _animations == 0) exitWith {};
if (_house animationPhase (_animations select 0) <= 0 && {_house getVariable [_lockedVariable select 0, 0] == 1}) exitWith {
_lockedVariable set [0, _house];
_lockedVariable spawn compile preprocessFileLineNumbers "\A3\Structures_F\scripts\LockedDoor_open.sqf";
};
AGM_Interaction_isOpeningDoor = true;
playSound "AGM_Sound_Click";
[_house, _animations] spawn {
_house = _this select 0;
_animations = _this select 1;
_phase = _house animationPhase (_animations select 0);
_position = getPosASL AGM_player;
_time = time + 0.2;
_usedMouseWheel = false;
waitUntil {
if (inputAction "PrevAction" > 0 || {inputAction "NextAction" > 0}) then {
_usedMouseWheel = true;
};
_phase = _phase + (inputAction "PrevAction" / 12) min 1;
_phase = _phase - (inputAction "NextAction" / 12) max 0;
{_house animate [_x, _phase]} forEach _animations;
!AGM_Interaction_isOpeningDoor || {getPosASL AGM_player distance _position > 1}
};
if (!_usedMouseWheel && {time < _time}) then {
_phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5);
{_house animate [_x, _phase]} forEach _animations;
};
AGM_Interaction_isOpeningDoor = false;
};

View File

@ -0,0 +1,6 @@
// by commy2
private "_target";
_target = [cursorTarget, AGM_Interaction_Target] select (_this == "Default");
[0, _target, ""] call AGM_Interaction_fnc_showMenu;

View File

@ -0,0 +1,43 @@
// by commy2
private ["_unit", "_vehicle", "_cargo"];
_unit = _this select 0;
_vehicle = _this select 1;
// allow interaction with all cargo slots and all ffv slots
_cargo = [_vehicle, ["cargo", "ffv"], true] call AGM_Core_fnc_getVehicleCrew;
// you can only interact if you are in cargo or ffv yourself. exit otherwise
if !(_unit in _cargo) exitWith {};
AGM_InteractionMenu_Crew = _cargo;
// prepare: add header and "OK" button to select menu
private "_actions";
_actions = [localize "STR_AGM_Interaction_InteractionMenu", localize "STR_AGM_Interaction_Interact"] call AGM_Interaction_fnc_prepareSelectMenu;
// prepare: add all cargo units as options to select menu
{
if (_x != _unit) then {
_actions = [
_actions,
[_x] call AGM_Core_fnc_getName,
"\AGM_Interaction\UI\dot_ca.paa",
_forEachIndex
] call AGM_Interaction_fnc_AddSelectableItem;
};
} forEach _cargo;
// open select menu
[
_actions,
{
call AGM_Interaction_fnc_hideMenu;
[0, AGM_InteractionMenu_Crew select _this, ""] spawn AGM_Interaction_fnc_showMenu;
AGM_InteractionMenu_Crew = nil;
},
{
call AGM_Interaction_fnc_hideMenu;
}
] call AGM_Interaction_fnc_openSelectMenu;

View File

@ -0,0 +1,3 @@
// by commy2
[1, AGM_player, ""] call AGM_Interaction_fnc_showMenu;

View File

@ -0,0 +1,43 @@
/*
Name: AGM_Interaction_fnc_openSelectMenu
Author: Garth de Wet (LH)
Description:
Opens the select menu UI and sets up the UI
Parameters:
0: ARRAY - items
ARRAY
0 = Text
1 = statement to execute
2 = condition before execute
3 = showDisabled
4 = priority
5 = icon
6 = extra variables. Passed to the code.
1: Code - select action
2: Code - Cancel Action
Returns:
Nothing
Example:
*/
if (!(profileNamespace getVariable ["AGM_Interaction_FlowMenu", false])) then {
AGM_Interaction_SelectAccept = _this select 1;
AGM_Interaction_SelectCancel = _this select 2;
buttonSetAction [8855, "call AGM_Interaction_SelectCancel;"]; // cancel
buttonSetAction [8860, "(call compile (lbData [8866, lbCurSel 8866])) call AGM_Interaction_SelectAccept;"]; // accept
lbSetCurSel [8866, 0];
}else{
_customActions = _this select 0;
_count = count _customActions;
if (_count == 0) exitWith {};
_customActions call AGM_Interaction_fnc_sortOptionsByPriority;
for "_i" from 0 to _count -1 do {
_action = _customActions select _i;
_action set [1, (_this select 1)];
};
AGM_Interaction_Buttons = _customActions;
[(_this select 2), true, true, false, AGM_player] call AGM_Interaction_fnc_initialiseInteraction;
};

View File

@ -0,0 +1,3 @@
// by commy2
[2, AGM_Interaction_Target, _this select 0] call AGM_Interaction_fnc_showMenu;

View File

@ -0,0 +1,3 @@
// by commy2
[3, AGM_player, _this select 0] call AGM_Interaction_fnc_showMenu;

View File

@ -0,0 +1,35 @@
/*
Name: AGM_Interaction_fnc_prepareSelectMenu
Author: Garth de Wet (LH)
Description:
Prepares the select menu for use.
Parameters:
0: TEXT - Header text
1: TEXT - Approve button text
Returns:
ARRAY/NUMBER - container object for use with AddSelectableItem.
Example:
["Select Explosive", "Place"] call AGM_Interaction_fnc_prepareSelectMenu;
*/
private ["_buttonAction", "_header", "_buttonText", "_cancelButton"];
closeDialog 0;
if (!(profileNamespace getVariable ["AGM_Interaction_FlowMenu", false])) exitWith {
_header = _this select 0;
_buttonText = _this select 1;
if (isNil "_buttonText" or {_buttonText == ""}) then {
_buttonText = localize "STR_AGM_Interaction_MakeSelection";
};
createDialog "RscAGM_SelectAnItem";
ctrlSetText [8860, _buttonText];
ctrlSetText [8870, _header];
lbClear 8866;
8866
};
[]

View File

@ -0,0 +1,21 @@
/*
* Author: KoffeinFlummi
*
* Pushes a boat away from the player.
*
* Arguments:
* 0: Boat (object)
* 1: Velocity (vectorlike array)
*
* Return Value:
* None
*/
_boat = _this select 0;
_velocity = _this select 1;
if !(local _boat) exitWith {
[_this, "AGM_Interaction_fnc_push", _boat] call AGM_Core_fnc_execRemoteFnc;
};
_boat setVelocity _velocity;

View File

@ -0,0 +1,35 @@
/*
* Author: commy2
*
* Remove an AGM action from an object. Note: This function is global.
*
* Argument:
* 0: Object (Object)
* 1: ID of the action (Number)
*
* Return value:
* None.
*/
private ["_object", "_id", "_actionsVar", "_currentID", "_actionIDs", "_actions"];
_object = _this select 0;
_id = _this select 1;
_actionsVar = _object getVariable ["AGM_Interactions", [-1, [], []]];
_currentID = _actionsVar select 0;
_actionIDs = _actionsVar select 1;
_actions = _actionsVar select 2;
_id = _actionIDs find _id;
if (_id == -1) exitWith {};
_actionIDs set [_id, -1];
_actionIDs = _actionIDs - [-1];
_actions set [_id, []];
_actions = _actions - [[]];
_object setVariable ["AGM_Interactions", [_currentID, _actionIDs, _actions], true];

View File

@ -0,0 +1,35 @@
/*
* Author: commy2
*
* Remove an AGM self action from the player.
*
* Argument:
* 0: ID of the action (Number)
*
* Return value:
* None.
*/
private ["_id", "_actionsVar", "_currentID", "_actionIDs", "_actions"];
_id = _this select 0;
_actionsVar = AGM_player getVariable ["AGM_InteractionsSelf", [-1, [], []]];
_currentID = _actionsVar select 0;
_actionIDs = _actionsVar select 1;
_actions = _actionsVar select 2;
_id = _actionIDs find _id;
if (_id == -1) exitWith {};
_actionIDs set [_id, -1];
_actionIDs = _actionIDs - [-1];
_actions set [_id, []];
_actions = _actions - [[]];
AGM_player setVariable ["AGM_InteractionsSelf", [_currentID, _actionIDs, _actions], false];

View File

@ -0,0 +1,19 @@
// by commy2
0 spawn {
waitUntil {player getVariable ["AGM_Name", ""] != ""};
_name = player getVariable ["AGM_Name", ""];
_name = toArray _name;
_index = _name find (toArray "]" select 0);
if (_index != -1) then {
for "_index" from 0 to _index do {
_name set [_index, -1];
};
_name = _name - [-1];
_name = toString _name;
player setVariable ["AGM_Name", _name, true];
};
};

View File

@ -0,0 +1,35 @@
/*
* Author: KoffeinFlummi
*
* Sends a civilian crowd away (chance of failure).
*
* Arguments:
* 0: Unit to be sent away (Object)
*
* Return value:
* none
*/
#define DISTANCE 50
#define RADIUS 10
private ["_unit", "_chance", "_x"];
_unit = _this select 0;
AGM_player playActionNow "GestureGo";
if (count weapons AGM_player > 0) then {
_chance = 0.8;
} else {
_chance = 0.5;
};
{
if (count (weapons _unit) == 0 and random 1 < _chance) then {
[-2, {
(_this select 0) setUnitPos "AUTO";
(_this select 0) doMove [(getPos (_this select 0) select 0) + DISTANCE * (eyeDirection (_this select 1) select 0), (getPos (_this select 0) select 1) + DISTANCE * (eyeDirection (_this select 1) select 1), 0];
}, [_x, AGM_player]] call CBA_fnc_globalExecute;
};
} foreach (_unit nearEntities ["Civilian", RADIUS]);

View File

@ -0,0 +1,3 @@
// by commy2
_this call AGM_Core_fnc_setCaptivityStatus;

View File

@ -0,0 +1,118 @@
/*
Name: AGM_Interaction_fnc_showMenu
Author:
commy2
Garth de Wet (LH)
aeroson
Description:
Parameters:
0: NUMBER - Menu type (0 - interaction, 1 - self-interaction, 2 - sub-interaction, 3 - sub-self-interaction)
1: OBJECT - Target object
2: STRING - Sub-Menu ClassName
Returns:
Nothing
Example:
[0, AGM_Interaction_Target] call AGM_Interaction_fnc_showMenu;
[1, player] call AGM_Interaction_fnc_showMenu;
[2, AGM_Interaction_Target, "AGM_Explosives"] call AGM_Interaction_fnc_showMenu;
[3, player, "AGM_Explosives"] call AGM_Interaction_fnc_showMenu;
*/
private ["_player", "_vehicle", "_mainButtonAction", "_object", "_index", "_actions", "_result", "_menuType"];
#define DEFAULT_ICON "\AGM_Interaction\UI\dot_ca.paa"
#define DEFAULT_DISTANCE 4 // seems to be 4
_player = AGM_player;
_vehicle = vehicle _player;
AGM_Interaction_MenuType = _this select 0; // 0 Interaction, 1 Self Interaction
_mainButtonAction = [
{call AGM_Interaction_fnc_hideMenu},
{call AGM_Interaction_fnc_hideMenu},
{"Default" call AGM_Interaction_fnc_openMenu},
{"Default" call AGM_Interaction_fnc_openMenuSelf}
] select AGM_Interaction_MenuType;
_menuType = AGM_Interaction_MenuType % 2;
uiNamespace setVariable ["AGM_Interaction_CursorPosition", [controlNull, 0.5, 0.5, -1]];
AGM_Interaction_Target = _this select 1;
_object = AGM_Interaction_Target;
if (_menuType == 0 && {(isNull (_object) || {!([_object, 4] call AGM_Interaction_fnc_isInRange)})}) exitWith {};//call ([AGM_Interaction_fnc_onButtonDown, AGM_Interaction_fnc_onButtonDownSelf] select _menuType)};
if !([_player, _object] call AGM_Core_fnc_canInteractWith) exitWith {};
// add actions or self actions of AGM_Interaction_Target
_parents = [configFile >> "CfgVehicles" >> typeOf _object, true] call BIS_fnc_returnParents;
_result = [_object, _parents, [], [], missionConfigFile >> "CfgVehicles", true, ["AGM_Actions", "AGM_SelfActions"] select _menuType, _this select 2] call AGM_Interaction_fnc_GetActions;
_actions = ([_object, _parents, _result select 0, _result select 1,configFile >> "CfgVehicles", false, ["AGM_Actions", "AGM_SelfActions"] select _menuType, _this select 2] call AGM_Interaction_fnc_GetActions) select 0;
// add self actions of vehicle _player
if (_menuType == 1 && {_player != _vehicle}) then {
_parents = [configFile >> "CfgVehicles" >> typeOf _vehicle, true] call BIS_fnc_returnParents;
_result = [_vehicle, _parents, [], [], missionConfigFile >> "CfgVehicles", true, ["AGM_Actions", "AGM_SelfActions"] select _menuType, _this select 2] call AGM_Interaction_fnc_GetActions;
_actions = _actions + (([_vehicle, _parents, _result select 0, _result select 1,configFile >> "CfgVehicles", false, ["AGM_Actions", "AGM_SelfActions"] select _menuType, _this select 2] call AGM_Interaction_fnc_GetActions) select 0);
};
// custom defined actions, stored in variable instead of cfg like above
if (AGM_Interaction_MenuType < 2) then {
private ["_customActions", "_customAction", "_displayName", "_distance","_condition","_statement","_showDisabled", "_priority"];
// add interactions or self interactions of AGM_Interaction_Target
_customActions = (_object getVariable [["AGM_Interactions", "AGM_InteractionsSelf"] select _menuType, [-1, [], []]]) select 2;
// add self interactions of vehicle _player
if (_menuType == 1 && {_player != _vehicle}) then {
_customActions = _customActions + ((_vehicle getVariable [["AGM_Interactions", "AGM_InteractionsSelf"] select _menuType, [-1, [], []]]) select 2);
};
if(_menuType==0) then {
private ["_distance"];
for "_index" from 0 to (count _customActions - 1) do {
_customAction = _customActions select _index;
_displayName = _customAction select 0;
_distance = _customAction select 1;
_condition = _customAction select 2;
_statement = _customAction select 3;
_showDisabled = _customAction select 4;
_priority = _customAction select 5;
if ((_showDisabled || {[_object, _player] call _condition}) && {[_object, _distance] call AGM_Interaction_fnc_isInRange || {_distance == 0}}) then {
_actions pushBack [_displayName, _statement, _condition, _priority, [], DEFAULT_ICON, "", {true}, [], _distance, ""];
};
};
} else { // self interactions do not have distance
for "_index" from 0 to (count _customActions - 1) do {
_customAction = _customActions select _index;
_displayName = _customAction select 0;
_condition = _customAction select 1;
_statement = _customAction select 2;
_showDisabled = _customAction select 3;
_priority = _customAction select 4;
if (_showDisabled || {[_object, _player] call _condition}) then {
_actions pushBack [_displayName, _statement, _condition, _priority, [], DEFAULT_ICON, "", {true}, [], DEFAULT_DISTANCE, ""];
};
};
};
};
if (count _actions == 0) exitWith {};//call ([AGM_Interaction_fnc_onButtonDown, AGM_Interaction_fnc_onButtonDownSelf] select _menuType)};
_actions call AGM_Interaction_fnc_sortOptionsByPriority;
AGM_Interaction_Buttons = _actions;
[_mainButtonAction, (_this select 2) != "", (profileNamespace getVariable ["AGM_Interaction_FlowMenu", false]), _menuType == 1, _object] call AGM_Interaction_fnc_initialiseInteraction;

View File

@ -0,0 +1,54 @@
/*
Name: AGM_Interaction_fnc_showMouseHint
Author(s):
Garth de Wet (LH)
Description:
Shows the interaction helper text with the mouse buttons at the bottom middle of the screen
Parameters:
0: STRING - Left click text
1: STRING - Right click text
3: STRING - (Optional) Scroll text
Returns:
Nothing
Example:
["Place Explosive", "Cancel"] call AGM_Interaction_fnc_showMouseHint;
*/
#define GUI_GRID_W (0.025)
#define GUI_GRID_H (0.04)
private ["_leftClick", "_rightClick", "_scroll"];
_leftClick = _this select 0;
_rightClick = _this select 1;
_scroll = "";
if (count _this > 2) then {
_scroll = _this select 2;
};
("AGM_InteractionHelper" call BIS_fnc_rscLayer) cutRsc ["AGM_InteractionHelper", "PLAIN",0.5, false];
disableSerialization;
_display = uiNamespace getVariable ["AGM_Helper_Display", objNull];
if (isNull _display) exitWith{};
(_display displayCtrl 1000) ctrlSetText _leftClick;
(_display displayCtrl 1001) ctrlSetText _rightClick;
(_display displayCtrl 1000) ctrlShow (_leftClick != "");
(_display displayCtrl 1200) ctrlShow (_leftClick != "");
(_display displayCtrl 1001) ctrlShow (_rightClick != "");
(_display displayCtrl 1201) ctrlShow (_rightClick != "");
if (_scroll == "") exitWith {
(_display displayCtrl 1002) ctrlShow false;
(_display displayCtrl 1202) ctrlShow false;
(_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 8 * GUI_GRID_W, 1.5 * GUI_GRID_H];
(_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1 * GUI_GRID_W, 1 * GUI_GRID_H];
(_display displayCtrl 1001) ctrlCommit 0;
(_display displayCtrl 1201) ctrlCommit 0;
};
(_display displayCtrl 1002) ctrlSetText _scroll;
showHUD false;

View File

@ -0,0 +1,20 @@
// by commy2
private ["_actions", "_count", "_index", "_actionN", "_actionM"];
_actions = _this;
_count = count _actions;
_index = 0;
while {_index < _count - 1} do {
_actionN = + _actions select _index;
_actionM = + _actions select (_index + 1);
if (_actionN select 3 < _actionM select 3) then {
_actions set [_index, _actionM];
_actions set [_index + 1, _actionN];
_index = 0;
} else {
_index = _index + 1;
};
};

View File

@ -0,0 +1,20 @@
// by commy2
private ["_unit", "_message"];
_tapper = _this select 0;
_target = _this select 1;
if (_target != AGM_player) exitWith {
addCamShake [4, 0.5, 5];
if !(local _target) then {
[[_tapper, _target], "AGM_Interaction_fnc_tapShoulder", _target] call AGM_Core_fnc_execRemoteFnc;
};
};
addCamShake [4, 0.5, 5];
//_message = format ["%1 tapped you on your shoulder.", [_unit] call AGM_Core_fnc_getName];
_message = localize "STR_AGM_Interaction_YouWereTapped";
[_message] call AGM_Core_fnc_displayTextStructured;

View File

@ -0,0 +1,12 @@
// by commy2
disableSerialization;
_ctrl = ctrlParent (_this select 0) displayCtrl 40;
_ctrl ctrlSetPosition [
(_this select 1) + 0.01 * safezoneW,
(_this select 2) + 0.01 * safezoneH,
2.0 / 16 * safezoneW,
0.3 / 9 * safezoneH
];
_ctrl ctrlCommit 0;

Binary file not shown.

View File

@ -0,0 +1,652 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-20 -->
<Project name="AGM">
<Package name="Interaction">
<Key ID="STR_AGM_Interaction_InteractionMenu">
<English>Interaction Menu</English>
<German>Interaktionsmenü</German>
<Spanish>Menú de interacción</Spanish>
<Polish>Menu interakcji</Polish>
<Czech>Menu interakce</Czech>
<French>Menu d'interaction</French>
<Russian>Меню взаимодействия</Russian>
<Hungarian>Interakció</Hungarian>
<Portuguese>Menu de Interação</Portuguese>
<Italian>Menù Interattivo</Italian>
</Key>
<Key ID="STR_AGM_Interaction_InteractionMenuSelf">
<English>Interaction Menu (Self)</English>
<German>Interaktionsmenü (Selbst)</German>
<Spanish>Menú de interacción (Propia)</Spanish>
<Polish>Menu interakcji (na siebie)</Polish>
<Czech>Menu interakce (vlastní)</Czech>
<French>Menu d'interaction (Perso)</French>
<Russian>Меню взаимодействия (с собой)</Russian>
<Hungarian>Interakció (saját) </Hungarian>
<Portuguese>Menu de Interação (Individual)</Portuguese>
<Italian>Menù Interattivo (Individuale)</Italian>
</Key>
<Key ID="STR_AGM_Interaction_OpenDoor">
<English>Open / Close Door</English>
<German>Tür öffnen / schließen</German>
<Spanish>Abrir / Cerrar puerta</Spanish>
<Polish>Otwórz / Zamknij drzwi</Polish>
<Czech>Otevřít / Zavřít dveře</Czech>
<French>Ouvrir / Fermer Portes</French>
<Russian>Открыть / Закрыть двери</Russian>
<Hungarian>Ajtó nyitás / zárás</Hungarian>
<Portuguese>Abrir / Fechar Porta</Portuguese>
<Italian>Apri / Chiudi la porta</Italian>
</Key>
<Key ID="STR_AGM_Interaction_LockDoor">
<English>Lock Door</English>
<German>Tür sperren</German>
<Spanish>Bloquear puerta</Spanish>
<French>Verrouiller Porte</French>
<Italian>Blocca la porta</Italian>
<Russian>Заблокировать дверь</Russian>
<Portuguese>Trancar Porta</Portuguese>
<Hungarian>Ajtó bezárása</Hungarian>
<Polish>Zablokuj drzwi</Polish>
<Czech>Zamknout dveře</Czech>
</Key>
<Key ID="STR_AGM_Interaction_UnlockDoor">
<English>Unlock Door</English>
<German>Tür entsperren</German>
<Spanish>Desbloquear puerta</Spanish>
<French>Déverrouiller Porte</French>
<Italian>Sblocca la porta</Italian>
<Russian>Разблокировать дверь</Russian>
<Portuguese>Destrancar Porta</Portuguese>
<Hungarian> Zár kinyitása</Hungarian>
<Polish>Odblokuj drzwi</Polish>
<Czech>Odemknout dveře</Czech>
</Key>
<Key ID="STR_AGM_Interaction_LockedDoor">
<English>Locked Door</English>
<German>Tür gesperrt</German>
<Spanish>Puerta bloqueada</Spanish>
<French>Porte Verrouillée</French>
<Italian>Porta bloccata</Italian>
<Russian>Дверь заблокирована</Russian>
<Portuguese>Porta Trancada</Portuguese>
<Hungarian>Zárt ajtó</Hungarian>
<Polish>Zablokowano drzwi</Polish>
<Czech>Zamčené dveře</Czech>
</Key>
<Key ID="STR_AGM_Interaction_UnlockedDoor">
<English>Unlocked Door</English>
<German>Tür entsperrt</German>
<Spanish>Puerta desbloqueada</Spanish>
<French>Porte Déverrouillée</French>
<Italian>Porta sbloccata</Italian>
<Russian>Дверь разблокирована</Russian>
<Portuguese>Porta Destrancada</Portuguese>
<Hungarian>Nyitott ajtó</Hungarian>
<Polish>Odblokowano drzwi</Polish>
<Czech>Odemčené dveře</Czech>
</Key>
<Key ID="STR_AGM_Interaction_JoinGroup">
<English>Join group</English>
<German>Gruppe beitreten</German>
<Spanish>Unirse al grupo</Spanish>
<Polish>Dołącz do grupy</Polish>
<Czech>Přidat se do skupiny</Czech>
<French>Rejoindre Groupe</French>
<Russian>Вступить в группу</Russian>
<Hungarian>Csatlakozás</Hungarian>
<Portuguese>Unir-se ao grupo</Portuguese>
<Italian>Unisciti alla squadra</Italian>
</Key>
<Key ID="STR_AGM_Interaction_LeaveGroup">
<English>Leave Group</English>
<German>Gruppe verlassen</German>
<Spanish>Dejar grupo</Spanish>
<Polish>Opuść grupę</Polish>
<Czech>Odejít ze skupiny</Czech>
<French>Quitter Groupe</French>
<Russian>Выйти из группы</Russian>
<Hungarian>Csoport elhagyása</Hungarian>
<Portuguese>Deixar grupo</Portuguese>
<Italian>Lascia la squadra</Italian>
</Key>
<Key ID="STR_AGM_Interaction_BecomeLeader">
<English>Become Leader</English>
<German>Grp.-führung übern.</German>
<Spanish>Asumir el liderazgo</Spanish>
<Polish>Przejmij dowodzenie</Polish>
<Czech>Stát se velitelem</Czech>
<French>Devenir Leader</French>
<Russian>Стать лидером</Russian>
<Hungarian>Vezetés átvétele</Hungarian>
<Portuguese>Tornar-se Líder</Portuguese>
<Italian>Prendi il comando</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Dance">
<English>DANCE!</English>
<German>TANZEN!</German>
<Spanish>BAILAR!</Spanish>
<Polish>TAŃCZ!</Polish>
<Czech>TANČIT!</Czech>
<French>Danse!</French>
<Russian>ТАНЦЕВАТЬ!</Russian>
<Hungarian>TÁNC!</Hungarian>
<Portuguese>DANCE!</Portuguese>
<Italian>Balla!</Italian>
</Key>
<Key ID="STR_AGM_Interaction_StopDancing">
<English>Stop Dancing</English>
<German>Tanzen abbrechen</German>
<Spanish>Dejar de bailar</Spanish>
<Polish>Przestań tańczyć</Polish>
<Czech>Přestat tancovat</Czech>
<French>Arrêter de danser</French>
<Russian>Прекратить танцевать</Russian>
<Hungarian>Tánc abbahagyása</Hungarian>
<Portuguese>Parar de dançar</Portuguese>
<Italian>Smetti di ballare</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Back">
<English>&lt;&lt; Back</English>
<German>&lt;&lt; Zurück</German>
<Spanish>&lt;&lt; Atrás</Spanish>
<Polish>&lt;&lt; Wstecz</Polish>
<Czech>&lt;&lt; Zpět</Czech>
<French>&lt;&lt; Retour</French>
<Russian>&lt;&lt; Назад</Russian>
<Hungarian>&lt;&lt; Vissza</Hungarian>
<Portuguese>&lt;&lt; Voltar</Portuguese>
<Italian>&lt;&lt; Indietro</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures">
<English>Gestures &gt;&gt;</English>
<German>Gesten &gt;&gt;</German>
<Spanish>Gestos &gt;&gt;</Spanish>
<Polish>Gesty &gt;&gt;</Polish>
<Czech>Gesta &gt;&gt;</Czech>
<French>Signaux &gt;&gt;</French>
<Russian>Жесты &gt;&gt;</Russian>
<Hungarian>Kézjelek &gt;&gt;</Hungarian>
<Portuguese>Gestos &gt;&gt;</Portuguese>
<Italian>Segnali gestuali &gt;&gt;</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Attack">
<English>Attack</English>
<German>Angreifen</German>
<Spanish>Atacar</Spanish>
<Polish>Do ataku</Polish>
<Czech>Zaútočit</Czech>
<French>Attaquer</French>
<Russian>Атаковать</Russian>
<Hungarian>Támadás</Hungarian>
<Portuguese>Atacar</Portuguese>
<Italian>Attaccare</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Advance">
<English>Advance</English>
<German>Vordringen</German>
<Spanish>Avanzar</Spanish>
<Polish>Naprzód</Polish>
<Czech>Postoupit</Czech>
<French>Avancer</French>
<Russian>Продвигаться</Russian>
<Hungarian>Előre</Hungarian>
<Portuguese>Avançar</Portuguese>
<Italian>Avanzare</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Go">
<English>Go</English>
<German>Los</German>
<Spanish>Adelante</Spanish>
<Polish>Szybko</Polish>
<Czech>Jít</Czech>
<French>Aller</French>
<Russian>Идти</Russian>
<Hungarian>Mozgás</Hungarian>
<Portuguese>Mover-se</Portuguese>
<Italian>Muoversi</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Follow">
<English>Follow</English>
<German>Folgen</German>
<Spanish>Seguirme</Spanish>
<Polish>Za mną</Polish>
<Czech>Následovat</Czech>
<French>Suivre</French>
<Russian>Следовать</Russian>
<Hungarian>Utánam</Hungarian>
<Portuguese>Seguir</Portuguese>
<Italian>Seguire</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Point">
<English>Point</English>
<German>Zeigen</German>
<Spanish>Señalar</Spanish>
<Polish>Wskazać</Polish>
<Czech>Ukázat</Czech>
<French>Pointer</French>
<Russian>Точка</Russian>
<Hungarian>Mutat</Hungarian>
<Portuguese>Apontar</Portuguese>
<Italian>Puntare a</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Up">
<English>Up</English>
<German>Aufstehen</German>
<Spanish>Arriba</Spanish>
<Polish>Do góry</Polish>
<Czech>Vztyk</Czech>
<French>Debout</French>
<Russian>Вверх</Russian>
<Hungarian>Fel</Hungarian>
<Portuguese>Acima</Portuguese>
<Italian>Alzarsi</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Cover">
<English>Cover</English>
<German>Deckung</German>
<Spanish>Cubrirse</Spanish>
<Polish>Do osłony</Polish>
<Czech>Krýt se</Czech>
<French>A couvert</French>
<Russian>Укрыться</Russian>
<Hungarian>Fedezékbe</Hungarian>
<Portuguese>Proteger-se</Portuguese>
<Italian>Copertura</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Cease_Fire">
<English>Cease Fire</English>
<German>Feuer einstellen</German>
<Spanish>Alto el fuego</Spanish>
<Polish>Wstrzymać ogień</Polish>
<Czech>Zastavit palbu</Czech>
<French>Halte au feu</French>
<Russian>Прекратить огонь</Russian>
<Hungarian>Tüzet szüntess</Hungarian>
<Portuguese>Cessar Fogo</Portuguese>
<Italian>Cessare il Fuoco</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Freeze">
<English>Freeze</English>
<German>Keine Bewegung</German>
<Spanish>Alto</Spanish>
<Polish>Stać</Polish>
<Czech>Stát</Czech>
<French>Halte</French>
<Russian>Замереть</Russian>
<Hungarian>Állj</Hungarian>
<Portuguese>Alto</Portuguese>
<Italian>Fermi</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Hi">
<English>Hi</English>
<German>Hallo</German>
<Spanish>Hola</Spanish>
<Polish>Witaj</Polish>
<Czech>Ahoj</Czech>
<French>Salut</French>
<Russian>Привет</Russian>
<Hungarian>Szeva</Hungarian>
<Portuguese>Olá</Portuguese>
<Italian>Ciao</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_Yes">
<English>Yes</English>
<German>Ja</German>
<Spanish>Si</Spanish>
<Polish>Tak</Polish>
<Czech>Ano</Czech>
<French>Oui</French>
<Russian>Да</Russian>
<Hungarian>Igen</Hungarian>
<Portuguese>Sim</Portuguese>
<Italian>Si</Italian>
</Key>
<Key ID="STR_AGM_Interaction_Gestures_No">
<English>No</English>
<German>Nein</German>
<Spanish>No</Spanish>
<Polish>Nie</Polish>
<Czech>Ne</Czech>
<French>Non</French>
<Russian>Нет</Russian>
<Hungarian>Nem</Hungarian>
<Portuguese>Não</Portuguese>
<Italian>No</Italian>
</Key>
<Key ID="STR_AGM_Interaction_WeaponOnBack">
<English>Put weapon on back</English>
<German>Waffe wegstecken</German>
<Spanish>Arma a la espalda</Spanish>
<Polish>Umieść broń na plecach</Polish>
<Czech>Dát zbraň na záda</Czech>
<French>Arme à la bretelle</French>
<Russian>Повесить оружие на спину</Russian>
<Hungarian>Fegyvert hátra</Hungarian>
<Portuguese>Colocar arma nas costas</Portuguese>
<Italian>Metti l'arma in spalla</Italian>
</Key>
<Key ID="STR_AGM_Interaction_TapShoulder">
<English>Tap Shoulder</English>
<German>Auf Schulter klopfen</German>
<Spanish>Tocar el hombro</Spanish>
<Polish>Klepnij w ramię</Polish>
<Czech>Poklepat na rameno</Czech>
<French>Taper sur l'épaule</French>
<Russian>Похлопать по плечу</Russian>
<Hungarian>Vállveregetés</Hungarian>
<Portuguese>Tocar ombro</Portuguese>
<Italian>Dai un colpetto</Italian>
</Key>
<Key ID="STR_AGM_Interaction_YouWereTapped">
<English>You were tapped on the shoulder.</English>
<German>Dir wurde auf die Schulter geklopft</German>
<Spanish>Te tocaron el hombro.</Spanish>
<French>On te tape sur l'épaule.</French>
<Polish>Zostałeś klepnięty po ramieniu</Polish>
<Hungarian>Vállonveregettek</Hungarian>
<Czech>Někdo tě poklepal na rameno.</Czech>
<Russian>Вас похлопали по плечу</Russian>
<Portuguese>Você foi tocado no ombro.</Portuguese>
<Italian>Ti è stato dato un colpetto sulla spalla</Italian>
</Key>
<Key ID="STR_AGM_Interaction_CancelSelection">
<English>Cancel</English>
<German>Abbrechen</German>
<Spanish>Cancelar</Spanish>
<Polish>Anuluj</Polish>
<French>Annuler</French>
<Czech>Zrušit</Czech>
<Italian>Annulla</Italian>
<Russian>Отменить</Russian>
<Portuguese>Cancelar</Portuguese>
<Hungarian>Mégse</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_MakeSelection">
<English>Select</English>
<German>Wählen</German>
<Spanish>Seleccionar</Spanish>
<Polish>Wybierz</Polish>
<French>Sélectionner</French>
<Czech>Zvolit</Czech>
<Italian>Seleziona</Italian>
<Russian>Выбрать</Russian>
<Portuguese>Selecionar</Portuguese>
<Hungarian>Kiválaszt</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_SendAway">
<English>Go Away!</English>
<German>Geh Weg!</German>
<Spanish>Aléjate!</Spanish>
<Polish>Odejdź!</Polish>
<Czech>Jděte pryč!</Czech>
<French>Allez-vous-en!</French>
<Russian>Уходите отсюда!</Russian>
<Hungarian>Tűnés!</Hungarian>
<Portuguese>Vá Embora!</Portuguese>
<Italian>Via di qui!</Italian>
</Key>
<Key ID="STR_AGM_Interaction_GetDown">
<English>Get Down!</English>
<German>Auf Den Boden!</German>
<Spanish>Al suelo!</Spanish>
<Polish>Padnij!</Polish>
<Czech>K zemi!</Czech>
<French>A terre!</French>
<Hungarian>A földre!</Hungarian>
<Russian>Ложись!</Russian>
<Portuguese>Abaixe-se!</Portuguese>
<Italian>A Terra!</Italian>
</Key>
<Key ID="STR_AGM_Interaction_TeamManagement">
<English>Team Management &gt;&gt;</English>
<German>Team Management &gt;&gt;</German>
<Spanish>Gestión de equipo &gt;&gt;</Spanish>
<French>Gestion d'équipe &gt;&gt;</French>
<Polish>Zarządzanie oddziałem &gt;&gt;</Polish>
<Czech>Správa týmu &gt;&gt;</Czech>
<Russian>Управление группой &gt;&gt;</Russian>
<Portuguese>Gerenciamento de Equipe &gt;&gt;</Portuguese>
<Italian>Organizzazione Squadra &gt;&gt;</Italian>
<Hungarian>Csapat kezelés &gt;&gt;</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_TeamRED">
<English>Red</English>
<German>Rot</German>
<Spanish>Rojo</Spanish>
<French>Rouge</French>
<Polish>Czerwony</Polish>
<Czech>Červený</Czech>
<Russian>Красный</Russian>
<Portuguese>Vermelha</Portuguese>
<Italian>Rosso</Italian>
<Hungarian>Piros</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_TeamGREEN">
<English>Green</English>
<German>Grün</German>
<Spanish>Verde</Spanish>
<French>Vert</French>
<Polish>Zielony</Polish>
<Czech>Zelený</Czech>
<Russian>Зеленый</Russian>
<Portuguese>Verde</Portuguese>
<Italian>Verde</Italian>
<Hungarian>Zöld</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_TeamBLUE">
<English>Blue</English>
<German>Blau</German>
<Spanish>Azul</Spanish>
<French>Bleu</French>
<Polish>Niebieski</Polish>
<Czech>Modrý</Czech>
<Russian>Синий</Russian>
<Portuguese>Azul</Portuguese>
<Italian>Blu</Italian>
<Hungarian>Kék</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_TeamYELLOW">
<English>Yellow</English>
<German>Gelb</German>
<Spanish>Amarillo</Spanish>
<French>Jaune</French>
<Polish>Żółty</Polish>
<Czech>Žlutý</Czech>
<Russian>Желтый</Russian>
<Portuguese>Amarela</Portuguese>
<Italian>Giallo</Italian>
<Hungarian>Sárga</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_JoinTeamRed">
<English>Join Team Red</English>
<German>Team Rot beitreten</German>
<Spanish>Unirse al equipo rojo</Spanish>
<French>Rejoindre Rouge</French>
<Polish>Dołącz do drużyny czerwonej</Polish>
<Czech>Připojit do Červeného Týmu</Czech>
<Russian>Присоединиться к красной группе</Russian>
<Portuguese>Unir-se à Equipe Vermelha</Portuguese>
<Italian>Entra nella Squadra Rossa</Italian>
<Hungarian>Csatlakozás a piros csapathoz</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_JoinTeamGreen">
<English>Join Team Green</English>
<German>Team Grün beitreten</German>
<Spanish>Unirse al equipo verde</Spanish>
<French>Rejoindre Verte</French>
<Polish>Dołącz do drużyny zielonej</Polish>
<Czech>Připojit do Zeleného Týmu</Czech>
<Russian>Присоединиться к зеленой группе</Russian>
<Portuguese>Unir-se à Equipe Verde</Portuguese>
<Italian>Entra nella Squadra Verde</Italian>
<Hungarian>Csatlakozás a zöld csapathoz</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_JoinTeamBlue">
<English>Join Team Blue</English>
<German>Team Blau beitreten</German>
<Spanish>Unirse al equipo azul</Spanish>
<French>Rejoindre Bleue</French>
<Polish>Dołącz do drużyny niebieskiej</Polish>
<Czech>Připojit do Modrého Týmu</Czech>
<Russian>Присоединиться к синей группе</Russian>
<Portuguese>Unir-se à Equipe Azul</Portuguese>
<Italian>Entra nella Squadra Blu</Italian>
<Hungarian>Csatlakozás a kék csapathoz</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_JoinTeamYellow">
<English>Join Team Yellow</English>
<German>Team Gelb beitreten</German>
<Spanish>Unirse al equipo amarillo</Spanish>
<French>Rejoindre Jaune</French>
<Polish>Dołącz do drużyny żółtej</Polish>
<Czech>Připojit do Žlutého Týmu</Czech>
<Russian>Присоединиться к желтой группе</Russian>
<Portuguese>Unir-se à Equipe Amarela</Portuguese>
<Italian>Entra nella Squadra Gialla</Italian>
<Hungarian>Csatlakozás a sárga csapathoz</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_JoinedTeam">
<English>You joined Team %1</English>
<German>Du bist Team %1 beigetreten</German>
<Spanish>Te has unido al equipo %1</Spanish>
<French>Tu as rejoint l'équipe %1</French>
<Polish>Dołączyłeś do drużyny %1</Polish>
<Czech>Připojil ses do Týmu %1</Czech>
<Russian>Вы присоединились к группе %1</Russian>
<Portuguese>Você uniu-se à Equipe %1</Portuguese>
<Italian>Sei entrato nella Squadra %1</Italian>
<Hungarian>Csatlakoztál a %1 csapathoz</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_LeaveTeam">
<English>Leave Team</English>
<German>Team verlassen</German>
<Spanish>Dejar equipo</Spanish>
<French>Quitter l'équipe</French>
<Polish>Opuść drużynę</Polish>
<Czech>Opustit tým</Czech>
<Russian>Покинуть группу</Russian>
<Portuguese>Deixar Equipe</Portuguese>
<Italian>Lascia la Squadra</Italian>
<Hungarian>Csapat elhagyása</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_LeftTeam">
<English>You left the Team</English>
<German>Du hast das Team verlassen</German>
<Spanish>Has dejado el equipo</Spanish>
<French>Tu as quitté l'équipe</French>
<Polish>Opuściłeś drużynę</Polish>
<Czech>Opustil si tým</Czech>
<Russian>Вы покинули группу</Russian>
<Portuguese>Você deixou a Equipe</Portuguese>
<Italian>Hai lasciato la squadra</Italian>
<Hungarian>Elhagytad a csapatot</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_Pardon">
<English>Pardon</English>
<German>Begnadigen</German>
<Spanish>Perdonar</Spanish>
<Polish>Przebacz</Polish>
<French>Pardon</French>
<Czech>Pardon</Czech>
<Russian>Извините</Russian>
<Portuguese>Perdão</Portuguese>
<Italian>Perdona</Italian>
<Hungarian>Megbocsátás</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_FlowMenu">
<English>Flow Menu</English>
<German>Mausradmenü</German>
<Polish>Flow Menu</Polish>
<Spanish>Menú desplegable</Spanish>
<French>Menu Déroulant</French>
<Czech>Flow Menu</Czech>
<Russian>Выпадающее меню</Russian>
<Portuguese>Flow Menu</Portuguese>
<Italian>Menù a Scorrimento</Italian>
<Hungarian>Legördülő menü</Hungarian>
</Key>
<Key ID="STR_AGM_Interaction_ScrollHint">
<English>Scroll</English>
<German>Scrollen</German>
<Polish>Przewiń</Polish>
<French>Défilement</French>
<Spanish>Desplazar</Spanish>
<Russian>Пролистать</Russian>
<Portuguese>Rolar</Portuguese>
<Italian>Scorri</Italian>
<Hungarian>Görgetés</Hungarian>
<Czech>Otáčení</Czech>
</Key>
<Key ID="STR_AGM_Interaction_ModifierKey">
<English>Modifier Key</English>
<German>Modifikator</German>
<Polish>Modyfikator</Polish>
<French>Modifier la touche</French>
<Spanish>Tecla modificadora</Spanish>
<Russian>клавиша-модификатор</Russian>
<Portuguese>Tecla Modificadora</Portuguese>
<Italian>Modifica Tasto</Italian>
<Hungarian>Módosító billentyű</Hungarian>
<Czech>Modifikátor</Czech>
</Key>
<Key ID="STR_AGM_Interaction_NotInRange">
<English>Not in Range</English>
<German>Außer Reichweite</German>
<French>Hors de portée.</French>
<Spanish>Fuera de rango</Spanish>
<Russian>Слишком далеко</Russian>
<Portuguese>Fora do Alcançe</Portuguese>
<Hungarian>Hatótávolságon kívül</Hungarian>
<Polish>Poza zasięgiem</Polish>
<Czech>Mimo dosah</Czech>
</Key>
<Key ID="STR_AGM_Interaction_AutoCloseMenu">
<English>Close Menu on Key Release</English>
<German>Menü nach Loslassen schließen</German>
<Polish>Zamknij menu automatycznie</Polish>
<French>Fermer le menu en relâchant la touche</French>
<Spanish>Cerrar menú al soltar la tecla</Spanish>
<Hungarian>Menü bezárása a billentyű elengedésekor</Hungarian>
<Russian>Закрывать меню при отжатии клавиши</Russian>
<Czech>Menu interakce (Na držení)</Czech>
</Key>
<Key ID="STR_AGM_Interaction_AutoCenterCursor">
<English>Auto Center Cursor</English>
<German>Mauszeiger automatisch zentrieren</German>
<Spanish>Auto-centrar cursor</Spanish>
<Polish>Automatycznie centruj kursor </Polish>
<Czech>Vycentrování kurzoru</Czech>
<Hungarian>Egér auto-centrírozása</Hungarian>
<Russian>Автоцентрирование курсора</Russian>
</Key>
<Key ID="STR_AGM_Interaction_Equipment">
<English>Equipment &gt;&gt;</English>
<German>Ausrüstung &gt;&gt;</German>
<Spanish>Equipamiento &gt;&gt;</Spanish>
<French>Équipment &gt;&gt;</French>
<Polish>Ekwipunek &gt;&gt;</Polish>
<Czech>Vybavení &gt;&gt;</Czech>
<Hungarian>Felszerelés &gt;&gt;</Hungarian>
<Russian>Снаряжение &gt;&gt;</Russian>
</Key>
<Key ID="STR_AGM_Interaction_Push">
<English>Push</English>
<German>Schieben</German>
<Spanish>Empujar</Spanish>
<French>Pousser</French>
<Polish>Pchnij</Polish>
<Czech>Odstrčit</Czech>
<Hungarian>Tolás</Hungarian>
<Russian>Толкать</Russian>
</Key>
<Key ID="STR_AGM_Interaction_Interact">
<English>Interact</English>
<German>Interagiere</German>
<Czech>Interakce</Czech>
<Russian>Взаимодействовать</Russian>
<Polish>Interakcja</Polish>
<Spanish>Interactuar</Spanish>
</Key>
</Package>
</Project>