示例#1
0
        private async void OnSpawnRequest(string plate, int vehId, string vehData)
        {
            Log.Info($"Just recieved a vehicle spawn request for a vehicle with Plate: {plate}; VehID: {vehId}");
            VehicleDataModel vehDataModel;

            CitizenFX.Core.Vehicle spawnedVeh;

            if (vehData.Contains("{"))
            {
                Log.Info("vehData contains a {");
                vehDataModel = JsonConvert.DeserializeObject <VehicleDataModel>(vehData);

                Log.Info($"vehData contained the following data:\nModel: {vehDataModel.Model}\nPlate: {vehDataModel.LicensePlate}");

                Log.Info($"About to start spawning vehicle");
                spawnedVeh = await VehicleDataPacker.UnpackVehicleData(vehDataModel, Game.PlayerPed.Position, 0.0f);

                Log.Info($"Vehicle should have spawned now (World.CreateVehicle finished execution)");

                Log.Info($"Spawned vehicle spawn handle is {spawnedVeh.Handle}");
            }
            else
            {
                var model = new Model(Game.GenerateHash(vehData));
                while (!model.IsLoaded)
                {
                    await model.Request(0);
                }

                spawnedVeh = await World.CreateVehicle(model, Game.PlayerPed.Position, 0.0f);
            }

            spawnedVeh.Mods.LicensePlate = plate;
            spawnedVeh.SetDecor("Vehicle.ID", vehId);
            Game.PlayerPed.Task.WarpIntoVehicle(spawnedVeh, VehicleSeat.Driver);
            ownedVehicles.Add(spawnedVeh);
        }
        private async void StartVehicleLockpick(int lockpickType)
        {
            try
            {
                if (!isLockpicking)
                {
                    isLockpicking = true;
                    var targetVeh     = GTAHelpers.GetVehicleInFrontOfPlayer(3.0f);
                    var closeRegister = GTAHelpers.GetObjectInRange(ObjectHash.prop_till_01);
                    if (targetVeh != null)
                    {
                        Log.ToChat("", "You begin lockpicking the vehicle");
                        var chosenLockpick = (LockpickTypes)lockpickType;
                        await Game.PlayerPed.Task.PlayAnimation("missheistfbisetup1", "unlock_loop_janitor", 2.0f, 2.0f, -1, (AnimationFlags)49, 0);

                        await BaseScript.Delay(chosenLockpick == LockpickTypes.BobbyPin? 6250 : 5000);

                        var checkVeh = GTAHelpers.GetVehicleInFrontOfPlayer(3.0f);
                        if (targetVeh == checkVeh)
                        {
                            var shouldUnlock = chosenLockpick == LockpickTypes.BobbyPin ? rand.NextBool(30) : rand.NextBool(40) || chosenLockpick == LockpickTypes.SlimJim;
                            if (shouldUnlock)
                            {
                                Log.ToChat("[Robbery]", "You successfully lockpicked the vehicle", ConstantColours.Blue);
                                targetVeh.SetDecor("Vehicle.ID", -1);
                                targetVeh.LockStatus = VehicleLockStatus.Unlocked;
                                Client.TriggerServerEvent("Vehicle.CreateExternalVehicle", VehicleDataPacker.PackVehicleData(targetVeh));
                            }
                            else
                            {
                                Log.ToChat("[Robbery]", "You failed to lockpick the vehicle", ConstantColours.Blue);
                                setVehicleAlarm(targetVeh);
                                var breakPick = chosenLockpick == LockpickTypes.BobbyPin ? rand.NextBool(40) : rand.NextBool(20);
                                if (breakPick)
                                {
                                    string lockpickName = chosenLockpick == LockpickTypes.BobbyPin ? "bobby pin" : "lockpick";
                                    Log.ToChat("[Robbery]", $"Your {lockpickName} broke while trying to get into the vehicle", ConstantColours.Blue);
                                    //BaseScript.TriggerEvent("addInvItem", lockpickName.RemoveSpaces(), -1);
                                    Client.TriggerServerEvent("Inventory.AddInvItem", JsonConvert.SerializeObject(InventoryItems.GetInvItemData(lockpickName.RemoveSpaces())), -1);
                                }
                            }
                        }
                        else
                        {
                            Log.ToChat("", "You moved too far away from the vehicle");
                        }
                    }
                    else if (closeRegister != 0)
                    {
                        Client.Instances.RobberyHandler.AttemptRegisterRobbery();
                    }
                    else
                    {
                        Log.ToChat("", "There is nothing near you that can be lockpicked");
                    }
                    isLockpicking = false;
                    Game.PlayerPed.Task.ClearAll();
                }
            } catch (Exception e) { Log.Error(e); }
        }
        private void AttemptEnterVehicle(Vehicle veh)
        {
            var robAttempts = veh.HasDecor("Vehicle.RobAttempts") ? veh.GetDecor <int>("Vehicle.RobAttempts") : 0;

            if (veh.HasDecor("Vehicle.ID"))
            {
                return;
            }

            veh.LockStatus = VehicleLockStatus.Locked;

            if (robAttempts > 1)
            {
                return;
            }

            veh.SetDecor("Vehicle.RobAttempts", robAttempts + 1);

            var isCarjacking = veh.Occupants.ToList().Count > 0;

            if (isCarjacking)
            {
                var deadDriver   = veh.Driver.IsDead;
                var shouldUnlock = rand.NextBool(carJackChance);
                if (shouldUnlock)
                {
                    veh.LockStatus = VehicleLockStatus.Unlocked;
                    Client.TriggerServerEvent("Vehicle.CreateExternalVehicle", VehicleDataPacker.PackVehicleData(veh));
                }

                var vehColour = veh.Mods.PrimaryColor.ToString().AddSpacesToCamelCase();
                var vehName   = veh.LocalizedName;
                var vehPlate  = veh.Mods.LicensePlate;
                var location  = GTAHelpers.GetLocationString();

                if (veh.HasDecor("Vehicle.HasBeenAlerted"))
                {
                    return;
                }

                veh.SetDecor("Vehicle.HasBeenAlerted", true);

                if (deadDriver)
                {
                    attemptPedReport(veh, shouldUnlock);
                }
                else
                {
                    if (rand.NextBool(40))
                    {
                        return;
                    }

                    Client.TriggerServerEvent("Alerts.SendCADAlert", $"10-61{(shouldUnlock ? "" : "A")}", $"{vehColour} {vehName} | {vehPlate}", location);
                }
            }
            else
            {
                var shouldUnlock = rand.NextBool(parkedCarChance);
                if (shouldUnlock)
                {
                    veh.LockStatus = VehicleLockStatus.Unlocked;
                    Client.TriggerServerEvent("Vehicle.CreateExternalVehicle", VehicleDataPacker.PackVehicleData(veh));
                }

                attemptPedReport(veh, shouldUnlock);
            }
        }
示例#4
0
        private async Task SaveVehicleTick()
        {
            await BaseScript.Delay(saveInterval);

            await ownedVehicles.ForEachAsync(async o =>
            {
                if (!o.IsDead)
                {
                    Client.TriggerServerEvent("Vehicles.UpdateVehicleData", o.GetDecor <int>("Vehicle.ID"), VehicleDataPacker.PackVehicleData(o));
                }

                await BaseScript.Delay(0);
            });
        }