From QBCore — easiest map
QB patterns → Atlas facades, with pictures. Not a fork — a clean remount.

What changes (30-second view)
| QBCore habit | Atlas way |
|---|---|
QBCore.Functions.GetPlayer(src) | Atlas.Players.Get(src) |
Player.Functions.AddMoney('cash', n) | Atlas.Money.Add(src, 'cash', n) |
Player.Functions.RemoveMoney(...) | Atlas.Money.Remove(src, 'cash', n) |
exports['qb-inventory']:AddItem / ox digs | Atlas.Inventory.Add(src, item, count) |
QBCore.Functions.HasPermission / ace mix | Atlas.Permissions.Has(src, 'perm') |
Player.PlayerData.job | Atlas.Jobs.Get(src) |
| Client-trusted money events | Never — server validates everything |
Atlas is not QBCore with a paint job. Remount scripts onto Atlas.* contracts.
Easiest path
- Ensure
atlas_core+atlas_inventorybefore your resource. - Add
shared_script '@atlas_core/imports.lua'. - Replace money / item / job calls with the table above.
- Keep gameplay events resource-scoped (
myjob:server:*). - Test with
atlas_health+ one happy-path purchase.
Mini rewrite
QB-ish
lua
local Player = QBCore.Functions.GetPlayer(src)
Player.Functions.RemoveMoney('cash', 50)
exports.ox_inventory:AddItem(src, 'water', 1)Atlas
lua
if not Atlas.Money.Remove(src, 'cash', 50) then return end
local r = Atlas.Inventory.Add(src, 'water', 1)
if not r.ok then
Atlas.Money.Add(src, 'cash', 50)
end
Multichar / spawn
QB multichar / spawn selectors → use Atlas multichar + spawn selector. Don’t paste old client coord trust.
See also: Creating a Resource · Exports & API
Atlas