-- 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)