ESX = exports['es_extended']:getSharedObject()
-- 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`)
)
]])
end)
Compat = {
GetPlayer = ESX.GetPlayerFromId,
GetPlayerFromCharacterIdentifier = ESX.GetPlayerFromIdentifier,
GetOfflinePlayerFromCharacterIdentifier = function(CitizenId)
local results = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."` WHERE `identifier` = ? LIMIT 1", {CitizenId})
local PlayerData = nil
for k1,v1 in ipairs(results) do
v1.money = json.decode(v1.accounts)
v1.status = json.decode(v1.status)
PlayerData = v1
break
end
while not PlayerData do Wait(0) end
citizenid = PlayerData.identifier
citizenIdName = "owner"
amountofVehicles = MySQL.query.await('SELECT COUNT(*) as count FROM `'..Config.DB.VehiclesTable..'` WHERE `'..citizenIdName..'` = ?', {PlayerData.citizenid})
local FixedPlayerData = {
id = "OFFLINE",
name = PlayerData.firstname..' '..PlayerData.lastname,
identifiers = PlayerData.identifier,
role = PlayerData.group,
bank = '$'..comma_value(PlayerData.accounts.bank),
cash = '$'..comma_value(PlayerData.accounts.money),
steamid = PlayerData.identifier,
citizenid = PlayerData.identifier,
gender = PlayerData.sex,
nationality = "Unknown",
phone = PlayerData.phone_number,
accountid = "Unknown",
hunger = PlayerData.status["hunger"].percent,
thirst = PlayerData.status["thirst"].percent,
injail = "Unknown",
lastonline = PlayerData.last_seen,
amountofVehicles = amountofVehicles[1].count,
job = PlayerData.job,
rank = PlayerData.job_grade,
health = 0,
armor = 0,
jobboss = "Unknwon",
duty = "Unknwon",
gang = "Unknwon",
gangrank = "Unknwon",
gangboss = "Unknwon",
charname = PlayerData.firstname..' '..PlayerData.lastname,
}
return FixedPlayerData
end,
GetPlayerList = function()
local PlayerList = {}
for k, v in pairs(GetPlayers()) do
v = tonumber(v)
local Player = ESX.GetPlayerFromId(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 = Player.group
local lastOnlineResult = MySQL.query.await("SELECT last_seen FROM `"..Config.DB.CharactersTable.."` WHERE identifier = ?", {Player.getIdentifier()})
local amountofVehicles = MySQL.query.await('SELECT COUNT(*) as count FROM `'..Config.DB.VehiclesTable..'` WHERE `owner` = ?', {Player.getIdentifier()})
local bank = Player.getAccount('bank').money or "Unknown"
local cash = Player.getMoney() or "Unknown"
local citizenid = Player.identifier or "Unknown"
local gender = Player.get('sex') or "Unknown"
local nationality = "Unknown"
local phone = "Unknown"
local accountid = "Unknown"
local hunger = 0
local thirst = 0
for k2, v2 in pairs(Player.variables.status) do
if v2.name == "hunger" then
hunger = v2.percent
end
if v2.name == "thirst" then
thirst = v2.percent
end
end
local injail = "Unknown"
local lastonline = lastOnlineResult[1].last_seen or "Unknown"
local job = Player.job or "Unknown"
local rank = Player.job.grade_label or "Unknown"
local health = GetEntityHealth(GetPlayerPed(Player.source)) / 2
local armor = GetPedArmour(GetPlayerPed(Player.source))
local gang = "Unknown"
local charname = Player.getName()
local jobboss = "Unknown"
local duty = "Unknown"
local gangrank = "Unknown"
local gangboss = "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 = ESX.GetPlayerFromId(targetId)
if p then
p.setJob(job, grade)
end
end,
SetPlayerGang = function(targetId, gang, grade)
-- Unavailable
end,
GetPlayerRole = function(targetId)
local p = ESX.GetPlayerFromId(targetId)
if p then
return p.group
else return nil end
end,
GetCharacterName = function(targetId)
local p = ESX.GetPlayerFromId(targetId)
if p then
return p.getName()
else return nil end
end,
ClearPlayerInventory = function (targetId)
local p = ESX.GetPlayerFromId(targetId)
if p then
for k,v in ipairs(p.inventory) do
if v.count > 0 then
p.setInventoryItem(v.name, 0)
end
end
TriggerEvent('esx:playerInventoryCleared',targetId)
end
end,
GetVehiclesList = function() return MySQL.query.await("SELECT * FROM vehicles") end,
GetItemsList = function() return MySQL.query.await("SELECT * FROM items") end,
GetCharacterIdentifier = function(targetId)
local p = ESX.GetPlayerFromId(targetId)
if p then
return p.PlayerData.citizenid
else return nil end
end,
GetMasterEmployeeList = function()
local jobs = ESX.GetJobs()
local list = {}
for k,v in pairs(jobs) do
local res = MySQL.query.await("SELECT * FROM `"..Config.DB.CharactersTable.."` WHERE `job` = ?", {v.name})
local JobEmployees = {}
for k2,v2 in pairs(res) do
local CharName, JobInfo, GradeInfo = "Unknown?", "Unknown?", "Unknown?"
CharName = v2.firstname.. " ".. v2.lastname
JobInfo = v2.job
GradeInfo = v2.grade
Online = ESX.GetPlayerFromIdentifier(v2.identifier)
table.insert(JobEmployees, {
Name = v2.label,
CitizenId = v2.identifier,
CharName = CharName,
IsBoss = false,
IsOnline = Online and "ONLINE" or "OFFLINE",
Grade = {name = v2.job, level = v2.grade},
})
end
list[k] = JobEmployees
end
return list
end,
GetMasterGangList = function()
-- Unavailable
end,
CreateCallback = ESX.RegisterServerCallback,
GetCharacterData = function(targetId)
local d = {}
local p = ESX.GetPlayerFromId(targetId)
if p then
d.CharacterName = p.getName()
d.Role = p.getGroup()
d.Cash = p.getMoney()
d.Bank = p.getAccount("bank").money
d.CharacterIdentifier = p.getIdentifier()
d.Job = p.job.name
d.Rank = p.job.grade_label
d.PlayerId = p.source
d.IsBoss = false
d.OnDuty = false
d.GangLabel = nil
d.GangRank = nil
d.GangIsBoss = nil
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.accounts)
money[#money + 1] = {
citizenid = v.identifier,
firstname = v.firstname,
lastname = v.lastname,
cash = moneyInfo.money,
bank = moneyInfo.bank,
crypto = nil,
coins = nil,
lastseen = v.last_seen
}
results2 = MySQL.query.await("SELECT * FROM `"..Config.DB.VehiclesTable.."` WHERE owner = ?", {v.identifier})
for k1, v1 in pairs(results2) do
if results[k] == nil then
return
end
local firstname = nil
local lastname = nil
vehicles[#vehicles + 1] = {
citizenid = v.identifier,
firstname = v.firstname,
lastname = v.lastname,
vehicle = v1.vehicle,
}
end
end
return money, vehicles
end,
PlayerActions = {
AddMoney = function(targetId, amount)
local p = ESX.GetPlayerFromId(targetId)
if p then
p.addMoney(amount)
end
end,
RemoveMoney = function(targetId, amount)
local p = ESX.GetPlayerFromId(targetId)
if p then
p.removeMoney(amount)
end
end,
AddBank = function(targetId, amount)
local p = ESX.GetPlayerFromId(targetId)
if p then
p.addAccountMoney("bank", amount)
end
end,
RemoveBank = function(targetId, amount)
local p = ESX.GetPlayerFromId(targetId)
if p then
p.removeAccountMoney("bank", amount)
end
end,
},
}
end
-- CLIENT COMPATIBILITY LAYER
if (not IsDuplicityVersion()) then
Compat = {
OpenInventory = function(targetId)
TriggerServerEvent("919-Admin:server:OpenInventory", targetId)
end,
UncuffSelf = function()
TriggerEvent('esx_policejob:handcuff')
end,
GetClosestObject = ESX.Game.GetClosestObject,
GetClosestVehicle = ESX.Game.GetClosestVehicle,
TriggerCallback = ESX.TriggerServerCallback,
}
end