public void HandleEndEventOffence(AbstractAmbientVehicleEvent offenceEvent)
 {
     if (this.CurrentsEvents.Contains(offenceEvent))
     {
         this.CurrentsEvents.Remove(offenceEvent); //Garbage collector clean instance (break references)
     }
 }
        public AbstractAmbientVehicleEvent GetRandomOffenceEvent()
        {
            if (false == this.Timer.CanCreateEvent())
            {
                Logger.LogTrivial("Can't create event: TIMER");
                return(null);
            }

            if (false == this.CanCreateAnEvent())
            {
                Logger.LogTrivial("Can't create event: To many | Callout running | In pursuit | Is performing pullover");
                return(null);
            }

            if (Tools.HavingChance(10, 100))
            {
                Logger.LogTrivial("Can't create event: Bad Chance");
                GameFiber.Sleep(3000);
                return(null);
            }

            this.HandleCleanUsedVehicles();
            AbstractAmbientVehicleEvent offenceEvent = null;
            int loopSecurity = 3;
            int loopCounter  = 0;

            while (null == offenceEvent && loopCounter < loopSecurity)
            {
                Vehicle[] vehicles = VehicleManager.Instance.GetNearbyVehicles(10);
                foreach (Vehicle vehicle in vehicles)
                {
                    if (vehicle.Exists())
                    {
                        if (vehicle.HasDriver &&
                            vehicle.Driver.Exists() &&
                            false == vehicle.IsPoliceVehicle &&
                            false == vehicle.HasSiren &&
                            vehicle.Driver != PedsManager.LocalPlayer() &&
                            false == vehicle.IsBoat &&
                            false == vehicle.IsBike &&
                            false == vehicle.IsBicycle &&
                            false == this.PlateAlreadyUsed.Contains(vehicle.LicensePlate))
                        {
                            this.PlateAlreadyUsed.Add(vehicle.LicensePlate);
                            offenceEvent = this.GenerateRandomOffenceInstance(vehicle);
                            this.Timer.HandleTimer();
                            break; //Bad but have no choice in Foreach ;)
                        }
                    }
                }
                loopSecurity++;
                GameFiber.Sleep(4000);
            }
            this.CurrentsEvents.Add(offenceEvent);
            return(offenceEvent);
        }
 public static void RunAmbientVehicleEvent(AbstractAmbientVehicleEvent offenceEvent)
 {
     offenceEvent.Prepare();
     try
     {
         offenceEvent.OnBeforeStartEvent();
         while (offenceEvent.IsRunning())
         {
             offenceEvent.OnProcessEvent();
             GameFiber.Yield();
         }
     }
     catch (Exception e)
     {
         Logger.Log("---------- Exception ----------");
         Logger.Log(e.Message);
     }
     finally
     {
         offenceEvent.OnEndEvent();
     }
 }
 public static void HandleRunAmbientVehicleEvent(object sender, AbstractAmbientVehicleEvent offenceEvent)
 {
     Functions.RunAmbientVehicleEvent(offenceEvent);
 }