示例#1
0
    void OnKeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.H && group_members.Count < max_companions)
        {
            Ped player = Game.Player.Character;
            GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5);

            List <string> model_names = new List <string>();
            model_names.Add("a_c_husky");
            model_names.Add("a_c_retriever");
            model_names.Add("a_c_rottweiler");
            model_names.Add("a_c_shepherd");

            Random rnd = new Random();

            Ped companion = GTA.World.CreatePed(model_names[rnd.Next(0, model_names.Count - 1)], spawnLoc);
            group_members.Add(companion);

            int player_group = GTA.Native.Function.Call <int>(GTA.Native.Hash.GET_PED_GROUP_INDEX, player.Handle);
            GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_AS_GROUP_MEMBER, companion.Handle, player_group);

            companion.Task.ClearAllImmediately();
            GTA.Native.Function.Call(GTA.Native.Hash.TASK_COMBAT_HATED_TARGETS_IN_AREA, companion, 50000, 0);
            GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_KEEP_TASK, companion, true);
        }

        if (e.KeyCode == Keys.J)
        {
            group_members[group_members.Count - 1].Kill();
            group_members.RemoveAt(group_members.Count - 1);
        }
    }
示例#2
0
        public Vector3 Nearest_Location(Dictionary <int, Vector3> dictionary, GTA.Math.Vector3 Target_Position)
        {
            //Import_Details.instance.Locations_List.Clear();
            if (dictionary.Count == 0)
            {
                GTA.UI.Notification.Show("No nearest location found");
                return(Vector3.Zero);
            }

            float lastreading = 9999f, currentreading = 0f;
            int   final_key = 0;

            foreach (var item in dictionary)
            {
                currentreading = GTA.World.GetDistance(Target_Position, item.Value);

                if (currentreading < lastreading)
                {
                    lastreading = currentreading;
                    final_key   = item.Key;
                }
                //Import_Details.instance.Locations_List.Add(item.Value);
            }
            GTA.UI.Notification.Show("Nearest Location is " + lastreading.ToString("0.##") + " meters away");

            return(dictionary[final_key]);
        }
示例#3
0
        public static Vector3 RaycastEverything(Vector2 screenCoord, Vector3 camPos, Vector3 camRot)
        {
            const float raycastToDist   = 100.0f;
            const float raycastFromDist = 1f;

            var target3D = ScreenRelToWorld(camPos, camRot, screenCoord);
            var source3D = camPos;

            Ped    PlayerChar   = Game.Player.Character;
            Entity ignoreEntity = PlayerChar;

            if (PlayerChar.IsInVehicle())
            {
                ignoreEntity = PlayerChar.CurrentVehicle;
            }

            var dir = (target3D - source3D);

            dir.Normalize();
            var raycastResults = World.Raycast(source3D + dir * raycastFromDist,
                                               source3D + dir * raycastToDist,
                                               (IntersectOptions)(1 | 16 | 256 | 2 | 4 | 8)// | peds + vehicles
                                               , ignoreEntity);

            if (raycastResults.DidHit)
            {
                return(raycastResults.HitPosition);
            }

            return(camPos + dir * raycastToDist);
        }
示例#4
0
 void Spawn(MenuButton sender, KeyValuePair <VehicleHash, int> vehicles)
 {
     {
         GTA.Math.Vector3 spawn_vehicle = player.Position + (player.ForwardVector * 10);
         World.CreateVehicle(vehicles.Key, spawn_vehicle);
         UI.Notify("Vehicle Spawned!", true);
     }
 }
示例#5
0
文件: Util.cs 项目: Landrut/CherryMP
 public static Vector3 LerpVector(Vector3 start, Vector3 end, float speed)
 {
     return(new Vector3()
     {
         X = start.X + (end.X - start.X) * speed,
         Y = start.Y + (end.Y - start.Y) * speed,
         Z = start.Z + (end.Z - start.Z) * speed,
     });
 }
示例#6
0
文件: Util.cs 项目: Landrut/CherryMP
 public static Vector3 LinearVectorLerp(Vector3 start, Vector3 end, long currentTime, long duration)
 {
     return(new Vector3()
     {
         X = LinearFloatLerp(start.X, end.X, currentTime, duration),
         Y = LinearFloatLerp(start.Y, end.Y, currentTime, duration),
         Z = LinearFloatLerp(start.Z, end.Z, currentTime, duration),
     });
 }
示例#7
0
 public static CherryMPShared.Vector3 ToLVector(this GTA.Math.Vector3 vec)
 {
     return(new CherryMPShared.Vector3()
     {
         X = vec.X,
         Y = vec.Y,
         Z = vec.Z,
     });
 }
示例#8
0
        public static PointF WorldToScreen(Vector3 worldCoords)
        {
            var num1 = new OutputArgument();
            var num2 = new OutputArgument();

            if (!Function.Call <bool>(Hash.GET_SCREEN_COORD_FROM_WORLD_COORD, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2))
            {
                return(new PointF());
            }
            return(new PointF(num1.GetResult <float>(), num2.GetResult <float>()));
        }
示例#9
0
        private bool DisplayVehicleDriveBy()
        {
            if (!IsShooting || CurrentWeapon == 0 || VehicleSeat != -1 || !WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)VehicleHash))
            {
                return(false);
            }

            var isRocket = WeaponDataProvider.IsVehicleWeaponRocket(CurrentWeapon);

            if (isRocket)
            {
                if (DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds < 1500)
                {
                    return(true);
                }
                _lastRocketshot = DateTime.Now;
            }

            var isParallel = WeaponDataProvider.DoesVehicleHaveParallelWeapon(unchecked ((VehicleHash)VehicleHash), isRocket);

            var muzzle = WeaponDataProvider.GetVehicleWeaponMuzzle(unchecked ((VehicleHash)VehicleHash), isRocket);

            if (isParallel && _leftSide)
            {
                muzzle = new Vector3(muzzle.X * -1f, muzzle.Y, muzzle.Z);
            }
            _leftSide = !_leftSide;

            var start = MainVehicle.GetOffsetInWorldCoords(muzzle);
            var end   = start + Main.RotationToDirection(VehicleRotation) * 100f;
            var hash  = CurrentWeapon;
            var speed = 0xbf800000;

            if (isRocket)
            {
                speed = 0xbf800000;
            }
            else if ((VehicleHash)VehicleHash == GTA.VehicleHash.Savage || (VehicleHash)VehicleHash == GTA.VehicleHash.Hydra || (VehicleHash)VehicleHash == GTA.VehicleHash.Lazer)
            {
                hash = unchecked ((int)WeaponHash.Railgun);
            }
            else
            {
                hash = unchecked ((int)WeaponHash.CombatPDW);
            }


            var damage = IsFriend() ? 0 : 75;

            Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X, end.Y, end.Z, damage, true, hash, Character, true, false, speed);

            return(false);
        }
示例#10
0
    public static GTA.Math.Vector3 SmoothStep(GTA.Math.Vector3 start, GTA.Math.Vector3 end, float amount)
    {
        GTA.Math.Vector3 vector;

        amount = (amount > 1.0f) ? 1.0f : ((amount < 0.0f) ? 0.0f : amount);
        amount = (amount * amount) * (3.0f - (2.0f * amount));

        vector.X = start.X + ((end.X - start.X) * amount);
        vector.Y = start.Y + ((end.Y - start.Y) * amount);
        vector.Z = start.Z + ((end.Z - start.Z) * amount);

        return(vector);
    }
示例#11
0
        public static Vector3 RotationToDirection(Vector3 rotation)
        {
            var z   = DegToRad(rotation.Z);
            var x   = DegToRad(rotation.X);
            var num = Math.Abs(Math.Cos(x));

            return(new Vector3
            {
                X = (float)(-Math.Sin(z) * num),
                Y = (float)(Math.Cos(z) * num),
                Z = (float)Math.Sin(x)
            });
        }
