Kartik Scripts

Installation

1. Prerequisites

  • ox_lib
  • ox_inventory or qb-inventory
  • qbx_core or qb-core or es_extended

2. Resource Setup

  1. Download the latest version of kartik-evidence.
  2. Extract the contents into your resources folder.
  3. Add ensure kartik-evidence to your server.cfg.

3. Item Configuration

3.1 Inventory Configuration (ox_inventory)

Add the following items to your ox_inventory/data/items.lua:

    ['evidence_blood'] = {
        label = 'Blood Sample',
        weight = 50,
        description = 'Recovered blood sample for forensic analysis.'
    },
    ['evidence_fingerprint'] = {
        label = 'Fingerprint Sample',
        weight = 50,
        description = 'Recovered fingerprint sample for forensic analysis.'
    },
    ['evidence_saliva'] = {
        label = 'Saliva Sample',
        weight = 50,
        description = 'Recovered saliva sample for forensic analysis.'
    },
    ['evidence_magazine'] = {
        label = 'Magazine',
        weight = 50,
        description = 'Recovered firearm magazine for forensic analysis.'
    },
    ['evidence_projectile'] = {
        label = 'Projectile',
        weight = 50,
        description = 'Recovered bullet projectile for forensic analysis.'
    },
    ['evidence_casing'] = {
        label = 'Bullet Casing',
        weight = 10,
        description = 'Recovered bullet casing for forensic analysis.'
    },
    ['evidence_accelerant'] = {
        label = 'Accelerant Trace',
        weight = 50,
        description = 'Recovered accelerant trace for forensic analysis.'
    },
    ['evidence_burn_pattern'] = {
        label = 'Burn Pattern Documentation',
        weight = 100,
        description = 'Detailed documentation of a burn pattern.'
    },
    ['evidence_ignition'] = {
        label = 'Ignition Source',
        weight = 500,
        description = 'Recovered ignition source from an arson scene.'
    },
    ['swab_kit'] = {
        label = 'Saliva Swab Kit',
        weight = 100,
        description = 'Used to collect DNA, saliva, and blood samples from surfaces.'
    },
    ['saliva_test_tube'] = {
        label = 'Saliva Test Tube',
        weight = 20,
        description = 'Vial containing a saliva sample.'
    },
    ['centrifuged_saliva'] = {
        label = 'Centrifuged Saliva Sample',
        weight = 20,
        description = 'Saliva sample processed by a centrifuge.'
    },
    ['blood_vial'] = {
        label = 'Blood Vial',
        weight = 20,
        description = 'Vial containing a blood sample.'
    },
    ['centrifuged_blood'] = {
        label = 'Centrifuged Blood Sample',
        weight = 20,
        description = 'Blood sample processed by a centrifuge.'
    },
    ['dna_report'] = {
        label = 'DNA Laboratory Report',
        weight = 100,
        description = 'An official forensic analysis detailing a recovered DNA sequence.'
    },
    ['fingerprint_report'] = {
        label = 'Fingerprint Analysis Report',
        weight = 100,
        description = 'An official forensic analysis detailing a recovered fingerprint.'
    },
    ['body_damage_report'] = {
        label = 'Body Damage Report',
        weight = 100,
        description = 'An official forensic analysis detailing recovered body damage.'
    },
    ['evidence_fragment'] = {
        label = 'Bullet Fragment',
        weight = 50,
        description = 'Recovered bullet fragment for forensic analysis.'
    },
    ['fingerprint_scanner'] = {
        label = 'Fingerprint Scanner',
        weight = 50,
        description = 'Device for scanning latent fingerprints at a scene.'
    },
    ['arson_kit'] = {
        label = 'Arson Investigation Kit',
        weight = 200,
        description = 'A kit used to collect and analyze fire-related evidence.'
    },
    ['hydrocarbon_detector'] = {
        label = 'Hydrocarbon Detector',
        weight = 150,
        description = 'A device used to detect traces of accelerants.'
    },
    ['ballistics_report'] = {
        label = 'Ballistics Report',
        weight = 100,
        description = 'An official forensic report analyzing firearms and trajectories.'
    },
    ['evidence_arson_report'] = {
        label = 'Evidence Arson Report',
        weight = 100,
        description = 'An official forensic analysis detailing fire points and accelerants.'
    },
    ['access_tool'] = {
        label = 'Evidence Access Tool',
        weight = 50,
        description = 'A tool used to access forensic evidence securely.'
    },
    ['empty_evidence_bag'] = {
        label = 'Empty Evidence Bag',
        weight = 50,
        description = 'A bag used to collect and store forensic evidence.'
    },
    ['evidence_tablet'] = {
        label = 'Evidence Tablet',
        weight = 50,
        description = 'A tablet used to manage forensic evidence reports.'
    },
    ['breathalyzer'] = {
        label = 'Breathalyzer',
        weight = 50,
        description = 'A device used to estimate blood alcohol content.'
    },
    ['acid'] = {
        label = 'Industrial Acid',
        weight = 200,
        description = 'A strong corrosive acid used for cleaning heavy biological and chemical stains.'
    },
    ['microfiber'] = {
        label = 'Microfiber Towel',
        weight = 50,
        description = 'A high-quality towel designed for wiping away fingerprints and subtle residues without leaving marks.'
    },
    ['special_acid'] = {
        label = 'Forensic Grade Acid',
        weight = 250,
        description = 'A specialized chemical agent used to eliminate stubborn forensic traces and biological splatters.'
    },
    ['forensic_chalk'] = {
        label = 'Forensic Chalk',
        weight = 20,
        stack = true
    },
    ['forensic_sketch'] = {
        label = 'Forensic Sketch',
        weight = 10,
        stack = false
    },
    ['evidence_glass_shards'] = {
        label = 'Glass Shards',
        weight = 50,
        description = 'Recovered glass shards for forensic analysis.'
    },
    ['evidence_cloth_remnants'] = {
        label = 'Cloth Remnants',
        weight = 50,
        description = 'Recovered cloth remnants for forensic analysis.'
    },
    ['evidence_explosive_shards'] = {
        label = 'Explosive Fragments',
        weight = 100,
        description = 'Recovered explosive fragmentation for forensic analysis.'
    },
    ['evidence_residual_explosive'] = {
        label = 'Residual Explosives',
        weight = 50,
        description = 'Recovered unreacted explosive residue.'
    },
    ['evidence_plastic_residue'] = {
        label = 'Plastic Residue',
        weight = 50,
        description = 'Recovered plastic/casing residue.'
    },
    ['evidence_chemical_trace'] = {
        label = 'Chemical Trace',
        weight = 50,
        description = 'Recovered chemical compound trace.'
    },
    ['evidence_wiring_remnants'] = {
        label = 'Wiring Remnants',
        weight = 50,
        description = 'Recovered electrical/wiring components.'
    },
    ['evidence_adhesive_residue'] = {
        label = 'Adhesive Residue',
        weight = 50,
        description = 'Recovered sticky adhesive residue.'
    },
    ['gsr_test_kit'] = {
        label = 'GSR Test Kit',
        weight = 200,
        description = 'A kit used to collect and analyze gunshot residue from a suspect.'
    },
    ['evidence_vehicle_fragment'] = {
        label = 'Vehicle Fragment',
        weight = 50,
        description = 'A fragment of a vehicle.'
    },
    ['evidence_tire_tracks'] = {
        label = 'Tire Tracks',
        weight = 50,
        description = 'Tire tracks left at a scene.'
    },
    ['evidence_pouch'] = {
        label = 'Evidence Pouch',
        weight = 100,
        stack = false,
        close = true
    },
    ['vehicle_collision_report'] = {
        label = 'Vehicle Collision Report',
        weight = 50,
        stack = false,
        close = true,
        description = 'An official forensic report detailing vehicle collision fragments and evidence.'
    },
    ['tire_track_report'] = {
        label = 'Tire Track / Impression Analysis Report',
        weight = 50,
        stack = false,
        close = true,
        description = 'An official forensic report detailing tire track impression matches and analysis.'
    },

