Citizen.CreateThread(function() while true do local allowedWeapons = {"WEAPON_KNIFE", "WEAPON_BOTTLE", "WEAPON_DAGGER", "WEAPON_HATCHET", "WEAPON_MACHETE", "WEAPON_SWITCHBLADE"} local player = PlayerId() local plyPed = GetPlayerPed(player) local vehicle = GetClosestVehicleToPlayer() local animDict = "melee@knife@streamed_core_fps" local animName = "ground_attack_on_spot" if vehicle ~= 0 then if CanUseWeapon(allowedWeapons) then local closestTire = GetClosestVehicleTire(vehicle) if closestTire ~= nil then if IsVehicleTyreBurst(vehicle, closestTire.tireIndex, 0) == false then Draw3DText(closestTire.bonePos.x, closestTire.bonePos.y, closestTire.bonePos.z, tostring("~r~[E] SLASH TIRE")) if IsControlJustPressed(1, 38) then RequestAnimDict(animDict) while not HasAnimDictLoaded(animDict) do Citizen.Wait(100) end local animDuration = GetAnimDuration(animDict, animName) TaskPlayAnim(plyPed, animDict, animName, 8.0, -8.0, animDuration, 15, 1.0, 0, 0, 0) Citizen.Wait((animDuration / 2) * 1000) local driverOfVehicle = GetDriverOfVehicle(vehicle) local driverServer = GetPlayerServerId(driverOfVehicle) if driverServer == 0 then SetVehicleTyreBurst(vehicle, closestTire.tireIndex, 0, 100.0) else TriggerServerEvent("SlashTires:TargetClient", driverServer, closestTire.tireIndex) end Citizen.Wait((animDuration / 2) * 1000) ClearPedTasksImmediately(plyPed) end end end end end Citizen.Wait(0) end end) RegisterNetEvent("SlashTires:SlashClientTire") AddEventHandler("SlashTires:SlashClientTire", function(tireIndex) TriggerEvent("chatMessage", "^1A player is trying to slash your tire") local player = PlayerId() local plyPed = GetPlayerPed(player) local vehicle = GetVehiclePedIsIn(plyPed, false) SetVehicleTyreBurst(vehicle, tireIndex, 0, 100.0) end) function GetDriverOfVehicle(vehicle) local dPed = GetPedInVehicleSeat(vehicle, -1) for a = 0, 32 do if dPed == GetPlayerPed(a) then return a end end return -1 end function CanUseWeapon(allowedWeapons) local player = PlayerId() local plyPed = GetPlayerPed(player) local plyCurrentWeapon = GetSelectedPedWeapon(plyPed) for a = 1, #allowedWeapons do if GetHashKey(allowedWeapons[a]) == plyCurrentWeapon then return true end end return false end function GetClosestVehicleToPlayer() local player = PlayerId() local plyPed = GetPlayerPed(player) local plyPos = GetEntityCoords(plyPed, false) local plyOffset = GetOffsetFromEntityInWorldCoords(plyPed, 0.0, 1.0, 0.0) local radius = 3.0 local rayHandle = StartShapeTestCapsule(plyPos.x, plyPos.y, plyPos.z, plyOffset.x, plyOffset.y, plyOffset.z, radius, 10, plyPed, 7) local _, _, _, _, vehicle = GetShapeTestResult(rayHandle) return vehicle end function GetClosestVehicleTire(vehicle) local tireBones = {"wheel_lf", "wheel_rf", "wheel_lm1", "wheel_rm1", "wheel_lm2", "wheel_rm2", "wheel_lm3", "wheel_rm3", "wheel_lr", "wheel_rr"} local tireIndex = { ["wheel_lf"] = 0, ["wheel_rf"] = 1, ["wheel_lm1"] = 2, ["wheel_rm1"] = 3, ["wheel_lm2"] = 45, ["wheel_rm2"] = 47, ["wheel_lm3"] = 46, ["wheel_rm3"] = 48, ["wheel_lr"] = 4, ["wheel_rr"] = 5, } local player = PlayerId() local plyPed = GetPlayerPed(player) local plyPos = GetEntityCoords(plyPed, false) local minDistance = 1.0 local closestTire = nil for a = 1, #tireBones do local bonePos = GetWorldPositionOfEntityBone(vehicle, GetEntityBoneIndexByName(vehicle, tireBones[a])) local distance = Vdist(plyPos.x, plyPos.y, plyPos.z, bonePos.x, bonePos.y, bonePos.z) if closestTire == nil then if distance <= minDistance then closestTire = {bone = tireBones[a], boneDist = distance, bonePos = bonePos, tireIndex = tireIndex[tireBones[a]]} end else if distance < closestTire.boneDist then closestTire = {bone = tireBones[a], boneDist = distance, bonePos = bonePos, tireIndex = tireIndex[tireBones[a]]} end end end return closestTire end function Draw3DText(x, y, z, text) local onScreen,_x,_y=World3dToScreen2d(x,y,z) local px,py,pz=table.unpack(GetGameplayCamCoords()) local dist = GetDistanceBetweenCoords(px,py,pz, x,y,z, 1) local scale = (1/dist)*2 local fov = (1/GetGameplayCamFov())*100 local scale = scale*fov if onScreen then SetTextScale(0.0*scale, 0.55*scale) SetTextFont(0) SetTextProportional(1) -- SetTextScale(0.0, 0.55) SetTextColour(255, 255, 255, 255) SetTextDropshadow(0, 0, 0, 0, 255) SetTextEdge(2, 0, 0, 0, 150) SetTextDropShadow() SetTextOutline() SetTextEntry("STRING") SetTextCentre(1) AddTextComponentString(text) DrawText(_x,_y) end end