Jixryo Evidence

Casings, prints, blood and DNA left by play, seen in a flashlight beam, bagged and sealed with a chain of custody, photographed with real placards, run through the crime lab and booked. Every step is decided on the server.

Version 0.7.0 Updated See it on its script page

On this page

Jixryo Evidence replaces r14-evidence's world evidence, kits and camera, and adds the crime lab and booking. Shooting, bleeding, smoking and touching a car bare-handed leave marks the server keeps. Officers find them with a flashlight, pick them up with tweezers and swabs into Ziploc evidence bags, seal and log the bag, run pieces through the lab and book the suspect, and every hand-off lands in the record. It works with Police, MDT and Prison.

What players get

  • Play leaves evidence. A shot drops a brass casing everyone near can see, carrying the gun's make and serial. Firing bare-handed leaves your print on the gun, and getting into a car bare-handed leaves prints on its handles. Getting hurt leaves blood, as a trail while you are badly hurt. Smoking or drinking leaves DNA where you stand. Firing leaves gunshot residue on your hands for half an hour, unless you wash it off swimming.
  • Gloves matter. Only GTA's bare-handed arms leave prints; anything else counts as gloves.
  • Cleaning up. A microfiber cloth wipes prints off a car or off the gun you hold. Bleach scrubs the ground around you: DNA is gone, and blood becomes a trace only a UV light shows.
  • Being booked. You are told you are being booked, turned to the booth camera holding the police ID board with your name and number for three mugshots, your property is sealed or seized, and you are told the months and fines. Prison puts you on the bus; release hands your property back; hold keeps you restrained.
  • A sealed bag stays sealed. Anyone who is not police can only tear it open, and the torn seal is written into the bag's record and every item's.
  • Nothing secret in your pockets. A piece of evidence carries only its code, never whose DNA or which print it holds.

What staff get

  • The flashlight finds it. Marks within the beam show as coloured dots; press E to collect the nearest, H to put a numbered placard beside it. A UV light item switches the beam to UV with U, where bleached blood glows.
  • Collecting is a scene. You kneel with the tweezers or a swab in one hand and your open bag in the other; the casing comes up in the tips and goes into the bag. Nothing is used up if you lack the kit or bag room.
  • Ziploc evidence bags hold ten pieces up to 2.5 kg and weigh what is in them. Guns and drugs taken in a search can be dragged in by hand. Seal and log opens the logging page: a line per item, the incident, the MDT case, what it was recovered from and where, notes, your signature. Then you write the label and tape the seal, the bag gets its code, and every item is linked to the case with "Sealed in bag" in its custody.
  • Real placards numbered 1 to 60 per scene, the lowest free number first. They stay until picked up, and /placards clears every one within 20 metres.
  • The camera (the nikon item): Evidence, Auto, A, S and M modes, a 24 to 200 mm lens, aperture and focus driving GTA's depth of field, shutter, ISO, exposure, white balance, autofocus, flash, grid and a stamp. In Evidence mode the viewfinder names the placards in the frame, and evidence collected beside a photographed placard is marked "photographed in place". Photos upload to Fivemanage and live on the SD card item.
  • Dust for prints on a car with the fingerprint kit and print tape, GSR test on a person with the GSR kit, both into your bag.
  • Evidence lockers at the stations take sealed bags only, and every bag in or out is written into its custody.
  • The crime lab at a lab station: match a latent or a gun's prints against the people on file by marking twelve points, run a swab on the DNA sequencer for three minutes of real time, and line a casing up against a test fire from a gun in your pockets. Only people printed or swabbed at booking are on file.
  • Booking at a booking desk, or /book [id]: pick the person (nearby, server id, character id or name), confirm their identity with a ten-finger scan that catches a false name, a cheek swab, three mugshots, property seized or sealed, charges from your penal code with counts, an open MDT case, a plea reduction, a report note, and the outcome: prison, release or hold. Esc keeps the booking for ten minutes.
  • /booktest books yourself anywhere as staff, running every step without a record, so booking can be tried alone.
  • An audit trail: every collection, bleaching, photo marked as evidence, lab result, bag seal or broken seal, placard clear-up, property seal and booking goes to Core's log.

