protected AIBackupUnitDriveToPositionTask(BackupUnit unit, Vector3 position, bool sirenOn, float speed, float acceptedDistance, VehicleDrivingFlags flags) : base(unit)
 {
     this.position         = position;
     this.sirenOn          = sirenOn;
     this.speed            = speed;
     this.acceptedDistance = acceptedDistance;
     this.flags            = flags;
 }
 public void Dispatch(float speed = 20f, VehicleDrivingFlags flags = VehicleDrivingFlags.Emergency)
 {
     DetectiveBlip = new Blip(DetectivePed);
     DetectiveBlip.SetStandardColor(CalloutStandardization.BlipTypes.Officers);
     DetectiveBlip.SetBlipScalePed();
     DetectivePed.Tasks.DriveToPosition(TargetPosition, speed, flags, 5f);
     IsRunning = true;
     "Detective Dispatched".DisplayNotification("A ~b~detective~w~ has been ~g~dispatched~w~ to your location");
     Game.DisplayHelp("Wait where you are until the ~b~detective~w~ arrives.");
     _processHost.Start();
     _processHost.ActivateProcess(DriveFiber);
 }
        public override bool OnCalloutAccepted()
        {
            pursuit = Functions.CreatePursuit();
            Functions.AddPedToPursuit(pursuit, recklessDriver);
            Functions.SetPursuitIsActiveForPlayer(pursuit, true);
            hasStartedPursuit = true;
            Functions.RequestBackup(spawnPoint.Around(20.0f), EBackupResponseType.Pursuit, EBackupUnitType.LocalUnit);
            //monsterTruck.DriveForce = 5.0f;
            NativeFunction.Natives.SET_DRIVER_ABILITY(recklessDriver, MathHelper.GetRandomSingle(0.0f, 100.0f));
            VehicleDrivingFlags driveFlags = VehicleDrivingFlags.None;

            switch (Globals.Random.Next(3))
            {
            case 0:
                driveFlags = (VehicleDrivingFlags)20;
                break;

            case 1:
                driveFlags = (VehicleDrivingFlags)786468;
                break;

            case 2:
                if (!vehicle.Model.IsBike || !vehicle.Model.IsBicycle)
                {
                    driveFlags = (VehicleDrivingFlags)1076;
                }
                else
                {
                    driveFlags = (VehicleDrivingFlags)786468;
                }
                break;

            default:
                break;
            }
            if (vehicle.Model.IsBike || vehicle.Model.IsBicycle)
            {
                recklessDriver.GiveHelmet(false, HelmetTypes.RegularMotorcycleHelmet, -1);
            }
            recklessDriver.Tasks.CruiseWithVehicle(vehicle, 200.0f, driveFlags);


            return(base.OnCalloutAccepted());
        }
Ejemplo n.º 4
0
 public AIBackupUnitTask DriveToPosition(Vector3 position, bool sirenOn, float speed, float acceptedDistance, VehicleDrivingFlags flags, bool considerTaskPriority = true) => GiveTask <AIBackupUnitDriveToPositionTask>(considerTaskPriority, Unit, position, sirenOn, speed, acceptedDistance, flags);
Ejemplo n.º 5
0
 public AITask DriveTo(Vector3 position, float speed, float acceptedDistance, VehicleDrivingFlags flags) => GiveTask <AITaskDriveTo>(this, position, speed, acceptedDistance, flags);
