Docs
Events & Callbacks
Safe client ↔ server patterns on Atlas.
Prefer server authority
lua
-- client
TriggerServerEvent('my_resource:server:buyWater')
-- server
RegisterNetEvent('my_resource:server:buyWater', function()
local src = source
if not Atlas.IsReady() then return end
local price = 5
if not Atlas.Money.Remove(src, 'cash', price) then
TriggerClientEvent('ox_lib:notify', src, { type = 'error', description = 'Not enough cash' })
return
end
local inv = Atlas.Inventory.Add(src, 'water', 1)
if not inv or not inv.ok then
Atlas.Money.Add(src, 'cash', price) -- refund
return
end
TriggerClientEvent('ox_lib:notify', src, { type = 'success', description = 'Purchased water' })
end)Naming
Use resource-scoped names:
my_resource:server:*— client → servermy_resource:client:*— server → client
Avoid global names like buyItem that collide across cities.
Rate limits
Assume spam. Cooldown on the server before money/item mutations.
Never expose internals
Do not trigger internal atlas:* events from third-party scripts unless the docs say they are public. Use the facade.
Atlas