Install

  1. Items. The Jixryo inventory build already has the evidence bag (evidence_ziploc, a 10-slot, 2.5 kg container with its Seal and log and Break the seal buttons), evidence_tweezers, and the pieces evidence_casing, evidence_swab, evidence_lift and evidence_gsr, and sells the bag and tweezers at both police armouries. With any other ox_inventory, add them the same way. Evidence also uses dnatestkit, fingerprintkit, fingerprinttape, gsrtestkit, microfibercloth, blox, nikon and sdcard.

  2. Point four items at Evidence. In the inventory's items, change the server.export of nikon, sdcard, microfibercloth and blox from r14-evidence to this resource:

    lua
    ['nikon']           ... server = { export = 'jixryo_evidence.nikon' },
    ['sdcard']          ... server = { export = 'jixryo_evidence.sdcard' },
    ['microfibercloth'] ... server = { export = 'jixryo_evidence.microfibercloth' },
    ['blox']            ... server = { export = 'jixryo_evidence.blox' },
  3. Add the UV light, with a picture named uv_flashlight.png:

    lua
    ['uv_flashlight'] = { label = 'UV Light', weight = 300, stack = false, description = 'Clip-on UV for a flashlight. Bleach glows under it.' },
  4. Photo uploads. Put a Fivemanage image token in server.cfg with set, never setr, so it never reaches a player's game:

    server.cfg
    set jixryo_evidence_fivemanage "your-fivemanage-token"

    screenshot-basic must be running. Without a token, photos are recorded with their settings but have no picture; Config.camera.upload = 'none' turns uploads off on purpose.

  5. Stations. Config.lockers, Config.lab.stations and Config.booking.stations are set for the Rockford station (the prompt_pd map): the storage room beside the forensic lab, the forensic room upstairs, and the basement booking room by the holding cells. Move them to your station, and set each booking station's desk, where the person stands for the mugshot, and where the booth camera sits. Edit Config.penalCode to your penal code.

  6. Stop r14-evidence and take it out of server.cfg: it would make its own casings and blood and handle the same items. Start Evidence after Core and the inventory:

    server.cfg
    ensure ox_inventory
    ensure screenshot-basic
    ensure jixryo_core
    ensure jixryo_evidence

    It needs ox_lib, oxmysql, qbx_core, ox_inventory, ox_target and jixryo_core. Police, MDT and Prison are found when they run.

  7. The database. On first start Evidence makes its tables through Core's numbered steps: jixryo_evidence, jixryo_evidence_marks, jixryo_evidence_vprints, jixryo_evidence_photos, jixryo_evidence_people, jixryo_evidence_lab, jixryo_evidence_bookings, jixryo_evidence_bags and jixryo_evidence_placards. An update adds its columns the same way.

  8. Restart the whole server. Upload the resource as it is: its page is built, and its props (placards 1 to 60, the casing, the tweezers, the bag and the swab) stream from its own folder.

How other scripts' calls behave

Evidence answers as no other resource. It takes over four of r14-evidence's items and talks to the scripts around it.

ResourceWhat happens
ox_inventoryThe four repointed items call jixryo_evidence.nikon, .sdcard, .microfibercloth and .blox when used. Using a cigarette or a drink (Config.dnaItems) leaves DNA through the usingItem hook. A sealed bag refuses to open (openInventory). Moving a bag or a piece writes a custody line and a sealed-only locker refuses anything unsealed (swapItems). Nothing in ox_inventory is changed.
PoliceBooking asks IsRestrained and IsEscorted for the picker, and Release on a release. An item taken in a Police search carries { by, at, from }, which becomes "Seized by" at the top of its custody when its bag is sealed.
MDTThe logging page offers the MDT's open cases and refuses a case number it does not have. Booking asks HasWarrant and OpenCasesFor, and calls Booked so the booking joins its case and warrants are served. The MDT reads records, bags and the penal code through the exports below.
PrisonA prison outcome calls JailPlayer(src, months, { by, booking }). The prison calls ReturnProperty at release.
qbx_coreA booking sets the criminalrecord metadata, as qbx_police does when it jails someone. jx_property says the person's property is sealed, so it is never sealed twice. Prints and blood type come from the character's fingerprint and bloodtype metadata.
screenshot-basicTakes the photo and the mugshots, uploading each to a one-time link the server fetched.

Its own API

Server exports, called as exports.jixryo_evidence:Name(...).

ExportWhat it does
GetEvidence(code)The record for E-0012: kind, label, quality, data, custody, case, bag, description.
AddCustody(code, who, what)A line in a piece's chain of custody.
SetCase(code, caseId)Links a piece to a case.
HasGunshotResidue(src)Whether the player fired within the GSR window and has not washed.
GetLabResults(code)Every lab result for a piece.
GetPerson(cid)Prints and DNA on file, times booked, mugshots.
GetBookings(cid)Their bookings, newest first: charges, months, fine, outcome, reduction, notes, seized, station.
ReturnProperty(src)Gives back what booking sealed and clears jx_property.
GetPenalCode()The penal code, so a charge means the same everywhere.
GetBag(code)A bag's log for B-0004: status, who sealed it and when, incident, case, where, from what, notes, items, custody.

Item handlers for ox_inventory's server.export: jixryo_evidence.nikon, jixryo_evidence.sdcard, jixryo_evidence.microfibercloth, jixryo_evidence.blox.

State and metadata.

