Installation
Requirements
ox_liboxmysqlqbx_core,qb-coreores_extended- A supported inventory (see Works with)
- Optional:
kartik-doj-props(courtroom TVs),kartik-mdt(MDT V2, 2.4.0+ for the tablet app), a prison (rcore_prison,dynyx_prison,tk_jail,xt-prison,qb-prisonoresx_jail),ox_doorlock,pma-voice,kartik-evidence, a dispatch, phone and banking resource
Steps
- Download
kartik-dojjobandkartik-doj-propsfrom your Cfx portal. - Put both in your resources folder.
- Start them after your framework, inventory and MDT in
server.cfg, with the props before the job:
ensure ox_lib
ensure oxmysql
ensure qbx_core
ensure ox_inventory
ensure kartik-mdt
ensure kartik-doj-props
ensure kartik-dojjob- Add the items (below).
- Start the server. The database tables (
kdj_*) are created by themselves, the starter jobdojis created in your framework and an empty "Los Santos Courthouse" is added. - Join as an admin and follow First Setup.
kartik-doj-props needs a full server restart the first time: a .ytyp is not picked up by a resource restart. Without it the base-game TV is used.
Items
| Image | Item | What it is |
|---|---|---|
![]() | doj_badge | Taken at a duty clock, shown as a card with the current rank |
![]() | bar_license | Issued after a passed bar exam, shown as a card |
![]() | court_document | Every printed document (subpoenas, orders, permits, certificates) |
![]() | court_claim_ticket | Given at the weapon check-in desk |
![]() | doj_tablet | Only needed when you turn on the tablet item |
The images are in the [Item Images] folder of your download. Copy them to your inventory's image folder (ox_inventory: web/images/, qb-inventory: html/images/).
Copy the block for your inventory:
Paste into ox_inventory/data/items.lua, inside the returned table:
['doj_badge'] = { label = 'DOJ Badge', weight = 100, stack = false, close = true, description = 'Department of Justice identification' },
['bar_license'] = { label = 'Bar License', weight = 50, stack = false, close = true, description = 'San Andreas Bar Association membership card' },
['court_document'] = { label = 'Court Document', weight = 20, stack = false, close = true, description = 'An official court document' },
['doj_tablet'] = { label = 'DOJ Tablet', weight = 500, stack = false, close = true, description = 'Court records, cases and warrants on the go' },
['court_claim_ticket'] = { label = 'Weapon Claim Ticket', weight = 10, stack = false, close = true, description = 'Collect your checked-in weapons at the courthouse desk' },Kartik MDT
With Kartik MDT V2 running, the DOJ shares court cases, warrants and criminal records with the police, and the DOJ tablet becomes a DOJ app inside the MDT. See The DOJ Tablet.
| Setting | Effect |
|---|---|
Config.MdtResource = 'kartik-mdt' | The resource name your MDT runs under |
Config.CaseStore = 'auto' | Cases, records and warrants in the MDT's tables when it runs, else in the DOJ's own tables |
Config.CaseStore = 'mdt' | Always the MDT's tables |
Config.CaseStore = 'standalone' | Always the DOJ's own kdj_ tables (any other MDT) |
Pick a case store and keep it. Switching later does not move existing cases. For 'auto', start the MDT before kartik-dojjob.
Language
The language comes from ox_lib: add setr ox:locale "en" to server.cfg. Locale files are in locales/. Copy en.json to your language code (for example de.json) and translate the values.
Database
Everything is created on first start and kept up to date by migrations. The main tables:
| Table | What it holds |
|---|---|
kdj_courthouses | Courthouses and their placed points |
kdj_court_cases, kdj_case_meta, kdj_case_stages | Cases (standalone store), their type, court and stage |
kdj_criminal_records, kdj_warrants | Records and warrants (standalone store) |
kdj_sessions | Court sessions and transcripts |
kdj_case_counsel, kdj_exhibits, kdj_exhibit_log | Counsel, exhibits and chain of custody |
kdj_subpoenas, kdj_motions, kdj_orders | Subpoenas, motions and court orders |
kdj_templates, kdj_documents | Document templates and written documents |
kdj_jurors, kdj_jury_summons | Jury pool and summons |
kdj_bar_members, kdj_bar_attempts, kdj_bar_questions, kdj_retainers | Bar association |
kdj_appointments, kdj_forms, kdj_permits | Kiosk requests, forms and permits |
kdj_supervision, kdj_lawyer_requests | Probation, parole, community service and lawyer calls |
kdj_duty_log, kdj_transactions, kdj_audit_log | Hours, department account and audit log |
kdj_settings | Changes made in /dojadmin |




