233 lines
9.7 KiB
Lua
233 lines
9.7 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local GangAccounts = {}
|
|
|
|
function GetGangAccount(account)
|
|
return GangAccounts[account] or 0
|
|
end
|
|
|
|
function AddGangMoney(account, amount)
|
|
if not GangAccounts[account] then
|
|
GangAccounts[account] = 0
|
|
end
|
|
|
|
GangAccounts[account] = GangAccounts[account] + amount
|
|
MySQL.insert('INSERT INTO management_funds (job_name, amount, type) VALUES (:job_name, :amount, :type) ON DUPLICATE KEY UPDATE amount = :amount',
|
|
{
|
|
['job_name'] = account,
|
|
['amount'] = GangAccounts[account],
|
|
['type'] = 'gang'
|
|
})
|
|
end
|
|
|
|
function RemoveGangMoney(account, amount)
|
|
local isRemoved = false
|
|
if amount > 0 then
|
|
if not GangAccounts[account] then
|
|
GangAccounts[account] = 0
|
|
end
|
|
|
|
if GangAccounts[account] >= amount then
|
|
GangAccounts[account] = GangAccounts[account] - amount
|
|
isRemoved = true
|
|
end
|
|
|
|
MySQL.update('UPDATE management_funds SET amount = ? WHERE job_name = ? and type = "gang"', { GangAccounts[account], account })
|
|
end
|
|
return isRemoved
|
|
end
|
|
|
|
MySQL.ready(function ()
|
|
local gangmenu = MySQL.query.await('SELECT job_name,amount FROM management_funds WHERE type = "gang"', {})
|
|
if not gangmenu then return end
|
|
|
|
for _,v in ipairs(gangmenu) do
|
|
GangAccounts[v.job_name] = v.amount
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent("qb-gangmenu:server:withdrawMoney", function(amount)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'withdrawMoney Exploiting') return end
|
|
|
|
local gang = Player.PlayerData.gang.name
|
|
if RemoveGangMoney(gang, amount) then
|
|
Player.Functions.AddMoney("cash", amount, 'Gang menu withdraw')
|
|
TriggerEvent('qb-log:server:CreateLog', 'gangmenu', 'Withdraw Money', 'yellow', Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname .. ' successfully withdrew $' .. amount .. ' (' .. gang .. ')', false)
|
|
TriggerClientEvent('QBCore:Notify', src, "You have withdrawn: $" ..amount, "success")
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "You dont have enough money in the account!", "error")
|
|
end
|
|
|
|
TriggerClientEvent('qb-gangmenu:client:OpenMenu', src)
|
|
end)
|
|
|
|
RegisterNetEvent("qb-gangmenu:server:depositMoney", function(amount)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'depositMoney Exploiting') return end
|
|
|
|
if Player.Functions.RemoveMoney("cash", amount) then
|
|
local gang = Player.PlayerData.gang.name
|
|
AddGangMoney(gang, amount)
|
|
TriggerEvent('qb-log:server:CreateLog', 'gangmenu', 'Deposit Money', 'yellow', Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname .. ' successfully deposited $' .. amount .. ' (' .. gang .. ')', false)
|
|
TriggerClientEvent('QBCore:Notify', src, "You have deposited: $" ..amount, "success")
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "You dont have enough money to add!", "error")
|
|
end
|
|
|
|
TriggerClientEvent('qb-gangmenu:client:OpenMenu', src)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('qb-gangmenu:server:GetAccount', function(_, cb, GangName)
|
|
local gangmoney = GetGangAccount(GangName)
|
|
cb(gangmoney)
|
|
end)
|
|
|
|
-- Get Employees
|
|
QBCore.Functions.CreateCallback('qb-gangmenu:server:GetEmployees', function(source, cb, gangname)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'GetEmployees Exploiting') return end
|
|
|
|
local employees = {}
|
|
local players = MySQL.query.await("SELECT * FROM `players` WHERE `gang` LIKE '%".. gangname .."%'", {})
|
|
if players[1] ~= nil then
|
|
for _, value in pairs(players) do
|
|
local isOnline = QBCore.Functions.GetPlayerByCitizenId(value.citizenid)
|
|
|
|
if isOnline then
|
|
employees[#employees+1] = {
|
|
empSource = isOnline.PlayerData.citizenid,
|
|
grade = isOnline.PlayerData.gang.grade,
|
|
isboss = isOnline.PlayerData.gang.isboss,
|
|
name = '🟢' .. isOnline.PlayerData.charinfo.firstname .. ' ' .. isOnline.PlayerData.charinfo.lastname
|
|
}
|
|
else
|
|
employees[#employees+1] = {
|
|
empSource = value.citizenid,
|
|
grade = json.decode(value.gang).grade,
|
|
isboss = json.decode(value.gang).isboss,
|
|
name = '❌' .. json.decode(value.charinfo).firstname .. ' ' .. json.decode(value.charinfo).lastname
|
|
}
|
|
end
|
|
end
|
|
end
|
|
cb(employees)
|
|
end)
|
|
|
|
-- Grade Change
|
|
RegisterNetEvent('qb-gangmenu:server:GradeUpdate', function(data)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local Employee = QBCore.Functions.GetPlayerByCitizenId(data.cid)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'GradeUpdate Exploiting') return end
|
|
if data.grade > Player.PlayerData.gang.grade.level then TriggerClientEvent('QBCore:Notify', src, "You cannot promote to this rank!", "error") return end
|
|
|
|
if Employee then
|
|
if Employee.Functions.SetGang(Player.PlayerData.gang.name, data.grade) then
|
|
TriggerClientEvent('QBCore:Notify', src, "Successfully promoted!", "success")
|
|
TriggerClientEvent('QBCore:Notify', Employee.PlayerData.source, "You have been promoted to " ..data.gradename..".", "success")
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Grade does not exist.", "error")
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Civilian is not in city.", "error")
|
|
end
|
|
TriggerClientEvent('qb-gangmenu:client:OpenMenu', src)
|
|
end)
|
|
|
|
-- Fire Member
|
|
RegisterNetEvent('qb-gangmenu:server:FireMember', function(target)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local Employee = QBCore.Functions.GetPlayerByCitizenId(target)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'FireEmployee Exploiting') return end
|
|
|
|
if Employee then
|
|
if target ~= Player.PlayerData.citizenid then
|
|
if Employee.PlayerData.gang.grade.level > Player.PlayerData.gang.grade.level then TriggerClientEvent('QBCore:Notify', src, "You cannot fire this citizen!", "error") return end
|
|
if Employee.Functions.SetGang("none", '0') then
|
|
TriggerEvent("qb-log:server:CreateLog", "gangmenu", "Gang Fire", "orange", Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname .. ' successfully fired ' .. Employee.PlayerData.charinfo.firstname .. " " .. Employee.PlayerData.charinfo.lastname .. " (" .. Player.PlayerData.gang.name .. ")", false)
|
|
TriggerClientEvent('QBCore:Notify', src, "Gang Member fired!", "success")
|
|
TriggerClientEvent('QBCore:Notify', Employee.PlayerData.source , "You have been expelled from the gang!", "error")
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Error.", "error")
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "You can\'t kick yourself out of the gang!", "error")
|
|
end
|
|
else
|
|
local player = MySQL.query.await('SELECT * FROM players WHERE citizenid = ? LIMIT 1', {target})
|
|
if player[1] ~= nil then
|
|
Employee = player[1]
|
|
Employee.gang = json.decode(Employee.gang)
|
|
if Employee.gang.grade.level > Player.PlayerData.job.grade.level then TriggerClientEvent('QBCore:Notify', src, "You cannot fire this citizen!", "error") return end
|
|
local gang = {}
|
|
gang.name = "none"
|
|
gang.label = "No Affiliation"
|
|
gang.payment = 0
|
|
gang.onduty = true
|
|
gang.isboss = false
|
|
gang.grade = {}
|
|
gang.grade.name = nil
|
|
gang.grade.level = 0
|
|
MySQL.update('UPDATE players SET gang = ? WHERE citizenid = ?', {json.encode(gang), target})
|
|
TriggerClientEvent('QBCore:Notify', src, "Gang member fired!", "success")
|
|
TriggerEvent("qb-log:server:CreateLog", "gangmenu", "Gang Fire", "orange", Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname .. ' successfully fired ' .. Employee.PlayerData.charinfo.firstname .. " " .. Employee.PlayerData.charinfo.lastname .. " (" .. Player.PlayerData.gang.name .. ")", false)
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, "Civilian is not in city.", "error")
|
|
end
|
|
end
|
|
TriggerClientEvent('qb-gangmenu:client:OpenMenu', src)
|
|
end)
|
|
|
|
-- Recruit Player
|
|
RegisterNetEvent('qb-gangmenu:server:HireMember', function(recruit)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local Target = QBCore.Functions.GetPlayer(recruit)
|
|
|
|
if not Player.PlayerData.gang.isboss then ExploitBan(src, 'HireEmployee Exploiting') return end
|
|
|
|
if Target and Target.Functions.SetGang(Player.PlayerData.gang.name, 0) then
|
|
TriggerClientEvent('QBCore:Notify', src, "You hired " .. (Target.PlayerData.charinfo.firstname .. ' ' .. Target.PlayerData.charinfo.lastname) .. " come " .. Player.PlayerData.gang.label .. "", "success")
|
|
TriggerClientEvent('QBCore:Notify', Target.PlayerData.source , "You have been hired as " .. Player.PlayerData.gang.label .. "", "success")
|
|
TriggerEvent('qb-log:server:CreateLog', 'gangmenu', 'Recruit', 'yellow', (Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname).. ' successfully recruited ' .. Target.PlayerData.charinfo.firstname .. ' ' .. Target.PlayerData.charinfo.lastname .. ' (' .. Player.PlayerData.gang.name .. ')', false)
|
|
end
|
|
TriggerClientEvent('qb-gangmenu:client:OpenMenu', src)
|
|
end)
|
|
|
|
-- Get closest player sv
|
|
QBCore.Functions.CreateCallback('qb-gangmenu:getplayers', function(source, cb)
|
|
local src = source
|
|
local players = {}
|
|
local PlayerPed = GetPlayerPed(src)
|
|
local pCoords = GetEntityCoords(PlayerPed)
|
|
for _, v in pairs(QBCore.Functions.GetPlayers()) do
|
|
local targetped = GetPlayerPed(v)
|
|
local tCoords = GetEntityCoords(targetped)
|
|
local dist = #(pCoords - tCoords)
|
|
if PlayerPed ~= targetped and dist < 10 then
|
|
local ped = QBCore.Functions.GetPlayer(v)
|
|
players[#players+1] = {
|
|
id = v,
|
|
coords = GetEntityCoords(targetped),
|
|
name = ped.PlayerData.charinfo.firstname .. " " .. ped.PlayerData.charinfo.lastname,
|
|
citizenid = ped.PlayerData.citizenid,
|
|
sources = GetPlayerPed(ped.PlayerData.source),
|
|
sourceplayer = ped.PlayerData.source
|
|
}
|
|
end
|
|
end
|
|
table.sort(players, function(a, b)
|
|
return a.name < b.name
|
|
end)
|
|
cb(players)
|
|
end)
|