WhereKeyWhat it carries
GlobalStatejxPlacardsEvery placard on the ground: id, number, place, heading.
A player's statejxGsrSet by the server while they carry gunshot residue.
A player's statejxBareSet by their own game: their hands are bare.
A pieceevidenceIts code, E-0012.
A bagcontainer, weight, sealed, bag, opened, tornIts contents' weight, its code B-0004 once sealed, and how a seal was broken.
A seized itemseizedPolice's { by, at, from } once its bag is sealed.
An SD cardphotosThe ids of the photos on it.
A gunprintsThe fingerprint ids of bare-handed shooters, read by the lab.

Client events a resource may raise: jixryo_evidence:camera (raise or lower the camera), jixryo_evidence:review (the SD card review), jixryo_evidence:wipe and jixryo_evidence:bleach (what the cloth and the bleach do), and jixryo_evidence:bagSeal / jixryo_evidence:bagBreak with a slot (what the bag's inventory buttons do).

Commands and keybinds

CommandWhoWhat
/book [id]On-duty police at a booking stationThe picker, or straight to that server id. The name is Config.booking.command.
/booktest [id]Staff with an ACE in Config.booking.test.acesA test booking of yourself (or someone), anywhere, that leaves no record.
/placardsOn-duty policePicks up every placard within 20 metres. The name is Config.placards.clear.
KeyDefaultDoes
Switch the lightUWhite or UV, with the UV light item, while holding the flashlight. Rebindable.

While holding a flashlight: E collects the mark the beam points at, or picks up a placard at your feet; H puts a placard beside the mark, or where the light hits the ground. On the camera: scroll or the arrows adjust the setting, Q / E pick it, M the mode, right-click autofocus, left-click shoots, G grid, F flash, T stamp, TAB the photos, Esc lowers it. On the logging page, the lab, the picker and booking: W / S step, ENTER next or confirm, Esc leaves; on the booking, SPACE scans the next finger and takes the mugshot, hold E swabs, A / D picks the mugshot side, and clicks pick charges and property.

Configuration

Everything is in config.lua.

SettingDefaultWhat it does
Config.itemsevidence_ziploc, evidence_tweezers, filled_evidence_bag, dnatestkit, fingerprintkit, fingerprinttape, gsrtestkit, microfibercloth, blox, nikon, sdcard, uv_flashlight, the flashlight weaponThe item names.
Config.kindscasing 2 h, blood 1 h, DNA 2 h, printsEach kind's lifetime, what collecting it uses up, the tool it needs and the hold: casing 5200 ms with tweezers, blood and DNA 5600 ms with a swab kit.
Config.piecesevidence_casing, evidence_swab, evidence_lift, evidence_gsrThe item each kind becomes in the bag.
Config.collectthe medic kneel, pick 0.45, into 0.75The kneel, when the casing comes up and goes in, and the tweezers, swab, bag and casing props.
Config.bags10 slots, 2500 g, label 3000 + 700 ms per item, seal 2500 ms, break 1500 msThe bag's size (keep it equal to the inventory's container), the logging times, ten incidents, four recovered-from choices, text lengths, the writing and sealing clips and props, and who breaks a seal as police (job type leo, on duty).
Config.worldspawn 40 m, query 90 m, moved 30 m, max 80The brass everyone sees.
Config.view, Config.reach18 m, 26 degrees, near 2.2 m, refresh 900 ms; reach 2.4 mHow far and how wide the beam sees, and how close you collect.
Config.casings0.85 per shot, 1.4 m spread, 120 msWhat shooting leaves.
Config.bloodcooldown 2500 ms, trail under 140 health every 6000 msWhat getting hurt leaves.
Config.dnaItemscigarette, cigarettes, water, ecola, sprunk, beerUsing these leaves DNA.
Config.vehiclePrints, Config.weaponPrints6 per plate, quality 35 to 92; 3 per gunHow many prints a car or a gun holds.
Config.bareHandsGTA's freemode armsThe arm variations that count as bare hands, for men and women. Add your add-on arms.
Config.gsr1800 sHow long residue tests positive.
Config.cleaningradius 4.0 m, bleach 7000 ms, wipe 4000 ms, leaves 0.4Bleaching and wiping.
Config.placardsscene 40 m, max 60, 3 h, reach 3.0, draw 60 m, job type leo on duty, /placards within 20 mThe placards.
Config.lockersjx_evidence_mrpd, 200 slots, 500 kg, police, sealed onlyThe evidence lockers.
Config.camera250 photos a card, 800 ms between shots, fivemanage, hosts fivemanage.com and r2.fivemanage.com, quality 0.88, lenses 24 to 200 mmThe camera, the timecycles behind exposure, grain and white balance, and which placards count as in the frame (20 m, 0.03 from the edge).
Config.lab12 points, 8000 ms on a print, quality 45, DNA 180 s, ballistics 6000 ms, 2 decoysThe lab stations and benches.
Config.bookingreach 6.0 m, nearby 15 m, restrained only, 350 ms a finger, reductions 0 / 10 / 25 / 50, notes 600, resume 10 min, /book, /booktestThe booking stations (desk, stand, camera), the picker, test bookings (the ACEs group.god, group.admin, command, jixryo.evidence.test, anywhere), the portable booth, the ID board and the department name.
Config.penalCode14 chargesCode, label, months, fine and kind. Replace it with yours.
Config.staffAcegroup.god, group.admin, jixryo.evidence.adminReserved for the staff tools to come.

