Installation
1. Prerequisites
ox_libox_inventoryorqb-inventoryqbx_coreorqb-coreores_extended
2. Resource Setup
- Download the latest version of
kartik-evidence. - Extract the contents into your
resourcesfolder. - Add
ensure kartik-evidenceto yourserver.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
breathalyzerandevidence_tabletare usable (they should be registered automatically if using the provided bridge). - Use the
/tabletcommand (if Debug is enabled) to verify access. - Use
forensic_chalkto mark items in the world.
Evidence
The most advanced and immersive forensic evidence system for FiveM, supporting ESX, QBCore, and Qbox. Track every shot, every drop of blood, and every fingerprint with unparalleled realism and performance.
Features
kartik-evidence is built to be the most comprehensive forensic suite available, modularized into specialized units for realistic investigation.