How Integrations Work#
Everything that depends on another resource sits behind a small, unencrypted bridge file in client/custom/, server/custom/ or custom/. At start, config/main.lua looks at which supported resources are running and picks the matching bridge:
Layer | Supported | Without it |
|---|---|---|
Framework | es_extended · qb-core · qbx_core | Required — the resource will not start. |
Inventory | qs-inventory · qb-inventory · ox_inventory · tgiann-inventory · origen_inventory | No stash, no shop, empty item picker in the creator. |
Target | ox_target · qb-target | Set |
Vehicle keys | qs-vehiclekeys · qb-vehiclekeys · qbx_vehiclekeys · wasabi_carlock · MrNewbVehicleKeys · F_RealCarKeysSystem · fivecode_carkeys · glfp10_carkeys · mono_carkeys · ti_vehicleKeys · vehicles_keys · xd_locksystem | Garage vehicles and wheelchairs spawn without keys. |
Fuel | qs-fuelstations · LegacyFuel · ox_fuel · cdn-fuel · ps-fuel · lj-fuel · okokGasStation · esx-sna-fuel · ti_fuel · BigDaddy-Fuel · lc_fuel (manual) | The native fuel level is set. |
Clothing | qs-appearance · illenium-appearance · fivem-appearance · qb-clothing · codem-appearance · ak47_clothing · raid_clothes · rcore_clothes · rcore_clothing · sleek-clothestore · tgiann-clothing · p_appearance · mAppearance (manual) | QBCore opens qb-clothing; ESX opens a saved-outfits menu from esx_datastore. |
Boss menu | esx_society · qb-management | The boss point says the system is not supported. |
Billing | esx_billing · qb-billing · qs-billing · okokBilling | The Bill action shows an error. |
Dispatch | origen_police · emergency_dispatch | Only the built-in Dispatch list in the EMS menu. |
Phone | qs-smartphone-pro · qs-smartphone · lb-phone | Only used when phone distress is turned on. |
Insurance | m-Insurance | No check-in discount. |
Interface | qs-interface · qs-textui | Built-in notifications, ox_lib text UI and progress circle. |
Run one resource per layer. With two key systems or two inventories started, either one may be picked. Detection only sees resources started before
qs-medical-creatorinserver.cfg.
Frameworks#
es_extended loads the ESX bridge; qb-core and qbx_core load the QBCore bridge, which Qbox uses through its QBCore compatibility. The bridges live in custom/esx/ and custom/qb/ and hold every framework call: money, items, jobs, names, admin checks and the dead flag.
Feature | ESX | QBCore / Qbox |
|---|---|---|
Dead state saved in |
| metadata |
Duty | Job swap with | The job's on-duty flag |
Boss | Grade name | Grade with |
Admin | Groups |
|
On revive | Resets esx_basicneeds | Resets hunger, thirst and stress |
Extra commands |
|
|
Renamed your framework resource? Replace the detection with the value by hand — Config.Framework = 'esx' or 'qb' — and point the bridge's exports['es_extended'] / exports['qb-core'] line at the new name.
Inventories: Stash and Shop#
The inventory decides how the EMS stash and the pharmacy open, and feeds the creator's item picker with names and pictures. The stash is personal to each medic.
Inventory | Stash | Pharmacy |
|---|---|---|
| Yes | Through |
| Yes | The inventory's shop. |
| Yes — registered on first use | An ox_lib menu; each purchase takes cash and gives one item. |
| Yes | The inventory's shop. |
| Yes | Not included — add an |
Stash size comes from Config.DefaultStashData. Running without a supported inventory is possible for testing, but the console warns every few seconds — it is not meant for a live server.
Target and Prompts#
With Config.UseTarget = true, every hospital point and the medical bag become target options — through ox_target when it runs, otherwise qb-target. The box size is Config.TargetWidth × Config.TargetHeight, and Config.ZoneDebug draws them. With false, each point is a floating prompt used with E — drawn by qs-textui if it runs.
Notifications, Text UI and Progress Bars#
If qs-interface is running, its notifications and progress bars are used; otherwise Medical Creator shows its own toasts and the ox_lib progress circle. qs-textui replaces the ox_lib text UI the same way. All of it is in custom/client.lua — swap a function there to use another notification or progress resource.
Billing#
The Bill action asks the medic for an amount and invoices the closest player:
Resource | What happens |
|---|---|
| An invoice to |
| An invoice to |
| A custom invoice for the |
| The amount is charged from the patient's bank straight away and paid into the job's qb-management account. |
Dispatch and Phone Alerts#
When a downed player presses G, three things can happen:
Built-in: on-duty medics are notified and the call is listed under Dispatch in the EMS menu. Always on, unless phone alerts replace it.
Dispatch resource: with
origen_policeoremergency_dispatchrunning, an "injured person" alert with the location is sent there too. The text is inclient/custom/dispatch/.Phone: with
Config.UsePhoneDistressSignal = true, a job alert with the location goes to every job inConfig.Jobson qs-smartphone, qs-smartphone-pro or lb-phone, instead of the built-in list.
Clothing, Keys and Fuel#
The wardrobe point opens your clothing script's outfit menu. Garage vehicles and wheelchairs get keys through your key system and a full tank through your fuel script. Each bridge is one file in client/custom/wardrobe/, vehiclekeys/ or fuel/. lc_fuel and mAppearance have bridges but are not detected — set them by hand (see below).
Health Insurance#
With m-Insurance running, a player with valid health insurance pays less to check in:
Config.InsuranceDiscount = {
checkIn = 0.5, -- 50% off the check-in price
}Another insurance script plugs in through server/custom/insurance/: one HasHealthInsurance(source) function that returns true or false.
Discord Logs#
Four channels, each with its own webhook in server/webhooks.lua. Leave one empty to turn it off.
Channel | What goes there |
|---|---|
| Every death: killer and victim, weapon and cause, or suicide — with a screenshot of the victim. |
| Admin revives with |
|
|
| Hospitals created, edited and deleted, and by whom. |
-- server/webhooks.lua
Config.ShowWebhookIP = false -- true shows the player's IP in each log
_G['webhook'] = {
revive = 'https://discord.com/api/webhooks/...',
heal = '',
death = 'https://discord.com/api/webhooks/...',
creator = 'https://discord.com/api/webhooks/...'
}
_G['fivemanage'] = {
webhook = '' -- your FiveManage API token, for screenshots
}Each log names the player with their server id and every identifier (Steam, Discord, license, FiveM). Screenshots need screenshot-basic running and a FiveManage token. Logs are queued, so a burst of deaths never hits Discord's rate limit.
Maps and bob74_ipl#
Medical Creator works in any hospital MLO — draw the zone around it and place the beds on its own bed props. If bob74_ipl is running, its Pillbox interior is switched off a few seconds after start, and again whenever bob74_ipl restarts, so it never overlaps the bundled hospital_map or your MLO.
Overriding Detection#
Each layer in config/main.lua is a list of resource names and the bridge each one picks. To force one, replace the detection with the bridge's value:
-- Auto, the default: the first started resource in the list wins.
Config.Fuel = DependencyCheck(fuels) or 'standalone'
-- Pinned by hand:
Config.Fuel = 'lc_fuel'
Config.Wardrobe = 'mAppearance'
Config.Inventory = 'ox_inventory'This is worth doing when two candidates run at once, when a resource was renamed, or for a bridge that ships without auto-detection.
Adding Your Own#
Supporting a resource that is not listed takes one file and one line:
Copy the closest bridge
Duplicate a file in the same folder — for example
client/custom/fuel/LegacyFuel.lua— and name it after your resource.Change the guard and the calls
The file opens with a guard such as
if Config.Fuel ~= 'LegacyFuel' then. Put your value there, then replace the exports inside each function with your resource's.Register it
Add
['my_fuel'] = 'my_fuel'to the matching list inconfig/main.lua, or pin it as shown above, and restart.
The functions each kind needs:
Kind | Folder | Functions |
|---|---|---|
Fuel |
|
|
Keys |
|
|
Clothing |
|
|
Inventory |
|
|
Boss menu |
|
|
Dispatch |
|
|
Phone |
|
|
A different target resource is wired in client/custom/target/main.lua, and a different framework by duplicating custom/esx/ or custom/qb/.
Languages#
27 translations ship in locales/. Set Config.Locale to one of:
ar · bg · ca · cs · da · de · el · en · es · fa · fr · hi · hu · it · ja · ko
nl · no · pl · pt · ro · ru · sl · sv · th · tr · zh-CNA missing text falls back to English, so a partial translation never breaks the interface. For a new language, copy locales/en.json to a new code, translate it and set Config.Locale to that code.



