How Integrations Work#
Crime Creator reaches every third-party resource through a bridge: a small, unencrypted file per resource under client/custom/, server/custom/ or custom/. When the resource starts it looks at what is already running and turns on the matching bridge; every other bridge stays idle.
Layer | Supported | Without it |
|---|---|---|
Framework |
| Required. The resource stops with an error. |
Inventory |
| A standalone fallback that warns in the console. Not meant for a live server. |
Vehicle keys | 14 key systems — see below. | Garage, laundering and theft vehicles are handed over without keys. |
Clothing | 15 clothing systems — see below. | A built-in outfit menu (ESX datastore / qb-clothing outfits). |
Ambulance | 10 medical systems — see below. | Deaths are not detected for PvP penalties and illegal medic revives. |
Dispatch |
| No police alerts from drug sales or vehicle theft. |
Target |
| [E] prompts on screen (the default). |
Weather sync |
| The weather inside shell headquarters may change with the outside. |
UI helpers |
| ox_lib text UI and progress circles. |
Database |
| Required. |
Detection only sees resources that are already started. Anything you want found must be above
ensure qs-crime-creatorinserver.cfg.
Overriding Detection#
Each layer is a table in config/main.lua that maps a resource name to a bridge. If two candidates run at the same time, or a resource has been renamed on your server, replace the detection line with the bridge name:
-- Auto, the default: the first started resource in the table is used.
Config.Inventory = DependencyCheck(inventories) or 'standalone'
-- Manual: always use this bridge.
Config.Inventory = 'ox'
Config.Vehiclekeys = 'qs-vehiclekeys'
Config.Wardrobe = 'illenium-appearance'
Config.Ambulance = 'qs'
Config.Dispatch = 'qs-dispatch'A resource renamed on your server is fixed the same way, by adding its folder name to the table: ['my-inventory'] = 'ox'.
Supported Resources#
Inventories — Config.Inventory
Resource | Bridge |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
The inventory opens organization stashes, the player's inventory when stealing, and feeds the black market.
Vehicle keys — Config.Vehiclekeys
qs-vehiclekeys · qb-vehiclekeys · qbx_vehiclekeys · wasabi_carlock · MrNewbVehicleKeys · mVehicle · F_RealCarKeysSystem · fivecode_carkeys · glfp10_carkeys · jc_vehiclekeys · mono_carkeys · ti_vehicleKeys · vehicles_keys · xd_locksystem
The bridge name is the resource name. With none, the value is none.
Clothing — Config.Wardrobe
qs-appearance · illenium-appearance · fivem-appearance · qb-clothing · codem-appearance · ak47_clothing · raid_clothes · rcore_clothes · rcore_clothing · origen_clothing · sleek-clothestore · tgiann-clothing · p_appearance · 0r-clothingv2
A bridge for mAppearance ships too but is not auto-detected — set Config.Wardrobe = 'mAppearance' by hand. With none, the default menu is used (on ESX it needs the crime_house datastore from esx.sql).
Ambulance — Config.Ambulance
Resource | Bridge |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dispatch — Config.Dispatch
qs-dispatch alerts the police, sheriff, traffic and patrol jobs with a blip; qb-policejob uses its own police alert. For any other dispatch, fill in PoliceDispatch(alert) in client/custom/dispatch/standalone.lua.
The police jobs counted for Config.RequiredCops are listed in Config.PoliceJobs.
Kills in Territory Wars#
Every server reports deaths differently, so Crime Creator does not guess. To make kills count in territory wars — on the classic score and in Kills war requests — call one export from your death event, on the server:
-- custom/esx/server.lua (an example is already there, commented out)
AddEventHandler('esx:onPlayerDeath', function(data)
local victim = source
local killer = data and data.killerServerId
if killer and type(killer) == 'number' and killer ~= victim then
exports['qs-crime-creator']:TerritoryWarOnPlayerKilled(killer, victim)
end
end)-- From your hospital / death handler, on the server:
exports['qs-crime-creator']:TerritoryWarOnPlayerKilled(attackerSource, victimSource)The kill only counts when killer and victim belong to the two organizations at war and the victim is inside the contested territory. The export returns true when it was credited.
Notifications, Text and Progress Bars#
All three live in custom/client.lua:
Notifications use the script's own toasts. Ready-made
qs-interfaceandox_libversions are in theNotificationfunction, commented out — uncomment the one you want. Other scripts can trigger them with thecrime:notificationevent.Text prompts use
qs-textuiwhen it is running, ox_lib otherwise.Progress bars use
qs-interfacewhen it is running, ox_lib's progress circle otherwise.The F4 interaction menu — its options, order and icons — is in the same file.
Optional Extras#
Resource | What it adds |
|---|---|
| The IPL headquarters and their themes. |
| The phone charging point in headquarters, and the gang data the phone's crime app reads. |
| Door and doorbell sounds. Turn off with |
| Set |
Discord Logs#
Paste a webhook URL per category in server/webhooks.lua. A category left empty is simply not sent.
Category | What goes there |
|---|---|
| Admins creating, editing and deleting organizations, territories, taxing points, store vehicles, the season pass and PvP battles. |
| Every graffiti sprayed and removed. |
| Vehicles bought from the organization vehicle store. |
| Deaths inside a PvP battle zone. |
| Final standings of each PvP battle. |
-- server/webhooks.lua
Config.ShowWebhookIP = false
_G['webhook'] = {
graffiti = '',
creator = 'https://discord.com/api/webhooks/...',
vehicle_purchase = 'https://discord.com/api/webhooks/...',
pvp_death = '',
pvp_battle_end = 'https://discord.com/api/webhooks/...'
}Logs are queued and sent in batches so Discord never rate-limits them. Players' IP addresses are hidden unless you enable Config.ShowWebhookIP.
Languages#
41 translations ship in locales/: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi and zh. Set Config.Locale in config/main.lua. Any line missing from your language falls back to English, with a console warning naming it.
Money in the interface is formatted with Config.Intl — set locales (for example es-ES) and currency (for example EUR) to match your server.



