Installation
Follow the steps below in order: dependencies → SQL → permissions → ensure order → configure.
1. Install required dependencies
Make sure these resources are installed and up to date:
| Resource | Required |
|---|---|
| oxmysql | Yes |
| ox_lib | Yes |
| screenshot-basic | Yes |
ESX (es_extended) or QBCore/QBox (qb-core / qbx_core) | Yes (runtime) |
Optional inventory resources can be auto-detected with Config.Inventory = 'auto'. Select an optional notification backend explicitly with Config.Notify. See Dependencies.
2. Add the resource
Place the leno_reports folder in your server resources directory (for example inside a [leno] group).
Do not rename the resource folder — anti-cheat whitelists and state bags use the name leno_reports.
3. Import the database
Run sql/install.sql once against the same database your oxmysql connection uses (HeidiSQL, phpMyAdmin, etc.).
WARNING
Core report tables are not auto-created at runtime. If you skip this step, create/queue queries will fail. Staff-chat tables can self-heal, but the main schema cannot.
This creates:
leno_reportsleno_report_messagesleno_report_participantsleno_report_player_snapshotsleno_report_timeline_eventsleno_report_readsleno_staff_chat_messagesleno_staff_chat_readsleno_staff_duty
Use the supplied sql/install.sql; there is no separate sql/staff_chat.sql in this package. Staff-chat tables can also be created at runtime as described above.
4. Configure ACE permissions
Add to server.cfg (adjust group / identifiers to match your server):
cfg
add_ace group.admin reports.admin allow
add_principal identifier.license:YOUR_LICENSE group.adminDefault ACE string: reports.admin (Config.Permissions.admin).
Staff is also granted if the framework reports admin (QB god/admin, ESX group admin/superadmin). Override via ReportsHooks if needed — see Exports and Events.
5. Set Discord webhooks (recommended)
Webhook URLs must live in server.cfg convars, never in config.lua:
cfg
set leno:discord_webhook "https://discord.com/api/webhooks/..."
set leno:discord_images_webhook "https://discord.com/api/webhooks/..."| Convar | Purpose |
|---|---|
leno:discord_webhook | Action logs (created, claimed, closed, goto, …) |
leno:discord_images_webhook | Screenshot uploads |
Then enable/tune events in Config.Discord — see Configuration.
6. Start order in server.cfg
cfg
ensure oxmysql
ensure ox_lib
ensure screenshot-basic
ensure es_extended
# optional inventory / notify resources...
ensure leno_reportsINFO
This example uses ESX. For QBCore replace ensure es_extended with ensure qb-core; for QBox use ensure qbx_core. Start your selected framework and optional inventory/notification resources before leno_reports. framework is a placeholder, not a resource name to copy into server.cfg.
7. Configure and restart
- Edit
config.lua(escrow-ignored) — categories, limits, UI commands, Discord event flags, actions. - Restart the server (or
ensure leno_reportsafter dependencies). - In-game:
/report(player) and/reports(staff) — defaults; see Commands.
Anti-cheat note
Staff goto / bring / freeze teleport and freeze the player entity. Whitelist the resource name leno_reports in your anti-cheat panel (ElectronAC, WaveShield, FiveGuard, etc.). Teleports are server-validated; the client applies coords/freeze only after the server says so.
Verify install
| Check | Expected |
|---|---|
| Resource starts | No framework / SQL errors in console |
/report | Opens player UI |
/reports as staff | Opens staff UI |
| Create a test report | Row appears in leno_reports |
| Screenshot (if enabled) | Image appears via Discord images webhook |
If something fails, see FAQ / Troubleshooting.
Continue with the User Guide. Staff should switch On Duty in the sidebar to receive report notifications with the default settings. See Customization for languages, categories, theme changes, and integrations.
