Skip to content
Atlas

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 → server
  • my_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.