439 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			439 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local CB = exports["kimi_callbacks"]
 | |
| local QBCore = exports['qb-core']:GetCoreObject()
 | |
| 
 | |
| 
 | |
| -- create a new key
 | |
| CB:Register("VKC:createNewKey", function(source, plate, count)
 | |
|     local src = source
 | |
|     
 | |
|     if (plate == nil or count == nil) then
 | |
|         print("^1[ERROR] \"plate\" or \"count\" was nil while creating new key for id " .. tostring(src))
 | |
|         
 | |
|         return false
 | |
|     end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(src)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
| 
 | |
|         if (Player.Functions.GetMoney('cash') >= Config.Costs.newKey) then
 | |
|             local results = MySQL.Sync.fetchAll("SELECT count FROM vehicle_keys WHERE owner = @owner AND (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                 ["@owner"]          = Player.PlayerData.citizenid,
 | |
|                 ["@plate"]          = plate,
 | |
|                 ["@trimmedPlate"]   = trimmedPlate
 | |
|             })
 | |
| 
 | |
|             local rows = 0
 | |
|             if (#results > 0) then
 | |
| 	            rows = MySQL.Sync.execute("UPDATE vehicle_keys SET count = count + @count WHERE owner = @owner AND (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                     ["@owner"]          = Player.PlayerData.citizenid,
 | |
|                     ["@plate"]          = plate,
 | |
|                     ["@trimmedPlate"]   = trimmedPlate,
 | |
|                     ["@count"]          = count
 | |
|                 })
 | |
|             else
 | |
| 	            rows = MySQL.Sync.execute("INSERT INTO vehicle_keys (owner, plate, count) VALUES (@owner, @trimmedPlate, @count)", {
 | |
|                     ["@owner"]          = Player.PlayerData.citizenid,
 | |
|                     ["@trimmedPlate"]   = trimmedPlate,
 | |
|                     ["@count"]          = count
 | |
|                 })
 | |
|             end
 | |
|             
 | |
|             if (rows == 0) then
 | |
|                 return false
 | |
|             end
 | |
|             
 | |
|             Player.Functions.RemoveMoney('cash', Config.Costs.newKey)
 | |
|         else
 | |
|             return "noMoney"
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while creating new key for id " .. tostring(src))
 | |
|     
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end)
 | |
| 
 | |
| -- remove a key from a plate
 | |
| CB:Register("VKC:removeKey", function(source, plate, num)
 | |
|     local src = source
 | |
|     
 | |
|     if (plate == nil or num == nil) then
 | |
|         print("^1[ERROR] \"plate\" or \"num\" was nil while removing a key for id " .. tostring(src))
 | |
|         
 | |
|         return false
 | |
|     end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(src)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
| 
 | |
|         local rows = MySQL.Sync.execute("DELETE FROM vehicle_keys WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate) and count = @num", {
 | |
|             ["@owner"]          = Player.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate,
 | |
|             ["@num"]            = num
 | |
|         })
 | |
| 
 | |
|         if (rows == 0) then
 | |
|             rows = MySQL.Sync.execute("UPDATE vehicle_keys SET count = count - @num WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                 ["@owner"]          = Player.PlayerData.citizenid,
 | |
|                 ["@plate"]          = plate,
 | |
|                 ["@trimmedPlate"]   = trimmedPlate,
 | |
|                 ["@num"]            = num
 | |
|             })
 | |
|         end
 | |
| 
 | |
|         if (rows == 0) then
 | |
|             return false
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while removing a key for id " .. tostring(src))
 | |
|     
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end)
 | |
| 
 | |
| -- remove a key from a plate
 | |
| CB:Register("VKC:giveKeyToPlayer", function(source, plate, playerId)
 | |
|     local src = source
 | |
|     
 | |
|     if (plate == nil or playerId == nil) then
 | |
|         print("^1[ERROR] \"plate\" or \"playerId\" was nil while giving a key for id " .. tostring(src))
 | |
|         
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
| 
 | |
| 	local Playera = QBCore.Functions.GetPlayer(src) --MARK
 | |
| 	local Playerb = QBCore.Functions.GetPlayer(playerId)
 | |
|     if (Playera and Playerb) then
 | |
|         local rows = MySQL.Sync.execute("DELETE FROM vehicle_keys WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate) and count = 1", {
 | |
|             ["@owner"]          = Playera.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate
 | |
|         })
 | |
| 
 | |
|         if (rows == 0) then
 | |
|             rows = MySQL.Sync.execute("UPDATE vehicle_keys SET count = count - 1 WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                 ["@owner"]          = Playera.PlayerData.citizenid,
 | |
|                 ["@plate"]          = plate,
 | |
|                 ["@trimmedPlate"]   = trimmedPlate
 | |
|             })
 | |