示例#12
0
        public static bool WorldToScreenRel(Vector3 worldCoords, out Vector2 screenCoords)
        {
            var num1 = new OutputArgument();
            var num2 = new OutputArgument();

            if (!Function.Call <bool>(Hash.GET_SCREEN_COORD_FROM_WORLD_COORD, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2))
            {
                screenCoords = new Vector2();
                return(false);
            }
            screenCoords = new Vector2((num1.GetResult <float>() - 0.5f) * 2, (num2.GetResult <float>() - 0.5f) * 2);
            return(true);
        }
示例#13
0
        public static void TeleportToWaypoint()
        {
            Blip wpBlip = new Blip(Function.Call <int>(Hash.GET_FIRST_BLIP_INFO_ID, 8));

            if (Function.Call <bool>(Hash.IS_WAYPOINT_ACTIVE))
            {
                GTA.Math.Vector3 wpVec = Function.Call <GTA.Math.Vector3>(Hash.GET_BLIP_COORDS, wpBlip);
                Game.Player.Character.Position = wpVec;
            }
            else
            {
                UI.ShowSubtitle("Waypoint not active.");
            }
        }
示例#14
0
    void GetGameData()
    {
        //GPS & Coords
        mapDestination   = World.GetWaypointPosition(); //https://github.com/Ric4o/GTAV-EnhancedNativeTrainer/blob/master/EnhancedNativeTrainer/src/features/teleportation.cpp
        mapDestination.Z = World.GetGroundHeight(mapDestination);
        Function.Call(Hash.GENERATE_DIRECTIONS_TO_COORD, mapDestination.X, mapDestination.Y, mapDestination.Z, 1, direction, vehicleOut, distance);

        speed       = vehicle.Speed;
        heading     = vehicle.Heading;
        rot         = vehicle.Rotation;
        coordinates = vehicle.Position;

        onRoad = Function.Call <bool>(Hash.IS_POINT_ON_ROAD, coordinates.X, coordinates.Y, coordinates.Z, vehicle);
    }
示例#15
0
文件: Util.cs 项目: Landrut/CherryMP
        public static Vector3 ToEuler(this Quaternion q)
        {
            var pitchYawRoll = new Vector3();

            double sqw = q.W * q.W;
            double sqx = q.X * q.X;
            double sqy = q.Y * q.Y;
            double sqz = q.Z * q.Z;

            pitchYawRoll.Y = (float)Math.Atan2(2f * q.X * q.W + 2f * q.Y * q.Z, 1 - 2f * (sqz + sqw));   // Yaw
            pitchYawRoll.X = (float)Math.Asin(2f * (q.X * q.Z - q.W * q.Y));                             // Pitch
            pitchYawRoll.Z = (float)Math.Atan2(2f * q.X * q.Y + 2f * q.Z * q.W, 1 - 2f * (sqy + sqz));

            return(pitchYawRoll);
        }
示例#16
0
    public static Vector3 DirectionToRotation(GTA.Math.Vector3 direction)
    {
        direction.Normalize();

        var x = Math.Atan2(direction.Z, Math.Sqrt(direction.Y * direction.Y + direction.X * direction.X));
        var y = 0;
        var z = -Math.Atan2(direction.X, direction.Y);

        return(new Vector3
        {
            X = (float)RadToDeg(x),
            Y = (float)RadToDeg(y),
            Z = (float)RadToDeg(z)
        });
    }
示例#17
0
        }//Default constructor ends here

        private void Set_Destination_Marker_Map()
        {
            if (Game.IsWaypointActive)
            {
                //var waypoint = World.GetWaypointPosition();
                Blip wpBlip = new Blip(Function.Call <int>(Hash.GET_FIRST_BLIP_INFO_ID, 8));

                if (Function.Call <bool>(Hash.IS_WAYPOINT_ACTIVE))
                {
                    GTA.Math.Vector3 wpVec = Function.Call <GTA.Math.Vector3>(Hash.GET_BLIP_COORDS, wpBlip);
                    Destionation = World.GetNextPositionOnStreet(wpVec.Around(10f));
                    GTA.UI.Notify("Destination Set");
                }
            }
            else
            {
                GTA.UI.Notify("Destination not found, driver will now cruise around");
            }
        }
示例#18
0
        public static Vector3 ScreenRelToWorld(Vector3 camPos, Vector3 camRot, Vector2 coord)
        {
            var camForward = RotationToDirection(camRot);
            var rotUp      = camRot + new Vector3(10, 0, 0);
            var rotDown    = camRot + new Vector3(-10, 0, 0);
            var rotLeft    = camRot + new Vector3(0, 0, -10);
            var rotRight   = camRot + new Vector3(0, 0, 10);

            var camRight = RotationToDirection(rotRight) - RotationToDirection(rotLeft);
            var camUp    = RotationToDirection(rotUp) - RotationToDirection(rotDown);

            var rollRad = -DegToRad(camRot.Y);

            var camRightRoll = camRight * (float)Math.Cos(rollRad) - camUp * (float)Math.Sin(rollRad);
            var camUpRoll    = camRight * (float)Math.Sin(rollRad) + camUp * (float)Math.Cos(rollRad);

            var     point3D = camPos + camForward * 10.0f + camRightRoll + camUpRoll;
            Vector2 point2D;

            if (!WorldToScreenRel(point3D, out point2D))
            {
                return(camPos + camForward * 10.0f);
            }
            var     point3DZero = camPos + camForward * 10.0f;
            Vector2 point2DZero;

            if (!WorldToScreenRel(point3DZero, out point2DZero))
            {
                return(camPos + camForward * 10.0f);
            }

            const double eps = 0.001;

            if (Math.Abs(point2D.X - point2DZero.X) < eps || Math.Abs(point2D.Y - point2DZero.Y) < eps)
            {
                return(camPos + camForward * 10.0f);
            }
            var scaleX     = (coord.X - point2DZero.X) / (point2D.X - point2DZero.X);
            var scaleY     = (coord.Y - point2DZero.Y) / (point2D.Y - point2DZero.Y);
            var point3Dret = camPos + camForward * 10.0f + camRightRoll * scaleX + camUpRoll * scaleY;

            return(point3Dret);
        }
示例#19
0
    //Use this for cathing the KeyUp Event
    void OnKeyUp(object sender, KeyEventArgs e)
    {
        //Set SpawnPos for Team A
        if (e.KeyCode == Keys.H)
        {
            //A Reference to the Player
            Ped player = Game.Player.Character;

            //Use this for one meter in front of the player
            //spawnLoc = player.Position + (player.ForwardVector * 1);

            //Define the playerpos as the spawnpos for the team
            spawnLocA = player.Position;

            //notice that location is defined
            IsSpawnLocADefined = true;

            //A Blip for the spawn pos
            Blip blip = World.CreateBlip(spawnLocA, 1.5f);
            blip.Color = BlipColor.Red;
            blip.Scale = 5f;
            UI.Notify("Point A is ready");
        }

        //Set SpawnPos for Team B
        if (e.KeyCode == Keys.J)
        {
            //for code comments see a few lines up
            Ped player = Game.Player.Character;
            spawnLocB = player.Position;

            IsSpawnLocBDefined = true;

            Blip blip = World.CreateBlip(spawnLocB, 1.5f);
            blip.Color = BlipColor.Yellow;
            blip.Scale = 5f;

            //feedback
            UI.Notify("Point B is ready");
        }
    }
示例#20
0
        public static int GetPedSpeed(Vector3 firstVector, Vector3 secondVector)
        {
            float speed = (firstVector - secondVector).Length();

            if (speed < 0.02f)
            {
                return(0);
            }
            else if (speed >= 0.02f && speed < 0.05f)
            {
                return(1);
            }
            else if (speed >= 0.05f && speed < 0.12f)
            {
                return(2);
            }
            else if (speed >= 0.12f)
            {
                return(3);
            }
            return(0);
        }
