Browse docs

Inventory Items

Register the restraint, drug-test, printer, portable case-container, tablet, GPS-jammer, and prop-placement items used by Sky Jobs Base.

The restraint and drug-test runtimes belong to sky_jobs_base, so their inventory items must be installed even when you use the Crime System without the Police or Ambulance Job resources.

ItemUsed byDefault requirement
handcuffsMetal handcuffsRequired and consumed on use
handcuffs_keysRemoving metal handcuffsOptional while Config.PoliceCuffs.key.enabled = false; not consumed
ziptiesPlastic restraintsRequired and consumed on use
wire_cutterCutting ziptiesRequired when the cutter action is used
legcuffsLeg restraintsOptional while Config.LegRestraints.requireItem = false
headbagHead-bag interactionRequired
drug_test_kitPolice rapid drug screeningRequired while the simple drug test is enabled; consumed after a successful test
advanced_drug_test_kitAmbulance advanced drug screeningRequired while the advanced drug test is enabled; consumed after a successful test
fake_drug_sample_cleanTransferable clean fake sampleRequired for the fake-sample workflow; consumed when prepared

The keys and requirement behavior are configured in sky_jobs_base/config/config.lua under Config.PoliceCuffs, Config.LegRestraints, Config.HeadBag, and Config.DrugTests.

Other item-backed Jobs Base systems

The default Jobs Base configuration also contains these item-backed systems. Register the matching items for every system you keep enabled, or disable/remove the item binding before first start.

Item or configUsed byDefault behavior
gps_jammerConfig.EmployeeGpsJammerEnabled, required, and consumed on use
tabletConfig.Tablet.itemRegisters a usable tablet item; radial access does not require it by default
gpsConfig.ColleagueMapBlips.itemOnly required when requireItem = true
Config.PropPlacement.itemsUsable Police/Ambulance propsEnabled; each retained entry needs its configured item
printer_paperShared printer refill itemOnly required when a consuming job enables printer paper handling and keeps this item key
printer_inkShared printer cartridgeOnly required when ink consumption is enabled and this item key is retained
job_documentPrinted Police, Ambulance, Mechanic and Fire recordsRequired for physical copies; individual item metadata and non-stackable items are required

The shipped prop-item keys are:

  • Shared: job_traffic_cone, job_worklight_stand, job_worklight
  • Police: police_barrier, police_road_barrier, police_evidence_marker, police_stinger_spikes, police_checkpoint_tent
  • Ambulance: ambulance_barrier, ambulance_medical_crate, ambulance_defibrillator, ambulance_medical_bag

Jobs Base supplies the three printer-item images described below. For the other additional items, supply matching images from your inventory pack, rename the configured keys to existing items, or disable the corresponding system. Set Config.Tablet.item = "" when the tablet should not register a usable item.

Use the same inventory-specific structure shown below for additional Jobs Base items. The item names must exactly match Config.EmployeeGpsJammer, Config.Tablet, Config.ColleagueMapBlips, and Config.PropPlacement.items, plus the consuming job's printerSettings.refillItem when paper handling is enabled.

Shared item definitions

Copy the supplied handcuffs.png, handcuffs_keys.png, zipties.png, wire_cutter.png, legcuffs.png, headbag.png, drug_test_kit.png, advanced_drug_test_kit.png, and fake_drug_sample_clean.png files from sky_jobs_base/config/inventory into your inventory image folder. Printer items and their included images are described in the next section.

Printer items

Merge sky_jobs_base/config/inventory/items_ox.lua into ox_inventory/data/items.lua and copy job_document.png, printer_paper.png and printer_ink.png from the same package directory into ox_inventory/web/images/. Keep consume = 0: Sky removes a supply item only after a successful refill.

ItemWeightStackableConsumed
job_document10NoNo; it can be read repeatedly
printer_paper100YesOne after successful paper loading
printer_ink200YesOne after successful cartridge replacement

For other supported inventories, register these exact names in the provider's format, copy the matching images, and preserve each document's metadata. Jobs Base registers the usable callbacks. An administrator-created blank job_document does not contain a printed record: print a saved record and collect its copy from the printer. DOJ uses its separate doj_document item; see DOJ inventory items.

Printer supplies are optional unless their consumption is enabled. The default cartridge covers 1,200 copies; saved job overrides take precedence. A missing job_document definition or an inventory without metadata support prevents document printing before the printer picker is populated.

Portable case containers

Jobs Base also includes two English, non-stackable items for carrying case material between people and locations:

ItemPurposeDefault capacity
sky_briefcaseAn inventory-backed briefcase that can be shown on the player's right hand while it is carried24 slots / 25,000 weight
sky_case_folderAn inventory-backed folder for case files and loose documents; it has no prop by default12 slots / 8,000 weight