|         end
 | |
| 
 | |
|         if (rows == 0) then
 | |
|             return false
 | |
|         else
 | |
|             local results = MySQL.Sync.fetchAll("SELECT count FROM vehicle_keys WHERE owner = @owner AND (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                 ["@owner"]          = Playerb.PlayerData.citizenid,
 | |
|                 ["@plate"]          = plate,
 | |
|                 ["@trimmedPlate"]   = trimmedPlate
 | |
|             })
 | |
| 
 | |
|             rows = 0
 | |
|             if (#results > 0) then
 | |
| 	            rows = MySQL.Sync.execute("UPDATE vehicle_keys SET count = count + 1 WHERE owner = @owner AND (plate = @plate OR plate = @trimmedPlate)", {
 | |
|                     ["@owner"]          = Playerb.PlayerData.citizenid,
 | |
|                     ["@plate"]          = plate,
 | |
|                     ["@trimmedPlate"]   = trimmedPlate
 | |
|                 })
 | |
|             else
 | |
| 	            rows = MySQL.Sync.execute("INSERT INTO vehicle_keys (owner, plate, count) VALUES (@owner, @trimmedPlate, 1)", {
 | |
|                     ["@owner"]          = Playerb.PlayerData.citizenid,
 | |
|                     ["@trimmedPlate"]   = trimmedPlate
 | |
|                 })
 | |
|             end
 | |
|             
 | |
|             if (rows == 0) then
 | |
|                 return false
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" or \"playerData2\" was nil while giving a key for id " .. tostring(src))
 | |
|     
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     TriggerClientEvent("VKC:giveKeyNotif", playerId, trimmedPlate)
 | |
| 
 | |
|     return true
 | |
| end)
 | |
| 
 | |
| -- remove all keys from a plate
 | |
| CB:Register("VKC:removeAllKeys", function(source, plate)
 | |
|     local src = source
 | |
|     
 | |
|     if (plate == nil) then
 | |
|         print("^1[ERROR] \"plate\" was nil while removing all keys for " .. tostring(src))
 | |
|         
 | |
|         return false
 | |
|     end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(src)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
|         
 | |
|         if (Player.Functions.GetMoney(Config.Costs.GetMoney) >= Config.Costs.exchangeLocks) then
 | |
|             MySQL.Sync.execute("DELETE FROM vehicle_keys WHERE plate = @trimmedPlate", {
 | |
|                 ["@trimmedPlate"] = trimmedPlate
 | |
|             })
 | |
|             
 | |
|             Player.Functions.RemoveMoney(Config.Costs.GetMoney, Config.Costs.exchangeLocks)
 | |
| 
 | |
|             return true
 | |
|         else
 | |
|             return "noMoney"
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return false
 | |
| end)
 | |
| 
 | |
| -- get all owned vehicles from player
 | |
| function GetPlayerVehicleData(playerId)
 | |
|     if (playerId == nil) then
 | |
| 		print("^1[ERROR] Parameter \"playerId\" was nil while triggering server export \"GetOwnedVehicles\"!")
 | |
| 		return
 | |
| 	end
 | |
|     local Player = QBCore.Functions.GetPlayer(playerId)
 | |
|     local vehicles = {}
 | |
|     if (Player) then
 | |
|         local results = MySQL.Sync.fetchAll("SELECT plate, vehicle FROM player_vehicles WHERE citizenid = @owner", {
 | |
|             ["@owner"] = Player.PlayerData.citizenid
 | |
|         })
 | |
| 
 | |
|         for i = 1, #results, 1 do
 | |
|             print(json.encode(results[i]))
 | |
|             table.insert(vehicles, {
 | |
|                 results[i].plate,
 | |
|                 results[i].vehicle})
 | |
|                 --json.decode(results[i].vehicles).model})
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while getting owned vehicles for id " .. tostring(playerId))
 | |
|     end
 | |
| 
 | |
