From fb0da695836d78027ab81118c2b2f7def6d04b1f Mon Sep 17 00:00:00 2001 From: Rich Dunne Date: Thu, 26 Nov 2020 16:40:06 -0700 Subject: [PATCH] Added collection for blacklisted vehicles. Added checks for vehicle drivers who have In Progress task statuses or are already persistent. Vehicles with drivers who have these attributes get blacklisted and will be ignored by collector waypoints. --- SceneManager/Object Classes/Path.cs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/SceneManager/Object Classes/Path.cs b/SceneManager/Object Classes/Path.cs index e13410b..b439a92 100644 --- a/SceneManager/Object Classes/Path.cs +++ b/SceneManager/Object Classes/Path.cs @@ -13,6 +13,7 @@ namespace SceneManager internal State State { get; set; } internal List Waypoints = new List(); internal List CollectedVehicles = new List(); + private List _blacklistedVehicles = new List(); internal Path(int pathNum, State pathState) { @@ -125,6 +126,7 @@ namespace SceneManager } CollectedVehicles.RemoveAll(cv => !cv.Vehicle); + _blacklistedVehicles.RemoveAll(v => !v); GameFiber.Sleep(60000); } }); @@ -188,16 +190,34 @@ namespace SceneManager bool VehicleIsValidForCollection(Vehicle v) { - if (v && v != Game.LocalPlayer.Character.LastVehicle && (v.IsCar || v.IsBike || v.IsBicycle || v.IsQuadBike) && !v.IsSirenOn && v.IsEngineOn && v.IsOnAllWheels && v.Speed > 1 && !CollectedVehicles.Any(cv => cv?.Vehicle == v)) + if (v && v != Game.LocalPlayer.Character.LastVehicle && (v.IsCar || v.IsBike || v.IsBicycle || v.IsQuadBike) && !v.IsSirenOn && v.IsEngineOn && v.IsOnAllWheels && v.Speed > 1 && !CollectedVehicles.Any(cv => cv?.Vehicle == v) && !_blacklistedVehicles.Contains(v)) { var vehicleCollectedOnAnotherPath = PathMainMenu.paths.Any(p => p.Number != Number && p.CollectedVehicles.Any(cv => cv.Vehicle == v)); if (vehicleCollectedOnAnotherPath) { return false; } - if (v.HasDriver && v.Driver && !v.Driver.IsAlive) + if (v.HasDriver && v.Driver) { - return false; + //Game.LogTrivial($"Driver task status: {v.Driver.Tasks.CurrentTaskStatus}"); + if(!v.Driver.IsAlive) + { + Game.LogTrivial($"Vehicle's driver is dead."); + _blacklistedVehicles.Add(v); + return false; + } + if(v.Driver.IsPersistent) // Persistent drivers are likely spawned from another script and doing something important. + { + Game.LogTrivial($"Vehicle's driver is already persistent and probably being handled by another plugin."); + _blacklistedVehicles.Add(v); + return false; + } + if (v.Driver.Tasks.CurrentTaskStatus == TaskStatus.InProgress && !Rage.Native.NativeFunction.Natives.GET_IS_TASK_ACTIVE(v.Driver, 151)) // Drivers with a non-wander task are probably doing something important + { + Game.LogTrivial($"Vehicle's driver is already tasked and probably being handled by another plugin."); + _blacklistedVehicles.Add(v); + return false; + } } if (!v.HasDriver) {