Security

  • Marks live on the server. A player's game gets only the marks near it while it holds a flashlight, and cleaned blood only with the UV light item. Whose blood, which print and which serial stay in the database; a piece carries only its code, and a casing on the ground sends only its place to the players near it.
  • Shots are checked against the real weapon: the gun in your hands by the inventory, really held, and the casing placed from your server position. Blood and prints are rate-limited and placed by the server.
  • Collecting is checked twice: when you kneel (the kit, the tool, bag room, nothing used up yet) and when you finish (the server's minimum time, everything again). Only then is anything used up.
  • Sealing checks that the bag is still in your hands with exactly what the page showed, that the form is signed with your own name and names a case the MDT has, and that the label and seal took their time. A sealed bag cannot be opened, and every broken seal is written down.
  • Photos. The Fivemanage token never leaves the server: the game uploads to a one-time link, and the saved address must be on Fivemanage's hosts. A photo's placards are checked to be real and near the photographer. Photos marked as evidence stay on record even when deleted from the card.
  • The lab knows nothing on the client. The page gets a drawing seed and the people the search turns up, never whose print it is. Confirming checks the person, the twelve points and the time on the bench on the server; ballistics compares serials on the server. Evidence must be in your pockets or an open bag, at a station, on duty.
  • Booking happens only at a desk, on duty, with the person within reach however they were picked; one officer per person; the scan must take at least ten fingers' time; the swab uses a kit; months and fines are added up on the server from the penal code; the reduction must be one on offer; seized items must be in their pockets; mugshot addresses must be on Fivemanage's hosts. Test bookings need a test ACE and write nothing to records.
  • Two things only the player's own game can tell: bare hands (GTA's clothing natives run only there) and washing residue off in water.
  • Every action is audited through Core's log.

Tests

Two suites run the real server code in real Lua 5.4 on a stand-in server, 19 tests in all, every one passing on 2026-10-31:

  • 9 on bags, casings and placards: a shot's casing told to the players near and no further, and only its place; collecting with tweezers and room, nothing used up when it fails, the hold as the server's minimum; a full bag refusing before a kit is used; placards police only, the lowest free number per scene, staying after collection; a photo marking evidence photographed in place; sealing with the form checked, the time taken, seized items given records and everything linked to the case; a sealed bag staying shut, opened by police or torn by anyone else, both written down; the locker taking sealed bags only; the lab working an open bag and refusing a sealed one.
  • 10 on booking: the picker by nearby, server id, character id and name; the checks on starting; test bookings allowed by group.admin through Core's permission module and leaving no record; carrying a booking on and its time-out; prints catching a false identity; seizing property into the locker; the reduction and the prison, release and hold outcomes.

Check it in game

  1. Fire a pistol on the street: brass lands and everyone near sees it. With a flashlight the casing shows in the beam; with tweezers and a bag, E kneels, picks it up in the tips and bags it. The bag holds "E-0001 · Casing · Pistol" and weighs 12 g more.
  2. H by a casing puts placard 1 down, the next placard is 2. Collect the casing: the placard stays. /placards picks them all up.
  3. Get shot: blood on the ground and a trail while you walk hurt. Swab it. Bleach it: gone in white light, glowing "cleaned" under U with the UV light.
  4. Raise the camera over two placards in Evidence mode: the viewfinder names them in frame. Shoot, then collect the casing by placard 1: its logging line says "photographed in place". Seal and log the bag with a case from the MDT: it reads "Evidence B-0001 · sealed", and the MDT shows the bag's log on each record.
  5. Book a cuffed player at the desk: ten fingers ("first prints on file"), a cheek swab, three mugshots, seize their gun and seal the rest, pick charges, 25% off, Hold. Esc halfway and open it again: it carries on. Alone, /booktest runs every step anywhere and leaves nothing in the MDT or on your record.
  6. At the lab: a print lift from a car matches the person who drove it bare-handed and was printed at booking; the blood swab names them after three minutes; the casing lines up with their pistol and not with another.
Next step

Ready to look around?

Browse the suite, or paste your server.cfg and see what each script does to your server.