Skip to main content

QBCore API

This page covers the core QBCore API -- the functions and tables you'll use most when building on the framework. QBCore is Lua-based, so all examples here are in Lua.

QBCore.Functions (Server)

These are the primary server-side functions for managing players and data.

GetPlayer

Retrieve a player object by their server source ID:

local Player = QBCore.Functions.GetPlayer(source)

GetPlayerByCitizenId

Look up a player by their unique citizen ID (useful for offline lookups):

local Player = QBCore.Functions.GetPlayerByCitizenId("HLX28491")

GetPlayers

Get all currently connected players:

local players = QBCore.Functions.GetPlayers()
for _, src in ipairs(players) do
local Player = QBCore.Functions.GetPlayer(src)
print(Player.PlayerData.charinfo.firstname)
end

CreateCallback

Register a server callback that clients can invoke:

QBCore.Functions.CreateCallback('mypackage:server:getData', function(source, cb, args)
local Player = QBCore.Functions.GetPlayer(source)
local result = { name = Player.PlayerData.charinfo.firstname }
cb(result)
end)

CreateUseableItem

Register an item that triggers a function when used:

QBCore.Functions.CreateUseableItem("water_bottle", function(source, item)
local Player = QBCore.Functions.GetPlayer(source)
Player.Functions.SetMetaData("thirst", math.min(Player.PlayerData.metadata.thirst + 30, 100))
Player.Functions.RemoveItem("water_bottle", 1)
end)

QBCore.Functions (Client)

Client-side functions for interacting with the server and local player.

GetPlayerData

Get the local player's cached data (no server round-trip):

local PlayerData = QBCore.Functions.GetPlayerData()
local job = PlayerData.job.name
local cash = PlayerData.money.cash

TriggerCallback

Invoke a server callback and receive the result:

QBCore.Functions.TriggerCallback('mypackage:server:getData', function(result)
print("Name: " .. result.name)
end, optionalArgs)

Notify

Show a notification to the local player:

QBCore.Functions.Notify("You picked up a health kit!", "success", 5000)
-- Types: "success", "error", "info", "warning"
-- Duration in milliseconds

QBCore.Players

Server-side table that holds all active player objects, keyed by source:

-- Loop through all online players
for src, Player in pairs(QBCore.Players) do
print(src, Player.PlayerData.charinfo.firstname)
end

Shared Data

QBCore uses shared Lua tables to define items, jobs, vehicles, and gangs. These are accessible on both client and server.

QBCore.Shared.Items

All registered items in the framework:

QBCore.Shared.Items = {
water_bottle = {
name = "water_bottle",
label = "Water Bottle",
weight = 200, -- grams
type = "item",
image = "water_bottle.png",
unique = false,
useable = true,
shouldClose = true,
description = "A refreshing bottle of water"
},
}

QBCore.Shared.Jobs

All registered jobs (see the Player Guide for the full structure).

QBCore.Shared.Vehicles

Vehicle definitions used by dealerships, garages, and spawning:

QBCore.Shared.Vehicles = {
sedan_sport = {
name = "sedan_sport",
label = "Sport Sedan",
brand = "Benefactor",
type = "automobile",
price = 45000,
category = "sedans",
},
}

QBCore.Shared.Gangs

Gang definitions with grades, similar to jobs:

QBCore.Shared.Gangs = {
ballas = {
label = "Ballas",
grades = {
[0] = { name = "recruit" },
[1] = { name = "enforcer" },
[2] = { name = "shotcaller" },
[3] = { name = "boss" },
},
},
}

Events

QBCore fires several events you can listen to for hooking into the framework lifecycle:

-- Player loaded (server)
RegisterServerEvent('QBCore:Server:PlayerLoaded', function(controller, Player)
print(Player.PlayerData.charinfo.firstname .. " has loaded in")
end)

-- Player job updated (client)
RegisterClientEvent('QBCore:Client:OnJobUpdate', function(JobInfo)
print("New job: " .. JobInfo.name)
end)

-- Player money updated (client)
RegisterClientEvent('QBCore:Client:OnMoneyChange', function(moneyType, amount, operation)
print(moneyType .. ": " .. operation .. " $" .. amount)
end)