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()); }
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);
public AITask DriveTo(Vector3 position, float speed, float acceptedDistance, VehicleDrivingFlags flags) => GiveTask <AITaskDriveTo>(this, position, speed, acceptedDistance, flags);
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(); //} } }); }
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); }
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; } }
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; }); }