Skip to content

TrapsLevelSystem

QBCore leveling, tokens, skills, civilian jobs, and the skills tablet — with server exports for other resources.

Buy license — Tebex · Support Discord · YouTube @XVisonMods

Still stuck after Dependencies / Notes? Open a ticket in Discord with your ensure order and any client / server error lines.

Features

  • XP, levels, tokens, and skill tiers with modifiers
  • Passive XP and civilian job selection flows
  • Tablet NUI (html/) + optional XP HUD pieces
  • Server exports for granting XP and reading level / job gates

Dependencies

  • qb-core
  • oxmysql
  • Optional ox_lib depending on notify settings (see in-repo README.md)

Notes

Folder name

Must remain TrapsLevelSystem (shared/resource_guard.lua).

  • Start order: oxmysqlqb-coreTrapsLevelSystem → resources that call exports.
  • Full API examples live in README.md inside the resource.

Installation

How to install

  1. Copy to resources/TrapsLevelSystem (exact folder name).
  2. Let the resource create DB tables on first start (see README).
  3. Tune config.lua, config/skills.lua, config/passive_xp.lua, config/themes.lua.
  4. ensure TrapsLevelSystem after core deps.
  5. Restart.

Integration

Pick a tab — exports are server-only. Add hooks in each resource’s server/ where payout or completion already runs. More exports & tablet callbacks: README.md in the resource.

local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Quest complete')
local level = exports['TrapsLevelSystem']:GetPlayerLevel(src)
local ok, reason, extra = exports['TrapsLevelSystem']:TrySetCivilianJob(src, 'taxi')
dependencies { 'qb-core', 'TrapsLevelSystem' }
ensure oxmysql
ensure qb-core
ensure TrapsLevelSystem
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return end
exports['TrapsLevelSystem']:AddXP(source, 10, 'Job complete')

Menus & NUI → QBCore callbacks (names in README.md), not client exports.

local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'EMS job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Bus route')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Drugs job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Garbage job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Hotdog job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Crafting')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Jewelry store')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Mechanic job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'News job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Police duty')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Recycle job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Activity complete')

Also sold as qb-taxi on some packs.

local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Taxi job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Tow job')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Trucker delivery')
local ok = exports['TrapsLevelSystem']:AddXP(source, 25, 'Vineyard job')
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return end
local grade = Player.PlayerData.job.grade.level or 0
local xp = 15 + (grade * 2)
exports['TrapsLevelSystem']:AddXP(source, xp, 'Job payout (scaled)')
if exports['TrapsLevelSystem']:GetPlayerLevel(source) >= 15 then
    exports['TrapsLevelSystem']:AddXP(source, 40, 'Elite route bonus')
end
local base, roll = 20, math.random(5, 15)
exports['TrapsLevelSystem']:AddXP(source, base + roll, 'Lucky delivery')
RegisterNetEvent('myserver:questFinished', function(questId)
    local src = source
    if not QBCore.Functions.GetPlayer(src) then return end
    exports['TrapsLevelSystem']:AddXP(src, 30, ('Quest %s'):format(questId))
end)
local mult = Config.DoubleXPEvent and 2 or 1
exports['TrapsLevelSystem']:AddXP(source, math.floor(25 * mult), 'Event XP')
-- Daily / streak: store last claim in metadata or DB; if new day → AddXP
-- Admin: ACE or RegisterCommand + staff check → AddXP (never trust client amounts)
exports['TrapsLevelSystem']:AddXP(source, 50, 'Daily bonus')