示例#21
0
    //Executes on releasing the key
    void OnKeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.H && maxSpawnedModels < 5)
        {
            Ped player = Game.Player.Character;
            GTA.Math.Vector3 spawnLocation = player.Position + (player.ForwardVector * 5);

            //The list of dog models
            List <string> dogList = new List <string>();
            dogList.Add("a_c_chop");
            dogList.Add("a_c_retriever");
            dogList.Add("a_c_shepherd");
            dogList.Add("a_c_rottweiler");
            dogList.Add("a_c_husky");

            //string modelName = "a_c_rottweiler";
            Random rnd     = new Random();
            Ped    spawned = GTA.World.CreatePed(dogList[rnd.Next(0, dogList.Count)], spawnLocation);
            spawnedModels.Add(spawned);


            int playerGroup = GTA.Native.Function.Call <int>(GTA.Native.Hash.GET_PED_GROUP_INDEX, player.Handle);
            GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_AS_GROUP_MEMBER, spawned.Handle, playerGroup);


            spawned.Task.ClearAllImmediately();
            GTA.Native.Function.Call(GTA.Native.Hash.TASK_COMBAT_HATED_TARGETS_IN_AREA, spawned, 50000, 0);
            GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_KEEP_TASK, spawned, true);
        }

        //When the J key is pressed
        if (e.KeyCode == Keys.J)
        {
            spawnedModels[spawnedModels.Count - 1].Kill();
            spawnedModels.RemoveAt(spawnedModels.Count - 1);
        }
    }
示例#22
0
 public GTAVector(Vector3 v)
 {
     X = v.X;
     Y = v.Y;
     Z = v.Z;
 }
示例#23
0
        private void UpdateVehicleMountedWeapon()
        {
            if (WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)VehicleHash, VehicleSeat))
            {
                var delay = 30;
                //if ((VehicleHash) VehicleHash == GTA.Native.VehicleHash.Rhino) delay = 300;

                if (Game.GameTime - _lastVehicleAimUpdate > delay)
                {
                    Function.Call(Hash.TASK_VEHICLE_AIM_AT_COORD, Character, AimCoords.X, AimCoords.Y,
                                  AimCoords.Z);
                    _lastVehicleAimUpdate = Game.GameTime;
                }

                if (IsShooting)
                {
                    if (((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino &&
                         DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 1000) ||
                        ((VehicleHash)VehicleHash != GTA.VehicleHash.Rhino))
                    {
                        _lastRocketshot = DateTime.Now;

                        var baseTurretPos =
                            MainVehicle.GetOffsetInWorldCoords(
                                WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, false));
                        var doesBaseTurretDiffer =
                            WeaponDataProvider.DoesVehiclesMuzzleDifferFromVehicleGunPos(
                                (VehicleHash)VehicleHash);
                        var barrellLength = WeaponDataProvider.GetVehicleTurretLength((VehicleHash)VehicleHash);

                        var speed = 0xbf800000;
                        var hash  = WeaponHash.CombatPDW;
                        if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino)
                        {
                            hash = (WeaponHash)1945616459;
                        }

                        Vector3 tPos = baseTurretPos;
                        if (
                            WeaponDataProvider.DoesVehicleHaveParallelWeapon((VehicleHash)VehicleHash, false) &&
                            VehicleSeat == 1)
                        {
                            var muzzle = WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash,
                                                                                   false);
                            tPos =
                                MainVehicle.GetOffsetInWorldCoords(new Vector3(muzzle.X * -1f, muzzle.Y, muzzle.Z));
                        }

                        if (doesBaseTurretDiffer)
                        {
                            var kekDir = (AimCoords - tPos);
                            kekDir.Normalize();
                            var rot    = Main.DirectionToRotation(kekDir);
                            var newDir = Main.RotationToDirection(new Vector3(0, 0, rot.Z));
                            newDir.Normalize();
                            tPos = tPos +
                                   newDir *
                                   WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, true)
                                   .Length();
                        }


                        var turretDir = (AimCoords - tPos);
                        turretDir.Normalize();
                        var start = tPos + turretDir * barrellLength;
                        var end   = start + turretDir * 100f;

                        _lastStart = start;
                        _lastEnd   = end;

                        var damage = WeaponDataProvider.GetWeaponDamage(WeaponHash.Minigun);
                        if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino)
                        {
                            damage = 210;
                        }

                        if (IsFriend())
                        {
                            damage = 0;
                        }

                        Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X,
                                      end.Y, end.Z, damage, true, (int)hash, Character, true, false, speed);
                    }
                }
            }
            else if (!WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)VehicleHash) || VehicleSeat != -1)
            {
                if (Character.Weapons.Current.Hash != (WeaponHash)CurrentWeapon)
                {
                    //Function.Call(Hash.GIVE_WEAPON_TO_PED, Character, CurrentWeapon, 999, true, true);
                    //Function.Call(Hash.SET_CURRENT_PED_WEAPON, Character, CurrentWeapon, true);
                    //Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true);
                    //Character.Weapons.Select((WeaponHash) CurrentWeapon);
                    Character.Weapons.RemoveAll();
                    Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true);
                }

                if (IsShooting || IsAiming)
                {
                    if (!_lastDrivebyShooting)
                    {
                        Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, false, false, false, false);

                        Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z,
                                      0, 0, 0, unchecked ((int)FiringPattern.SingleShot));
                    }
                    else
                    {
                        Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, true, false, false, false);

                        Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z);
                    }

                    var rightSide = (VehicleSeat + 2) % 2 == 0;

                    if (WeaponDataProvider.NeedsFakeBullets(CurrentWeapon))
                    {
                        const string rightDict = "veh@driveby@first_person@passenger_right_handed@throw";
                        const string leftDict  = "veh@driveby@first_person@driver@throw";

                        string drivebyDict = rightSide ? rightDict : leftDict;

                        Function.Call(Hash.TASK_PLAY_ANIM_ADVANCED, Character, Util.Util.LoadDict(drivebyDict),
                                      "sweep_low", Character.Position.X, Character.Position.Y, Character.Position.Z, Character.Rotation.X,
                                      Character.Rotation.Y, Character.Rotation.Z, -8f, -8f, -1, 0, rightSide ? 0.6f : 0.3f, 0, 0);
                    }

                    if (IsShooting)
                    {
                        Function.Call(Hash.SET_PED_INFINITE_AMMO_CLIP, Character, true);
                        Function.Call(Hash.SET_PED_AMMO, Character, CurrentWeapon, 10);


                        if (AimPlayer != null && AimPlayer.Position != null)
                        {
                            AimCoords = AimPlayer.Position;
                            AimPlayer = null;
                        }

                        if (!WeaponDataProvider.NeedsFakeBullets(CurrentWeapon))
                        {
                            Function.Call(Hash.SET_PED_SHOOTS_AT_COORD, Character, AimCoords.X, AimCoords.Y, AimCoords.Z,
                                          true);
                        }
                        else if (DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 500)
                        {
                            _lastRocketshot = DateTime.Now;

                            var damage  = WeaponDataProvider.GetWeaponDamage((WeaponHash)CurrentWeapon);
                            var speed   = 0xbf800000;
                            var weaponH = (WeaponHash)CurrentWeapon;

                            if (IsFriend())
                            {
                                damage = 0;
                            }

                            var start = Character.GetBoneCoord(rightSide ? Bone.SKEL_R_Hand : Bone.SKEL_L_Hand);
                            var end   = AimCoords;

                            Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z,
                                          end.X,
                                          end.Y, end.Z, damage, true, (int)weaponH, Character, false, true, speed);
                        }
                    }

                    _lastVehicleAimUpdate = Game.GameTime;
                    _lastDrivebyShooting  = IsShooting || IsAiming;
                    Ped PlayerChar = Game.Player.Character;
                    if (Function.Call <bool>(Hash.HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY, PlayerChar, Character, true))
                    {
                        int boneHit    = -1;
                        var boneHitArg = new OutputArgument();

                        if (Function.Call <bool>(Hash.GET_PED_LAST_DAMAGE_BONE, PlayerChar, boneHitArg))
                        {
                            boneHit = boneHitArg.GetResult <int>();
                        }

                        LocalHandle them = new LocalHandle(Character.Handle, HandleType.GameHandle);
                        JavascriptHook.InvokeCustomEvent(api =>
                                                         api.invokeonLocalPlayerDamaged(them, CurrentWeapon, boneHit /*, playerHealth, playerArmor*/));
                    }

                    Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, Character);
                    Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, PlayerChar);
                }

                if (!IsShooting && !IsAiming && _lastDrivebyShooting && Game.GameTime - _lastVehicleAimUpdate > 200)
                {
                    Tasks task = Character.Task;
                    task.ClearAll();
                    task.ClearSecondary();
                    Function.Call(Hash.CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK, Character);
                    //Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                    //Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, 0, 0, 0);
                    task.ClearLookAt();
                    //GTA.UI.Screen.ShowNotification("Done shooting");
                    //GTA.UI.Screen.ShowSubtitle("Done Shooting1", 300);
                    _lastDrivebyShooting = false;
                }
            }
        }
