This function is intended to simulate that the tires break when fired. getClosestVehicle() returns only one int, not the vehicle handle.
Here is my working client-side script:
mp.events.add('playerWeaponShot', (targetPosition) => {
let nearestVehicle = mp.game.vehicle.getClosestVehicle(targetPosition.x, targetPosition.y, targetPosition.z, 2, 0, 70);
if( nearestVehicle != 0 ) {
// chance of damage
if( Math.floor((Math.random() * 100) + 1) < 25 ) {
for (var i = 0; i < 4; i++) {
var DamagedWheel = Math.floor((Math.random() * 9));
mp.vehicles.atHandle(nearestVehicle).setTyreBurst(DamagedWheel, true, 1000);
}
}
}
});
But I think it's easier and safer to run these functions on the server side. Here is an example from my server:
mp.events.add('vehicle_toggle_lock', (Player) => {
var NearbyVehicles = [];
mp.vehicles.forEachInRange(Player.position, 2.5, (NerbyVehicle) => {
NearbyVehicles.push(NerbyVehicle);
});
// sort the vehicles by range (0 is closest to the player)
NearbyVehicles.sort(function(a, b){return b.dist(Player.position)-a.dist(Player.position)});
if( NearbyVehicles.length > 0 )
{
if( NearbyVehicles[0].locked ) {
NearbyVehicles[0].locked = false;
Player.notify("You ~g~unlocked the vehicle.");
// MySQL_Conn.query("UPDATE vehicles SET veh_locked='0' WHERE vehicle=?", [NearbyVehicles[0].data.id]);
} else {
NearbyVehicles[0].locked = true;
Player.notify("You ~r~locked the vehicle.");
// MySQL_Conn.query("UPDATE vehicles SET veh_locked='1' WHERE vehicle=?", [NearbyVehicles[0].data.id]);
}
}
});