#define EQUIP_FRIES_ATTRIBUTE class Attributes { \
    class GVAR(equipFRIES) { \
        property = QGVAR(equipFRIES); \
        control = "Checkbox"; \
        displayName = CSTRING(Eden_equipFRIES); \
        tooltip = CSTRING(Eden_equipFRIES_Tooltip); \
        expression = QUOTE([_this] call FUNC(equipFRIES)); \
        typeName = "BOOL"; \
        condition = "objectVehicle"; \
        defaultValue = false; \
    }; \
}

class CfgVehicles {
    class Logic;
    class Module_F: Logic {
        class ModuleDescription;
    };
    class ACE_Module: Module_F {};
    class ACE_moduleEquipFRIES: ACE_Module {
        scope = 2;
        displayName = CSTRING(Module_FRIES_DisplayName);
        icon = QPATHTOF(UI\Icon_Module_FRIES_ca.paa);
        category = "ACE";
        function = QFUNC(moduleEquipFRIES);
        functionPriority = 10;
        isGlobal = 0;
        isTriggerActivated = 0;
        isDisposable = 0;
        author = "BaerMitUmlaut";

        class ModuleDescription: ModuleDescription {
            description = CSTRING(Module_FRIES_Description);
            sync[] = {"AnyVehicle"};
        };
    };

