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
/placardsclears every one within 20 metres. - The camera (the
nikonitem): 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. /booktestbooks 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
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 piecesevidence_casing,evidence_swab,evidence_liftandevidence_gsr, and sells the bag and tweezers at both police armouries. With any otherox_inventory, add them the same way. Evidence also usesdnatestkit,fingerprintkit,fingerprinttape,gsrtestkit,microfibercloth,blox,nikonandsdcard.Point four items at Evidence. In the inventory's items, change the
server.exportofnikon,sdcard,microfiberclothandbloxfrom 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' },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.' },Photo uploads. Put a Fivemanage image token in
server.cfgwithset, neversetr, so it never reaches a player's game:server.cfg set jixryo_evidence_fivemanage "your-fivemanage-token"screenshot-basicmust be running. Without a token, photos are recorded with their settings but have no picture;Config.camera.upload = 'none'turns uploads off on purpose.Stations.
Config.lockers,Config.lab.stationsandConfig.booking.stationsare set for the Rockford station (theprompt_pdmap): 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. EditConfig.penalCodeto your penal code.Stop
r14-evidenceand take it out ofserver.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_evidenceIt needs
ox_lib,oxmysql,qbx_core,ox_inventory,ox_targetandjixryo_core. Police, MDT and Prison are found when they run.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_bagsandjixryo_evidence_placards. An update adds its columns the same way.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.
| Resource | What happens |
|---|---|
ox_inventory | The 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. |
| Police | Booking 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. |
| MDT | The 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. |
| Prison | A prison outcome calls JailPlayer(src, months, { by, booking }). The prison calls ReturnProperty at release. |
qbx_core | A 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-basic | Takes 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(...).
| Export | What 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.
| Where | Key | What it carries |
|---|---|---|
GlobalState | jxPlacards | Every placard on the ground: id, number, place, heading. |
| A player's state | jxGsr | Set by the server while they carry gunshot residue. |
| A player's state | jxBare | Set by their own game: their hands are bare. |
| A piece | evidence | Its code, E-0012. |
| A bag | container, weight, sealed, bag, opened, torn | Its contents' weight, its code B-0004 once sealed, and how a seal was broken. |
| A seized item | seized | Police's { by, at, from } once its bag is sealed. |
| An SD card | photos | The ids of the photos on it. |
| A gun | prints | The 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
| Command | Who | What |
|---|---|---|
/book [id] | On-duty police at a booking station | The picker, or straight to that server id. The name is Config.booking.command. |
/booktest [id] | Staff with an ACE in Config.booking.test.aces | A test booking of yourself (or someone), anywhere, that leaves no record. |
/placards | On-duty police | Picks up every placard within 20 metres. The name is Config.placards.clear. |
| Key | Default | Does |
|---|---|---|
| Switch the light | U | White 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.
| Setting | Default | What it does |
|---|---|---|
Config.items | evidence_ziploc, evidence_tweezers, filled_evidence_bag, dnatestkit, fingerprintkit, fingerprinttape, gsrtestkit, microfibercloth, blox, nikon, sdcard, uv_flashlight, the flashlight weapon | The item names. |
Config.kinds | casing 2 h, blood 1 h, DNA 2 h, prints | Each 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.pieces | evidence_casing, evidence_swab, evidence_lift, evidence_gsr | The item each kind becomes in the bag. |
Config.collect | the medic kneel, pick 0.45, into 0.75 | The kneel, when the casing comes up and goes in, and the tweezers, swab, bag and casing props. |
Config.bags | 10 slots, 2500 g, label 3000 + 700 ms per item, seal 2500 ms, break 1500 ms | The 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.world | spawn 40 m, query 90 m, moved 30 m, max 80 | The brass everyone sees. |
Config.view, Config.reach | 18 m, 26 degrees, near 2.2 m, refresh 900 ms; reach 2.4 m | How far and how wide the beam sees, and how close you collect. |
Config.casings | 0.85 per shot, 1.4 m spread, 120 ms | What shooting leaves. |
Config.blood | cooldown 2500 ms, trail under 140 health every 6000 ms | What getting hurt leaves. |
Config.dnaItems | cigarette, cigarettes, water, ecola, sprunk, beer | Using these leaves DNA. |
Config.vehiclePrints, Config.weaponPrints | 6 per plate, quality 35 to 92; 3 per gun | How many prints a car or a gun holds. |
Config.bareHands | GTA's freemode arms | The arm variations that count as bare hands, for men and women. Add your add-on arms. |
Config.gsr | 1800 s | How long residue tests positive. |
Config.cleaning | radius 4.0 m, bleach 7000 ms, wipe 4000 ms, leaves 0.4 | Bleaching and wiping. |
Config.placards | scene 40 m, max 60, 3 h, reach 3.0, draw 60 m, job type leo on duty, /placards within 20 m | The placards. |
Config.lockers | jx_evidence_mrpd, 200 slots, 500 kg, police, sealed only | The evidence lockers. |
Config.camera | 250 photos a card, 800 ms between shots, fivemanage, hosts fivemanage.com and r2.fivemanage.com, quality 0.88, lenses 24 to 200 mm | The 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.lab | 12 points, 8000 ms on a print, quality 45, DNA 180 s, ballistics 6000 ms, 2 decoys | The lab stations and benches. |
Config.booking | reach 6.0 m, nearby 15 m, restrained only, 350 ms a finger, reductions 0 / 10 / 25 / 50, notes 600, resume 10 min, /book, /booktest | The 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.penalCode | 14 charges | Code, label, months, fine and kind. Replace it with yours. |
Config.staffAce | group.god, group.admin, jixryo.evidence.admin | Reserved 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.adminthrough 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
- 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.
- H by a casing puts placard 1 down, the next placard is 2. Collect the casing: the placard stays.
/placardspicks them all up. - 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.
- 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.
- 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,
/booktestruns every step anywhere and leaves nothing in the MDT or on your record. - 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.