예제 #1
0
        public bool IsCreatedIn(float radius, List <string> selectedModels)
        {
            if (relationship == 0 || selectedModels == null)
            {
                return(false);
            }

            Vector3 safePosition = Util.GetSafePositionIn(radius);

            if (safePosition.Equals(Vector3.Zero))
            {
                Logger.Error("Driveby: Couldn't find safe position. Abort.", name);

                return(false);
            }

            for (int cnt = 0; cnt < 5; cnt++)
            {
                Road road = Util.GetNextPositionOnStreetWithHeading(safePosition.Around(50.0f));

                if (road != null)
                {
                    Logger.Write(false, "Driveby: Found proper road.", name);
                    spawnedVehicle = Util.Create(name, road.Position, road.Heading, true);

                    if (!Util.ThereIs(spawnedVehicle))
                    {
                        Logger.Write(false, "Driveby: Couldn't create vehicle. Abort.", name);
                        Restore(true);

                        continue;
                    }
                    else if (spawnedVehicle.PassengerSeats < 1)
                    {
                        Logger.Write(false, "Driveby: Passenger seats are needed but there isn't.", name);
                        Restore(true);

                        return(false);
                    }

                    Logger.Write(false, "Driveby: Created vehicle successfully.", name);
                    List <WeaponHash> drivebyWeaponList = new List <WeaponHash> {
                        WeaponHash.MicroSMG, WeaponHash.Pistol, WeaponHash.APPistol, WeaponHash.CombatPistol, WeaponHash.MachinePistol, WeaponHash.MiniSMG, WeaponHash.Revolver, WeaponHash.RevolverMk2, WeaponHash.DoubleActionRevolver
                    };
                    Util.Tune(spawnedVehicle, false, (Util.GetRandomIntBelow(3) == 1), false);

                    for (int i = -1; i < spawnedVehicle.PassengerSeats; i++)
                    {
                        if (spawnedVehicle.IsSeatFree((VehicleSeat)i))
                        {
                            members.Add(spawnedVehicle.CreatePedOnSeat((VehicleSeat)i, selectedModels[Util.GetRandomIntBelow(selectedModels.Count)]));
                            Script.Wait(50);
                        }
                    }

                    Logger.Write(false, "Driveby: Tuned vehicle and created members.", name);

                    if (members.Find(p => !Util.ThereIs(p)) != null)
                    {
                        Logger.Write(false, "Driveby: There is a member who doesn't exist.", name);
                        Restore(true);

                        continue;
                    }

                    foreach (Ped p in members)
                    {
                        Util.SetCombatAttributesOf(p);
                        Function.Call(Hash.SET_DRIVER_ABILITY, p, 1.0f);
                        Function.Call(Hash.SET_DRIVER_AGGRESSIVENESS, p, 1.0f);

                        p.AlwaysKeepTask       = true;
                        p.BlockPermanentEvents = true;
                        p.Weapons.Give(drivebyWeaponList[Util.GetRandomIntBelow(drivebyWeaponList.Count)], 100, true, true);
                        p.Weapons.Current.InfiniteAmmo = true;

                        p.ShootRate                  = 1000;
                        p.RelationshipGroup          = relationship;
                        p.IsPriorityTargetForEnemies = true;
                        p.FiringPattern              = FiringPattern.BurstFireDriveby;
                        Logger.Write(false, "Driveby: Characteristics are set.", name);
                    }

                    if (SpawnedPedExistsIn(members))
                    {
                        Logger.Write(false, "Driveby: Created driveby successfully.", name);
                        blipName = VehicleInfo.GetNameOf(spawnedVehicle.Model.Hash);

                        return(true);
                    }
                    else
                    {
                        Logger.Write(false, "Driveby: Driver doesn't exist.", name);
                        Restore(true);
                    }
                }
            }

            Logger.Error("Driveby: Couldn't find proper road. Abort.", name);

            return(false);
        }
예제 #2
0
        public bool IsCreatedIn(float radius, Road road)
        {
            if (relationship == 0 || road.Position.Equals(Vector3.Zero))
            {
                return(false);
            }

            spawnedVehicle = Util.Create(name, road.Position, road.Heading, true);

            if (!Util.ThereIs(spawnedVehicle))
            {
                Logger.Error("Racer: Couldn't create vehicle. Abort.", name);

                return(false);
            }

            spawnedPed = spawnedVehicle.CreateRandomPedOnSeat(VehicleSeat.Driver);

            if (!Util.ThereIs(spawnedPed))
            {
                Logger.Error("Racer: Couldn't create driver. Abort.", name);
                spawnedVehicle.Delete();

                return(false);
            }

            Logger.Write(false, "Racer: Created vehicle and driver successfully.", name);
            Script.Wait(50);
            Function.Call(Hash.SET_DRIVER_ABILITY, spawnedPed, 1.0f);
            Function.Call(Hash.SET_DRIVER_AGGRESSIVENESS, spawnedPed, 1.0f);

            SetExhausts();
            Util.Tune(spawnedVehicle, true, true, true);
            Logger.Write(false, "Racer: Tuned racer vehicle.", name);

            spawnedPed.RelationshipGroup          = relationship;
            spawnedPed.IsPriorityTargetForEnemies = true;
            spawnedPed.AlwaysKeepTask             = true;
            spawnedPed.BlockPermanentEvents       = true;
            Logger.Write(false, "Racer: Characteristics are set.", name);

            if (Util.BlipIsOn(spawnedPed))
            {
                Logger.Error("Racer: Blip is already on racer. Abort.", name);
                Restore(true);

                return(false);
            }
            else
            {
                if (!spawnedVehicle.Model.IsCar && !spawnedPed.IsWearingHelmet)
                {
                    spawnedPed.GiveHelmet(false, HelmetType.RegularMotorcycleHelmet, 4096);
                }

                TaskSequence ts = new TaskSequence();
                ts.AddTask.DriveTo(spawnedVehicle, goal, 10.0f, 100.0f, 262692); // 4 + 32 + 512 + 262144
                ts.AddTask.Wait(10000);
                ts.AddTask.CruiseWithVehicle(spawnedVehicle, 100.0f, 262692);    // 4 + 32 + 512 + 262144
                ts.Close();

                spawnedPed.Task.PerformSequence(ts);
                ts.Dispose();

                Logger.Write(false, "Racer: Created racer successfully.", name);
                blipName += VehicleInfo.GetNameOf(spawnedVehicle.Model.Hash);

                return(true);
            }
        }