    class Air;
    class Helicopter: Air {
        class ACE_SelfActions {
            class ACE_prepareFRIES {
                displayName = CSTRING(Interaction_prepareFRIES);
                condition = QUOTE([vehicle _player] call FUNC(canPrepareFRIES));
                statement = QUOTE([vehicle _player] call FUNC(prepareFRIES));
                showDisabled = 0;
                priority = 1;
            };
            class ACE_deployRopes {
                displayName = CSTRING(Interaction_deployRopes);
                condition = QUOTE([ARR_2(_player, vehicle _player)] call FUNC(canDeployRopes));
                statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [vehicle _player])] call CBA_fnc_serverEvent);
                showDisabled = 0;
                priority = 1;
            };
            class ACE_cutRopes {
                displayName = CSTRING(Interaction_cutRopes);
                condition = [vehicle _player] call FUNC(canCutRopes);
                statement = [vehicle _player] call FUNC(cutRopes);
                showDisabled = 0;
                priority = 1;
            };
            class ACE_fastRope {
                displayName = CSTRING(Interaction_fastRope);
                condition = [_player, vehicle _player] call FUNC(canFastRope);
                statement = [_player, vehicle _player] call FUNC(fastRope);
                showDisabled = 0;
                priority = 1;
            };
        };
    };

    class Helicopter_Base_F;
    class ACE_friesBase: Helicopter_Base_F {
        destrType = "";
        class Turrets {};
        class ACE_Actions {};
        class ACE_SelfActions {};
        EGVAR(cargo,hasCargo) = 0;
        EGVAR(cargo,space) = 0;
    };
    class ACE_friesAnchorBar: ACE_friesBase {
        author = "jokoho48";
        scope = 1;
        model = QPATHTOF(data\friesAnchorBar.p3d);
        animated = 1;
        class AnimationSources {
            class extendHookRight {
                source = "user";
                initPhase = 0;
                animPeriod = 1.5;
            };
            class extendHookLeft {
                source = "user";
                initPhase = 0;
                animPeriod = 1.5;
            };
        };
    };
    class ACE_friesGantry: ACE_friesBase {
        author = "jokoho48";
        scope = 1;
        model = QPATHTOF(data\friesGantry.p3d);
        animated = 1;
        class AnimationSources {
            class adjustWidth {
                source = "user";
                initPhase = 0.211;
                animPeriod = 0;
            };
            class rotateGantryLeft {
                source = "user";
                initPhase = 0;
                animPeriod = 0;
            };
            class rotateGantryRight {
                source = "user";
                initPhase = 0;
                animPeriod = 0;
            };
            class hideGantryLeft {
                source = "user";
                initPhase = 0;
                animPeriod = 0;
            };
            class hideGantryRight {
                source = "user";
                initPhase = 0;
                animPeriod = 0;
            };
        };
    };
    class ACE_friesGantryReverse: ACE_friesGantry {
        class AnimationSources: AnimationSources {
            class adjustWidth {
                source = "user";
                initPhase = 0.213;
                animPeriod = 0;
            };
            class rotateGantryLeft {
                source = "user";
                initPhase = 0.5;
                animPeriod = 0;
            };
            class rotateGantryRight {
                source = "user";
                initPhase = 0.5;
                animPeriod = 0;
            };
        };
    };

    class GVAR(helper): Helicopter_Base_F {
        author = "KoffeinFlummi";
        scope = 1;
        model = QPATHTOF(data\helper.p3d);
        class ACE_Actions {};
        class Turrets {};
        class TransportItems {};
    };

    class Helicopter_Base_H;
    class Heli_Light_02_base_F: Helicopter_Base_H {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{1.41, 1.38, 0}, {-1.41, 1.38, 0}};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);
    };
    class Heli_Attack_02_base_F: Helicopter_Base_F {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{1.25, 1.5, -0.6}, {-1.1, 1.5, -0.6}};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);
    };
    class Heli_Transport_01_base_F: Helicopter_Base_H {
        GVAR(enabled) = 2;
        GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
        GVAR(friesType) = "ACE_friesAnchorBar";
        GVAR(friesAttachmentPoint)[] = {0.065, 2.2, -0.15};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);
        EQUIP_FRIES_ATTRIBUTE;
    };
    class Heli_Transport_02_base_F: Helicopter_Base_H {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{0.94, -4.82, -1.16}, {-0.94, -4.82, -1.16}};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);

        class UserActions {
            class Ramp_Open;
            class Ramp_Close: Ramp_Open {
                condition = QUOTE([ARR_5(this,'CargoRamp_Open',[[0],[1],[2]])] call FUNC(canCloseRamp));
            };
        };
    };
    class Heli_Transport_03_base_F: Helicopter_Base_H {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{0.75, -5.29, -0.11}, {-0.87, -5.29, -0.11}};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);

        class UserActions {
            class Ramp_Open;
            class Ramp_Close: Ramp_Open {
                condition = QUOTE([ARR_5(this,'Door_rear_source',[[0],[3],[4]])] call FUNC(canCloseRamp));
            };
        };
    };
    class Heli_light_03_base_F: Helicopter_Base_F {
        GVAR(enabled) = 2;
        GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
        GVAR(friesType) = "ACE_friesGantryReverse";
        GVAR(friesAttachmentPoint)[] = {-1.04, 2.5, -0.34};
        EQUIP_FRIES_ATTRIBUTE;
    };
    class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
        GVAR(enabled) = 2;
        GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
        GVAR(friesType) = "ACE_friesGantry";
        GVAR(friesAttachmentPoint)[] = {-1.07, 3.26, -0.5};
        EQUIP_FRIES_ATTRIBUTE;
    };
    class Heli_Transport_04_base_F: Helicopter_Base_H {
        class UserActions;
    };
    class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{1.03, 1.6, -0.23}, {1.03, -1.36, -0.23}, {-1.23, 1.6, -0.23}, {-1.23, -1.36, -0.23}};
    };
    class O_Heli_Transport_04_covered_F: Heli_Transport_04_base_F {
        GVAR(enabled) = 1;
        GVAR(ropeOrigins)[] = {{0.83, -4.7, -0.03}, {-1.02, -4.7, -0.03}};
        GVAR(onPrepare) = QFUNC(onPrepareCommon);
        GVAR(onCut) = QFUNC(onCutCommon);

        class UserActions: UserActions {
            class CloseDoor_6;
            class Ramp_Close: CloseDoor_6 {
                condition = QUOTE([ARR_6(this,'Door_6_source',[[0],[1],[2],[3]])] call FUNC(canCloseRamp));
            };
        };
    };
};