|     print(json.encode(vehicles))
 | |
|     return vehicles
 | |
| end
 | |
| CB:Register("VKC:getPlayerVehicleData", GetPlayerVehicleData)
 | |
| 
 | |
| -- get all owned keys from player
 | |
| function GetPlayerKeys(playerId)
 | |
|     if (playerId == nil) then
 | |
| 		print("^1[ERROR] Parameter \"playerId\" was nil while triggering server export \"GetOwnedKeys\"!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
|     local keys = {}
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(playerId)
 | |
|     if (Player) then
 | |
|         local results = MySQL.Sync.fetchAll("SELECT vehicle_keys.plate, vehicle_keys.count, player_vehicles.vehicle FROM vehicle_keys INNER JOIN player_vehicles ON vehicle_keys.plate = player_vehicles.plate WHERE vehicle_keys.owner = @owner", {
 | |
|             ["@owner"] = Player.PlayerData.citizenid
 | |
|         })
 | |
|         
 | |
|         for i = 1, #results, 1 do
 | |
|             table.insert(keys, {
 | |
|                 plate = results[i].plate,
 | |
|                 count = results[i].count,
 | |
|                 model = results[i].vehicle --json.decode(results[i].vehicle).model
 | |
|             })
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while getting owned keys for id " .. tostring(playerId))
 | |
|     end
 | |
| 
 | |
|     return keys
 | |
| end
 | |
| CB:Register("VKC:getPlayerKeys", GetPlayerKeys)
 | |
| 
 | |
| -- return if playerId is owner of vehicle
 | |
| function IsVehicleOwner(playerId, plate)
 | |
|     if (playerId == nil) then
 | |
| 		print("^1[ERROR] Parameter \"playerId\" was nil while triggering server export \"IsVehicleOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
|     if (plate == nil) then
 | |
| 		print("^1[ERROR] Parameter \"plate\" was nil while triggering server export \"IsVehicleOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(playerId)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
| 
 | |
|         local results = MySQL.Sync.fetchAll("SELECT plate FROM player_vehicles WHERE citizenid = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|             ["@owner"]          = Player.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate
 | |
|         })
 | |
|         
 | |
|         if (#results > 0) then
 | |
|             return true
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while getting vehicle ownership for id " .. tostring(playerId))
 | |
|     end
 | |
| 
 | |
|     return false
 | |
| end
 | |
| CB:Register("VKC:isVehicleOwner", IsVehicleOwner)
 | |
| 
 | |
| -- return if playerId is owner of key
 | |
| function IsKeyOwner(playerId, plate, model)
 | |
|     if (playerId == nil) then
 | |
| 		print("^1[ERROR] Parameter \"playerId\" was nil while triggering server export \"IsKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
|     if (plate == nil) then
 | |
| 		print("^1[ERROR] Parameter \"plate\" was nil while triggering server export \"IsKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
|     if (model == nil) then
 | |
| 		print("^1[ERROR] Parameter \"model\" was nil while triggering server export \"IsKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(playerId)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
| 
 | |
|         if (IsJobVehicle(Player.PlayerData.job.name, trimmedPlate, model)) then
 | |
|             return true
 | |
|         end
 | |
|         
 | |
|         local results = MySQL.Sync.fetchAll("SELECT plate FROM vehicle_keys WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|             ["@owner"]          = Player.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate
 | |
|         })
 | |
|     
 | |
|         if (#results > 0) then
 | |
|             return true
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while getting key ownership for id " .. tostring(playerId))
 | |
|     end
 | |
| 
 | |
|     return false
 | |
| end
 | |
| exports["kimi_callbacks"]:Register("VKC:isKeyOwner", IsKeyOwner)
 | |
| 
 | |
| -- return if playerId is owner of vehicle or key
 | |
| function IsVehicleOrKeyOwner(playerId, plate, model)
 | |
|     if (playerId == nil) then
 | |
| 		print("^1[ERROR] Parameter \"playerId\" was nil while triggering server export \"IsVehicleOrKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
|     if (plate == nil) then
 | |
| 		print("^1[ERROR] Parameter \"plate\" was nil while triggering server export \"IsVehicleOrKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
|     if (model == nil) then
 | |
| 		print("^1[ERROR] Parameter \"model\" was nil while triggering server export \"IsVehicleOrKeyOwner\"!")
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	local Player = QBCore.Functions.GetPlayer(playerId)
 | |
|     if (Player) then
 | |
|         local trimmedPlate = plate:gsub("^%s*(.-)%s*$", "%1"):upper()
 | |
|         
 | |
|         if (IsJobVehicle(Player.PlayerData.job.name, trimmedPlate, model)) then
 | |
|             return true
 | |
|         end
 | |
|         
 | |
|         local results = MySQL.Sync.fetchAll("SELECT plate FROM player_vehicles WHERE citizenid = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|             ["@owner"]          = Player.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate
 | |
|         })
 | |
|     
 | |
|         if (#results > 0) then
 | |
|             return true
 | |
|         end
 | |
|     
 | |
|         results = MySQL.Sync.fetchAll("SELECT plate FROM vehicle_keys WHERE owner = @owner and (plate = @plate OR plate = @trimmedPlate)", {
 | |
|             ["@owner"]          = Player.PlayerData.citizenid,
 | |
|             ["@plate"]          = plate,
 | |
|             ["@trimmedPlate"]   = trimmedPlate
 | |
|         })
 | |
|     
 | |
|         if (#results > 0) then
 | |
|             return true
 | |
|         end
 | |
|     else
 | |
|         print("^1[ERROR] \"playerData\" was nil while getting vehicle or key ownership for id " .. tostring(playerId))
 | |
|     end
 | |
| 
 | |
|     return false
 | |
| end
 | |
| CB:Register("VKC:isVehicleOrKeyOwner", IsVehicleOrKeyOwner)
 | |
| 
 | |
| 
 | |
| 
 | |
| -- if the given vehicle is a job vehicle
 | |
| function IsJobVehicle(job, plate, model)
 | |
|     local jobData = Config.JobVehicles[job]
 | |
|     
 | |
|     if (jobData == nil) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     for i, m in ipairs(jobData.models) do
 | |
|         if (m == model) then
 | |
|             return true
 | |
|         end
 | |
|     end
 | |
|     
 | |
|     for i, p in ipairs(jobData.plates) do
 | |
|         if (plate:find(p:upper())) then
 | |
|             return true
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return false
 | |
| end
 | |
| 
 | |
| 
 | |
| 
 | |
| -- toggle door lock over network to ensure it always works
 | |
| RegisterServerEvent("VKC:toggleLockNet")
 | |
| AddEventHandler("VKC:toggleLockNet", function(vehicleNetId, unlocked)
 | |
|     local vehicle = NetworkGetEntityFromNetworkId(vehicleNetId)
 | |
|     if (DoesEntityExist(vehicle)) then
 | |
|         local entityOwner = NetworkGetEntityOwner(vehicle)
 | |
|         TriggerClientEvent("VKC:toggleLockOnPlayer", entityOwner, vehicleNetId, unlocked)
 | |
|     end
 | |
| end)
 | |
| RegisterServerEvent("VKC:playDoorLockSoundNet")
 | |
| AddEventHandler("VKC:playDoorLockSoundNet", function(vehicleNetId, lock)
 | |
|     TriggerClientEvent("VKC:playDoorLockSound", -1, vehicleNetId, lock)
 | |
| end)
 | |
| 
 | |
| 
 | |
| RegisterServerEvent('VKC:setvehkey')
 | |
| AddEventHandler('VKC:setvehkey', function(plate)
 | |
|     local _source = source
 | |
|     local xPlayer = QBCore.Functions.GetPlayer(_source)
 | |
| 
 | |
|     MySQL.query("INSERT INTO vehicle_keys(owner, plate, count) VALUES (?, ?, ?)", {xPlayer.PlayerData.citizenid, plate, 1})
 | |
| end)
 | |
| 
 | |
| RegisterServerEvent('VKC:delvehkey')
 | |
| AddEventHandler('VKC:delvehkey', function(plate, owner)
 | |
|     local _source = source
 | |
|     if owner then
 | |
|         local xPlayer = QBCore.Functions.GetPlayer(_source)
 | |
| 
 | |
|         MySQL.query("DELETE FROM vehicle_keys WHERE plate = ? and owner = ?", {plate, xPlayer.PlayerData.citizenid})
 | |
|     else
 | |
|         MySQL.query("DELETE FROM vehicle_keys WHERE plate = ?", {plate})
 | |
|     end
 | |
| end) | 
