Files
qb-pefcl/server.lua
RoccoMyTacco 309373ca34 Update server.lua
Co-authored-by: Malcolm Keefe <27903055+Mkeefeus@users.noreply.github.com>
2023-07-14 00:55:25 -05:00

262 lines
7.5 KiB
Lua

local QBCore = exports["qb-core"]:GetCoreObject()
local function addCash(src, amount)
local Player = QBCore.Functions.GetPlayer(src)
Player.Functions.AddMoney("cash", amount)
end
local function removeCash(src, amount)
local Player = QBCore.Functions.GetPlayer(src)
Player.Functions.RemoveMoney("cash", amount)
end
local function getCash(src)
local Player = QBCore.Functions.GetPlayer(src)
return Player.PlayerData.money["cash"] or 0
end
local function loadPlayer(src, citizenid, name)
exports.pefcl:loadPlayer(src, {
source = src,
identifier = citizenid,
name = name
})
end
local function UniqueAccounts(player)
local citizenid = player.PlayerData.citizenid
local playerSrc = player.PlayerData.source
local PlayerJob = player.PlayerData.job
if Config.BusinessAccounts[PlayerJob.name] then
if not exports.pefcl:getUniqueAccount(playerSrc, PlayerJob.name).data then
local data = {
name = tostring(Config.BusinessAccounts[PlayerJob.name].AccountName),
type = 'shared',
identifier = PlayerJob.name
}
exports.pefcl:createUniqueAccount(playerSrc, data)
end
end
local accounts = exports.pefcl:getAccounts(playerSrc).data
for k,v in pairs(accounts) do
if Config.BusinessAccounts[v.ownerIdentifier] and v.ownerIdentifier == PlayerJob.name then
local role = false
if PlayerJob.grade.level >= Config.BusinessAccounts[v.ownerIdentifier].AdminRole then
role = 'admin'
elseif PlayerJob.grade.level >= Config.BusinessAccounts[v.ownerIdentifier].ContributorRole then
role = 'contributor'
end
if not role then
local data1 = {
userIdentifier = citizenid,
accountIdentifier = v.ownerIdentifier,
}
exports.pefcl:removeUserFromUniqueAccount(playerSrc, data1)
elseif v.role ~= role then
local data1 = {
userIdentifier = citizenid,
accountIdentifier = v.ownerIdentifier,
}
exports.pefcl:removeUserFromUniqueAccount(playerSrc, data1)
if Config.BusinessAccounts[PlayerJob.name] then
local role = false
if PlayerJob.grade.level >= Config.BusinessAccounts[PlayerJob.name].AdminRole then
role = 'admin'
elseif PlayerJob.grade.level >= Config.BusinessAccounts[PlayerJob.name].ContributorRole then
role = 'contributor'
end
if role then
local data = {
role = role,
accountIdentifier = PlayerJob.name,
userIdentifier = citizenid,
source = playerSrc
}
exports.pefcl:addUserToUniqueAccount(playerSrc, data)
end
end
end
elseif Config.BusinessAccounts[v.ownerIdentifier] and v.ownerIdentifier ~= PlayerJob.name then
local data1 = {
userIdentifier = citizenid,
accountIdentifier = v.ownerIdentifier,
}
exports.pefcl:removeUserFromUniqueAccount(playerSrc, data1)
elseif Config.BusinessAccounts[PlayerJob.name] and v.ownerIdentifier ~= PlayerJob.name and v.type == 'shared' then
local data1 = {
userIdentifier = citizenid,
accountIdentifier = v.ownerIdentifier,
}
exports.pefcl:removeUserFromUniqueAccount(playerSrc, data1)
if Config.BusinessAccounts[PlayerJob.name] then
local role = false
if PlayerJob.grade.level >= Config.BusinessAccounts[PlayerJob.name].AdminRole then
role = 'admin'
elseif PlayerJob.grade.level >= Config.BusinessAccounts[PlayerJob.name].ContributorRole then
role = 'contributor'
end
if role then
local data = {
role = role,
accountIdentifier = PlayerJob.name,
userIdentifier = citizenid,
source = playerSrc
}
exports.pefcl:addUserToUniqueAccount(playerSrc, data)
end
end
end
end
end
local function getCards(source)
local Player = QBCore.Functions.GetPlayer(source)
local cards = Player.Functions.GetItemsByName('visa')
local retval = {}
if cards then
for k, v in pairs(cards) do
retval[#retval+1] = {
id = v.info.id,
holder = v.info.holder,
number = v.info.number
}
end
end
return retval
end
local function giveCard(source, card)
local Player = QBCore.Functions.GetPlayer(source)
local info = {
id = card.id,
holder = card.holder,
number = card.number
}
Player.Functions.AddItem('visa', 1, nil, info)
end
local function getBank(source)
local Player = QBCore.Functions.GetPlayer(source)
return Player.PlayerData.money["bank"] or 0
end
function GetAccount(account)
if exports.pefcl:getUniqueAccount(-1, account).data then
return exports.pefcl:getBankBalanceByIdentifier(-1, account).data
else
return false
end
end
exports('GetAccount', GetAccount)
function AddMoney(src, account, amount, reason)
if exports.pefcl:getUniqueAccount(src, account).data then
local data = {
identifier = account,
amount = amount,
description = reason
}
exports.pefcl:addBankBalanceByIdentifier(src, data)
return true
else
return false
end
end
exports('AddMoney', AddMoney)
function RemoveMoney(account, amount, reason)
if exports.pefcl:getUniqueAccount(-1, account).data then
if tonumber(exports.pefcl:getBankBalanceByIdentifier(-1, account).data) >= amount then
local data = {
identifier = account,
amount = amount,
message = reason
}
exports.pefcl:removeBankBalanceByIdentifier(-1, data)
return true
else
return false
end
else
return false
end
end
exports('RemoveMoney', RemoveMoney)
AddEventHandler(('__cfx_export_qb-management_%s'):format('AddMoney'), function(setCB)
setCB(AddMoney)
end)
AddEventHandler(('__cfx_export_qb-management_%s'):format('RemoveMoney'), function(setCB)
setCB(RemoveMoney)
end)
AddEventHandler(('__cfx_export_qb-management_%s'):format('GetAccount'), function(setCB)
setCB(GetAccount)
end)
exports("getBank", getBank)
exports("addCash", addCash)
exports("removeCash", removeCash)
exports("getCash", getCash)
exports("giveCard", giveCard)
exports("getCards", getCards)
AddEventHandler("QBCore:Server:OnMoneyChange", function(playerSrc, moneyType, amount, action, reason)
if moneyType ~= "bank" then return end
if action == "add" then
exports.pefcl:addBankBalance(playerSrc, { amount = amount, message = reason })
end
if action == "remove" then
exports.pefcl:removeBankBalance(playerSrc, { amount = amount, message = reason })
end
if action == "set" then
exports.pefcl:setBankBalance(playerSrc, { amount = amount, message = reason })
end
end)
AddEventHandler("QBCore:Server:PlayerLoaded", function(player)
if not player then
return
end
local citizenid = player.PlayerData.citizenid
local charInfo = player.PlayerData.charinfo
local playerSrc = player.PlayerData.source
loadPlayer(playerSrc, citizenid, charInfo.firstname .. " " .. charInfo.lastname)
UniqueAccounts(player)
player.Functions.SyncMoney()
end)
RegisterNetEvent("qb-pefcl:server:UnloadPlayer", function()
exports.pefcl:unloadPlayer(source)
end)
RegisterNetEvent("qb-pefcl:server:SyncMoney", function()
local player = QBCore.Functions.GetPlayer(source)
player.Functions.SyncMoney()
end)
RegisterNetEvent("qb-pefcl:server:OnJobUpdate", function(oldJob)
local player = QBCore.Functions.GetPlayer(source)
UniqueAccounts(player)
end)
local currentResName = GetCurrentResourceName()
AddEventHandler("onServerResourceStart", function(resName)
if resName ~= currentResName then return end
local players = QBCore.Functions.GetQBPlayers()
if not players or players == nil then
print("Error loading players, if no players on the server ignore this")
return
end
for _, v in pairs(players) do
loadPlayer(v.PlayerData.source, v.PlayerData.citizenid, v.PlayerData.charinfo.firstname .. " " .. v.PlayerData.charinfo.lastname)
UniqueAccounts(v)
v.Functions.SyncMoney()
end
end)