Setup

QBCore Installation

1

Open the qb-core folder.

2

Go to qb-core/server/functions.lua.

3

Scroll to the bottom of the file.

4

Paste the following code:

function QBCore.Functions.InsertGangs(label, name, grades)
    local formattedGrades = {}
    local maxIndex = 0

    for k, _ in pairs(grades) do
        local idx = tonumber(k)
        if idx and idx > maxIndex then
            maxIndex = idx
        end
    end

    for k, grade in pairs(grades) do
        local i = tonumber(k)
        if i then
            local gradeLabel = grade.label or grade.name or ('Grade ' .. i)
            formattedGrades[tostring(i)] = {
                name = string.lower(gradeLabel):gsub("%s+", "_"),
                label = gradeLabel,
                isboss = (grade.isboss == true) or (i == maxIndex)
            }
        end
    end

    QBCore.Shared.Gangs[name] = {
        label = label,
        grades = formattedGrades
    }

    TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Gangs', name, QBCore.Shared.Gangs[name])
    TriggerEvent('QBCore:Server:UpdateObject')
end

function QBCore.Functions.DeleteGang(gangName)
    if not gangName or not QBCore.Shared.Gangs[gangName] then
        return false
    end

    QBCore.Shared.Gangs[gangName] = nil

    local players = QBCore.Functions.GetQBPlayers()
    for _, player in pairs(players) do
        if player.PlayerData.gang.name == gangName then
            player.Functions.SetGang('none', 0)
        end
    end

    TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Gangs', gangName, nil)
    return true
end

function QBCore.Functions.UpdateGangGrades(gangName, newGrades)
    if not QBCore.Shared.Gangs[gangName] then
        return false
    end

    local formattedGrades = {}
    for k, grade in pairs(newGrades) do
        local gradeKey = tostring(k)
        local gradeLabel = grade.label or grade.name or ("Grade " .. k)
        formattedGrades[gradeKey] = {
            name = grade.name or string.lower(gradeLabel):gsub("%s+", "_"),
            label = gradeLabel,
            isboss = grade.isboss or false
        }
    end

    QBCore.Shared.Gangs[gangName].grades = formattedGrades

    TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Gangs', gangName, QBCore.Shared.Gangs[gangName])
    TriggerEvent('QBCore:Server:UpdateObject')

    local players = QBCore.Functions.GetQBPlayers()
    for _, player in pairs(players) do
        if player.PlayerData.gang.name == gangName then
            local currentGradeLevel = player.PlayerData.gang.grade.level
            local gradeKey = tostring(currentGradeLevel)

            if formattedGrades[gradeKey] then
                player.Functions.SetGang(gangName, gradeKey)
            else
                player.Functions.SetGang(gangName, "0")
            end
        end
    end

    return true
end

function QBCore.Functions.UpdateGangLabel(gangName, label)
    if not QBCore.Shared.Gangs[gangName] then
        return false
    end

    QBCore.Shared.Gangs[gangName].label = label

    TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Gangs', gangName, QBCore.Shared.Gangs[gangName])
    TriggerEvent('QBCore:Server:UpdateObject')
end

CreateThread(function()
    local gangsData = MySQL.query.await('SELECT `name`, `data` FROM `uniq_mafia`')
    if not gangsData then return end

    for i = 1, #gangsData do
        local row = gangsData[i]
        if row.data then
            local info = json.decode(row.data)
            if info and info.label and info.grades then
                QBCore.Shared.Gangs[row.name] = {
                    label = info.label,
                    grades = info.grades
                }
            end
        end
    end
end)

Last updated