Files
esx_core/server/main.lua
T
renaiku f82cf6bb22 bugfix
2017-09-09 19:35:45 +02:00

361 lines
8.1 KiB
Lua

ESX = nil
Jobs = {}
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
function stringsplit(inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end
AddEventHandler('onMySQLReady', function()
local result = MySQL.Sync.fetchAll('SELECT * FROM jobs', {})
for i=1, #result, 1 do
Jobs[result[i].name] = result[i]
Jobs[result[i].name].grades = {}
end
local result2 = MySQL.Sync.fetchAll('SELECT * FROM job_grades', {})
for i=1, #result2, 1 do
Jobs[result2[i].job_name].grades[tostring(result2[i].grade)] = result2[i]
end
end)
AddEventHandler('esx_society:getSocieties', function(cb)
MySQL.Async.fetchAll(
'SELECT * FROM addon_account WHERE name LIKE "%society_%"',
{},
function(results)
local societies = {}
for i=1, #results, 1 do
local buff = stringsplit(results[i].name, '_')
local society = buff[2]
table.insert(societies, {
name = society,
label = results[i].label
})
end
cb(societies)
end
)
end)
RegisterServerEvent('esx_society:withdrawMoney')
AddEventHandler('esx_society:withdrawMoney', function(society, amount)
local xPlayer = ESX.GetPlayerFromId(source)
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_' .. society, function(account)
if amount > 0 and account.money >= amount then
account.removeMoney(amount)
xPlayer.addMoney(amount)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('have_withdrawn') .. amount)
else
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('invalid_amount'))
end
end)
end)
RegisterServerEvent('esx_society:depositMoney')
AddEventHandler('esx_society:depositMoney', function(society, amount)
local xPlayer = ESX.GetPlayerFromId(source)
if amount > 0 and xPlayer.get('money') >= amount then
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_' .. society, function(account)
xPlayer.removeMoney(amount)
account.addMoney(amount)
end)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('have_deposited') .. amount)
else
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('invalid_amount'))
end
end)
RegisterServerEvent('esx_society:washMoney')
AddEventHandler('esx_society:washMoney', function(society, amount)
local xPlayer = ESX.GetPlayerFromId(source)
local account = xPlayer.getAccount('black_money')
if amount > 0 and account.money >= amount then
xPlayer.removeAccountMoney('black_money', amount)
MySQL.Async.execute(
'INSERT INTO society_moneywash (identifier, society, amount) VALUES (@identifier, @society, @amount)',
{
['@identifier'] = xPlayer.identifier,
['@society'] = society,
['@amount'] = amount
},
function(rowsChanged)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('you_have') .. amount .. '~s~ en attente de ~r~blanchiement~s~ (24h)')
end
)
else
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('invalid_amount'))
end
end)
RegisterServerEvent('esx_society:putVehicleInGarage')
AddEventHandler('esx_society:putVehicleInGarage', function(society, vehicle)
TriggerEvent('esx_datastore:getSharedDataStore', 'society_' .. society, function(store)
local garage = store.get('garage') or {}
table.insert(garage, vehicle)
store.set('garage', garage)
end)
end)
RegisterServerEvent('esx_society:removeVehicleFromGarage')
AddEventHandler('esx_society:removeVehicleFromGarage', function(society, vehicle)
TriggerEvent('esx_datastore:getSharedDataStore', 'society_' .. society, function(store)
local garage = store.get('garage') or {}
for i=1, #garage, 1 do
if garage[i].plate == vehicle.plate then
table.remove(garage, i)
break
end
end
store.set('garage', garage)
end)
end)
ESX.RegisterServerCallback('esx_society:getAccountMoney', function(source, cb, account)
TriggerEvent('esx_addonaccount:getSharedAccount', account, function(account)
cb(account.money)
end)
end)
ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, society)
MySQL.Async.fetchAll(
'SELECT * FROM users WHERE job = @job ORDER BY job_grade DESC',
{
['@job'] = society
},
function(result)
local employees = {}
for i=1, #result, 1 do
table.insert(employees, {
name = result[i].name,
identifier = result[i].identifier,
job = {
name = result[i].job,
label = Jobs[result[i].job].label,
grade = result[i].job_grade,
grade_name = Jobs[result[i].job].grades[tostring(result[i].job_grade)].name,
grade_label = Jobs[result[i].job].grades[tostring(result[i].job_grade)].label,
}
})
end
cb(employees)
end
)
end)
ESX.RegisterServerCallback('esx_society:getJob', function(source, cb, society)
local job = json.decode(json.encode(Jobs[society]))
local grades = {}
for k,v in pairs(job.grades) do
table.insert(grades, v)
end
table.sort(grades, function(a, b)
return a.grade < b.grade
end)
job.grades = grades
cb(job)
end)
ESX.RegisterServerCallback('esx_society:setJob', function(source, cb, identifier, job, grade, type)
local xPlayer = ESX.GetPlayerFromIdentifier(identifier)
if type == 'hire' then
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('you_have_been_hired', job))
elseif type == 'promote' then
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('you_have_been_promoted'))
elseif type == 'fire' then
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('you_have_been_fired', xPlayer.getJob().label))
end
if xPlayer ~= nil then
xPlayer.setJob(job, grade)
end
MySQL.Async.execute(
'UPDATE users SET job = @job, job_grade = @job_grade WHERE identifier = @identifier',
{
['@job'] = job,
['@job_grade'] = grade,
['@identifier'] = identifier
},
function(rowsChanged)
cb()
end
)
end)
ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, grade, salary)
MySQL.Async.execute(
'UPDATE job_grades SET salary = @salary WHERE job_name = @job_name AND grade = @grade',
{
['@salary'] = salary,
['@job_name'] = job,
['@grade'] = grade
},
function(rowsChanged)
Jobs[job].grades[tostring(grade)].salary = salary
local xPlayers = ESX.GetPlayers()
for i=1, #xPlayers, 1 do
local xPlayer = ESX.GetPlayerFromId(xPlayers[i])
if xPlayer.job.name == job and xPlayer.job.grade == grade then
xPlayer.setJob(job, grade)
end
end
cb()
end
)
end)
ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb)
local xPlayers = ESX.GetPlayers()
local players = {}
for i=1, #xPlayers, 1 do
local xPlayer = ESX.GetPlayerFromId(xPlayers[i])
table.insert(players, {
source = xPlayer.source,
identifier = xPlayer.identifier,
name = xPlayer.name,
job = xPlayer.job
})
end
cb(players)
end)
ESX.RegisterServerCallback('esx_society:getVehiclesInGarage', function(source, cb, society)
TriggerEvent('esx_datastore:getSharedDataStore', 'society_' .. society, function(store)
local garage = store.get('garage') or {}
cb(garage)
end)
end)
function WashMoneyCRON(d, h, m)
MySQL.Async.fetchAll(
'SELECT * FROM society_moneywash',
{},
function(result)
local xPlayers = ESX.GetPlayers()
for i=1, #result, 1 do
local foundPlayer = false
local xPlayer = nil
for j=1, #xPlayers, 1 do
local xPlayer2 = ESX.GetPlayerFromId(xPlayers[j])
if xPlayer2.identifier == result[i].identifier then
foundPlayer = true
xPlayer = xPlayer2
end
end
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_' .. result[i].society, function(account)
account.addMoney(result[i].amount)
end)
if foundPlayer then
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('you_have_laundered') .. result[i].amount)
end
MySQL.Async.execute(
'DELETE FROM society_moneywash WHERE id = @id',
{
['@id'] = result[i].id
}
)
end
end
)
end
TriggerEvent('cron:runAt', 3, 0, WashMoneyCRON)