3.2 Inventory Configuration (qb-inventory)

Add the following items to your qb-core/shared/items.lua:

    ['evidence_blood'] = { ['name'] = 'evidence_blood', ['label'] = 'Blood Sample', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_blood.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered blood sample for forensic analysis.' },
    ['evidence_fingerprint'] = { ['name'] = 'evidence_fingerprint', ['label'] = 'Fingerprint Sample', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_fingerprint.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered fingerprint sample for forensic analysis.' },
    ['evidence_saliva'] = { ['name'] = 'evidence_saliva', ['label'] = 'Saliva Sample', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_saliva.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered saliva sample for forensic analysis.' },
    ['evidence_magazine'] = { ['name'] = 'evidence_magazine', ['label'] = 'Magazine', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_magazine.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered firearm magazine for forensic analysis.' },
    ['evidence_projectile'] = { ['name'] = 'evidence_projectile', ['label'] = 'Projectile', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_projectile.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered bullet projectile for forensic analysis.' },
    ['evidence_casing'] = { ['name'] = 'evidence_casing', ['label'] = 'Bullet Casing', ['weight'] = 10, ['type'] = 'item', ['image'] = 'evidence_casing.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered bullet casing for forensic analysis.' },
    ['evidence_accelerant'] = { ['name'] = 'evidence_accelerant', ['label'] = 'Accelerant Trace', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_accelerant.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered accelerant trace for forensic analysis.' },
    ['evidence_burn_pattern'] = { ['name'] = 'evidence_burn_pattern', ['label'] = 'Burn Pattern Documentation', ['weight'] = 100, ['type'] = 'item', ['image'] = 'evidence_burn_pattern.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Detailed documentation of a burn pattern.' },
    ['evidence_ignition'] = { ['name'] = 'evidence_ignition', ['label'] = 'Ignition Source', ['weight'] = 500, ['type'] = 'item', ['image'] = 'evidence_ignition.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered ignition source from an arson scene.' },
    ['swab_kit'] = { ['name'] = 'swab_kit', ['label'] = 'Saliva Swab Kit', ['weight'] = 100, ['type'] = 'item', ['image'] = 'swab_kit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Used to collect DNA, saliva, and blood samples from surfaces.' },
    ['saliva_test_tube'] = { ['name'] = 'saliva_test_tube', ['label'] = 'Saliva Test Tube', ['weight'] = 20, ['type'] = 'item', ['image'] = 'saliva_test_tube.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Vial containing a saliva sample.' },
    ['centrifuged_saliva'] = { ['name'] = 'centrifuged_saliva', ['label'] = 'Centrifuged Saliva Sample', ['weight'] = 20, ['type'] = 'item', ['image'] = 'centrifuged_saliva.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Saliva sample processed by a centrifuge.' },
    ['blood_vial'] = { ['name'] = 'blood_vial', ['label'] = 'Blood Vial', ['weight'] = 20, ['type'] = 'item', ['image'] = 'blood_vial.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Vial containing a blood sample.' },
    ['centrifuged_blood'] = { ['name'] = 'centrifuged_blood', ['label'] = 'Centrifuged Blood Sample', ['weight'] = 20, ['type'] = 'item', ['image'] = 'centrifuged_blood.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Blood sample processed by a centrifuge.' },
    ['dna_report'] = { ['name'] = 'dna_report', ['label'] = 'DNA Laboratory Report', ['weight'] = 100, ['type'] = 'item', ['image'] = 'dna_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic analysis detailing a recovered DNA sequence.' },
    ['fingerprint_report'] = { ['name'] = 'fingerprint_report', ['label'] = 'Fingerprint Analysis Report', ['weight'] = 100, ['type'] = 'item', ['image'] = 'fingerprint_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic analysis detailing a recovered fingerprint.' },
    ['body_damage_report'] = { ['name'] = 'body_damage_report', ['label'] = 'Body Damage Report', ['weight'] = 100, ['type'] = 'item', ['image'] = 'body_damage_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic analysis detailing recovered body damage.' },
    ['evidence_fragment'] = { ['name'] = 'evidence_fragment', ['label'] = 'Bullet Fragment', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_fragment.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered bullet fragment for forensic analysis.' },
    ['fingerprint_scanner'] = { ['name'] = 'fingerprint_scanner', ['label'] = 'Fingerprint Scanner', ['weight'] = 50, ['type'] = 'item', ['image'] = 'fingerprint_scanner.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Device for scanning latent fingerprints at a scene.' },
    ['arson_kit'] = { ['name'] = 'arson_kit', ['label'] = 'Arson Investigation Kit', ['weight'] = 200, ['type'] = 'item', ['image'] = 'arson_kit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A kit used to collect and analyze fire-related evidence.' },
    ['hydrocarbon_detector'] = { ['name'] = 'hydrocarbon_detector', ['label'] = 'Hydrocarbon Detector', ['weight'] = 150, ['type'] = 'item', ['image'] = 'hydrocarbon_detector.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A device used to detect traces of accelerants.' },
    ['ballistics_report'] = { ['name'] = 'ballistics_report', ['label'] = 'Ballistics Report', ['weight'] = 100, ['type'] = 'item', ['image'] = 'ballistics_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic report analyzing firearms and trajectories.' },
    ['evidence_arson_report'] = { ['name'] = 'evidence_arson_report', ['label'] = 'Arson Investigation Report', ['weight'] = 100, ['type'] = 'item', ['image'] = 'evidence_arson_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic analysis detailing fire points and accelerants.' },
    ['access_tool'] = { ['name'] = 'access_tool', ['label'] = 'Evidence Access Tool', ['weight'] = 50, ['type'] = 'item', ['image'] = 'access_tool.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A tool used to access forensic evidence securely.' },
    ['empty_evidence_bag'] = { ['name'] = 'empty_evidence_bag', ['label'] = 'Empty Evidence Bag', ['weight'] = 50, ['type'] = 'item', ['image'] = 'empty_evidence_bag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A bag used to collect and store forensic evidence.' },
    ['evidence_tablet'] = { ['name'] = 'evidence_tablet', ['label'] = 'Evidence Tablet', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_tablet.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A tablet used to manage forensic evidence reports.' },
    ['breathalyzer'] = { ['name'] = 'breathalyzer', ['label'] = 'Breathalyzer', ['weight'] = 50, ['type'] = 'item', ['image'] = 'breathalyzer.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A device used to estimate blood alcohol content.' },
    ['acid'] = { ['name'] = 'acid', ['label'] = 'Industrial Acid', ['weight'] = 200, ['type'] = 'item', ['image'] = 'acid.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A strong corrosive acid used for cleaning stains.' },
    ['microfiber'] = { ['name'] = 'microfiber', ['label'] = 'Microfiber Towel', ['weight'] = 50, ['type'] = 'item', ['image'] = 'microfiber.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A high-quality towel for wiping away fingerprints.' },
    ['special_acid'] = { ['name'] = 'special_acid', ['label'] = 'Forensic Grade Acid', ['weight'] = 250, ['type'] = 'item', ['image'] = 'special_acid.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A specialized agent to eliminate stubborn forensic traces.' },
    ['forensic_chalk'] = { ['name'] = 'forensic_chalk', ['label'] = 'Forensic Chalk', ['weight'] = 20, ['type'] = 'item', ['image'] = 'chalk.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Chalk used to mark evidence at a crime scene.' },
    ['forensic_sketch'] = { ['name'] = 'forensic_sketch', ['label'] = 'Forensic Sketch', ['weight'] = 10, ['type'] = 'item', ['image'] = 'sketch.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A physical sketch document of a forensic scene.' },
    ['evidence_glass_shards'] = { ['name'] = 'evidence_glass_shards', ['label'] = 'Glass Shards', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_glass_shards.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered glass shards for forensic analysis.' },
    ['evidence_cloth_remnants'] = { ['name'] = 'evidence_cloth_remnants', ['label'] = 'Cloth Remnants', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_cloth_remnants.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered cloth remnants for forensic analysis.' },
    ['evidence_explosive_shards'] = { ['name'] = 'evidence_explosive_shards', ['label'] = 'Explosive Fragments', ['weight'] = 100, ['type'] = 'item', ['image'] = 'evidence_explosive_shards.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered explosive fragmentation for forensic analysis.' },
    ['evidence_residual_explosive'] = { ['name'] = 'evidence_residual_explosive', ['label'] = 'Residual Explosives', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_residual_explosive.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered unreacted explosive residue.' },
    ['evidence_plastic_residue'] = { ['name'] = 'evidence_plastic_residue', ['label'] = 'Plastic Residue', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_plastic_residue.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered plastic/casing residue.' },
    ['evidence_chemical_trace'] = { ['name'] = 'evidence_chemical_trace', ['label'] = 'Chemical Trace', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_chemical_trace.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered chemical compound trace.' },
    ['evidence_wiring_remnants'] = { ['name'] = 'evidence_wiring_remnants', ['label'] = 'Wiring Remnants', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_wiring_remnants.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered electrical/wiring components.' },
    ['evidence_adhesive_residue'] = { ['name'] = 'evidence_adhesive_residue', ['label'] = 'Adhesive Residue', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_adhesive_residue.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Recovered sticky adhesive residue.' },
    ['gsr_test_kit'] = { ['name'] = 'gsr_test_kit', ['label'] = 'GSR Test Kit', ['weight'] = 200, ['type'] = 'item', ['image'] = 'gsr_test_kit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A kit used to collect and analyze gunshot residue from a suspect.' },
    ['evidence_vehicle_fragment'] = { ['name'] = 'evidence_vehicle_fragment', ['label'] = 'Vehicle Fragment', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_vehicle_fragment.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A fragment of a vehicle.' },
    ['evidence_tire_tracks'] = { ['name'] = 'evidence_tire_tracks', ['label'] = 'Tire Tracks', ['weight'] = 50, ['type'] = 'item', ['image'] = 'evidence_tire_tracks.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Tire tracks left at a scene.' },
    ['evidence_pouch'] = { ['name'] = 'evidence_pouch', ['label'] = 'Evidence Pouch', ['weight'] = 100, ['type'] = 'item', ['image'] = 'evidence_pouch.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A secure pouch for holding crime scene evidence.' },
    ['vehicle_collision_report'] = { ['name'] = 'vehicle_collision_report', ['label'] = 'Vehicle Collision Report', ['weight'] = 50, ['type'] = 'item', ['image'] = 'vehicle_collision_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic report detailing vehicle collision fragments and evidence.' },
    ['tire_track_report'] = { ['name'] = 'tire_track_report', ['label'] = 'Tire Track / Impression Analysis Report', ['weight'] = 50, ['type'] = 'item', ['image'] = 'tire_track_report.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An official forensic report detailing tire track impression matches and analysis.' },

3.3 qb-inventory Stash Persistence (Required)

If you are using qb-inventory, you must register a custom event to ensure programmatically updated stashes are saved to the database.

Add the following code to qb-inventory/server/main.lua (preferably below the qb-inventory:server:closeInventory event registration around line 179):

RegisterNetEvent('qb-inventory:server:SaveStash', function(stashId)
    if not Inventories[stashId] then return end
    MySQL.prepare('INSERT INTO inventories (identifier, items) VALUES (?, ?) ON DUPLICATE KEY UPDATE items = ?', { stashId, json.encode(Inventories[stashId].items), json.encode(Inventories[stashId].items) })
end)

4. Shared Configuration

Open shared/config.lua and adjust the permissions to match your server's jobs:

Config.Permissions = { 'police', 'fib', 'bcso' }

5. Final Steps

  • Restart your server.
  • Ensure the breathalyzer and evidence_tablet are usable (they should be registered automatically if using the provided bridge).
  • Use the /tablet command (if Debug is enabled) to verify access.
  • Use forensic_chalk to mark items in the world.

On this page