private static List <Entity> GetTransportHookEntities(TransportHookType hookType)
        {
            Vehicle playerAirVehicle = Util.GetVehiclePlayerIsIn();

            List <Entity> nearbyEntities = new List <Entity>(50);

            if (hookType == TransportHookType.MULTIPLE)
            {
                nearbyEntities.AddRange(World.GetNearbyEntities(playerAirVehicle.Position, TransportEntitiesRadius));
            }
            else if (hookType == TransportHookType.SINGLE)
            {
                nearbyEntities.Add(GetNearestTransportEntity(playerAirVehicle.Position, TransportEntitiesRadius));
                //nearbyEntities.AddRange(World.GetNearbyEntities(playerAirVehicle.Position, TransportEntitiesRadius));
            }
            //else if (hookType == TransportHookType.PRECISE)
            //{
            //    RaycastResult rayResult = World.RaycastCapsule(playerAirVehicle.Position, (-playerAirVehicle.UpVector),
            //                                (TransportEntitiesRadius * 2f), 3f, IntersectOptions.Everything);

            //    if (rayResult.DitHitEntity)
            //    {
            //        nearbyEntities.Add(rayResult.HitEntity);
            //    }
            //}

            return(nearbyEntities);
        }
 public static void AttachTransportHooksProc(TransportHookType hookType)
 {
     try
     {
         if (Game.Player.Character.IsAlive && Game.Player.Character.IsSittingInVehicle())
         {
             if (Game.Player.Character.IsInFlyingVehicle)
             {
                 CreateAirVehicleTransportHooks(hookType);
             }
         }
     }
     catch (Exception exc)
     {
         UI.Notify("VRope AttachTransportHooks() Error:\n" + GetErrorMessage(exc));
     }
 }
        //public static void CreateLandVehicleTransportHooks(TransportHookType hookType)
        //{
        //    try
        //    {
        //        //if (HookFilter.DefaultFilters[CurrentTransportHookFilterIndex].filterValue.Contains("GTA.Ped"))
        //        //    hookType = TransportHookType.SINGLE;

        //        List<Entity> transportEntities = GetTransportHookEntities(hookType);
        //        Entity playerFlyingVehicle = Util.GetVehiclePlayerIsIn();

        //        for (int i = 0; i < transportEntities.Count; i++)
        //        {
        //            Entity entity = transportEntities[i];

        //            if (!CheckTransportHookPermission(entity))
        //                continue;

        //            Entity hookEntity1 = (!Util.IsPed(entity) ? Game.Player.Character : playerFlyingVehicle);

        //            HookPair transHook = new HookPair();
        //            TransportHookMode hookMode = TransportHookMode.CENTER;

        //            transHook.isTransportHook = true;
        //            transHook.ropeType = TransportHooksRopeType;
        //            transHook.entity1 = hookEntity1;
        //            transHook.entity2 = entity;

        //            if (!Util.IsPed(entity) && hookType == TransportHookType.SINGLE)
        //            {
        //                hookMode = AllTransportHookModes[CurrentTransportHookModeIndex].first;
        //            }
        //            else if (hookType == TransportHookType.MULTIPLE)
        //            {
        //                transHook.hookOffset1 = Util.GetRandom2DPositionAround(Vector3.Zero, 0.31f);
        //            }

        //            switch (hookMode)
        //            {
        //                case TransportHookMode.CENTER:
        //                    CreateTransportHookCenterMode(transHook); break;

        //                case TransportHookMode.LEFT_RIGHT:
        //                    CreateTransportHookLeftRightMode(transHook); break;

        //            }
        //        }
        //    }
        //    catch (Exception exc)
        //    {
        //        UI.Notify("VRope CreateAirVehicleTransportHooks() Error: " + GetErrorMessage(exc));
        //    }
        //}

        public static void CreateAirVehicleTransportHooks(TransportHookType hookType)
        {
            try
            {
                List <Entity> transportEntities   = GetTransportHookEntities(hookType);
                Entity        playerFlyingVehicle = Util.GetVehiclePlayerIsIn();

                for (int i = 0; i < transportEntities.Count; i++)
                {
                    Entity entity = transportEntities[i];

                    if (!CheckTransportHookPermission(entity))
                    {
                        continue;
                    }

                    Entity hookEntity1 = (!Util.IsPed(entity) ? Game.Player.Character : playerFlyingVehicle);

                    HookPair          transHook = new HookPair();
                    TransportHookMode hookMode  = TransportHookMode.CENTER;

                    transHook.isTransportHook = true;
                    transHook.ropeType        = TransportHooksRopeType;
                    transHook.entity1         = hookEntity1;
                    transHook.entity2         = entity;

                    //if (!Util.IsPed(entity) && hookType == TransportHookType.SINGLE)
                    if (hookType == TransportHookType.SINGLE)
                    {
                        hookMode = AllTransportHookModes[CurrentTransportHookModeIndex].first;
                    }
                    else if (hookType == TransportHookType.MULTIPLE)
                    {
                        transHook.hookOffset1 = Util.GetRandom2DPositionAround(Vector3.Zero, 0.31f);
                    }

                    if (Util.IsPed(entity))
                    {
                        hookMode = TransportHookMode.CENTER;
                    }

                    switch (hookMode)
                    {
                    case TransportHookMode.CENTER:
                        CreateTransportHookCenterMode(transHook); break;

                    case TransportHookMode.LEFT_RIGHT:
                        CreateTransportHookLeftRightMode(transHook); break;

                    case TransportHookMode.FRONT_BACK:
                        CreateTransportHookFrontBackMode(transHook); break;
                        //case TransportHookMode.CROSS:
                        //    CreateTransportHookCrossMode(transHook); break;
                    }
                }
            }
            catch (Exception exc)
            {
                UI.Notify("VRope CreateAirVehicleTransportHooks() Error: " + GetErrorMessage(exc));
            }
        }