#define MACRO_REARM_TRUCK_ACTIONS \
        class ACE_Actions: ACE_Actions { \
            class ACE_MainActions: ACE_MainActions { \
                class EGVAR(rearm,TakeAmmo) { \
                    displayName = ECSTRING(rearm,TakeAmmo); \
                    distance = 7; \
                    condition = QUOTE(_this call EFUNC(rearm,canTakeAmmo)); \
                    insertChildren = QUOTE(_target call EFUNC(rearm,addRearmActions)); \
                    exceptions[] = {"isNotInside"}; \
                    showDisabled = 0; \
                    priority = 2; \
                    icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \
                }; \
                class EGVAR(rearm,StoreAmmo) { \
                    displayName = ECSTRING(rearm,StoreAmmo); \
                    distance = 7; \
                    condition = QUOTE(_this call EFUNC(rearm,canStoreAmmo)); \
                    statement = QUOTE(_this call EFUNC(rearm,storeAmmo)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \
                }; \
            }; \
        };

#define MACRO_REFUEL_ACTIONS \
    class ACE_Actions: ACE_Actions { \
        class ACE_MainActions: ACE_MainActions { \
            class EGVAR(refuel,Refuel) { \
                displayName = ECSTRING(refuel,Refuel); \
                distance = 7; \
                condition = "true"; \
                statement = ""; \
                showDisabled = 0; \
                priority = 2; \
                icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                class EGVAR(refuel,TakeNozzle) { \
                    displayName = ECSTRING(refuel,TakeNozzle); \
                    condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canTakeNozzle)); \
                    statement = QUOTE([ARR_3(_player,_target,objNull)] call EFUNC(refuel,TakeNozzle)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                }; \
                class EGVAR(refuel,CheckFuelCounter) { \
                    displayName = ECSTRING(refuel,CheckFuelCounter); \
                    condition = "true"; \
                    statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,readFuelCounter)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                }; \
                class EGVAR(refuel,CheckFuel) { \
                    displayName = ECSTRING(refuel,CheckFuel); \
                    condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canCheckFuel)); \
                    statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,checkFuel)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                }; \
                class EGVAR(refuel,Connect) { \
                    displayName = ECSTRING(refuel,Connect); \
                    condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canConnectNozzle)); \
                    statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,connectNozzle)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                }; \
                class EGVAR(refuel,Return) { \
                    displayName = ECSTRING(refuel,Return); \
                    condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canReturnNozzle)); \
                    statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,returnNozzle)); \
                    exceptions[] = {"isNotInside"}; \
                    icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \
                }; \
            }; \
        }; \
    };