示例#24
0
    //Use this for cathing the KeyUp Event
    void OnKeyUp(object sender, KeyEventArgs e)
    {
        //Set SpawnPos for Team A
        if (e.KeyCode == Keys.H)
        {
            //A Reference to the Player
            Ped player = Game.Player.Character;

            //Use this for one meter in front of the player
            //spawnLoc = player.Position + (player.ForwardVector * 1);

            //Define the playerpos as the spawnpos for the team
            spawnLocA = player.Position;

            //NO WANTED LEVEL, since you're on the COPS team
            GTA.Native.Function.Call(GTA.Native.Hash.SET_PLAYER_WANTED_LEVEL, player, 0, false);

            //notice that location is defined
            IsSpawnLocADefined = true;

            //A Blip for the spawn pos
            Blip blip = World.CreateBlip(spawnLocA, 1.5f);
            blip.Color = BlipColor.Red;
            blip.Scale = 5f;
            UI.Notify("Point A (Enemies) is ready");
        }

        //Set SpawnPos for Team B
        if (e.KeyCode == Keys.J)
        {
            //for code comments see a few lines up
            Ped player = Game.Player.Character;
            spawnLocB = player.Position;

            IsSpawnLocBDefined = true;

            Blip blip = World.CreateBlip(spawnLocB, 1.5f);
            blip.Color = BlipColor.Yellow;
            blip.Scale = 5f;

            //feedback
            UI.Notify("Point B (Allies) is ready");
        }

        //Activate & deactivate ped spawning on both teams

        /* simple script = 2 keys
         * if (e.KeyCode == Keys.K) {
         *  activar = true;
         *  UI.Notify("Peds will spawn");
         * }
         * if (e.KeyCode == Keys.L) {
         *  activar = false;
         *  UI.Notify("Peds won't spawn");
         * } */

        if (e.KeyCode == Keys.K) //change the K key to other key you want
        {
            activar = !activar;  //mod activated=true or false on each K key pulse (toggling)
            //debugging messages when it's activated or not
            if (activar)
            {
                UI.Notify("Peds will spawn"); //debugging messages when it's activated or not
            }
            else
            {
                UI.Notify("Peds won't spawn");
            }
        }
    }
示例#25
0
        public static GTABoundingBox2 ComputeBoundingBox(Entity e, Vector3 offset, float scale = 0.5f)
        {
            var m  = e.Model;
            var rv = new GTABoundingBox2
            {
                Min = new GTAVector2(float.PositiveInfinity, float.PositiveInfinity),
                Max = new GTAVector2(float.NegativeInfinity, float.NegativeInfinity)
            };
            Vector3 gmin;
            Vector3 gmax;

            m.GetDimensions(out gmin, out gmax);
            var bbox = new SharpDX.BoundingBox((SharpDX.Vector3) new GTAVector(gmin), (SharpDX.Vector3) new GTAVector(gmax));
            //Console.WriteLine(bbox.GetCorners()[0]);

            /*
             * for (int i = 0; i < bbox.GetCorners().Length; ++i) {
             *  for (int j = 0; j < bbox.GetCorners().Length; ++j) {
             *      if (j == i) continue;
             *      var c1 = bbox.GetCorners()[i];
             *      var c2 = bbox.GetCorners()[j];
             *      HashFunctions.Draw3DLine(e.GetOffsetInWorldCoords(new Vector3(c1.X, c1.Y, c1.Z)), e.GetOffsetInWorldCoords(new Vector3(c2.X, c2.Y, c2.Z)), 0,0);
             *  }
             * }
             */
            /*
             * for (int i = 0; i < bbox.GetCorners().Length; ++i)
             * {
             *  var corner = bbox.GetCorners()[i];
             *  var cornerinworld = e.GetOffsetInWorldCoords(new Vector3(corner.X, corner.Y, corner.Z));
             *
             *
             * }*/
            //UI.Notify(e.HeightAboveGround.ToString());
            var sp = HashFunctions.Convert3dTo2d(e.GetOffsetInWorldCoords(e.Position));

            foreach (var corner in bbox.GetCorners())
            {
                var c = new Vector3(corner.X, corner.Y, corner.Z);

                c = e.GetOffsetInWorldCoords(c);
                var s = HashFunctions.Convert3dTo2d(c);
                if (s.X == -1f || s.Y == -1f)
                {
                    rv.Min.X = float.PositiveInfinity;
                    rv.Max.X = float.NegativeInfinity;
                    rv.Min.Y = float.PositiveInfinity;
                    rv.Max.Y = float.NegativeInfinity;
                    return(rv);
                }

                /*
                 * if(s.X == -1) {
                 *  if (sp.X < 0.5) s.X = 0f;
                 *  if (sp.X >= 0.5) s.X = 1f;
                 * }
                 * if(s.Y == -1) {
                 *  if (sp.Y < 0.5) s.Y = 0f;
                 *  if (sp.Y >= 0.5) s.Y = 1f;
                 * }
                 */
                rv.Min.X = Math.Min(rv.Min.X, s.X);
                rv.Min.Y = Math.Min(rv.Min.Y, s.Y);
                rv.Max.X = Math.Max(rv.Max.X, s.X);
                rv.Max.Y = Math.Max(rv.Max.Y, s.Y);
            }

//            int width = 1280;
//            int height = 960;
//            int x = (int)(rv.Min.X * width);
//            int y = (int)(rv.Min.Y * height);
//            int x2 = (int)(rv.Max.X * width);
//            int y2 = (int)(rv.Max.Y * height);
//            float w = rv.Max.X - rv.Min.X;
//            float h = rv.Max.Y - rv.Min.Y;
//            HashFunctions.DrawRect(rv.Min.X + w/2, rv.Min.Y + h/2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, 255, 255, 255, 100);
//            new UIRectangle(new Point((int)(rv.Min.X * 1920), (int)(rv.Min.Y * 1080)), rv.)
            return(rv);
        }
