From ESX — easiest map
xPlayer / ESX.GetPlayerData → Atlas facades. Image-led, low pain.

What changes
| ESX habit | Atlas way |
|---|---|
ESX.GetPlayerFromId(src) | Atlas.Players.Get(src) |
xPlayer.getMoney() / getAccount('bank') | Atlas.Money.Get(src, 'cash'|'bank') |
xPlayer.removeMoney(n) | Atlas.Money.Remove(src, 'cash', n) |
xPlayer.addInventoryItem | Atlas.Inventory.Add(src, item, count) |
xPlayer.job | Atlas.Jobs.Get(src) |
ESX.RegisterServerCallback spam | Prefer events + result notifies; keep validation on server |
esx:getSharedObject wait loops | Atlas.IsReady() |
Easiest path
- Drop ESX shared object waits.
- Import Atlas.
- Money + inventory only through facades.
- Jobs via
Atlas.Jobs.*. - NUI strings → Atlas locales hub (don’t hardcode).
Mini rewrite
ESX-ish
lua
local xPlayer = ESX.GetPlayerFromId(src)
xPlayer.removeMoney(25)
xPlayer.addInventoryItem('bread', 1)Atlas
lua
if not Atlas.Money.Remove(src, 'cash', 25) then return end
local r = Atlas.Inventory.Add(src, 'bread', 1)
if not r.ok then Atlas.Money.Add(src, 'cash', 25) end
Identity
ESX identifier / character habits → Atlas accounts + characters. Use multichar arrival, don’t bolt old char creators onto client spawn.
More: Scripting Basics · From QBCore
Atlas