Exports & Events

Exports, callbacks, and events for integrating with oxide-blackmarket.

Reference for integrating with oxide-blackmarket.

oxide-blackmarket uses Callback = olink.callback internally. Client callback usage assumes your resource already has access to the same o-link callback object.

Server Exports

Dealer state

local netId = exports['oxide-blackmarket']:GetDealerNetId()
local coords = exports['oxide-blackmarket']:GetDealerCoords()
local spawnCoords = exports['oxide-blackmarket']:GetDealerSpawnCoords()
local active = exports['oxide-blackmarket']:IsDealerActive()
local valid = exports['oxide-blackmarket']:IsDealerValid()

Returns:

  • GetDealerNetId() -> number|nil
  • GetDealerCoords() -> vector3|nil
  • GetDealerSpawnCoords() -> vector3|nil
  • IsDealerActive() -> boolean
  • IsDealerValid() -> boolean

Stock

local stock = exports['oxide-blackmarket']:GetDealerStock()
local qty = exports['oxide-blackmarket']:GetItemStock('weapon_pistol')
local ok = exports['oxide-blackmarket']:UpdateDealerStock('weapon_pistol', -1)

Returns:

  • GetDealerStock() -> table
  • GetItemStock(itemName) -> number
  • UpdateDealerStock(itemName, amount) -> boolean

Reputation

local rep = exports['oxide-blackmarket']:GetPlayerReputation(source)
local ok1 = exports['oxide-blackmarket']:SetPlayerReputation(source, 500)
local ok2 = exports['oxide-blackmarket']:AddPlayerReputation(source, 50)
local ok3 = exports['oxide-blackmarket']:RemovePlayerReputation(source, 100)
local ok4 = exports['oxide-blackmarket']:AddReputationWithNotify(source, 50)
local ok5 = exports['oxide-blackmarket']:RemoveReputationWithNotify(source, 100)

Returns:

  • GetPlayerReputation(source) -> number
  • SetPlayerReputation(source, amount) -> boolean
  • AddPlayerReputation(source, amount) -> boolean
  • RemovePlayerReputation(source, amount) -> boolean
  • AddReputationWithNotify(source, amount) -> boolean
  • RemoveReputationWithNotify(source, amount) -> boolean

Client Exports

Dealer and menu state

local entity = exports['oxide-blackmarket']:GetDealerEntity()
local active = exports['oxide-blackmarket']:IsDealerActive()
local inMenu = exports['oxide-blackmarket']:IsInMenu()
exports['oxide-blackmarket']:SetInMenu(true)

Returns:

  • GetDealerEntity() -> number|nil
  • IsDealerActive() -> boolean
  • IsInMenu() -> boolean

UI

exports['oxide-blackmarket']:OpenShopUI(shopData)
exports['oxide-blackmarket']:CloseShopUI()
exports['oxide-blackmarket']:UpdateShopUI('stock', { item = 'weapon_pistol', stock = 5 })

local isShopOpen = exports['oxide-blackmarket']:IsShopOpen()
local isNuiOpen = exports['oxide-blackmarket']:IsNUIOpen()

Returns:

  • IsShopOpen() -> boolean
  • IsNUIOpen() -> boolean

Player state

local loggedIn = exports['oxide-blackmarket']:IsLoggedIn()
local isPolice = exports['oxide-blackmarket']:IsPlayerPolice()

Returns:

  • IsLoggedIn() -> boolean
  • IsPlayerPolice() -> boolean

Server Callbacks

oxide-blackmarket:server:GetReputation

Callback.Trigger('oxide-blackmarket:server:GetReputation', function(data)
    print(data.rep, data.tier, data.tierName)
end)

Return shape:

{
    rep = number,
    tier = number,
    tierName = string
}

oxide-blackmarket:server:IsPlayerPolice

Callback.Trigger('oxide-blackmarket:server:IsPlayerPolice', function(isPolice)
    print(isPolice)
end)

Returns boolean.

oxide-blackmarket:server:GetPed

Callback.Trigger('oxide-blackmarket:server:GetPed', function(netId, coords)
    print(netId, coords)
end)

Returns:

  • netId: number|nil
  • coords: vector3|nil

Client Events

Dealer

  • oxide-blackmarket:client:SpawnDealer(netId, coords)
  • oxide-blackmarket:client:DespawnDealer(netId?)
  • oxide-blackmarket:client:SpawnHitSquad(coords)

Reputation

  • oxide-blackmarket:client:TierChanged(newTier, newTierName)
  • oxide-blackmarket:client:TierUp(tierName)
  • oxide-blackmarket:client:TierDown(tierName)
  • oxide-blackmarket:client:ReputationLost()

Shop

  • oxide-blackmarket:client:OpenShop(shopData)
  • oxide-blackmarket:client:TransactionResult(success, message, updateData)

shopData contains:

{
    playerRep = number,
    playerTier = number,
    tierName = string,
    playerCash = number,
    buyInventory = table,
    sellInventory = table,
    enableTiers = boolean
}

Loot

  • oxide-blackmarket:client:SpawnLoot(coords, lootId)
  • oxide-blackmarket:client:RemoveLootBag(lootId)
  • oxide-blackmarket:client:LootCollected()

Pager

  • oxide-blackmarket:client:PagerSending()
  • oxide-blackmarket:client:PagerResult(success, message, coords, spawnCoords)
  • oxide-blackmarket:client:SetDealerWaypoint(data)

Pager result behavior:

  • Tier 2-3 success sends message = nil, coords = nil, and spawnCoords = vector3
  • Tier 4 success sends message = string, coords = vector3, and spawnCoords = nil
  • Failure sends message = string

Server Events

Dealer and arrest

TriggerServerEvent('oxide-blackmarket:server:DealerKilled', deathCoords, wasSurrendered)
TriggerServerEvent('oxide-blackmarket:server:ArrestDealer', netId)

Notes:

  • deathCoords is sent by the client but the server uses the live dealer entity coords
  • wasSurrendered changes the reduced police payout path

Shop

TriggerServerEvent('oxide-blackmarket:server:RequestShop')
TriggerServerEvent('oxide-blackmarket:server:Purchase', itemName, quantity)
TriggerServerEvent('oxide-blackmarket:server:Sell', itemName, quantity)

Loot

TriggerServerEvent('oxide-blackmarket:server:CollectLoot', lootId)

Integration Examples

Grant blackmarket rep from another resource

RegisterNetEvent('my-heist:server:completed', function()
    local src = source
    exports['oxide-blackmarket']:AddReputationWithNotify(src, 100)
end)

Check whether the dealer is currently up

local function getDealerLocation()
    if not exports['oxide-blackmarket']:IsDealerValid() then
        return nil
    end

    return exports['oxide-blackmarket']:GetDealerCoords()
end

Use current dealer stock in another script

local function canBuyFromDealer(itemName, quantity)
    return exports['oxide-blackmarket']:GetItemStock(itemName) >= quantity
end

Next Steps