示例#26
0
        private static void PedData(Ped player)
        {
            bool aiming   = player.IsSubtaskActive(ESubtask.AIMED_SHOOTING_ON_FOOT) || player.IsSubtaskActive(ESubtask.AIMING_THROWABLE); // Game.IsControlPressed(GTA.Control.Aim);
            bool shooting = Function.Call <bool>(Hash.IS_PED_SHOOTING, player.Handle);

            GTA.Math.Vector3 aimCoord = new Vector3();
            if (aiming || shooting)
            {
                aimCoord = Main.RaycastEverything(new Vector2(0, 0));
            }

            Weapon currentWeapon = player.Weapons.Current;

            var obj = new PedData
            {
                AimCoords    = aimCoord.ToLVector(),
                Position     = player.Position.ToLVector(),
                Quaternion   = player.Rotation.ToLVector(),
                PedArmor     = (byte)player.Armor,
                PedModelHash = player.Model.Hash,
                WeaponHash   = (int)currentWeapon.Hash,
                WeaponAmmo   = currentWeapon.Ammo,
                PlayerHealth = (byte)Util.Util.Clamp(0, player.Health, 255),
                Velocity     = player.Velocity.ToLVector(),
                Flag         = 0
            };


            if (player.IsRagdoll)
            {
                obj.Flag |= (int)PedDataFlags.Ragdoll;
            }
            if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, player.Handle) == 0 &&
                player.IsInAir)
            {
                obj.Flag |= (int)PedDataFlags.InFreefall;
            }
            if (player.IsInMeleeCombat)
            {
                obj.Flag |= (int)PedDataFlags.InMeleeCombat;
            }
            if (aiming || shooting)
            {
                obj.Flag |= (int)PedDataFlags.Aiming;
            }
            if ((player.IsInMeleeCombat && Game.IsControlJustPressed(Control.Attack)))
            {
                obj.Flag |= (int)PedDataFlags.Shooting;
            }
            if (Function.Call <bool>(Hash.IS_PED_JUMPING, player.Handle))
            {
                obj.Flag |= (int)PedDataFlags.Jumping;
            }
            if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, player.Handle) == 2)
            {
                obj.Flag |= (int)PedDataFlags.ParachuteOpen;
            }
            if (player.IsInCover())
            {
                obj.Flag |= (int)PedDataFlags.IsInCover;
            }
            if (!Function.Call <bool>((Hash)0x6A03BF943D767C93, player))
            {
                obj.Flag |= (int)PedDataFlags.IsInLowerCover;
            }
            if (player.IsInCoverFacingLeft)
            {
                obj.Flag |= (int)PedDataFlags.IsInCoverFacingLeft;
            }
            if (player.IsReloading)
            {
                obj.Flag |= (int)PedDataFlags.IsReloading;
            }
            if (ForceAimData)
            {
                obj.Flag |= (int)PedDataFlags.HasAimData;
            }
            if (player.IsSubtaskActive(ESubtask.USING_LADDER))
            {
                obj.Flag |= (int)PedDataFlags.IsOnLadder;
            }
            if (Function.Call <bool>(Hash.IS_PED_CLIMBING, player) && !player.IsSubtaskActive(ESubtask.USING_LADDER))
            {
                obj.Flag |= (int)PedDataFlags.IsVaulting;
            }
            if (Function.Call <bool>(Hash.IS_ENTITY_ON_FIRE, player))
            {
                obj.Flag |= (int)PedDataFlags.OnFire;
            }
            if (player.IsDead)
            {
                obj.Flag |= (int)PedDataFlags.PlayerDead;
            }

            if (player.IsSubtaskActive(168))
            {
                obj.Flag |= (int)PedDataFlags.ClosingVehicleDoor;
            }

            if (player.IsSubtaskActive(161) || player.IsSubtaskActive(162) || player.IsSubtaskActive(163) ||
                player.IsSubtaskActive(164))
            {
                obj.Flag |= (int)PedDataFlags.EnteringVehicle;

                obj.VehicleTryingToEnter =
                    Main.NetEntityHandler.EntityToNet(Function.Call <int>(Hash.GET_VEHICLE_PED_IS_TRYING_TO_ENTER,
                                                                          player));

                obj.SeatTryingToEnter = (sbyte)
                                        Function.Call <int>(Hash.GET_SEAT_PED_IS_TRYING_TO_ENTER,
                                                            player);
            }

            obj.Speed = Main.GetPedWalkingSpeed(player);

            lock (Lock)
            {
                LastSyncPacket = obj;
            }

            bool sendShootingPacket;

            if (obj.WeaponHash != null && !WeaponDataProvider.IsWeaponAutomatic(unchecked ((GTANetworkShared.WeaponHash)obj.WeaponHash.Value)))
            {
                sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) && !player.IsSubtaskActive(ESubtask.MELEE_COMBAT));
            }
            else
            {
                if (!_lastShooting && !player.IsSubtaskActive(ESubtask.MELEE_COMBAT))
                {
                    sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                          !player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) ||
                                         ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                          Game.IsEnabledControlPressed(Control.Attack));
                }
                else
                {
                    sendShootingPacket = (!player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                          !player.IsSubtaskActive(ESubtask.MELEE_COMBAT) &&
                                          !player.IsReloading &&
                                          player.Weapons.Current.AmmoInClip > 0 &&
                                          Game.IsEnabledControlPressed(Control.Attack)) ||
                                         ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                          Game.IsEnabledControlPressed(Control.Attack));
                }

                if (!sendShootingPacket && _lastShooting && !_lastBullet)
                {
                    _lastBullet   = true;
                    _lastShooting = false;
                    return;
                }
            }

            _lastBullet = false;

            if (player.IsRagdoll)
            {
                sendShootingPacket = false;
            }

            if (!player.IsSubtaskActive(ESubtask.MELEE_COMBAT) && player.Weapons.Current.Ammo == 0)
            {
                sendShootingPacket = false;
            }

            if (sendShootingPacket && !_lastShooting && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50)
            {
                //Util.Util.SafeNotify("Sending BPacket " + DateTime.Now.Millisecond);
                _sent         = false;
                _lastShooting = true;
                _lastShot     = DateTime.Now;

                var    msg = Main.Client.CreateMessage();
                byte[] bin;

                var syncPlayer = Main.GetPedWeHaveDamaged();

                if (syncPlayer != null)
                {
                    bin = PacketOptimization.WriteBulletSync(0, true, syncPlayer.RemoteHandle);
                    msg.Write((byte)PacketType.BulletPlayerSync);
                }
                else
                {
                    bin = PacketOptimization.WriteBulletSync(0, true, aimCoord.ToLVector());
                    msg.Write((byte)PacketType.BulletSync);
                }

                msg.Write(bin.Length);
                msg.Write(bin);
                Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);
                Main.BytesSent += bin.Length;
                Main.MessagesSent++;
            }
            else if (!sendShootingPacket && !_sent && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50)
            {
                //Util.Util.SafeNotify("Sending NPacket " + DateTime.Now.Millisecond);
                _sent         = true;
                _lastShooting = false;
                _lastShot     = DateTime.Now;

                var msg = Main.Client.CreateMessage();

                byte[] bin = PacketOptimization.WriteBulletSync(0, false, aimCoord.ToLVector());
                msg.Write((byte)PacketType.BulletSync);

                msg.Write(bin.Length);
                msg.Write(bin);
                Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);
                Main.BytesSent += bin.Length;
                Main.MessagesSent++;
            }
        }
