This repository was archived by the owner on Mar 18, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathclient.lua
More file actions
150 lines (134 loc) · 4.73 KB
/
Copy pathclient.lua
File metadata and controls
150 lines (134 loc) · 4.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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