class CfgVehicles {
    class LandVehicle;
    class Tank: LandVehicle {
        class NewTurret;
    };
    class Tank_F: Tank {
        class Turrets {
            class MainTurret: NewTurret {
                class Turrets {
                    class CommanderOptics;
                };
            };
        };
    };
    class Car: LandVehicle {
        class ACE_Actions {
            class ACE_MainActions {};
        };
    };
    class Car_F: Car {
        class ViewPilot;
        class NewTurret;
    };
    class Wheeled_APC_F: Car_F {
        class NewTurret;
        class Turrets {
            class MainTurret: NewTurret
            {
                class ViewOptics;
            };
        };
        class CommanderOptics;
    };
    class rhs_bmd_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 300;
        class Turrets: Turrets {
            class CommanderOptics: NewTurret {
                EGVAR(fcs,enabled) = 0;
            };
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
            };
            class GPMGTurret1: NewTurret {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_bmp1tank_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 460;
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
            };
            class Com_BMP1: NewTurret {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_bmp_base: rhs_bmp1tank_base {};
    class rhs_bmp1_vdv: rhs_bmp_base {};
    class rhs_bmp2e_vdv : rhs_bmp1_vdv {
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                class Turrets: Turrets {
                    class CommanderOptics : CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
        };
    };
    class rhs_bmp3tank_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 460;
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
            class GPMGTurret1: NewTurret {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_btr_base: Wheeled_APC_F {
        EGVAR(refuel,fuelCapacity) = 300;
        class Turrets: Turrets {
            class MainTurret: MainTurret  {
                EGVAR(fcs,enabled) = 0;
            };
            class CommanderOptics: CommanderOptics {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_a3spruttank_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 400;
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics
                    {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
        };
    };
    class rhs_bmd4_vdv: rhs_a3spruttank_base {
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {};
                };
            };
            class GPMGTurret1: NewTurret {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_bmd4m_vdv: rhs_bmd4_vdv {
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {};
                };
            };
            class GPMGTurret1: GPMGTurret1 {};
            class GPMGTurret2: GPMGTurret1 {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };
    class rhs_a3t72tank_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 1200;
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                    class CommanderMG: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
        };
    };
    class rhs_t72bb_tv: rhs_a3t72tank_base {
        ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}};
        ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint"}}};
    };
    class rhs_t72bc_tv: rhs_a3t72tank_base {
        ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}};
        ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint"}}};
    };
    class rhs_t72bd_tv: rhs_a3t72tank_base {
        class rhs_t72bd_tv: rhs_a3t72tank_base {
            ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}};
            ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint"}}};
        };
    };
    class rhs_t90_tv: rhs_t72bd_tv {
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
        };
    };
    class rhs_tank_base: Tank_F {
        EGVAR(refuel,fuelCapacity) = 1200;
        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
                class Turrets: Turrets {
                    class CommanderOptics: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                    class CommanderMG: CommanderOptics {
                        EGVAR(fcs,enabled) = 0;
                    };
                };
            };
        };
    };

    class rhs_infantry_msv_base;
    class rhs_pilot_base : rhs_infantry_msv_base
    {
        ace_gforcecoef = 0.55;
    };

    class O_Plane_CAS_02_F;
    class RHS_su25_base : O_Plane_CAS_02_F {
        EGVAR(refuel,fuelCapacity) = 3600;
    };

    class Helicopter_Base_F;
    class Helicopter_Base_H: Helicopter_Base_F {
        class EventHandlers;
    };
    class Heli_Light_02_base_F: Helicopter_Base_H {};
    class RHS_Mi8_base : Heli_Light_02_base_F {
        EGVAR(refuel,fuelCapacity) = 3700;
        EGVAR(fastroping,enabled) = 0;
        class EventHandlers: EventHandlers {
            class RHS_EventHandlers;
        };
    };

    class RHS_Mi8amt_base: RHS_Mi8_base {
        EGVAR(fastroping,enabled) = 1;
        EGVAR(fastroping,ropeOrigins)[] = {{-1.13, 4.67, -0.89}};
        EGVAR(fastroping,onCut) = QFUNC(onCut);
        EGVAR(fastroping,onPrepare) = QFUNC(onPrepare);

        class UserActions {
            class openDoor;
            class closeDoor_L: openDoor {
                condition = QUOTE((this doorPhase 'LeftDoor' > 0.5) && {alive this} && {!(this getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)])});
            };
        };

        class EventHandlers: EventHandlers {
            class RHS_EventHandlers: RHS_EventHandlers {
                getOut = QUOTE(if !((_this select 0) getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)]) then {_this call rhs_fnc_mi8_doors});
            };
        };
    };

    class RHS_Mi8_VVS_Base: RHS_Mi8_base {};
    class RHS_Mi8mt_vvs: RHS_Mi8_VVS_Base {};
    class RHS_Mi8mt_Cargo_vvs: RHS_Mi8mt_vvs {
        EGVAR(fastroping,enabled) = 1;
        EGVAR(fastroping,ropeOrigins)[] = {{-1.13, 4.67, -0.89}};
        EGVAR(fastroping,onCut) = QFUNC(onCut);
        EGVAR(fastroping,onPrepare) = QFUNC(onPrepare);

        class UserActions {
            class openDoor_L;
            class closeDoor_L: openDoor_L {
                condition = QUOTE((this doorPhase 'LeftDoor' > 0.5) && {alive this} && {!(this getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)])});
            };
        };

        class EventHandlers: EventHandlers {
            class RHS_EventHandlers: RHS_EventHandlers {
                getOut = QUOTE(if !((_this select 0) getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)]) then {_this call rhs_fnc_mi8_doors});
            };
        };
    };

    class Heli_Attack_02_base_F;
    class RHS_Ka52_base : Heli_Attack_02_base_F {
        EGVAR(refuel,fuelCapacity) = 1870;
        EGVAR(fastroping,enabled) = 0;
    };

    class RHS_Mi24_base : Heli_Attack_02_base_F {
        EGVAR(refuel,fuelCapacity) = 1851;
        EGVAR(fastroping,enabled) = 0;
    };

    class rhs_t80b : rhs_tank_base {
        EGVAR(refuel,fuelCapacity) = 1100;
    };
    class rhs_t80bv: rhs_t80b {
        ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}};
        ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint"}}};
    };
        
    class Truck_F: Car_F {};
    class RHS_Ural_BaseTurret: Truck_F {
        EGVAR(refuel,fuelCapacity) = 360;
    };

    class RHS_Ural_Base: RHS_Ural_BaseTurret {};
    class RHS_Ural_MSV_Base: RHS_Ural_Base {};
    class RHS_Ural_Support_MSV_Base_01: RHS_Ural_MSV_Base {};
    class RHS_Ural_Fuel_MSV_01: RHS_Ural_Support_MSV_Base_01 {
        transportFuel = 0;
        MACRO_REFUEL_ACTIONS
        EGVAR(refuel,hooks)[] = {{-0.05,-3.6,-0.45}};
        EGVAR(refuel,fuelCargo) = 10000;
    };

    class rhs_truck : Truck_F {
        EGVAR(refuel,fuelCapacity) = 210;
    };

    class rhs_gaz66_vmf: rhs_truck {};
    class rhs_gaz66_repair_base: rhs_gaz66_vmf {
        transportRepair = 0;
        EGVAR(repair,canRepair) = 1;
    };

    class rhs_gaz66_ammo_base: rhs_gaz66_vmf {
        transportAmmo = 0;
        MACRO_REARM_TRUCK_ACTIONS
    };

    class MRAP_02_base_F;
    class rhs_tigr_base : MRAP_02_base_F {
        EGVAR(refuel,fuelCapacity) = 138;
    };

    class Offroad_01_base_f;
    class RHS_UAZ_Base : Offroad_01_base_f {
        EGVAR(refuel,fuelCapacity) = 78;
    };

    class APC_Tracked_02_base_F: Tank_F {
        class Turrets: Turrets {
            class MainTurret: MainTurret {};
        };
    };

    class rhs_zsutank_base : APC_Tracked_02_base_F {
        EGVAR(refuel,fuelCapacity) = 515;

        class Turrets: Turrets {
            class MainTurret: MainTurret {
                EGVAR(fcs,enabled) = 0;
            };
        };
    };

    class rhs_btr60_base : rhs_btr_base {
        EGVAR(refuel,fuelCapacity) = 290;
    };
    class rhs_btr70_vmf : rhs_btr_base {
        EGVAR(refuel,fuelCapacity) = 350;
    };

    class rhs_btr70_msv : rhs_btr70_vmf {};
    class rhs_btr80_msv : rhs_btr70_msv {
        EGVAR(refuel,fuelCapacity) = 300;
    };

    class rhs_2s3tank_base : Tank_F {
        EGVAR(refuel,fuelCapacity) = 830;
    };

    class OTR21_Base : Truck_F {
        EGVAR(refuel,fuelCapacity) = 500;
    };
};