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-coreoxmysql- Optional ox_lib depending on notify settings (see in-repo
README.md)
Notes¶
Folder name
Must remain TrapsLevelSystem (shared/resource_guard.lua).
- Start order:
oxmysql→qb-core→TrapsLevelSystem→ resources that call exports. - Full API examples live in
README.mdinside the resource.
Installation¶
How to install¶
- Copy to
resources/TrapsLevelSystem(exact folder name). - Let the resource create DB tables on first start (see README).
- Tune
config.lua,config/skills.lua,config/passive_xp.lua,config/themes.lua. ensure TrapsLevelSystemafter core deps.- 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')