示例#27
0
    private void onKeyDown(object sender, KeyEventArgs e)
    {
        //
        if (e.KeyCode == Keys.H)
        {
            /*
             ||||||||||||||||| Begin Software 4 Artists |||||||||||||||||
             */

            Ped player = Game.Player.Character;
            GTA.Math.Vector3 spawn_location = player.Position + (player.ForwardVector * 5f);
            //string model_name = "a_m_y_business_02";
            string model_name = "dumbcop";

            Ped ped1 = GTA.World.CreatePed(model_name, spawn_location);

            ped1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            model_name = "dumbcop";
            Ped ped2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f));
            ped2.Weapons.Give(WeaponHash.Bat, 999, true, true);

            // make them fight!
            ped1.Task.ClearAllImmediately();
            ped2.Task.ClearAllImmediately();
            ped1.Task.FightAgainst(ped2);
            ped2.Task.FightAgainst(ped1);

            /*
             |||||||||||||||||| End Software 4 Artists |||||||||||||||||
             */



            // experiment 1
            //GTA.UI.Screen.ShowSubtitle("creating a cop");

            //Ped player = Game.Player.Character;
            //GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5f);

            //string model_name = "s_m_y_cop_01";
            //Ped cop1 = GTA.World.CreatePed(model_name, spawnLoc);
            //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //cop1.Task.FightAgainst(player);

            // experiment 2
            //GTA.UI.Screen.ShowSubtitle("creating a cop & neutral ped");

            //Ped player = Game.Player.Character;

            //string model_name = "s_m_y_cop_01";
            //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f));
            //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //model_name = "a_m_y_business_02";
            //Ped civilian1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f));

            //cop1.Task.FightAgainst(civilian1);

            // experiment 3
            //GTA.UI.Screen.ShowSubtitle("creating two cops to fight each other");

            //Ped player = Game.Player.Character;

            //string model_name = "s_m_y_cop_01";
            //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f));
            //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //model_name = "s_m_y_cop_01";
            //Ped cop2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f));

            //// create a new relationship group
            //RelationshipGroup newGroup1 = World.AddRelationshipGroup("newgroup1");
            //cop1.RelationshipGroup = newGroup1;
            //RelationshipGroup newGroup2 = World.AddRelationshipGroup("newgroup2");
            //cop1.RelationshipGroup = newGroup2;

            //newGroup1.SetRelationshipBetweenGroups(newGroup2, Relationship.Hate);
            //newGroup2.SetRelationshipBetweenGroups(newGroup1, Relationship.Hate);

            //GTA.UI.Notification.Show(cop1.RelationshipGroup.ToString() + ", " + cop2.RelationshipGroup.ToString());

            //// things i've tried that do not work
            //cop1.Task.FightAgainst(cop2);
            //cop1.AlwaysKeepTask = true;
            //// 46 is the "fight to the death" attribute
            //Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, cop1, 46, true);
            //Function.Call(Hash.SET_PED_FLEE_ATTRIBUTES, cop1, 0, 0);

            // experiment 4 -- sanity check
            //GTA.UI.Screen.ShowSubtitle("sanity check, exact same code w different models");

            //Ped player = Game.Player.Character;

            //string model_name = "s_m_y_cop_01";
            //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f));
            //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //model_name = "a_m_y_business_02";
            //Ped cop2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f));

            //// create a new relationship group
            //RelationshipGroup newGroup1 = World.AddRelationshipGroup("newgroup1");
            //cop1.RelationshipGroup = newGroup1;
            //RelationshipGroup newGroup2 = World.AddRelationshipGroup("newgroup2");
            //cop1.RelationshipGroup = newGroup2;

            //newGroup1.SetRelationshipBetweenGroups(newGroup2, Relationship.Hate);
            //newGroup2.SetRelationshipBetweenGroups(newGroup1, Relationship.Hate);

            //GTA.UI.Notification.Show(cop1.RelationshipGroup.ToString() + ", " + cop2.RelationshipGroup.ToString());

            //// things i've tried that do not work
            //cop1.Task.FightAgainst(cop2);
            //cop1.AlwaysKeepTask = true;
            //// 46 is the "fight to the death" attribute
            //Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, cop1, 46, true);
            //Function.Call(Hash.SET_PED_FLEE_ATTRIBUTES, cop1, 0, 0);

            //// experiment 5 -- adding cop to player group
            //GTA.UI.Screen.ShowSubtitle("experiment 5: ");

            //Ped player = Game.Player.Character;
            //RelationshipGroup playerGroup = player.RelationshipGroup;

            //string model_name = "s_m_y_cop_01";
            //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f));
            //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true);
            //cop1.RelationshipGroup = playerGroup;

            // experiment 6 ...
            //Ped player = Game.Player.Character;
            //GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5f);
            //string model_name = "a_m_y_business_02";
            ////string model_name = "s_m_y_cop_01";

            //Ped ped1 = GTA.World.CreatePed(model_name, spawnLoc);
            //ped1.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //model_name = "s_m_y_cop_01";
            //Ped ped2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f));
            //ped2.Weapons.Give(WeaponHash.Bat, 999, true, true);

            //ped1.Task.ClearAllImmediately();
            //ped2.Task.ClearAllImmediately();
            //ped1.Task.FightAgainst(ped2);
            //ped2.Task.FightAgainst(ped1);
        }

        if (e.KeyCode == Keys.J)
        {
            Game.Player.WantedLevel = 0;
            Function.Call(Hash.SET_POLICE_IGNORE_PLAYER, Game.Player, true);
            Ped player = Game.Player.Character;
            GTA.Math.Vector3 playerpos = player.Position;
            Ped[]            allpeds   = GTA.World.GetNearbyPeds(playerpos, 50);

            foreach (Ped p in allpeds)
            {
                if (p != player)
                {
                    p.Task.FightAgainstHatedTargets(100);
                    //World.SetRelationshipBetweenGroups((Relationship)5, Game.get_Player().get_Character().get_RelationshipGroup(), num);
                    //World.SetRelationshipBetweenGroups((Relationship)5, num, Game.get_Player().get_Character().get_RelationshipGroup());
                }
            }


            foreach (Ped p in allpeds)
            {
                foreach (Ped q in allpeds)
                {
                    if (p.Handle != q.Handle)
                    {
                        p.Task.FightAgainst(q);
                    }
                }
            }
        }
    }