Ejemplo n.º 6
0
 public void DriveToCoord(Vehicle vehicle, Vector3 pos, float speed, float radius = 6f, VehicleDrivingFlags drivingMode = VehicleDrivingFlags.None)
 {
     Function.Call(Hash.TASK_VEHICLE_DRIVE_TO_COORD, _ped.Handle, vehicle.Handle, pos.X, pos.Y, pos.Z, speed,
                   radius, vehicle.Model.Hash, (int)drivingMode);
 }
        /// <summary>
        /// OnBeforeCalloutDisplayed is where we create a blip for the user to see where the pursuit is happening, we initiliaize any variables above and set
        /// the callout message and position for the API to display
        /// </summary>
        /// <returns></returns>
        public override bool OnBeforeCalloutDisplayed()
        {
            //Set our spawn point to be on a street around 300f (distance) away from the player.
            spawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.AroundPosition(425f));

            if (Vector3.Distance(Game.LocalPlayer.Character.Position, spawnPoint) < 15.0f)
            {
                return(false);
            }
            //Create our ped in the world
            int rndModelSpecial = Globals.Random.Next(101);

            if (rndModelSpecial < 95)
            {
                ped = new Ped(spawnPoint);
            }
            else if (rndModelSpecial >= 95)
            {
                ped = new Ped(specialModels.GetRandomElement(), spawnPoint, 0.0f);
            }
            if (!ped.Exists())
            {
                return(false);
            }

            string vModel = carModel.GetRandomElement(true);

            for (int i = 0; i < 5; i++)
            {
                if (new Model(vModel).IsValid)
                {
                    break;
                }
                else
                {
                    Logger.LogTrivial(this.GetType().Name, "Vehicle Model < " + vModel + " > is invalid. Choosing new model...");
                    vModel = carModel.GetRandomElement(false);
                }
            }
            if (!new Model(vModel).IsValid)
            {
                Logger.LogTrivial(this.GetType().Name, "Aborting: Final Vehicle Model < " + vModel + " > is invalid");
                return(false);
            }
            //Create the vehicle for our ped
            pedVehicle = new Vehicle(vModel, spawnPoint);
            if (!pedVehicle.Exists())
            {
                return(false);
            }

            if (pedVehicle.Exists())
            {
                pedVehicle.Heading = pedVehicle.Position.GetClosestVehicleNodeHeading();
            }

            ped.RelationshipGroup    = new RelationshipGroup("FELON");
            ped.BlockPermanentEvents = false;

            //If we made it this far both exist so let's warp the ped into the driver seat
            if (ped.Exists())
            {
                ped.WarpIntoVehicle(pedVehicle, -1);
            }

            if (ped.Exists())
            {
                ped.Inventory.GiveNewWeapon(weaponAsset.GetRandomElement(true), 666, false);
            }

            LSPD_First_Response.Engine.Scripting.Entities.Persona pedPersona = Functions.GetPersonaForPed(ped);               // Sets the ped persona as wanted

            Persona newPersona = new Persona(pedPersona.Forename, pedPersona.Surname, pedPersona.Gender, pedPersona.Birthday)
            {
                Wanted        = true,
                Citations     = pedPersona.Citations,
                ELicenseState = pedPersona.ELicenseState,
                TimesStopped  = pedPersona.TimesStopped
            };

            Functions.SetPersonaForPed(ped, newPersona);

            if (Globals.Random.Next(2) == 1)
            {
                pedVehicle.InstallRandomMods();
            }

            // Show the user where the pursuit is about to happen and block very close peds.
            this.ShowCalloutAreaBlipBeforeAccepting(spawnPoint, 110f);
            this.AddMinimumDistanceCheck(15f, ped.Position);

            // Set up our callout message and location
            this.CalloutMessage  = "Wanted felon in vehicle";
            this.CalloutPosition = spawnPoint;

            VehicleDrivingFlags driveFlags = VehicleDrivingFlags.None;

            switch (Globals.Random.Next(3))
            {
            case 0:
                driveFlags = (VehicleDrivingFlags)5;
                break;

            case 1:
                driveFlags = (VehicleDrivingFlags)786468;
                break;

            case 2:
                driveFlags = (VehicleDrivingFlags)20;
                break;

            default:
                break;
            }
            if (pedVehicle.Model.IsBike || pedVehicle.Model.IsBicycle)
            {
                ped.GiveHelmet(false, HelmetTypes.RegularMotorcycleHelmet, -1);
            }
            if (ped.Exists())
            {
                ped.Tasks.CruiseWithVehicle(pedVehicle, 16.0f, driveFlags);
            }

            int rndAudioNum = Globals.Random.Next(0, 5);

            if (rndAudioNum == 0)
            {
                LSPD_First_Response.Mod.API.Functions.PlayScannerAudioUsingPosition("WE_HAVE CRIME_WANTED_FELON_ON_THE_LOOSE SUSPECT_LAST_SEEN IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);
            }
            else if (rndAudioNum == 1)
            {
                LSPD_First_Response.Mod.API.Functions.PlayScannerAudioUsingPosition("CITIZENS_REPORT CRIME_WANTED_FELON_ON_THE_LOOSE IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);
            }
            else if (rndAudioNum == 2)
            {
                LSPD_First_Response.Mod.API.Functions.PlayScannerAudioUsingPosition("OFFICERS_REPORT CRIME_WANTED_FELON_ON_THE_LOOSE SUSPECT_LAST_SEEN IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);
            }
            else if (rndAudioNum == 3)
            {
                LSPD_First_Response.Mod.API.Functions.PlayScannerAudioUsingPosition("OFFICERS_REPORT CRIME_WANTED_FELON_ON_THE_LOOSE IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);
            }
            else if (rndAudioNum == 4)
            {
                LSPD_First_Response.Mod.API.Functions.PlayScannerAudioUsingPosition("CITIZENS_REPORT CRIME_WANTED_FELON_ON_THE_LOOSE SUSPECT_LAST_SEEN IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);
            }

            return(base.OnBeforeCalloutDisplayed());
        }
        public void SuspectFound()
        {
            GameFiber.StartNew(delegate
            {
                Logger.LogTrivial(this.GetType().Name, "SuspectFound()");

                if (searchZoneBlip.Exists())
                {
                    searchZoneBlip.Delete();
                }

                int rndBehaviour = Globals.Random.Next(101);

                if (rndBehaviour < 60) /* FLEE */
                {
                    Logger.LogTrivial(this.GetType().Name, "Scenario: Flee");

                    Game.DisplayNotification("~b~" + Settings.General.Name + ": ~w~Dispatch, suspect located, fleeing. Moving to engage");
                    LSPD_First_Response.Mod.API.Functions.PlayScannerAudio("REPORT_SUSPECT_SPOTTED");
                    pursuit           = LSPD_First_Response.Mod.API.Functions.CreatePursuit();
                    hasPursuitStarted = true;
                    LSPD_First_Response.Mod.API.Functions.AddPedToPursuit(pursuit, ped);
                    Functions.SetPursuitIsActiveForPlayer(pursuit, true);
                    shouldAttack = true;
                    if (ped.IsInAnyVehicle(false))
                    {
                        VehicleDrivingFlags driveFlags = VehicleDrivingFlags.None;
                        switch (Globals.Random.Next(3))
                        {
                        case 0:
                            driveFlags = (VehicleDrivingFlags)20;
                            break;

                        case 1:
                            driveFlags = (VehicleDrivingFlags)786468;
                            break;

                        case 2:
                            if (!pedVehicle.Model.IsBike || !pedVehicle.Model.IsBicycle)
                            {
                                driveFlags = (VehicleDrivingFlags)1076;
                            }
                            else
                            {
                                driveFlags = (VehicleDrivingFlags)786468;
                            }
                            break;

                        default:
                            break;
                        }
                        ped.Tasks.CruiseWithVehicle(pedVehicle, 200.0f, driveFlags);
                    }
                    else if (shouldAttack && ped.Exists() && !ped.IsInAnyVehicle(false) && !LSPD_First_Response.Mod.API.Functions.IsPedGettingArrested(ped) && !LSPD_First_Response.Mod.API.Functions.IsPedArrested(ped))
                    {
                        ped.AttackPed(Game.LocalPlayer.Character);
                    }
                    //while (true)
                    //{
                    //    if (breakForceEnd) break;

                    //    if (!ped.Exists())
                    //    {
                    //        this.End();
                    //        break;
                    //    }
                    //    if (ped.IsDead)
                    //    {
                    //        this.End();
                    //        break;
                    //    }
                    //    if (!LSPD_First_Response.Mod.API.Functions.IsPursuitStillRunning(pursuit))
                    //    {
                    //        this.End();
                    //        break;
                    //    }

                    //    if (!ped.IsInAnyVehicle(false) && !LSPD_First_Response.Mod.API.Functions.IsPedGettingArrested(ped) && !LSPD_First_Response.Mod.API.Functions.IsPedArrested(ped)) ped.Tasks.FightAgainstClosestHatedTarget(30.0f);

                    //    GameFiber.Yield();
                    //}
                }
                else if (rndBehaviour >= 60) /* NOT FLEE */
                {
                    Logger.LogTrivial(this.GetType().Name, "Scenario: NotFlee");

                    notFleeBlip       = new Blip(ped);
                    notFleeBlip.Color = Color.FromArgb(255, Color.Yellow);

                    shouldAttack = Globals.Random.Next(2) == 1;

                    Game.DisplayNotification("~b~" + Settings.General.Name + ": ~w~Dispatch, suspect located, not fleeing. Approaching for traffic stop");
                    LSPD_First_Response.Mod.API.Functions.PlayScannerAudio("REPORT_SUSPECT_SPOTTED");
                    GameFiber.Wait(1500);
                    Game.DisplayNotification("~b~Dispatch: ~w~Roger, proceed");

                    //while (true)
                    //{
                    //    if (breakForceEnd) break;

                    //    if (!ped.Exists())
                    //    {
                    //        this.End();
                    //        break;
                    //    }
                    //    if (ped.IsDead)
                    //    {
                    //        this.End();
                    //        break;
                    //    }
                    //    if (Functions.IsPedArrested(ped))
                    //    {
                    //        this.End();
                    //        break;
                    //    }

                    //    GameFiber.Yield();
                    //}
                }
            });
        }
Ejemplo n.º 9
0
        private async Task RiotModeTick()
        {
            if (rand.Next(0, 5000) == 5)
            {
                if (random_plane_fights)
                {
                    await GenerateRandomPlaneScenarioInAir(Game.PlayerPed.Position);
                }
            }
            Ped[] peds = World.GetAllPeds();
            foreach (Ped ped in peds)
            {
                if (!ped.IsHuman)
                {
                    ped.Delete();
                }
                if (!ped.IsPlayer && !ped.IsDead && !ped.IsInPlane)
                {
                    if (!ped.IsInCombat)
                    {
                        ped.Task.FightAgainst(FindPedNearbyPed(ped));
                    }
                    if (ped.Weapons.Current.Hash == WeaponHash.Unarmed)
                    {
                        if (rand.Next(0, 3) != 1)
                        {
                            GivePedRandomWeapon(ped);
                            if (rand.Next(0, 2) == 1)
                            {
                                API.SetPedFleeAttributes(ped.Handle, 0, true);
                            }
                            else
                            {
                                API.SetPedFleeAttributes(ped.Handle, 0, false);
                            }
                            if (rand.Next(0, 5) == 1)
                            {
                                API.SetPedCombatAttributes(ped.Handle, 1, false);
                            }
                            if (rand.Next(0, 5) == 1)
                            {
                                API.SetPedCombatAttributes(ped.Handle, 3, true);
                            }
                            API.SetPedCombatAttributes(ped.Handle, 2, true);

                            API.SetPedCombatAttributes(ped.Handle, 16, true);
                            API.SetPedCombatAttributes(ped.Handle, 17, false);
                            API.SetPedCombatAttributes(ped.Handle, 46, true);    //Immer angreifen
                            API.SetPedCombatAttributes(ped.Handle, 5, true);     //Angreifen wenn er nicht bewaffnet ist aber der Spieler
                            API.SetPedCombatMovement(ped.Handle, 3);
                            API.SetPedCombatRange(ped.Handle, 2);
                            API.SetPedAlertness(ped.Handle, 3);
                        }
                    }
                    if (ped.IsInVehicle())
                    {
                        Vehicle veh = ped.CurrentVehicle;

                        VehicleDrivingFlags flags =
                            VehicleDrivingFlags.AllowGoingWrongWay |
                            VehicleDrivingFlags.AllowMedianCrossing |
                            VehicleDrivingFlags.IgnorePathFinding;
                        ped.DrivingStyle = (DrivingStyle)flags;
                        API.SetDriveTaskMaxCruiseSpeed(ped.Handle, 250f);
                        API.SetDriveTaskCruiseSpeed(ped.Handle, 250f);
                        veh.MaxSpeed                = 200;
                        ped.MaxDrivingSpeed         = 20000;
                        ped.DrivingSpeed            = 20000;
                        ped.CanBeShotInVehicle      = true;
                        ped.CanFlyThroughWindscreen = true;
                    }
                }
            }
            await Delay(0);
        }
Ejemplo n.º 10
0
 protected AITaskDriveTo(AIController controller, Vector3 position, float speed, float acceptedDistance, VehicleDrivingFlags flags) : base(controller)
 {
     if (Ped.IsInAnyVehicle(true))
     {
         NativeFunction.Natives.TaskVehicleDriveToCoordLongrange(Ped, Ped.CurrentVehicle, position.X, position.Y, position.Z, speed, (uint)flags, acceptedDistance);
         task = Task.GetTask(Ped, "TASK_VEHICLE_DRIVE_TO_COORD_LONGRANGE");
     }
     else
     {
         IsFinished = true;
     }
 }
Ejemplo n.º 11
0
        public static Task VehicleEscort(this TaskInvoker taskInvoker, Vehicle vehicle, Vehicle targetVehicle, EscortMode mode, float speed, VehicleDrivingFlags style, float minimumDistance, float noRoadsDistance)
        {
            Ped ped = taskInvoker.GetInstancePed();

            if (ped != null)
            {
                NativeFunction.CallByName <uint>("TASK_VEHICLE_ESCORT", ped, vehicle, targetVehicle, (int)mode, speed, (int)style, minimumDistance, 0, noRoadsDistance);
                return(Task.GetTask(ped, "TASK_VEHICLE_ESCORT"));
            }
            return(null);
        }
        public void NoLicenseFlee()     // NO LICENSE AND FLEE SCENARIO
        {
            Logger.LogTrivial(this.GetType().Name, "NoLicenseFlee()");
            scenario = EScenario.NoLicenseFlee;
            GameFiber.StartNew(delegate
            {
                Game.SetRelationshipBetweenRelationshipGroups("HUNTER", "COP", Relationship.Dislike);
                Game.SetRelationshipBetweenRelationshipGroups("HUNTER", "PLAYER", Relationship.Dislike);
                if (!licenseHasBeenGiven)
                {
                    Game.DisplaySubtitle("~b~Hunter: ~w~" + hunterNoLicenseAndFleeAnswers.GetRandomElement(), 2500);
                }
                else if (licenseHasBeenGiven)
                {
                    Game.DisplaySubtitle("~b~Hunter: ~w~" + hunterLicenseSuspended.GetRandomElement(), 2500);
                }

                hunter.PlayAmbientSpeech(Globals.Random.Next(2) == 1 ? Globals.Random.Next(2) == 1 ? Globals.Random.Next(2) == 1 ? Globals.Random.Next(2) == 1 ? Speech.GENERIC_CURSE_HIGH : Speech.GENERIC_CURSE_MED : Speech.GENERIC_FUCK_YOU : Speech.GENERIC_INSULT_HIGH : Speech.GENERIC_INSULT_MED);

                hunter.EnterVehicle(hunterVeh, 8000, EVehicleSeats.Driver, 2.0f, 1);

                while (true)
                {
                    GameFiber.Yield();
                    if (breakForceEnd || !hunter.Exists() || hunter.IsInAnyVehicle(false) || hunter.IsDead || Functions.IsPedArrested(hunter))
                    {
                        break;
                    }
                }

                VehicleDrivingFlags driveFlags = VehicleDrivingFlags.None;
                switch (Globals.Random.Next(3))
                {
                case 0:
                    driveFlags = (VehicleDrivingFlags)20;
                    break;

                case 1:
                    driveFlags = (VehicleDrivingFlags)786468;
                    break;

                case 2:
                    if (!hunterVeh.Model.IsBike || !hunterVeh.Model.IsBicycle)
                    {
                        driveFlags = (VehicleDrivingFlags)1076;
                    }
                    else
                    {
                        driveFlags = (VehicleDrivingFlags)786468;
                    }
                    break;

                default:
                    break;
                }
                if (hunter.Exists())
                {
                    if (hunter.IsInAnyVehicle(false) && hunter.IsAlive)
                    {
                        hunter.Tasks.CruiseWithVehicle(hunterVeh, 200.0f, driveFlags);
                    }


                    this.pursuit = Functions.CreatePursuit();
                    Functions.AddPedToPursuit(this.pursuit, this.hunter);
                    Functions.SetPursuitIsActiveForPlayer(pursuit, true);

                    isPursuitRunning = true;
                }
                state = EIllegalHuntingState.End;
            });
        }