QBCore = exports["qb-core"]:GetCoreObject()
-- SERVER COMPATIBILITY LAYER
if (IsDuplicityVersion()) then
SetTimeout(1000, function()
MySQL.query([[
CREATE TABLE IF NOT EXISTS `bans` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`license` varchar(50) DEFAULT NULL,
`discord` varchar(50) DEFAULT NULL,
`ip` varchar(50) DEFAULT NULL,
`reason` text DEFAULT NULL,
`expire` int(11) DEFAULT NULL,
`bannedby` varchar(255) NOT NULL DEFAULT 'LeBanhammer',
PRIMARY KEY (`id`)
)
]])
MySQL.query([[
CREATE TABLE IF NOT EXISTS `warns` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`license` varchar(50) NOT NULL,
`reason` text NOT NULL,
`warnedby` varchar(50) NOT NULL,
`warnedtime` bigint(20) NOT NULL DEFAULT unix_timestamp(),
PRIMARY KEY (`id`)
)
]])
print("[919ADMIN] Database tables initialized.")
end)
Compat = {
GetPlayer = QBCore.Functions.GetPlayer,
GetPlayerFromCharacterIdentifier = QBCore.Functions.GetPlayerByCitizenId,
GetOfflinePlayerFromCharacterIdentifier = function(CitizenId)
local results = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."` WHERE `citizenid` = ? LIMIT 1", {CitizenId})
local PlayerData = nil
for k1,v1 in ipairs(results) do
v1.charinfo = json.decode(v1.charinfo)
v1.job = json.decode(v1.job)
v1.money = json.decode(v1.money)
v1.metadata = json.decode(v1.metadata)
v1.gang = json.decode(v1.gang)
v1.status = json.decode(v1.status)
PlayerData = v1
break
end
while not PlayerData do Wait(0) end
local amountofVehicles = MySQL.query.await('SELECT COUNT(*) as count FROM `'..Config.DB.VehiclesTable..'` WHERE `citizenid` = ?', {PlayerData.citizenid})
local FixedPlayerData = {
id = "OFFLINE",
name = PlayerData.charinfo.firstname..' '..PlayerData.charinfo.lastname,
identifiers = PlayerData.citizenid,
role = PlayerData.role,
bank = '$'..comma_value(PlayerData.money.bank),
cash = '$'..comma_value(PlayerData.money.cash),
steamid = PlayerData.license,
citizenid = PlayerData.citizenid,
gender = PlayerData.charinfo.gender,
nationality = PlayerData.charinfo.nationality,
phone = PlayerData.charinfo.phone,
accountid = PlayerData.charinfo.account,
hunger = PlayerData.metadata['hunger'],
thirst = PlayerData.metadata['thirst'],
injail = PlayerData.metadata['injail'],
lastonline = PlayerData.last_updated,
amountofVehicles = amountofVehicles[1].count,
job = PlayerData.job.label,
rank = PlayerData.job.grade.name,
health = 0,
armor = 0,
jobboss = PlayerData.job.isboss and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
duty = PlayerData.job.onduty and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
gang = PlayerData.gang.label,
gangrank = PlayerData.gang.grade.name,
gangboss = PlayerData.gang.isboss and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
charname = PlayerData.charinfo.firstname .. ' ' .. PlayerData.charinfo.lastname,
}
return FixedPlayerData
end,
GetPlayerList = function()
local PlayerList = {}
for k, v in pairs(QBCore.Functions.GetPlayers()) do
v = tonumber(v)
local Player = QBCore.Functions.GetPlayer(v)
if Player then
local identifiers, steamIdentifier = GetPlayerIdentifiers(v)
for _, v2 in pairs(identifiers) do
if string.find(v2, "license:") then
steamIdentifier = v2
end
if not Config.ShowIPInIdentifiers then
if string.find(v2, "ip:") then
identifiers[_] = nil
end
end
end
local playerRole = "user"
if QBCore.Functions.HasPermission(v, "god") then
playerRole = "god"
elseif QBCore.Functions.HasPermission(v, "admin") then
playerRole = "admin"
end
local lastOnlineResult = MySQL.query.await("SELECT last_updated FROM players WHERE citizenid = ?", {Player.PlayerData.citizenid})
local amountofVehicles = MySQL.query.await('SELECT COUNT(*) as count FROM `'..Config.DB.VehiclesTable..'` WHERE `citizenid` = ?', {Player.PlayerData.citizenid})
local bank = Player.PlayerData.money.bank or "Unknown"
local cash = Player.PlayerData.money.cash or "Unknown"
local citizenid = Player.PlayerData.citizenid or "Unknown"
local gender = Player.PlayerData.charinfo.gender or "Unknown"
local nationality = Player.PlayerData.charinfo.nationality or "Unknown"
local phone = Player.PlayerData.charinfo.phone or "Unknown"
local accountid = Player.PlayerData.charinfo.account or "Unknown"
local hunger = Player.PlayerData.metadata['hunger'] or "Unknown"
local thirst = Player.PlayerData.metadata['thirst'] or "Unknown"
local injail = Player.PlayerData.metadata['injail'] or "Unknown"
local lastonline = lastOnlineResult[1].last_updated or "Unknown"
local job = Player.PlayerData.job.label or "Unknown"
local rank = Player.PlayerData.job.grade.name or "Unknown"
local health = GetEntityHealth(GetPlayerPed(Player.PlayerData.source)) / 2
local armor = GetPedArmour(GetPlayerPed(Player.PlayerData.source))
local gang = Player.PlayerData.gang.label or "Unknown"
local charname = (Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname) or "Unknown"
local jobboss = Player.PlayerData.job.isboss or "Unknown"
local duty = Player.PlayerData.job.onduty or "Unknown"
local gangrank = Player.PlayerData.gang.grade.name or "Unknown"
local gangboss = Player.PlayerData.gang.isboss or "Unknown"
table.insert(PlayerList,
{
id = v,
name = GetPlayerName(v),
identifiers = json.encode(identifiers),
role = LoadedRole[v],
bank = '$'..comma_value(bank),
cash = '$'..comma_value(cash),
steamid = steamIdentifier,
citizenid = citizenid,
gender = gender,
nationality = nationality,
phone = phone,
accountid = accountid,
hunger = hunger,
thirst = thirst,
injail = injail,
lastonline = lastonline,
amountofVehicles = amountofVehicles[1].count,
job = job,
rank = rank,
health = health,
armor = armor,
jobboss = jobboss and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
duty = duty and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
gang = gang,
gangrank = gangrank,
gangboss = gangboss and ""..Lang:t('alerts.yes').."" or ""..Lang:t('alerts.no').."",
charname = charname,
}
)
end
end
return PlayerList
end,
SetPlayerJob = function(targetId, job, grade)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.SetJob(job, grade)
p.Functions.Save()
end
end,
SetPlayerGang = function(targetId, gang, grade)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.SetGang(gang, grade)
p.Functions.Save()
end
end,
GetPlayerRole = function(targetId)
return QBCore.Functions.GetPermission(targetId)
end,
GetCharacterName = function(targetId)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
return p.PlayerData.charinfo.firstname .. ' ' .. p.PlayerData.charinfo.lastname
end
end,
ClearPlayerInventory = function (targetId)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.ClearInventory()
end
end,
GetVehiclesList = function() return QBCore.Shared.Vehicles end,
GetItemsList = function() return QBCore.Shared.Items end,
GetCharacterIdentifier = function(targetId)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
return p.PlayerData.citizenid
else
return nil
end
end,
GetMasterEmployeeList = function()
local jobs = QBCore.Shared.Jobs
local list = {}
for k,v in pairs(jobs) do
local res = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."` WHERE `job` LIKE ?", {"%"..k.."%"})
local JobEmployees = {}
for k2,v2 in pairs(res) do
local CharName, JobInfo, GradeInfo = "Unknown?", "Unknown?", "Unknown?"
local CharInfo = json.decode(v2.charinfo)
if CharInfo then
CharName = CharInfo.firstname .. ' ' .. CharInfo.lastname
end
local JobInfo = json.decode(v2.job)
local GradeInfo = JobInfo.grade
Online = QBCore.Functions.GetPlayerByCitizenId(v2.citizenid)
table.insert(JobEmployees, {
Name = v2.name,
CitizenId = v2.citizenid,
CharName = CharName,
IsBoss = JobInfo.isboss,
IsOnline = Online and "ONLINE" or "OFFLINE",
Grade = {name = GradeInfo.name, level = GradeInfo.level},
})
end
list[k] = JobEmployees
end
return list
end,
GetMasterGangList = function()
local gangs = QBCore.Shared.Gangs
local list = {}
for k,v in pairs(gangs) do
local GangMembers = {}
local results = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."` WHERE `gang` LIKE ?", {"%"..k.."%"})
for k1,v1 in ipairs(results) do
local CharInfo = json.decode(v1.charinfo)
local CharName = "Unknown?"
if CharInfo then
CharName = CharInfo.firstname .. ' ' .. CharInfo.lastname
end
local GangInfo = json.decode(v1.gang)
local GradeInfo = GangInfo.grade
local Online = QBCore.Functions.GetPlayerByCitizenId(v1.citizenid)
table.insert(GangMembers, {
Name = v1.name,
CitizenId = v1.citizenid,
CharName = CharName,
IsBoss = GangInfo.isboss,
IsOnline = Online and "ONLINE" or "OFFLINE",
Grade = {name = GradeInfo.name, level = GradeInfo.level},
})
end
list[k] = GangMembers
end
return list
end,
CreateCallback = QBCore.Functions.CreateCallback,
GetCharacterData = function(targetId)
local d = {}
local p = QBCore.Functions.GetPlayer(targetId)
if p then
d.CharacterName = p.PlayerData.charinfo.firstname .. ' ' .. p.PlayerData.charinfo.lastname
d.Role = "Unknown"
d.Cash = p.PlayerData.money.cash
d.Bank = p.PlayerData.money.bank
d.CharacterIdentifier = p.PlayerData.citizenid
d.Job = p.PlayerData.job.label
d.Rank = p.PlayerData.job.grade.name
d.PlayerId = p.PlayerData.source
d.IsBoss = p.PlayerData.job.isboss
d.OnDuty = p.PlayerData.job.onduty
d.GangLabel = p.PlayerData.gang.label
d.GangRank = p.PlayerData.gang.grade.name
d.GangIsBoss = p.PlayerData.gang.isboss
end
return d
end,
GetLeaderboardInfo = function()
local money = {}
local vehicles = {}
local results = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."`")
for k,v in pairs(results) do
local charinfo = json.decode(v.charinfo)
local moneyInfo = json.decode(v.money)
money[#money + 1] = {
citizenid = v.citizenid,
firstname = charinfo.firstname,
lastname = charinfo.lastname,
cash = moneyInfo.cash,
bank = moneyInfo.bank,
crypto = moneyInfo.crypto,
coins = moneyInfo.coins,
lastseen = v.last_updated
}
results2 = MySQL.query.await("SELECT * FROM `"..Config.DB.VehiclesTable.."` WHERE citizenid = ?", {v.citizenid})
for _, v1 in pairs(results2) do
if results[k] == nil then
return
end
vehicles[#vehicles + 1] = {
citizenid = v.citizenid,
firstname = charinfo.firstname,
lastname = charinfo.lastname,
vehicle = v1.vehicle,
}
end
end
return money, vehicles
end,
PlayerActions = {
AddMoney = function(targetId, amount)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.AddMoney("cash", amount, "Admin Action")
end
end,
RemoveMoney = function(targetId, amount)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.RemoveMoney("cash", amount, "Admin Action")
end
end,
AddBank = function(targetId, amount)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.AddMoney("bank", amount, "Admin Action")
end
end,
RemoveBank = function(targetId, amount)
local p = QBCore.Functions.GetPlayer(targetId)
if p then
p.Functions.RemoveMoney("bank", amount, "Admin Action")
end
end,
},
}
end
-- CLIENT COMPATIBILITY LAYER
if (not IsDuplicityVersion()) then
Compat = {
OpenInventory = function(targetId)
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", targetId)
end,
UncuffSelf = function()
TriggerEvent('police:client:GetCuffed')
end,
GetClosestObject = QBCore.Functions.GetClosestObject,
GetClosestVehicle = QBCore.Functions.GetClosestVehicle,
TriggerCallback = QBCore.Functions.TriggerCallback,
}
end