示例#28
0
        internal void OnTick(object sender, EventArgs e)
        {
            if (!Main.IsOnServer())
            {
                return;
            }
            var player = Game.Player.Character;

            if (player.IsInVehicle())
            {
                var veh = player.CurrentVehicle;

                var horn    = Game.Player.IsPressingHorn;
                var siren   = veh.SirenActive;
                var vehdead = veh.IsDead;

                var obj = new VehicleData();
                obj.Position      = veh.Position.ToLVector();
                obj.VehicleHandle = Main.NetEntityHandler.EntityToNet(player.CurrentVehicle.Handle);
                obj.Quaternion    = veh.Rotation.ToLVector();
                obj.PedModelHash  = player.Model.Hash;
                obj.PlayerHealth  = (byte)Util.Util.Clamp(0, player.Health, 255);
                obj.VehicleHealth = veh.EngineHealth;
                obj.Velocity      = veh.Velocity.ToLVector();
                obj.PedArmor      = (byte)player.Armor;
                obj.RPM           = veh.CurrentRPM;
                obj.VehicleSeat   = (short)Util.Util.GetPedSeat(player);
                obj.Flag          = 0;
                obj.Steering      = veh.SteeringAngle;

                if (horn)
                {
                    obj.Flag |= (byte)VehicleDataFlags.PressingHorn;
                }
                if (siren)
                {
                    obj.Flag |= (byte)VehicleDataFlags.SirenActive;
                }
                if (vehdead)
                {
                    obj.Flag |= (byte)VehicleDataFlags.VehicleDead;
                }
                if (player.IsDead)
                {
                    obj.Flag |= (short)VehicleDataFlags.PlayerDead;
                }

                if (Util.Util.GetResponsiblePed(veh).Handle == player.Handle)
                {
                    obj.Flag |= (byte)VehicleDataFlags.Driver;
                }

                if (veh.IsInBurnout)
                {
                    obj.Flag |= (byte)VehicleDataFlags.BurnOut;
                }

                if (ForceAimData)
                {
                    obj.Flag |= (byte)VehicleDataFlags.HasAimData;
                }

                if (player.IsSubtaskActive(167) || player.IsSubtaskActive(168))
                {
                    obj.Flag |= (short)VehicleDataFlags.ExitingVehicle;
                }

                if (!WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)veh.Model.Hash, Util.Util.GetPedSeat(Game.Player.Character)) &&
                    WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)veh.Model.Hash) &&
                    Util.Util.GetPedSeat(Game.Player.Character) == -1)
                {
                    obj.Flag      |= (byte)VehicleDataFlags.HasAimData;
                    obj.AimCoords  = new GTANetworkShared.Vector3(0, 0, 0);
                    obj.WeaponHash = Main.GetCurrentVehicleWeaponHash(Game.Player.Character);
                    if (Game.IsEnabledControlPressed(0, Control.VehicleFlyAttack))
                    {
                        obj.Flag |= (byte)VehicleDataFlags.Shooting;
                    }
                }
                else if (WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)veh.Model.Hash, Util.Util.GetPedSeat(Game.Player.Character)))
                {
                    obj.Flag      |= (byte)VehicleDataFlags.HasAimData;
                    obj.WeaponHash = 0;
                    obj.AimCoords  = Main.RaycastEverything(new Vector2(0, 0)).ToLVector();
                    if (Game.IsEnabledControlPressed(0, Control.VehicleAttack))
                    {
                        obj.Flag |= (byte)VehicleDataFlags.Shooting;
                    }
                }
                else
                {
                    if ((player.IsSubtaskActive(200) || player.IsSubtaskActive(190)) &&
                        Game.IsEnabledControlPressed(0, Control.Attack) &&
                        Game.Player.Character.Weapons.Current?.AmmoInClip != 0)
                    {
                        obj.Flag |= (byte)VehicleDataFlags.Shooting;
                        obj.Flag |= (byte)VehicleDataFlags.HasAimData;
                    }

                    if (((player.IsSubtaskActive(200) || player.IsSubtaskActive(190)) &&
                         Game.Player.Character.Weapons.Current?.AmmoInClip != 0) ||
                        (Game.Player.Character.Weapons.Current?.Hash == WeaponHash.Unarmed &&
                         player.IsSubtaskActive(200)))
                    {
                        obj.Flag |= (byte)VehicleDataFlags.Aiming;
                        obj.Flag |= (byte)VehicleDataFlags.HasAimData;
                    }

                    var outputArg = new OutputArgument();
                    Function.Call(Hash.GET_CURRENT_PED_WEAPON, Game.Player.Character, outputArg, true);
                    obj.WeaponHash = outputArg.GetResult <int>();

                    lock (Lock)
                    {
                        if (LastSyncPacket != null && LastSyncPacket is VehicleData &&
                            WeaponDataProvider.NeedsFakeBullets(obj.WeaponHash.Value) &&
                            (((VehicleData)LastSyncPacket).Flag & (byte)VehicleDataFlags.Shooting) != 0)
                        {
                            obj.Flag |= (byte)VehicleDataFlags.Shooting;
                            obj.Flag |= (byte)VehicleDataFlags.HasAimData;
                        }
                    }

                    obj.AimCoords = Main.RaycastEverything(new Vector2(0, 0)).ToLVector();
                }

                Vehicle trailer;

                if ((VehicleHash)veh.Model.Hash == VehicleHash.TowTruck ||
                    (VehicleHash)veh.Model.Hash == VehicleHash.TowTruck2)
                {
                    trailer = veh.TowedVehicle;
                }
                else if ((VehicleHash)veh.Model.Hash == VehicleHash.Cargobob ||
                         (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob2 ||
                         (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob3 ||
                         (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob4)
                {
                    trailer = SyncEventWatcher.GetVehicleCargobobVehicle(veh);
                }
                else
                {
                    trailer = SyncEventWatcher.GetVehicleTrailerVehicle(veh);
                }

                if (trailer != null && trailer.Exists())
                {
                    obj.Trailer = trailer.Position.ToLVector();
                }

                if (Util.Util.GetResponsiblePed(veh) == player)
                {
                    obj.DamageModel = veh.GetVehicleDamageModel();
                }

                lock (Lock)
                {
                    LastSyncPacket = obj;
                }
            }
            else
            {
                bool aiming   = player.IsSubtaskActive(ESubtask.AIMED_SHOOTING_ON_FOOT) || player.IsSubtaskActive(ESubtask.AIMING_THROWABLE); // Game.IsControlPressed(0, GTA.Control.Aim);
                bool shooting = Function.Call <bool>(Hash.IS_PED_SHOOTING, player.Handle);

                GTA.Math.Vector3 aimCoord = new Vector3();
                if (aiming || shooting)
                {
                    aimCoord = Main.RaycastEverything(new Vector2(0, 0));
                }

                var obj = new PedData();
                obj.AimCoords    = aimCoord.ToLVector();
                obj.Position     = player.Position.ToLVector();
                obj.Quaternion   = player.Rotation.ToLVector();
                obj.PedArmor     = (byte)player.Armor;
                obj.PedModelHash = player.Model.Hash;
                obj.WeaponHash   = (int)player.Weapons.Current.Hash;
                obj.WeaponAmmo   = player.Weapons.Current.Ammo;
                obj.PlayerHealth = (byte)Util.Util.Clamp(0, player.Health, 255);
                obj.Velocity     = player.Velocity.ToLVector();

                obj.Flag = 0;

                if (player.IsRagdoll)
                {
                    obj.Flag |= (int)PedDataFlags.Ragdoll;
                }
                if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, Game.Player.Character.Handle) == 0 &&
                    Game.Player.Character.IsInAir)
                {
                    obj.Flag |= (int)PedDataFlags.InFreefall;
                }
                if (player.IsInMeleeCombat)
                {
                    obj.Flag |= (int)PedDataFlags.InMeleeCombat;
                }
                if (aiming || shooting)
                {
                    obj.Flag |= (int)PedDataFlags.Aiming;
                }
                if ((player.IsInMeleeCombat && Game.IsControlJustPressed(0, Control.Attack)))
                {
                    obj.Flag |= (int)PedDataFlags.Shooting;
                }
                if (Function.Call <bool>(Hash.IS_PED_JUMPING, player.Handle))
                {
                    obj.Flag |= (int)PedDataFlags.Jumping;
                }
                if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, Game.Player.Character.Handle) == 2)
                {
                    obj.Flag |= (int)PedDataFlags.ParachuteOpen;
                }
                if (player.IsInCover())
                {
                    obj.Flag |= (int)PedDataFlags.IsInCover;
                }
                if (!Function.Call <bool>((Hash)0x6A03BF943D767C93, player))
                {
                    obj.Flag |= (int)PedDataFlags.IsInLowerCover;
                }
                if (player.IsInCoverFacingLeft)
                {
                    obj.Flag |= (int)PedDataFlags.IsInCoverFacingLeft;
                }
                if (player.IsReloading)
                {
                    obj.Flag |= (int)PedDataFlags.IsReloading;
                }
                if (ForceAimData)
                {
                    obj.Flag |= (int)PedDataFlags.HasAimData;
                }
                if (player.IsSubtaskActive(ESubtask.USING_LADDER))
                {
                    obj.Flag |= (int)PedDataFlags.IsOnLadder;
                }
                if (Function.Call <bool>(Hash.IS_PED_CLIMBING, player) && !player.IsSubtaskActive(ESubtask.USING_LADDER))
                {
                    obj.Flag |= (int)PedDataFlags.IsVaulting;
                }
                if (Function.Call <bool>(Hash.IS_ENTITY_ON_FIRE, player))
                {
                    obj.Flag |= (int)PedDataFlags.OnFire;
                }
                if (player.IsDead)
                {
                    obj.Flag |= (int)PedDataFlags.PlayerDead;
                }

                if (player.IsSubtaskActive(168))
                {
                    obj.Flag |= (int)PedDataFlags.ClosingVehicleDoor;
                }

                if (player.IsSubtaskActive(161) || player.IsSubtaskActive(162) || player.IsSubtaskActive(163) ||
                    player.IsSubtaskActive(164))
                {
                    obj.Flag |= (int)PedDataFlags.EnteringVehicle;

                    obj.VehicleTryingToEnter =
                        Main.NetEntityHandler.EntityToNet(Function.Call <int>(Hash.GET_VEHICLE_PED_IS_TRYING_TO_ENTER,
                                                                              Game.Player.Character));

                    obj.SeatTryingToEnter = (sbyte)
                                            Function.Call <int>(Hash.GET_SEAT_PED_IS_TRYING_TO_ENTER,
                                                                Game.Player.Character);
                }

                obj.Speed = Main.GetPedWalkingSpeed(player);

                lock (Lock)
                {
                    LastSyncPacket = obj;
                }

                bool sendShootingPacket;

                if (!WeaponDataProvider.IsWeaponAutomatic(unchecked ((GTANetworkShared.WeaponHash)obj.WeaponHash.Value)))
                {
                    sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                          !player.IsSubtaskActive(ESubtask.MELEE_COMBAT));
                }
                else
                {
                    if (!_lastShooting && !player.IsSubtaskActive(ESubtask.MELEE_COMBAT))
                    {
                        sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                              !player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) ||
                                             ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                              Game.IsEnabledControlPressed(0, Control.Attack));
                    }
                    else
                    {
                        sendShootingPacket = (!player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                              !player.IsSubtaskActive(ESubtask.MELEE_COMBAT) &&
                                              !player.IsReloading &&
                                              player.Weapons.Current.AmmoInClip > 0 &&
                                              Game.IsEnabledControlPressed(0, Control.Attack)) ||
                                             ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                              Game.IsEnabledControlPressed(0, Control.Attack));
                    }

                    if (!sendShootingPacket && _lastShooting && !_lastBullet)
                    {
                        _lastBullet = true;
                        return;
                    }
                }

                _lastBullet = false;

                if (Game.Player.Character.IsRagdoll)
                {
                    sendShootingPacket = false;
                }

                if (!player.IsSubtaskActive(ESubtask.MELEE_COMBAT) && player.Weapons.Current.Ammo == 0)
                {
                    sendShootingPacket = false;
                }


                if (sendShootingPacket && !_lastShooting)
                {
                    _lastShooting = true;

                    _lastShot = DateTime.Now;

                    var     msg        = Main.Client.CreateMessage();
                    byte[]  bin        = null;
                    SyncPed syncPlayer = null;

                    if (Main.OnShootingLagCompensation)
                    {
                        syncPlayer = Main.GetPedDamagedByPlayer();
                    }

                    if (syncPlayer != null)
                    {
                        bin = PacketOptimization.WriteBulletSync(0, true, syncPlayer.RemoteHandle);
                        msg.Write((byte)PacketType.BulletPlayerSync);
                    }
                    else
                    {
                        bin = PacketOptimization.WriteBulletSync(0, true, aimCoord.ToLVector());
                        msg.Write((byte)PacketType.BulletSync);
                    }

                    msg.Write(bin.Length);
                    msg.Write(bin);

                    Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);

                    Main._bytesSent += bin.Length;
                    Main._messagesSent++;
                }
                else if (!sendShootingPacket && _lastShooting && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50)
                {
                    _lastShooting = false;

                    var     msg        = Main.Client.CreateMessage();
                    byte[]  bin        = null;
                    SyncPed syncPlayer = null;
                    if (Main.OnShootingLagCompensation)
                    {
                        syncPlayer = Main.GetPedDamagedByPlayer();
                    }
                    if (syncPlayer != null)
                    {
                        bin = PacketOptimization.WriteBulletSync(0, false, syncPlayer.RemoteHandle);
                        msg.Write((byte)PacketType.BulletPlayerSync);
                    }
                    else
                    {
                        bin = PacketOptimization.WriteBulletSync(0, false, aimCoord.ToLVector());
                        msg.Write((byte)PacketType.BulletSync);
                    }
                    msg.Write(bin.Length);
                    msg.Write(bin);

                    Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);

                    Main._bytesSent += bin.Length;
                    Main._messagesSent++;
                }
            }
        }
