Exports & API

External functions for integrating with other scripts.

Overview

hsJobQuest V2 provides exports for:

  • Reading player data

  • Checking skills

  • Querying mission status

  • Economy information

  • Faction reputation


Server Exports

GetPlayerData

Get a player's complete data.

local playerData = exports['hsJobQuestV2']:GetPlayerData(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: table or nil

Example return:

{
    citizenid = "ABC123",
    name = "John Doe",
    xp = 5250,
    rank = 6,
    money = 15000,
    prestige = 1,
    skill_points = 3,
    total_deliveries = 85,
    perfect_deliveries = 42,
    total_earnings = 125000,
    total_distance = 234.5
}

Example:

-- In another server script
local playerData = exports['hsJobQuestV2']:GetPlayerData(citizenId)
if playerData and playerData.rank >= 5 then
    -- Player is eligible for special content
end

GetPlayerRank

Get a player's current rank.

local rank = exports['hsJobQuestV2']:GetPlayerRank(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: number (1-10) or nil

Example:

local rank = exports['hsJobQuestV2']:GetPlayerRank(citizenId)
if rank >= 10 then
    print("Max rank achieved!")
end

GetPlayerPrestige

Get a player's prestige level.

local prestige = exports['hsJobQuestV2']:GetPlayerPrestige(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: number (0-5) or nil

Example:

local prestige = exports['hsJobQuestV2']:GetPlayerPrestige(citizenId)
if prestige > 0 then
    print("This player has prestiged " .. prestige .. " times!")
end

GetSkillLevel

Get a specific skill level.

local level = exports['hsJobQuestV2']:GetSkillLevel(citizenId, category, skillName)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

category

string

Skill category

skillName

string

Skill name

Skill Categories & Skills:

  • driving: speed_boost, fuel_efficiency, handling, brake_power

  • efficiency: quick_load, gps_enhancement, bonus_finder, stamina, long_haul

  • combat: vehicle_armor, evade_police, threat_awareness, package_insurance

  • special: double_xp, money_multiplier, lucky_drops

Returns: number (0 to max level)

Example:

local fuelLevel = exports['hsJobQuestV2']:GetSkillLevel(citizenId, 'driving', 'fuel_efficiency')
if fuelLevel > 0 then
    print("Player has fuel efficiency level: " .. fuelLevel)
end

GetSkillValue

Get the actual value of a skill (not level).

local value = exports['hsJobQuestV2']:GetSkillValue(citizenId, category, skillName)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

category

string

Skill category

skillName

string

Skill name

Returns: number - The skill's effect value

Example:

-- Fuel efficiency at level 3 = 30% reduction
local fuelReduction = exports['hsJobQuestV2']:GetSkillValue(citizenId, 'driving', 'fuel_efficiency')
-- fuelReduction = 30

HasActiveMission

Check if player has an active mission.

local hasMission = exports['hsJobQuestV2']:HasActiveMission(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: boolean

Example:

if exports['hsJobQuestV2']:HasActiveMission(citizenId) then
    -- Player is on a delivery, don't start other jobs
    TriggerClientEvent('notify', source, 'Finish your delivery first!')
    return
end

GetActiveMission

Get active mission details.

local mission = exports['hsJobQuestV2']:GetActiveMission(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: table or nil

Example return:

{
    id = "MISSION_123",
    jobType = "food_delivery",
    jobName = "Food Delivery",
    missionType = "standard",
    currentDeliveryIndex = 2,
    totalDeliveries = 3,
    startTime = 1699000000,
    vehicle = "burrito3",
    faction = "courier_corp"
}

Example:

local mission = exports['hsJobQuestV2']:GetActiveMission(citizenId)
if mission and mission.missionType == "express" then
    print("Player is doing an express delivery!")
end

GetFactionReputation

Get player's reputation with a faction.

local rep = exports['hsJobQuestV2']:GetFactionReputation(citizenId, factionId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

factionId

string

Faction identifier

Faction IDs:

  • courier_corp - General courier work

  • medical_express - Medical deliveries

  • luxury_logistics - High-end deliveries

  • street_runners - Underground deliveries

  • industrial_freight - Heavy cargo

Returns: number (reputation points)

Reputation Levels:

Points
Level

0-500

Unknown

500-1000

Known

1000-2500

Trusted

2500-5000

Respected

5000+

Elite Partner

Example:

local rep = exports['hsJobQuestV2']:GetFactionReputation(citizenId, 'courier_corp')
if rep >= 1000 then
    -- Player is "Trusted" with Courier Corp
    print("Player has access to special courier missions!")
end

GetATMBalance

Get player's ATM balance.

local balance = exports['hsJobQuestV2']:GetATMBalance(citizenId)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

Returns: number - Balance amount

Example:

local balance = exports['hsJobQuestV2']:GetATMBalance(citizenId)
print("Player has $" .. balance .. " in their delivery account")

AddATMBalance

Add money to player's ATM balance.

local success = exports['hsJobQuestV2']:AddATMBalance(citizenId, amount, reason)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

amount

number

Amount to add

reason

string

Transaction reason

Returns: boolean - Success status

Example:

-- Bonus from another script
local success = exports['hsJobQuestV2']:AddATMBalance(citizenId, 500, "Bonus from community event")
if success then
    TriggerClientEvent('notify', source, 'You received a $500 bonus!')
end

RemoveATMBalance

Remove money from player's ATM balance.

local success = exports['hsJobQuestV2']:RemoveATMBalance(citizenId, amount, reason)

Parameters:

Name
Type
Description

citizenId

string

Player identifier

amount

number

Amount to remove

reason

string

Transaction reason

Returns: boolean - Success status

Example:

-- Fine system
local success = exports['hsJobQuestV2']:RemoveATMBalance(citizenId, 1000, "Late delivery penalty")
if success then
    TriggerClientEvent('notify', source, 'You were fined $1000 for late delivery')
end

GetEconomyMultiplier

Get current economy multiplier for a job.

local multiplier = exports['hsJobQuestV2']:GetEconomyMultiplier(jobType)

Parameters:

Name
Type
Description

jobType

string

Job type identifier

Job Types:

  • food_delivery

  • package_delivery

  • medical_delivery

  • luxury_delivery

  • cargo_delivery

Returns: number (0.8 to 1.5) - Demand multiplier

Example:

local mult = exports['hsJobQuestV2']:GetEconomyMultiplier('food_delivery')
-- mult = 1.15 (high demand)
local basePay = 500
local adjustedPay = basePay * mult -- $575

Client Exports

IsOnMission

Check if local player is on a mission.

local onMission = exports['hsJobQuestV2']:IsOnMission()

Returns: boolean

Example:

if exports['hsJobQuestV2']:IsOnMission() then
    print("You're currently on a delivery!")
end

GetCurrentObjective

Get current mission objective.

local objective = exports['hsJobQuestV2']:GetCurrentObjective()

Returns: string or nil

Possible Values:

  • spawn_vehicle - Player needs to spawn their delivery vehicle

  • load_packages - Player needs to load packages into vehicle

  • go_to_delivery - Player is traveling to delivery location

  • retrieve_package - Player needs to retrieve package from vehicle

  • deliver_package - Player needs to deliver package to recipient

  • return_vehicle - Player needs to return vehicle to complete mission

Example:

local objective = exports['hsJobQuestV2']:GetCurrentObjective()
if objective == 'deliver_package' then
    print("Get ready to deliver the package!")
end

GetMissionProgress

Get delivery progress.

local current, total = exports['hsJobQuestV2']:GetMissionProgress()

Returns:

  • number|nil - Current delivery index

  • number|nil - Total deliveries

Example:

local current, total = exports['hsJobQuestV2']:GetMissionProgress()
if current and total then
    print("Delivery " .. current .. " of " .. total)
end

GetDistanceTraveled

Get distance traveled in current mission.

local km = exports['hsJobQuestV2']:GetDistanceTraveled()

Returns: number - Kilometers traveled

Example:

local distance = exports['hsJobQuestV2']:GetDistanceTraveled()
print("You've traveled " .. string.format("%.2f", distance) .. " km")

GetMissionVehicle

Get current mission vehicle entity.

local vehicle = exports['hsJobQuestV2']:GetMissionVehicle()

Returns: number|nil - Vehicle entity handle or nil

Example:

local vehicle = exports['hsJobQuestV2']:GetMissionVehicle()
if vehicle and DoesEntityExist(vehicle) then
    local health = GetVehicleEngineHealth(vehicle)
    print("Mission vehicle health: " .. health)
end

GetMissionJobType

Get current mission's job type.

local jobType = exports['hsJobQuestV2']:GetMissionJobType()

Returns: string|nil - Job type identifier

Example:

local jobType = exports['hsJobQuestV2']:GetMissionJobType()
if jobType == 'medical_delivery' then
    print("Drive carefully - medical supplies on board!")
end

GetMissionType

Get current mission type.

local missionType = exports['hsJobQuestV2']:GetMissionType()

Returns: string|nil - Mission type

Mission Types:

  • standard - Regular delivery

  • express - Time-sensitive delivery

  • bonus_hunt - Bonus objective hunting

  • long_haul - Long distance delivery

Example:

local missionType = exports['hsJobQuestV2']:GetMissionType()
if missionType == 'express' then
    print("Hurry! This is an express delivery!")
end

Integration Examples

Example 1: Restrict Other Jobs During Mission

-- In your other job script (server-side)
RegisterCommand('startotherjob', function(source)
    local citizenId = GetPlayerIdentifier(source)

    if exports['hsJobQuestV2']:HasActiveMission(citizenId) then
        TriggerClientEvent('notify', source, "Finish your delivery first!")
        return
    end

    -- Start the other job
    print("Starting new job for " .. citizenId)
end)

Example 2: Skill-Based Fuel Reduction

-- In your fuel script (server-side)
function CalculateFuelConsumption(source, distance)
    local citizenId = GetPlayerIdentifier(source)
    local fuelReduction = exports['hsJobQuestV2']:GetSkillValue(citizenId, 'driving', 'fuel_efficiency') or 0

    local baseConsumption = distance * 0.1  -- 0.1 fuel per meter
    local reduction = 1 - (fuelReduction / 100)

    return baseConsumption * reduction
end

Example 3: Rank-Based Rewards

-- Give bonus based on delivery rank (server-side)
RegisterNetEvent('myscript:giveBonus', function()
    local source = source
    local citizenId = GetPlayerIdentifier(source)
    local rank = exports['hsJobQuestV2']:GetPlayerRank(citizenId) or 1

    local bonus = rank * 100  -- $100 per rank
    exports['qb-core']:GetPlayer(source).Functions.AddMoney('cash', bonus)

    TriggerClientEvent('notify', source, 'Received rank bonus: $' .. bonus)
end)

Example 4: Check Faction Standing

-- VIP area access based on faction rep (server-side)
function CanAccessVIPArea(citizenId)
    local rep = exports['hsJobQuestV2']:GetFactionReputation(citizenId, 'luxury_logistics')
    return rep >= 5000  -- "Elite Partner" status required
end

RegisterNetEvent('checkVIPAccess', function()
    local source = source
    local citizenId = GetPlayerIdentifier(source)

    if CanAccessVIPArea(citizenId) then
        TriggerClientEvent('openVIPDoor', source)
    else
        TriggerClientEvent('notify', source, 'You need 5000+ Luxury Logistics rep!')
    end
end)

Example 5: Custom HUD Integration

-- Display mission info on custom HUD (client-side)
CreateThread(function()
    while true do
        Wait(1000)

        if exports['hsJobQuestV2']:IsOnMission() then
            local current, total = exports['hsJobQuestV2']:GetMissionProgress()
            local objective = exports['hsJobQuestV2']:GetCurrentObjective()
            local distance = exports['hsJobQuestV2']:GetDistanceTraveled()

            -- Send to your custom HUD
            SendNUIMessage({
                type = 'updateMission',
                data = {
                    progress = current .. '/' .. total,
                    objective = objective,
                    distance = string.format("%.1f km", distance)
                }
            })
        end
    end
end)

Example 6: Anti-Cheat Integration

-- Prevent teleporting during missions (server-side)
AddEventHandler('playerTeleported', function(source, oldCoords, newCoords)
    local citizenId = GetPlayerIdentifier(source)

    if exports['hsJobQuestV2']:HasActiveMission(citizenId) then
        local mission = exports['hsJobQuestV2']:GetActiveMission(citizenId)

        -- Log suspicious activity
        print(string.format('[ANTICHEAT] Player %s teleported during mission %s',
            citizenId, mission.id))

        -- Optionally cancel their mission
        TriggerEvent('hsjobquest:server:cancelMission', citizenId)
    end
end)

Example 7: Dynamic Economy Integration

-- Adjust prices based on delivery demand (server-side)
RegisterCommand('checkdeliverydemand', function(source)
    local demands = {}

    local jobTypes = {'food_delivery', 'package_delivery', 'medical_delivery', 'luxury_delivery', 'cargo_delivery'}

    for _, jobType in ipairs(jobTypes) do
        local mult = exports['hsJobQuestV2']:GetEconomyMultiplier(jobType)
        demands[jobType] = mult
    end

    TriggerClientEvent('showDemands', source, demands)
end)

Notes

  • All citizenId parameters should use the framework's identifier system (e.g., QBCore's citizenid, ESX's identifier)

  • Client exports only work on the local client and cannot be called from server

  • Server exports can be called from any server-side script

  • Always check return values for nil before using them

  • Skill values are percentages (e.g., 30 = 30% reduction/bonus)

  • Economy multipliers update dynamically based on player activity


Support

1

Check resource status

  1. Check that the resource is running:

    • /status

    • /ensure hsJobQuestV2

2

Verify export usage

  1. Verify you're using the correct export syntax for your side (client/server).

3

Inspect logs

  1. Check server/client console for errors.

4

Framework bridge

  1. Ensure your framework bridge is configured correctly.


Version: 2.1.0 Last Updated: 2025