bridge/framework/qbcore.lua

-- ==========================================
-- FRAMEWORK BRIDGE — QBCore
-- ==========================================
-- Abstracts QBCore-specific calls so the main script doesn't
-- reference qb-core directly.  To support a different framework
-- (ESX, QBox, etc.) duplicate this file and swap the manifest entry.
--
-- Global table:  FW
-- ==========================================

FW = {}

local fwName = Config.Setup and Config.Setup.framework or 'qbcore'
print('[fiveous_drones] Framework bridge → ' .. fwName)

-- ==========================================
-- SERVER
-- ==========================================
if IsDuplicityVersion() then
    local QBCore = exports['qb-core']:GetCoreObject()

    --- Get player citizenid (unique character identifier)
    --- @param src number server ID
    --- @return string|nil citizenid, or nil if player not loaded
    function FW.GetCitizenId(src)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return nil end
        return Player.PlayerData.citizenid
    end

    --- Get player job table  { name, label, grade = { name, level }, ... }
    --- @param src number
    --- @return table|nil
    function FW.GetJob(src)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return nil end
        return Player.PlayerData.job
    end

    --- Get character info  { firstname, lastname, ... }
    --- @param src number
    --- @return table|nil
    function FW.GetCharInfo(src)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return nil end
        return Player.PlayerData.charinfo
    end

    --- Quick "is player data loaded?" check
    --- @param src number
    --- @return boolean
    function FW.IsPlayerLoaded(src)
        return QBCore.Functions.GetPlayer(src) ~= nil
    end

    --- Send a framework notification to the player
    --- @param src number
    --- @param msg string
    --- @param nType string  'success'|'error'|'info'|'primary'
    --- @param duration number ms
    function FW.Notify(src, msg, nType, duration)
        TriggerClientEvent('QBCore:Notify', src, msg, nType or 'info', duration or 3000)
    end

    --- Get player money for a specific account ('cash', 'bank', etc.)
    --- @param src number
    --- @param account string  'cash' | 'bank'
    --- @return number
    function FW.GetMoney(src, account)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return 0 end
        return Player.PlayerData.money[account] or 0
    end

    --- Remove money from a player
    --- @param src number
    --- @param account string  'cash' | 'bank'
    --- @param amount number
    --- @param reason string|nil
    --- @return boolean
    function FW.RemoveMoney(src, account, amount, reason)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return false end
        return Player.Functions.RemoveMoney(account, amount, reason)
    end

    --- Add money to a player
    --- @param src number
    --- @param account string  'cash' | 'bank'
    --- @param amount number
    --- @param reason string|nil
    --- @return boolean
    function FW.AddMoney(src, account, amount, reason)
        local Player = QBCore.Functions.GetPlayer(src)
        if not Player then return false end
        return Player.Functions.AddMoney(account, amount, reason)
    end

-- ==========================================
-- CLIENT
-- ==========================================
else
    --- Return full player data table (citizenid, charinfo, job, …)
    --- @return table
    function FW.GetPlayerData()
        local QBCore = exports['qb-core']:GetCoreObject()
        return QBCore.Functions.GetPlayerData()
    end
end

Last updated