Files
qb-core-qbcore-fivem/server/main.lua
T
2025-03-11 23:31:03 -05:00

75 lines
3.0 KiB
Lua

-- Database Verification
local readyFunction = MySQL.ready
local databaseConnected, bansTableExists = readyFunction == nil, readyFunction == nil
if readyFunction ~= nil then
MySQL.ready(function()
databaseConnected = true
local DatabaseInfo = QBCore.Functions.GetDatabaseInfo()
if not DatabaseInfo or not DatabaseInfo.exists then return end
local result = MySQL.query.await('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = "bans";', { DatabaseInfo.database })
if result and result[1] then
bansTableExists = true
end
end)
end
-- Handle player connect
AddEventHandler('playerConnecting', function(name, _, deferrals)
local src = source
deferrals.defer()
if QBCore.Config.Server.Closed and not IsPlayerAceAllowed(src, 'qbadmin.join') then
return deferrals.done(QBCore.Config.Server.ClosedReason)
end
if not databaseConnected then
return deferrals.done(Lang:t('error.connecting_database_error'))
end
if QBCore.Config.Server.Whitelist then
Wait(0)
deferrals.update(string.format(Lang:t('info.checking_whitelisted'), name))
if not QBCore.Functions.IsWhitelisted(src) then
return deferrals.done(Lang:t('error.not_whitelisted'))
end
end
Wait(0)
deferrals.update(string.format('Hello %s. Your license is being checked', name))
local license = QBCore.Functions.GetIdentifier(src, 'license')
if not license then
return deferrals.done(Lang:t('error.no_valid_license'))
elseif QBCore.Config.Server.CheckDuplicateLicense and QBCore.Functions.IsLicenseInUse(license) then
return deferrals.done(Lang:t('error.duplicate_license'))
end
Wait(0)
deferrals.update(string.format(Lang:t('info.checking_ban'), name))
if not bansTableExists then
return deferrals.done(Lang:t('error.ban_table_not_found'))
end
local success, isBanned, reason = pcall(QBCore.Functions.IsPlayerBanned, src)
if not success then return deferrals.done(Lang:t('error.connecting_database_error')) end
if isBanned then return deferrals.done(reason) end
Wait(0)
deferrals.update(string.format(Lang:t('info.join_server'), name))
deferrals.done()
end)
-- Handle player disconnect
AddEventHandler('playerDropped', function(reason)
local src = source
local state = Player(src).state
if not state['citizenid'] then return end
local playerName = GetPlayerName(src) or 'Unknown'
local license = state['license'] or 'Unknown License'
TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Dropped', 'red', '**' .. playerName .. '** (' .. license .. ') left..\n **Reason:** ' .. reason)
TriggerEvent('QBCore:Server:PlayerDropped', src)
QBCore.Player.Save(src)
if GetResourceState('qb-inventory') ~= 'missing' then
exports['qb-inventory']:SaveInventory(src)
end
for _, key in pairs(GetStateBagKeys('player:' .. src)) do
state:set(key, nil, true)
end
QBCore.Player_Buckets[license] = nil
end)