Merge both definitions from sky_jobs_base/config/inventory/items_ox.lua into the existing ox_inventory/data/items.lua table. Copy sky_briefcase.png and sky_case_folder.png from sky_jobs_base/config/inventory into ox_inventory/web/images/. The same English labels and descriptions should be used when registering the items in another supported inventory.

Each physical case item receives its own metadata-backed container. Ox Inventory and Qbox use their native container support. The configured CodeM V2, Core, Core One, Origen, PS, QB Inventory, QS and Tgiann integrations use their registered stash bridge; unsupported providers keep the item but cannot open its contents until a stash bridge is configured. Item contents remain with that item when it is moved or transferred.

The briefcase prop is shown automatically while the item is in the player's inventory. Custom actions can call Sky_Jobs.PedAttachments.Show("sky_briefcase"), Hide("sky_briefcase") or Toggle("sky_briefcase"); use Sky_Jobs.ItemContainers.Rename(slot, label) to set a per-item display name when the inventory supports metadata updates. The case folder has the same container and rename behavior without a prop.

Place and save a printer for the job in /jobconfig. An existing map prop needs a configured interaction; it is not detected automatically. Players must be within four metres and meet the printer's job, duty and grade requirements. The printer must be active and online to appear in the print picker.

Portable case containers

Jobs Base also includes two English, non-stackable items for carrying case material between people and locations:

ItemPurposeDefault capacity
sky_briefcaseAn inventory-backed briefcase that can be shown on the player's right hand while it is carried24 slots / 25,000 weight
sky_case_folderAn inventory-backed folder for case files and loose documents; it has no prop by default12 slots / 8,000 weight

Merge both definitions from sky_jobs_base/config/inventory/items_ox.lua into the existing ox_inventory/data/items.lua table. Copy sky_briefcase.png and sky_case_folder.png from sky_jobs_base/config/inventory into ox_inventory/web/images/. The same English labels and descriptions should be used when registering the items in another supported inventory.

Each physical case item receives its own metadata-backed container. Ox Inventory and Qbox use their native container support. The configured CodeM V2, Core, Core One, Origen, PS, QB Inventory, QS and Tgiann integrations use their registered stash bridge; unsupported providers keep the item but cannot open its contents until a stash bridge is configured. Item contents remain with that item when it is moved or transferred.

The briefcase prop is shown automatically while the item is in the player's inventory. Custom actions can call Sky_Jobs.PedAttachments.Show("sky_briefcase"), Hide("sky_briefcase") or Toggle("sky_briefcase"); use Sky_Jobs.ItemContainers.Rename(slot, label) to set a per-item display name when the inventory supports metadata updates. The case folder has the same container and rename behavior without a prop.

Inventory-specific shared definitions

CodeM Inventory V2: use the codem-inventoryv2 tab, add its definitions to codem-inventoryv2/data/items.lua and copy images to codem-inventory-images/images. Keep consume = 0 and no item client block; Sky registers the usable callbacks. See V2 setup and limits.

['handcuffs'] = {
    label = 'Handcuffs',
    weight = 250,
    stack = true,
    close = true,
    description = 'Metal handcuffs for restraining suspects'
},
['handcuffs_keys'] = {
    label = 'Handcuff Keys',
    weight = 100,
    stack = true,
    close = true,
    description = 'Keys used to remove metal handcuffs'
},
['zipties'] = {
    label = 'Zipties',
    weight = 100,
    stack = true,
    close = true,
    description = 'Plastic zipties for restraining suspects'
},
['wire_cutter'] = {
    label = 'Wire Cutter',
    weight = 800,
    stack = true,
    close = true,
    description = 'Tool used to cut restraints'
},
['legcuffs'] = {
    label = 'Leg Cuffs',
    weight = 300,
    stack = true,
    close = true,
    description = 'Leg restraints that slow down a restrained suspect'
},
['headbag'] = {
    label = 'Head Bag',
    weight = 250,
    stack = true,
    close = true,
    description = 'Bag used to cover a restrained suspect'
},
['drug_test_kit'] = {
    label = 'Drug Test Kit',
    weight = 100,
    stack = true,
    close = true,
    description = 'A rapid screening test for active drug influence'
},
['advanced_drug_test_kit'] = {
    label = 'Advanced Drug Test Kit',
    weight = 150,
    stack = true,
    close = true,
    description = 'A medical screening test that identifies active substances and dose amounts'
},
['fake_drug_sample_clean'] = {
    label = 'Clean Fake Drug Sample',
    weight = 100,
    stack = true,
    close = true,
    description = "A transferable clean sample that falsifies the carrier's next drug test after use"
},
['printer_paper'] = {
    label = 'Printer Paper',
    weight = 100,
    stack = true,
    close = true,
    description = 'Paper used to refill configured job printers'
},
The qb-core definitions also cover qb-inventory, ps-inventory, and jpr-inventory because those inventories read QBShared.Items. For another inventory, transfer the same item names, labels, weights, and image names into its supported format.