Exports & Events

Use these exports and events to integrate ActivityManager with your custom scripts.

Client Exports

IsPlayerInShift()

Check if the local player is currently in an active shift.

local inShift = exports['activitymanager']:IsPlayerInShift()
if inShift then
    print("Player is working!")
end

GetPlayerShiftData()

Get current shift information for the local player.

local shiftData = exports['activitymanager']:GetPlayerShiftData()
if shiftData then
    print("Zone: " .. shiftData.zoneName)
    print("Start Time: " .. shiftData.startTime)
    print("Duration: " .. shiftData.duration)
end

GetZoneData(zoneId)

Get information about a specific work zone.

local zoneData = exports['activitymanager']:GetZoneData(1)
if zoneData then
    print("Zone Name: " .. zoneData.name)
    print("Job: " .. zoneData.job_name)
    print("Coords: " .. zoneData.coords_x .. ", " .. zoneData.coords_y)
end

OpenLoyaltyCardMenu()

Open the loyalty card menu for customers.

exports['activitymanager']:OpenLoyaltyCardMenu()

Server Exports

StartShift(source, zoneId)

Programmatically start a shift for a player.

local success = exports['activitymanager']:StartShift(source, zoneId)
if success then
    print("Shift started for player " .. source)
end

EndShift(source)

End the current shift for a player.

local shiftData = exports['activitymanager']:EndShift(source)
if shiftData then
    print("Shift ended. Duration: " .. shiftData.duration .. " minutes")
end

SendInvoice(source, targetId, amount, label)

Send an invoice and sync with ActivityManager API.

exports['activitymanager']:SendInvoice(source, targetId, 5000, "Vehicle Repair")
-- This will be synced to Discord automatically

GetPlayerData(source)

Get ActivityManager data for a player.

local playerData = exports['activitymanager']:GetPlayerData(source)
if playerData then
    print("Discord ID: " .. (playerData.discordId or "Not linked"))
    print("Current Job: " .. playerData.job)
end

SaveShiftData(source, data)

Save custom shift data to the API.

exports['activitymanager']:SaveShiftData(source, {
    customField = "value",
    notes = "Extra shift notes"
})

Client Events

activitymanager:client:enteredZone

Triggered when a player enters a work zone.

RegisterNetEvent('activitymanager:client:enteredZone')
AddEventHandler('activitymanager:client:enteredZone', function(zone)
    print("Entered zone: " .. zone.name)
    print("Zone ID: " .. zone.id)
end)

activitymanager:client:leftZone

Triggered when a player leaves a work zone.

RegisterNetEvent('activitymanager:client:leftZone')
AddEventHandler('activitymanager:client:leftZone', function(zone)
    print("Left zone: " .. zone.name)
end)

activitymanager:client:shiftStarted

Triggered when a shift starts.

RegisterNetEvent('activitymanager:client:shiftStarted')
AddEventHandler('activitymanager:client:shiftStarted', function(shiftData)
    print("Shift started in zone: " .. shiftData.zoneName)
end)

activitymanager:client:shiftEnded

Triggered when a shift ends.

RegisterNetEvent('activitymanager:client:shiftEnded')
AddEventHandler('activitymanager:client:shiftEnded', function(shiftData)
    print("Shift ended. Total time: " .. shiftData.duration .. " minutes")
end)

Server Events

activitymanager:server:requestZones

Request zone data from the server (used internally).

TriggerServerEvent('activitymanager:server:requestZones')

activitymanager:server:checkActiveShift

Check if the player has an active shift (reconnection handling).

TriggerServerEvent('activitymanager:server:checkActiveShift')