-- I Know it is dutch :) -- Bc Infinity obfuscated the code I remade it for VAG.gg -- By Sympact06 function splitString(inputstr, sep) local t= {}; i=1 for str in string.gmatch(inputstr, "([^"..sep.."]+)") do t[i] = str i = i + 1 end return t end local restartingstate = false AddEventHandler('txAdmin:events:scheduledRestart', function(eventData) if eventData.secondsRemaining > 3600 then TriggerClientEvent('chatMessage', -1, "SYSTEM", "error", "🚨 De server heeft een geplande restart over "..string.format("%01.f", math.floor(eventData.secondsRemaining/3600)).." uur.") elseif eventData.secondsRemaining > 60 then TriggerClientEvent('chatMessage', -1, "SYSTEM", "error", "🚨 De server heeft een geplande restart over "..math.floor((tonumber(eventData.secondsRemaining) / 60)+ 0.5*0).." minuten.") elseif eventData.secondsRemaining == 60 then TriggerClientEvent('chatMessage', -1, "SYSTEM", "error", "🚨 De server heeft een geplande restart over "..(tonumber(eventData.secondsRemaining)-15).." seconden!") Citizen.CreateThread(function() Citizen.Wait(45000) TriggerClientEvent('chatMessage', -1, "SYSTEM", "error", "🚨 De server heeft een geplande restart over 5 seconden!") restartingstate = true Citizen.Wait(5000) SaveVehicles() for k, v in pairs(JRMEngine.Functions.GetPlayers()) do local Player = JRMEngine.Functions.GetPlayer(v) if Player ~= nil then DropPlayer(Player.PlayerData.source, "\nšŸ”Œ "..JRMEngine.Config.Server.CityName.." Geplande Server Restart, de snelwegen zijn z.s.m weer geopend!\nšŸ”ø Kijk op onze Discord voor meer informatie: "..JRMEngine.Config.Server.Discord) end end Citizen.Wait(500) print('^2[JRMEngine]^7 COMPLETED SHUTDOWN, BYE!') end) end end) AddEventHandler('JRMEngine:vehicles:server:forcedSave', function(shutdown) SaveVehicles() if shutdown ~= nil then print('^2[JRMEngine]^7 COMPLETED SAVING VEHICLES, YOU CAN NOW TERMINATE THE PROGRAM.') end end) RegisterServerEvent("JRMEngine:PlayerJoined") AddEventHandler('JRMEngine:PlayerJoined', function() local src = source end) AddEventHandler('playerDropped', function(reason) local src = source if src ~= nil then print('^2[JRMEngine]^7 '..GetPlayerName(src)..' has disconnected!') local identf = GetPlayerIdentifiers(src) if identf ~= nil then TriggerEvent("jrm-log:server:CreateLog", "joinleave", "Dropped", "red", "**".. GetPlayerName(src) .. "** ("..identf[1]..") left.. `"..json.encode(reason).."`") TriggerEvent("jrm-log:server:sendLog", identf[1], "joined", {}) end if JRMEngine.Players[src] ~= nil then -- possible fix for duplicating items on console quit when creating a new drop or putting something in a stash. JRMEngine.Players[src].Functions.Save() end if reason ~= "Reconnecting" and src > 60000 then return false end if JRMEngine.Players[src] == nil then return false end --if reason ~= "Exiting" and reason:sub(1, 36) ~= "Server->client connection timed out." then exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice WHERE state = @crst AND citizenid = @citizenid LIMIT 1', {['@state'] = 3, ['@citizenid'] = JRMEngine.Players[src].PlayerData.citizenid, ['@depotprice'] = math.random(95, 105), ['@crst'] = 0}) --end TriggerEvent("JRMEngine:Server:OnPlayerDisconnect", src, JRMEngine.Players[src].PlayerData.citizenid) JRMEngine.Players[src].Functions.Save() JRMEngine.Players[src] = nil else print('^2[JRMEngine]^7 Unknown player (empty source) has disconnected!') end end) AddEventHandler('playerConnecting', function(playerName, setKickReason, deferrals) deferrals.defer() local src = source deferrals.update("\nFiveM Account Controle...") local steamid = "" local license = "" local discord = "" local xbl = "" local liveid = "" local ip = "" for k,v in pairs(GetPlayerIdentifiers(src)) do if string.sub(v, 1, string.len("steam:")) == "steam:" then steamid = v elseif string.sub(v, 1, string.len("license:")) == "license:" then license = v elseif string.sub(v, 1, string.len("xbl:")) == "xbl:" then xbl = v elseif string.sub(v, 1, string.len("ip:")) == "ip:" then ip = v elseif string.sub(v, 1, string.len("discord:")) == "discord:" then discord = v elseif string.sub(v, 1, string.len("live:")) == "live:" then liveid = v end end local name = GetPlayerName(src) if name == nil then JRMEngine.Functions.Kick(src, 'Gebruik geen leeg steam naam.', setKickReason, deferrals) CancelEvent() return false end if(string.match(name, "[*%%'=`\"]")) then JRMEngine.Functions.Kick(src, 'Je hebt een teken in je steam naam ('..string.match(name, "[*%%'=`\"]")..') dat niet geldig is.\nVerwijder deze a.u.b uit je steam naam om verder te gaan.', setKickReason, deferrals) CancelEvent() return false end if (string.match(name, "drop") or string.match(name, "table") or string.match(name, "database")) then JRMEngine.Functions.Kick(src, 'Je hebt in je naam een woord (drop/table/database) zitten wat niet is toegestaan.\nGelieven je steam naam te veranderen.', setKickReason, deferrals) CancelEvent() return false end deferrals.update("\nProfiel Controleren...") if (JRMConfig.IdentifierType == "steam" and (steamid:sub(1,6) == "steam:") == false) then JRMEngine.Functions.Kick(src, 'Je moet steam open hebben om met '..JRMEngine.Config.Server.CityName..' te verbinden.\nšŸ“” Het kan ook zijn dat de server nog aan het opstarten is..', setKickReason, deferrals) CancelEvent() return false elseif (JRMConfig.IdentifierType == "license" and (license:sub(1,8) == "license:") == false) then JRMEngine.Functions.Kick(src, 'Geen Social Club license gevonden.', setKickReason, deferrals) CancelEvent() return false end deferrals.update("\nBanlijst Controleren...") local isBanned, Reason = JRMEngine.Functions.IsPlayerBanned(src) if(isBanned) then JRMEngine.Functions.Kick(src, Reason, setKickReason, deferrals) CancelEvent() return false end deferrals.update("\nDiscord Controleren...") if (JRMConfig.IdentifierType == "discord" and (discord:sub(1,8) == "discord:") == false) then JRMEngine.Functions.Kick(src, 'šŸŒ Geen Discord account gevonden, je hebt Discord nodig om de stad te betreden!', setKickReason, deferrals) CancelEvent() return false elseif (not JRMEngine.Functions.IsRolePresent(discord, name)) then JRMEngine.Functions.Kick(src, 'šŸŒ Je hebt de Burger Rol op Discord nodig om de stad te betreden...', setKickReason, deferrals) CancelEvent() return false end deferrals.update("\nServer Status Controleren...") if(JRMEngine.Config.Server.Closed) then local EnterAllowed = JRMEngine.Functions.HasPermission(src, "betatester") -- not sure if helpdesk rlly needed if(not EnterAllowed) then JRMEngine.Functions.ExecuteSql(false, "SELECT * FROM `jrm_closed_queue` WHERE `name` = '"..JRMEngine.EscapeSqli(name).."'", function(result) if result[1] == nil then JRMEngine.Functions.ExecuteSql(false, "INSERT INTO `jrm_closed_queue` (`name`, `steam`, `license`) VALUES ('"..JRMEngine.EscapeSqli(name).."', '"..JRMEngine.EscapeSqli(steamid).."', '"..JRMEngine.EscapeSqli(license).."')") end end) TriggerEvent("jrm-log:server:CreateLog", "joinleave", "ClosedS", "orange", "**"..name.. "** ("..json.encode(GetPlayerIdentifiers(src))..") rejected, not allowed to join closed server..") JRMEngine.Functions.Kick(src, JRMEngine.Config.Server.ClosedReason, setKickReason, deferrals) CancelEvent() return false end end TriggerEvent("jrm-log:server:CreateLog", "joinleave", "Queue", "orange", "**"..name .. "** ("..json.encode(GetPlayerIdentifiers(src))..") in queue..") TriggerEvent("jrm-log:server:sendLog", GetPlayerIdentifiers(src)[1], "left", {}) local level = nil --JRMEngine.Functions.GetDonatorsRole(discord) -- if level ~= nil and tonumber(level) < 3 then -- level = nil -- end if JRMEngine.Functions.HasPermission(src, "moderator") then level = 1 end TriggerEvent("connectqueue:playerConnect", src, setKickReason, deferrals, level) end) RegisterServerEvent("JRMEngine:server:CloseServer") AddEventHandler('JRMEngine:server:CloseServer', function(reason) local src = source local Player = JRMEngine.Functions.GetPlayer(src) if JRMEngine.Functions.HasPermission(source, "admin") or JRMEngine.Functions.HasPermission(source, "god") then local reason = reason ~= nil and reason or "Geen reden opgegeven..." JRMEngine.Config.Server.Closed = true JRMEngine.Config.Server.ClosedReason = reason TriggerClientEvent("jrm-admin:client:SetServerStatus", -1, true) else JRMEngine.Functions.Kick(src, "Je hebt hier geen permissie voor..", nil, nil) end end) RegisterServerEvent("JRMEngine:server:OpenServer") AddEventHandler('JRMEngine:server:OpenServer', function() local src = source local Player = JRMEngine.Functions.GetPlayer(src) if JRMEngine.Functions.HasPermission(source, "admin") or JRMEngine.Functions.HasPermission(source, "god") then JRMEngine.Config.Server.Closed = false TriggerClientEvent("jrm-admin:client:SetServerStatus", -1, false) else JRMEngine.Functions.Kick(src, "Je hebt hier geen permissie voor..", nil, nil) end end) RegisterServerEvent("JRMEngine:UpdatePlayer") AddEventHandler('JRMEngine:UpdatePlayer', function(data) local src = source local Player = JRMEngine.Functions.GetPlayer(src) if Player ~= nil then Player.PlayerData.position = data.position local newHunger = Player.PlayerData.metadata["hunger"] - 4.2 local newThirst = Player.PlayerData.metadata["thirst"] - 3.8 if newHunger <= 0 then newHunger = 0 end if newThirst <= 0 then newThirst = 0 end Player.Functions.SetMetaData("thirst", newThirst) Player.Functions.SetMetaData("hunger", newHunger) if Player.PlayerData.job.payment > 0 and Player.PlayerData.job.onduty then Player.Functions.AddMoney("bank", Player.PlayerData.job.payment) TriggerClientEvent('JRMEngine:Notify', src, "Je hebt je salaris ontvangen van €"..Player.PlayerData.job.payment) end TriggerClientEvent("hud:client:UpdateNeeds", src, newHunger, newThirst) Player.Functions.Save() end end) RegisterServerEvent("JRMEngine:UpdatePlayerPosition") AddEventHandler("JRMEngine:UpdatePlayerPosition", function(position) local src = source local Player = JRMEngine.Functions.GetPlayer(src) if Player ~= nil then Player.PlayerData.position = position end end) RegisterServerEvent("JRMEngine:Server:TriggerCallback") AddEventHandler('JRMEngine:Server:TriggerCallback', function(name, ...) local src = source JRMEngine.Functions.TriggerCallback(name, src, function(...) TriggerClientEvent("JRMEngine:Client:TriggerCallback", src, name, ...) end, ...) end) RegisterServerEvent("JRMEngine:Server:TriggerCall") AddEventHandler('JRMEngine:Server:TriggerCall', function(name, ...) local src = source JRMEngine.Functions.TriggerCall(name, src, ...) end) RegisterServerEvent("JRMEngine:Server:UseItem") AddEventHandler('JRMEngine:Server:UseItem', function(item) local src = source local Player = JRMEngine.Functions.GetPlayer(src) if item ~= nil and item.amount > 0 then if JRMEngine.Functions.CanUseItem(item.name) then JRMEngine.Functions.UseItem(src, item) end end end) -- todo: 42 times in client side, must be sure src is current player. RegisterServerEvent("JRMEngine:Server:RemoveItem") AddEventHandler('JRMEngine:Server:RemoveItem', function(itemName, amount, slot) local src = source local Player = JRMEngine.Functions.GetPlayer(src) Player.Functions.RemoveItem(itemName, amount, slot) end) -- todo: deprecated function security risk! "JRMEngine:Server:SetMetaData" is used 11 times in client side that needs to be changed to server sided! RegisterServerEvent('JRMEngine:Server:SetMetaData') AddEventHandler('JRMEngine:Server:SetMetaData', function(meta, data) local src = source if meta ~= "currentapartment" and meta ~= "hunger" and meta ~= "thirst" then TriggerEvent("jrm-log:server:CreateLog", "anticheat", "Banned player!", "red", "** @everyone " ..GetPlayerName(src).. "** triggert `JRMEngine:Server:SetMetaData` with unknown meta `"..tostring(json.encode({meta, data})).."` this can only be triggered by menu's.") TriggerEvent("jrm-anticheat:server:wipemeakab", src) else local Player = JRMEngine.Functions.GetPlayer(src) if meta == "hunger" or meta == "thirst" then if data > 100 or data < 0 then data = 100 end end if Player ~= nil then Player.Functions.SetMetaData(meta, data) TriggerClientEvent("hud:client:UpdateNeeds", src, Player.PlayerData.metadata["hunger"], Player.PlayerData.metadata["thirst"]) end end end) AddEventHandler('chatMessage', function(source, n, message) if string.sub(message, 1, 1) == "/" then local args = JRMEngine.Shared.SplitStr(message, " ") local command = string.gsub(args[1]:lower(), "/", "") CancelEvent() if JRMEngine.Commands.List[command] ~= nil then local Player = JRMEngine.Functions.GetPlayer(tonumber(source)) if Player ~= nil then table.remove(args, 1) if (JRMEngine.Functions.HasPermission(source, "god") or JRMEngine.Functions.HasPermission(source, JRMEngine.Commands.List[command].permission)) then if (JRMEngine.Commands.List[command].argsrequired and #JRMEngine.Commands.List[command].arguments ~= 0 and args[#JRMEngine.Commands.List[command].arguments] == nil) then TriggerClientEvent('chatMessage', source, "SYSTEM", "error", "Alle argumenten moeten ingevuld worden!") local agus = "" for name, help in pairs(JRMEngine.Commands.List[command].arguments) do if help.name ~= nil then agus = agus .. " ["..help.name.."]" end end TriggerClientEvent('chatMessage', source, "/"..command, false, agus) else JRMEngine.Commands.List[command].callback(source, args) end else TriggerClientEvent('chatMessage', source, "SYSTEM", "error", "Geen toegang tot dit command!") end end end end end) RegisterServerEvent('JRMEngine:CallCommand') AddEventHandler('JRMEngine:CallCommand', function(command, args) if JRMEngine.Commands.List[command] ~= nil then local Player = JRMEngine.Functions.GetPlayer(tonumber(source)) if Player ~= nil then if (JRMEngine.Functions.HasPermission(source, "god")) or (JRMEngine.Functions.HasPermission(source, JRMEngine.Commands.List[command].permission)) or (JRMEngine.Commands.List[command].permission == Player.PlayerData.job.name) then if (JRMEngine.Commands.List[command].argsrequired and #JRMEngine.Commands.List[command].arguments ~= 0 and args[#JRMEngine.Commands.List[command].arguments] == nil) then TriggerClientEvent('chatMessage', source, "SYSTEM", "error", "Alle argumenten moeten ingevuld worden!") local agus = "" for name, help in pairs(JRMEngine.Commands.List[command].arguments) do agus = agus .. " ["..help.name.."]" end TriggerClientEvent('chatMessage', source, "/"..command, false, agus) else JRMEngine.Commands.List[command].callback(source, args) end else TriggerClientEvent('chatMessage', source, "SYSTEM", "error", "Geen toegang tot dit command!") end end end end) RegisterServerEvent("JRMEngine:ToggleDuty") AddEventHandler('JRMEngine:ToggleDuty', function() local src = source local Player = JRMEngine.Functions.GetPlayer(src) if Player.PlayerData.job.onduty then Player.Functions.SetJobDuty(false) TriggerClientEvent('JRMEngine:Notify', src, "Je bent nu uit dienst!") else Player.Functions.SetJobDuty(true) TriggerClientEvent('JRMEngine:Notify', src, "Je bent nu in dienst!") end TriggerClientEvent("JRMEngine:Client:SetDuty", src, Player.PlayerData.job.onduty) end) Citizen.CreateThread(function() JRMEngine.Functions.UpdateWhitelists() JRMEngine.Functions.ExecuteSql(true, "SELECT * FROM `jrm_permissions`", function(result) if result[1] ~= nil then for k, v in pairs(result) do JRMEngine.Config.Server.PermissionList[v.steam] = { steam = v.steam, license = v.license, permission = v.permission, optin = true, } end end end) end) JRMEngine.Functions.CreateCallback('JRMEngine:HasItem', function(source, cb, itemName) local retval = false local Player = JRMEngine.Functions.GetPlayer(source) if Player ~= nil then if Player.Functions.GetItemByName(itemName) ~= nil then retval = true end end cb(retval) end) JRMEngine.Functions.CreateCallback("JRMEngine:vehicles:server:getPlayerVehicles", function(source, cb) local src = source local pData = JRMEngine.Functions.GetPlayer(src) local plyped = GetPlayerPed(src) local coords = GetEntityCoords(plyped) local streetpos = json.encode(vector4(coords.x, coords.y, coords.z, GetEntityHeading(plyped))) exports['ghmattimysql']:execute('SELECT * FROM jrm_player_vehicles WHERE citizenid = @citizenid', {['@citizenid'] = pData.PlayerData.citizenid}, function(result) if result[1] ~= nil then for k, v in pairs(result) do if v.streetpos ~= nil and v.state == 1 then v.streetpos = json.decode(v.streetpos) if #(coords-vector3(v.streetpos.x, v.streetpos.y, v.streetpos.z)) < 10 then if v.status ~= nil then v.status = json.decode(v.status) end else result[k] = nil end else result[k] = nil end end cb(result) else cb(nil) end end) end) JRMEngine.Functions.CreateCallback("JRMEngine:vehicles:server:getHouseVehicles", function(source, cb, garage) local src = source local pData = JRMEngine.Functions.GetPlayer(src) local plyped = GetPlayerPed(src) local coords = GetEntityCoords(plyped) local streetpos = json.encode(vector4(coords.x, coords.y, coords.z, GetEntityHeading(plyped))) exports['ghmattimysql']:execute('SELECT * FROM jrm_player_vehicles WHERE garage = @garage', {['@garage'] = garage}, function(result) if result[1] ~= nil then for k, v in pairs(result) do if v.streetpos ~= nil and v.state == 1 then v.streetpos = json.decode(v.streetpos) if #(coords-vector3(v.streetpos.x, v.streetpos.y, v.streetpos.z)) < 10 then if v.status ~= nil then v.status = json.decode(v.status) end else result[k] = nil end else result[k] = nil end end cb(result) else cb(nil) end end) end) JRMEngine.Functions.CreateCallback("JRMEngine:vehicles:server:GetVehicleProperties", function(source, cb, plate) local src = source local properties = {} JRMEngine.Functions.ExecuteSql(false, "SELECT `mods` FROM `jrm_player_vehicles` WHERE `plate` = '"..JRMEngine.EscapeSqli(plate).."'", function(result) if result[1] ~= nil then properties = json.decode(result[1].mods) end cb(properties) end) end) JRMEngine.Functions.CreateCall("JRMEngine:vehicles:server:SetVehicleReturned", function(source, plate) local src = source JRMEngine.Functions.ExecuteSql(false, "SELECT `citizenid` FROM `jrm_player_vehicles` WHERE `plate` = '"..JRMEngine.EscapeSqli(plate).."'", function(result) if result[1] ~= nil then local pData = JRMEngine.Functions.GetPlayerByCitizenId(result[1].citizenid) if pData ~= nil then exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice WHERE plate = @plate', {['@state'] = 3, ['@plate'] = plate, ['@depotprice'] = 500}) TriggerClientEvent('JRMEngine:Notify', source, "Het voertuig is nu beschikbaar bij het depot voor €500,- euro!", "primary", 8000) TriggerClientEvent('JRMEngine:Notify', pData.PlayerData.source, "Uw voertuig is afgeleverd bij het depot, u kunt nu uw voertuig komen ophalen..", "primary", 8000) else TriggerClientEvent('JRMEngine:Notify', source, "Deze persoon is niet meer online!", "error") end end end) end) RegisterServerEvent('JRMEngine:vehicles:server:updateVehicleState') AddEventHandler('JRMEngine:vehicles:server:updateVehicleState', function(state, plate, vehcoords, netId) local src = source local pData = JRMEngine.Functions.GetPlayer(src) local streetpos = nil if vehcoords ~= nil then local plyped = GetPlayerPed(src) if #(GetEntityCoords(plyped)-vehcoords) < 20 then streetpos = json.encode(vector4(vehcoords.x, vehcoords.y, vehcoords.z, GetEntityHeading(plyped))) end end if state == 0 then JRMEngine.OutsideVehicles[plate] = netId elseif state == 1 then JRMEngine.OutsideVehicles[plate] = nil end exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice, streetpos = @streetpos, garage = null WHERE plate = @plate', {['@state'] = state, ['@plate'] = plate, ['@depotprice'] = 0, ['@streetpos'] = streetpos}) end) local housevehicle = {} RegisterServerEvent('JRMEngine:vehicles:server:updateGroupVehicleState') AddEventHandler('JRMEngine:vehicles:server:updateGroupVehicleState', function(garage, state, plate, vehcoords, netId) local src = source local pData = JRMEngine.Functions.GetPlayer(src) local streetpos = nil if vehcoords ~= nil then local plyped = GetPlayerPed(src) if #(GetEntityCoords(plyped)-vehcoords) < 20 then streetpos = json.encode(vector4(vehcoords.x, vehcoords.y, vehcoords.z, GetEntityHeading(plyped))) end end if state == 0 then housevehicle[plate] = garage JRMEngine.OutsideVehicles[plate] = netId elseif state == 1 then housevehicle[plate] = nil JRMEngine.OutsideVehicles[plate] = nil end exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice, streetpos = @streetpos, garage = @garage WHERE plate = @plate', {['@state'] = state, ['@garage'] = garage, ['@plate'] = plate, ['@depotprice'] = 0, ['@streetpos'] = streetpos}) end) function CheckVehNets(vehicles, netId) for i = 1, #vehicles do if NetworkGetNetworkIdFromEntity(vehicles[i]) == netId then return vehicles[i] end end return false end function SaveVehicles() local vehicles = GetAllVehicles() local c=0 local b = #(JRMEngine.OutsideVehicles) for plate, netId in pairs(JRMEngine.OutsideVehicles) do local entity = CheckVehNets(vehicles, netId) if not entity and JRMEngine.OutsideVehicles[plate] ~= nil then c=(c+1) JRMEngine.OutsideVehicles[plate] = nil exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice WHERE plate = @plate AND state = @offst', {['@state'] = 3, ['@plate'] = plate, ['@depotprice'] = math.random(150, 200), ['@offst'] = 0}) end end print('^2[JRMEngine]^7 Completed vehicle check with '..c..' changed state from '..b..'/'..#(vehicles)..' total vehicles!') end Citizen.CreateThread(function() Citizen.Wait(1000 * 10) exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET state = @state, depotprice = @depotprice WHERE state = @offst', {['@state'] = 3, ['@depotprice'] = 0, ['@offst'] = 0}) print('^2[JRMEngine]^7 Started vehicles check, setting all state 0 to 3 completed.') while not restartingstate do SaveVehicles() Citizen.Wait(1000 * 300) end end) RegisterServerEvent('JRMEngine:vehicles:server:updateVehicleStatus') AddEventHandler('JRMEngine:vehicles:server:updateVehicleStatus', function(fuel, engine, body, plate) local src = source local pData = JRMEngine.Functions.GetPlayer(src) if engine > 1000 then engine = engine / 1000 end if body > 1000 then body = body / 1000 end exports['ghmattimysql']:execute('UPDATE jrm_player_vehicles SET fuel = @fuel, engine = @engine, body = @body WHERE plate = @plate AND citizenid = @citizenid', { ['@fuel'] = fuel, ['@engine'] = engine, ['@body'] = body, ['@plate'] = plate, ['@citizenid'] = pData.PlayerData.citizenid }) end) JRMEngine.Functions.CreateCallback("JRMEngine:vehicles:server:checkVehicleOwner", function(source, cb, plate) local src = source local pData = JRMEngine.Functions.GetPlayer(src) exports['ghmattimysql']:execute('SELECT * FROM jrm_player_vehicles WHERE plate = @plate AND citizenid = @citizenid', {['@plate'] = plate, ['@citizenid'] = pData.PlayerData.citizenid}, function(result) if result[1] ~= nil then cb(true) else cb(false) end end) end) JRMEngine.Functions.CreateCallback("JRMEngine:vehicles:server:checkHouseVehicleOwner", function(source, cb, plate, garage) local src = source local pData = JRMEngine.Functions.GetPlayer(src) exports['ghmattimysql']:execute('SELECT * FROM jrm_player_vehicles WHERE plate = @plate AND citizenid = @citizenid', {['@plate'] = plate, ['@citizenid'] = pData.PlayerData.citizenid}, function(result) if result[1] ~= nil then cb(true) elseif next(housevehicle) ~= nil then if housevehicle[plate] == garage then cb(true) else cb(false) end else cb(false) end end) end)