1
1
---- -------------------
2
2
---- Variables ----
3
3
---- -------------------
4
+
4
5
local vehicleList = {}
5
6
6
7
---- -------------------
7
- ---- Threads ----
8
+ ---- Functions ----
8
9
---- -------------------
9
10
10
- CreateThread (function ()
11
- local vehicles = MySQL .query .await (' SELECT * FROM player_vehicles' )
11
+ --- Loads a players vehicles to the vehicleList
12
+ --- @param src integer
13
+ local function addPlayer (src )
14
+ local player = exports .qbx_core :GetPlayer (src )
15
+ if not player then return end
16
+
17
+ local vehicles = MySQL .query .await (' SELECT * FROM player_vehicles WHERE citizenid = ?' , { player .PlayerData .citizenid })
12
18
for i = 1 , # vehicles do
13
19
local data = vehicles [i ]
14
20
vehicleList [data .plate ] = {}
@@ -17,7 +23,50 @@ CreateThread(function()
17
23
vehicleList [data .plate ][data .citizenid ] = true
18
24
end
19
25
end
20
- end )
26
+ end
27
+
28
+ --- Removes a players vehicles from the vehicleList
29
+ --- @param src integer
30
+ local function removePlayer (src )
31
+ local player = exports .qbx_core :GetPlayer (src )
32
+ if not player then return end
33
+
34
+ for k , v in pairs (vehicleList ) do
35
+ if v [player .PlayerData .citizenid ] then
36
+ vehicleList [k ][player .PlayerData .citizenid ] = nil
37
+ end
38
+ end
39
+ end
40
+
41
+ function GiveKeys (id , plate )
42
+ local player = exports .qbx_core :GetPlayer (id )
43
+ if not player then return false end
44
+
45
+ if not vehicleList [plate ] then vehicleList [plate ] = {} end
46
+ vehicleList [plate ][player .PlayerData .citizenid ] = true
47
+
48
+ exports .qbx_core :Notify (id , locale (' notify.keys_taken' ))
49
+ TriggerClientEvent (' qb-vehiclekeys:client:AddKeys' , id , plate )
50
+
51
+ return true
52
+ end
53
+
54
+ exports (' GiveKeys' , GiveKeys )
55
+
56
+ function RemoveKeys (id , plate )
57
+ local player = exports .qbx_core :GetPlayer (id )
58
+ if not player or not vehicleList [plate ] or not vehicleList [plate ][player .PlayerData .citizenid ] then return false end
59
+
60
+ vehicleList [plate ][player .PlayerData .citizenid ] = nil
61
+ TriggerClientEvent (' qb-vehiclekeys:client:RemoveKeys' , id , plate )
62
+
63
+ return true
64
+ end
65
+
66
+ function HasKeys (id , plate )
67
+ local player = exports .qbx_core :GetPlayer (id )
68
+ return player and vehicleList [plate ] and vehicleList [plate ][player .PlayerData .citizenid ]
69
+ end
21
70
22
71
---- -------------------
23
72
---- Server Events ----
36
85
-- Must already have keys to the vehicle, trigger the event from the server, or pass forcegive paramter as true.
37
86
RegisterNetEvent (' qb-vehiclekeys:server:GiveVehicleKeys' , function (receiver , plate )
38
87
local giver = source
39
-
40
88
if HasKeys (giver , plate ) then
41
89
exports .qbx_core :Notify (giver , locale (" notify.gave_keys" ))
42
90
if type (receiver ) == ' table' then
43
- for _ , r in ipairs ( receiver ) do
44
- GiveKeys (receiver [r ], plate )
91
+ for i = 1 , receiver do
92
+ GiveKeys (receiver [i ], plate )
45
93
end
46
94
else
47
95
GiveKeys (receiver , plate )
@@ -52,8 +100,7 @@ RegisterNetEvent('qb-vehiclekeys:server:GiveVehicleKeys', function(receiver, pla
52
100
end )
53
101
54
102
RegisterNetEvent (' qb-vehiclekeys:server:AcquireVehicleKeys' , function (plate )
55
- local src = source
56
- GiveKeys (src , plate )
103
+ GiveKeys (source , plate )
57
104
end )
58
105
59
106
RegisterNetEvent (' qb-vehiclekeys:server:breakLockpick' , function (itemName )
@@ -78,38 +125,6 @@ lib.callback.register('qbx-vehiclekeys:server:getVehicleKeys', function(source)
78
125
return keysList
79
126
end )
80
127
81
- ---- -------------------
82
- ---- Functions ----
83
- ---- -------------------
84
- function GiveKeys (id , plate )
85
- local citizenid = exports .qbx_core :GetPlayer (id ).PlayerData .citizenid
86
-
87
- if not vehicleList [plate ] then vehicleList [plate ] = {} end
88
- vehicleList [plate ][citizenid ] = true
89
-
90
- exports .qbx_core :Notify (id , locale (' notify.keys_taken' ))
91
- TriggerClientEvent (' qb-vehiclekeys:client:AddKeys' , id , plate )
92
- end
93
- exports (' GiveKeys' , GiveKeys )
94
-
95
- function RemoveKeys (id , plate )
96
- local citizenid = exports .qbx_core :GetPlayer (id ).PlayerData .citizenid
97
-
98
- if vehicleList [plate ] and vehicleList [plate ][citizenid ] then
99
- vehicleList [plate ][citizenid ] = nil
100
- end
101
-
102
- TriggerClientEvent (' qb-vehiclekeys:client:RemoveKeys' , id , plate )
103
- end
104
-
105
- function HasKeys (id , plate )
106
- local citizenid = exports .qbx_core :GetPlayer (id ).PlayerData .citizenid
107
- if vehicleList [plate ] and vehicleList [plate ][citizenid ] then
108
- return true
109
- end
110
- return false
111
- end
112
-
113
128
--- Gives a key to an entity based on the player's CitizenID.
114
129
--- @param id integer The player ' s ID.
115
130
--- @param netId number The network ID of the entity.
@@ -121,6 +136,7 @@ RegisterNetEvent('qb-vehiclekeys:server:GiveKey', function(id, netId, doorState)
121
136
-- drop player
122
137
end
123
138
end )
139
+
124
140
exports (' GiveKey' , GiveKey )
125
141
126
142
--- Removes a key from an entity based on the player's CitizenID.
@@ -133,6 +149,7 @@ RegisterNetEvent('vehiclekeys:server:RemoveKey', function(id, netId)
133
149
-- drop player
134
150
end
135
151
end )
152
+
136
153
exports (' RemoveKey' , RemoveKey )
137
154
138
155
--- Sets the door state to a desired value.
@@ -146,8 +163,26 @@ RegisterNetEvent('vehiclekeys:server:SetDoorState', function(netId, doorState)
146
163
-- drop player
147
164
end
148
165
end )
166
+
149
167
exports (' SetDoorState' , SetDoorState )
150
168
169
+ AddEventHandler (' QBCore:Server:OnPlayerLoaded' , function ()
170
+ addPlayer (source --[[ @as integer]] )
171
+ end )
172
+
173
+ --- @param src integer
174
+ AddEventHandler (' QBCore:Server:OnPlayerUnload' , function (src )
175
+ removePlayer (src )
176
+ end )
177
+
178
+ AddEventHandler (' playerDropped' , function ()
179
+ removePlayer (source --[[ @as integer]] )
180
+ end )
181
+
182
+ ---- -------------------
183
+ ---- Callbacks ----
184
+ ---- -------------------
185
+
151
186
--- Gives a key to an entity based on the target player's CitizenID but only if the owner already has a key.
152
187
--- @param source number ID of the player
153
188
--- @param netId number The network ID of the entity.
@@ -182,4 +217,20 @@ end)
182
217
--- @return boolean
183
218
lib .callback .register (' vehiclekeys:server:IsPlayerOwned' , function (_ , plate )
184
219
return not not vehicleList [plate ]
220
+ end )
221
+
222
+ ---- -------------------
223
+ ---- Threads ----
224
+ ---- -------------------
225
+
226
+ CreateThread (function ()
227
+ local vehicles = MySQL .query .await (' SELECT * FROM player_vehicles' )
228
+ for i = 1 , # vehicles do
229
+ local data = vehicles [i ]
230
+ vehicleList [data .plate ] = {}
231
+
232
+ if data .citizenid then
233
+ vehicleList [data .plate ][data .citizenid ] = true
234
+ end
235
+ end
185
236
end )
0 commit comments