API Reference

Server exports for oxide-pizzajob — IsOnShift, GetSetting, SetSetting, GetInfo, GetShift, GetProgression and SetUpdateHandler, with integration examples for stopping players from working two jobs at once.

Reference for developers integrating another resource with oxide-pizzajob. Everything here is a server-side export; there are no client exports. If you just run the resource as a server owner, you don't need anything on this page.

Server Exports

All exports are called on the server.

IsOnShift

Tells you whether a player is currently on a pizza delivery shift. Use it to stop a player from starting another job while they're already working this one.

local onShift = exports['oxide-pizzajob']:IsOnShift(source)

Parameters:

NameTypeDescription
sourcenumberThe player's server id

Returns: boolean — true from the moment the player clocks in until the shift ends, whether they clock out, log out or disconnect. false otherwise, including for an id that isn't a player.

GetSetting

Reads one of the resource's database-backed settings, keyed by the setting name without the Config. prefix.

local maxSlots = exports['oxide-pizzajob']:GetSetting('MaxSlotsPerLocation')

Parameters: key (string) — the setting name.

Returns: any — the current value.

SetSetting

Changes one of the resource's settings.

local ok = exports['oxide-pizzajob']:SetSetting('uniformsEnabled', true)

Parameters: key (string), value (any) — the setting name and its new value.

Returns: boolean — true when the change was applied. The change is live: the server uses it right away, it saves to the database, and it syncs to clients. It persists across restarts.

Returns false if the resource hasn't finished loading its settings yet, or if the value can't be stored (for example, a number that isn't finite).

See How Settings Work for how the database-backed settings relate to the config files.

GetInfo

The shops, whether each one has room for another worker, and the base pay. Read-only.

local info = exports['oxide-pizzajob']:GetInfo()

Returns: table — with these fields:

FieldTypeDescription
locationstable[]One entry per shop: name (string), coords (vector3) and open (boolean — false while the shop has as many workers as it takes)
basePaytablemin and max — the base pay per delivery before bonuses
crewbooleanAlways false — the job is worked alone

GetShift

A player's shift as the job holds it right now. Read-only.

local shift = exports['oxide-pizzajob']:GetShift(source)

Parameters: source (number) — the player's server id.

Returns: table|false — false when the player is not on a shift; otherwise a table with these fields:

FieldTypeDescription
locationstringThe shop the shift started at
rolestringAlways solo
stagestringworking while delivering an order, restock between batches (back to the shop for more orders)
taskstring or nilThe address of the current order; nil otherwise
done, totalnumberOrders delivered and orders in the current batch (0, 0 between batches)
jobsnumberDeliveries paid for this shift so far
earnednumberPay earned so far, before the deductions taken at clock-out. Tips are not included
tipsnumberTips paid in cash so far this shift

GetProgression

A player's level with this job. Read-only: a character who has never worked the job reads as level 1, and no record is created.

local progression = exports['oxide-pizzajob']:GetProgression(source)

Parameters: source (number) — the player's server id.

Returns: table|false — false when the player has no character; otherwise a table with these fields:

FieldDescription
level, titleThe player's current level and its title
countDeliveries in total
streakDays in a row
prevAt, nextAtThe delivery counts where this level starts and where the next one begins (nextAt is nil at the top level)
nextTitleThe title of the next level
timedOutWhether the player is suspended after complaints
timeoutRemainingSeconds left on the suspension

SetUpdateHandler

Lets another resource, such as a phone app, show this job's shift updates itself. The updates are the messages the job sends to the player's phone when usePhone is on.

While a handler is set and its resource is running, each update goes to the handler first. When the handler returns true, the job sends nothing else; when it returns anything else or fails, the job sends the update as usual. There is one handler at a time: setting one replaces the last.

exports['oxide-pizzajob']:SetUpdateHandler(function(source, update)
    -- update.title: the sender, for example "Pizza This! - Downtown Pizza This"
    -- update.message: the message
    -- update.summary: { jobs, net } on the pay summary, sent when a shift ends on a clock-out,
    -- a deleted shop or a restart (never on a disconnect, a logout or going down)
    return true -- shown; the job sends nothing else
end)

Parameters: handler (function or nil) — called as handler(source, update). Passing nil removes the handler your resource set; it is also removed when your resource stops.

Returns: boolean — true, or false when nil would remove another resource's handler (that handler stays).

Integration Examples

Stop a player from working two jobs at once

Check before your own job lets the player clock in:

RegisterNetEvent('my-job:server:clockIn', function()
    local src = source
    if GetResourceState('oxide-pizzajob') == 'started'
        and exports['oxide-pizzajob']:IsOnShift(src) then
        -- tell the player to finish their pizza delivery shift first
        return
    end
    -- start your job
end)

Check every gig job at once

The same IsOnShift(source) export exists on oxide-postaljob, oxide-pizzajob, oxide-landscapingjob, oxide-roadsideassistancejob, oxide-animalcontroljob and oxide-newspaperjob. Skip any you don't run:

local GIG_JOBS = {
    'oxide-postaljob',
    'oxide-pizzajob',
    'oxide-landscapingjob',
    'oxide-roadsideassistancejob',
    'oxide-animalcontroljob',
    'oxide-newspaperjob',
}

local function isOnGigShift(src)
    for _, resource in ipairs(GIG_JOBS) do
        if GetResourceState(resource) == 'started' and exports[resource]:IsOnShift(src) then
            return true
        end
    end
    return false
end

Guard your calls. Check GetResourceState('oxide-pizzajob') == 'started' before calling an export so your resource still works when this job isn't installed.

Next Steps