示例#29
0
        public static GTABoundingBox2 ComputeBoundingBox(Entity e, Vector3 offset, float scale = 0.5f)
        {
            var m  = e.Model;
            var rv = new GTABoundingBox2
            {
                Min = new GTAVector2(float.PositiveInfinity, float.PositiveInfinity),
                Max = new GTAVector2(float.NegativeInfinity, float.NegativeInfinity)
            };
            Vector3 gmin;
            Vector3 gmax;

            m.GetDimensions(out gmin, out gmax);
            var bbox = new SharpDX.BoundingBox((SharpDX.Vector3) new GTAVector(gmin), (SharpDX.Vector3) new GTAVector(gmax));
            //Console.WriteLine(bbox.GetCorners()[0]);

            /*
             * for (int i = 0; i < bbox.GetCorners().Length; ++i) {
             *  for (int j = 0; j < bbox.GetCorners().Length; ++j) {
             *      if (j == i) continue;
             *      var c1 = bbox.GetCorners()[i];
             *      var c2 = bbox.GetCorners()[j];
             *      HashFunctions.Draw3DLine(e.GetOffsetInWorldCoords(new Vector3(c1.X, c1.Y, c1.Z)), e.GetOffsetInWorldCoords(new Vector3(c2.X, c2.Y, c2.Z)), 0,0);
             *  }
             * }
             */
            /*
             * for (int i = 0; i < bbox.GetCorners().Length; ++i)
             * {
             *  var corner = bbox.GetCorners()[i];
             *  var cornerinworld = e.GetOffsetInWorldCoords(new Vector3(corner.X, corner.Y, corner.Z));
             *
             *
             * }*/
            //UI.Notify(e.HeightAboveGround.ToString());
            var sp = HashFunctions.Convert3dTo2d(e.GetOffsetInWorldCoords(e.Position));

            foreach (var corner in bbox.GetCorners())
            {
                var c = new Vector3(corner.X, corner.Y, corner.Z);

                c = e.GetOffsetInWorldCoords(c);
                var s = HashFunctions.Convert3dTo2d(c);
                if (s.X == -1f || s.Y == -1f)
                {
                    rv.Min.X = float.PositiveInfinity;
                    rv.Max.X = float.NegativeInfinity;
                    rv.Min.Y = float.PositiveInfinity;
                    rv.Max.Y = float.NegativeInfinity;
                    return(rv);
                }

                /*
                 * if(s.X == -1) {
                 *  if (sp.X < 0.5) s.X = 0f;
                 *  if (sp.X >= 0.5) s.X = 1f;
                 * }
                 * if(s.Y == -1) {
                 *  if (sp.Y < 0.5) s.Y = 0f;
                 *  if (sp.Y >= 0.5) s.Y = 1f;
                 * }
                 */
                rv.Min.X = Math.Min(rv.Min.X, s.X);
                rv.Min.Y = Math.Min(rv.Min.Y, s.Y);
                rv.Max.X = Math.Max(rv.Max.X, s.X);
                rv.Max.Y = Math.Max(rv.Max.Y, s.Y);
            }

            float w = rv.Max.X - rv.Min.X;
            float h = rv.Max.Y - rv.Min.Y;

//            just for debug purposes, show visible and not visible entities in other color
//            if (CheckVisible(e))
//            {
//                HashFunctions.DrawRect(rv.Min.X + w / 2, rv.Min.Y + h / 2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y,
//                    Color.White, 100);
//            }
//            else
//            {
//                HashFunctions.DrawRect(rv.Min.X + w / 2, rv.Min.Y + h / 2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y,
//                    Color.Red, 100);
//            }
//            HashFunctions.DrawRect(rv.Min.X + w/2, rv.Min.Y + h/2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, 255, 255, 255, 100);
            return(rv);
        }