예제 #3
0
        public bool IsCreatedIn(float radius)
        {
            Vehicle[] nearbyVehicles = World.GetNearbyVehicles(Game.Player.Character.Position, radius);

            if (nearbyVehicles.Length < 1)
            {
                Logger.Error("ReplacedVehicle: There is no vehicle near. Abort.", name);

                return(false);
            }

            for (int trycount = 0; trycount < 5; trycount++)
            {
                Vehicle selectedVehicle = nearbyVehicles[Util.GetRandomIntBelow(nearbyVehicles.Length)];

                if (Util.WeCanReplace(selectedVehicle) && !selectedVehicle.IsPersistent && !selectedVehicle.IsAttached() && !Util.ThereIs(selectedVehicle.GetEntityAttachedTo()) && Util.SomethingIsBetweenPlayerAnd(selectedVehicle))
                {
                    Logger.Write(false, "ReplacedVehicle: Replaceable vehicle found.", name);
                    Vector3   selectedPosition = selectedVehicle.Position;
                    float     selectedHeading  = selectedVehicle.Heading;
                    float     selectedSpeed    = selectedVehicle.Speed;
                    bool      driverIsNeeded   = Util.ThereIs(selectedVehicle.Driver);
                    string    blipName;
                    BlipColor blipColor;

                    selectedVehicle.Delete();
                    spawnedVehicle = Util.Create(name, selectedPosition, selectedHeading, true);

                    if (!Util.ThereIs(spawnedVehicle))
                    {
                        Logger.Write(false, "ReplacedVehicle: Couldn't create selected vehicle. Abort.", name);
                        Restore(true);

                        continue;
                    }

                    Logger.Write(false, "ReplacedVehicle: Created vehicle.", name);

                    if (driverIsNeeded)
                    {
                        spawnedPed = spawnedVehicle.CreateRandomPedOnSeat(VehicleSeat.Driver);

                        if (Util.ThereIs(spawnedPed))
                        {
                            Script.Wait(50);
                            spawnedVehicle.EngineRunning = true;
                            spawnedVehicle.Speed         = selectedSpeed;
                            spawnedPed.RelationshipGroup = Function.Call <int>(Hash.GET_HASH_KEY, "CIV" + spawnedPed.Gender.ToString().ToUpper());
                            spawnedPed.Task.CruiseWithVehicle(spawnedVehicle, 20.0f, (int)DrivingStyle.Normal);
                            spawnedPed.MarkAsNoLongerNeeded();
                            Logger.Write(false, "ReplacedVehicle: Created driver.", name);
                        }
                        else
                        {
                            Logger.Write(false, "ReplacedVehicle: Couldn't create driver in replacing vehicle.", name);
                        }
                    }

                    if (Util.GetRandomIntBelow(3) == 1)
                    {
                        blipName  = "Tuned ";
                        blipColor = BlipColor.Blue;
                        Util.Tune(spawnedVehicle, Util.GetRandomIntBelow(2) == 1, Util.GetRandomIntBelow(2) == 1, false);
                        Logger.Write(false, "ReplacedVehicle: Tune replacing vehicle.", name);
                    }
                    else
                    {
                        blipName  = "";
                        blipColor = BlipColor.White;
                        Logger.Write(false, "ReplacedVehicle: Remain stock replacing vehicle.", name);
                    }

                    if (Util.BlipIsOn(spawnedVehicle))
                    {
                        Logger.Error("ReplacedVehicle: Blip is already on replacing vehicle. Abort.", name);
                        Restore(true);
                    }
                    else
                    {
                        Util.AddBlipOn(spawnedVehicle, 0.7f, BlipSprite.PersonalVehicleCar, blipColor, blipName + VehicleInfo.GetNameOf(spawnedVehicle.Model.Hash));
                        Logger.Write(false, "ReplacedVehicle: Create replacing vehicle successfully.", name);

                        return(true);
                    }
                }
            }

            Restore(true);

            return(false);
        }