sh-doctorjob resource delivers a complete medical profession for RedM servers. It supports VORP and RSG, server-side patient persistence, configurable downed and respawn flows, item-based treatments, disease and injury tracking, doctor dispatch alerts, NPC fallback services, boss management, society ledger integration, clinic storage, medical supply wagons, crafting stations, payroll, and Discord webhook logging.
Version 1.6.1 ships with five clinic locations: Valentine, Rhodes, Strawberry, Blackwater, and Armadillo. The default medical jobs are doctor, doctorR, doctorS, medic, and shaman.
Requirements
- RedM server using
fx_version 'cerulean'andgame 'rdr3' oxmysql, started beforesh-doctorjob- One supported framework:
- VORP
- RSG / RSG Core
- MySQL or MariaDB database access for
sql/install.sql - Framework job and item entries for the doctor jobs and medical items you enable
- Optional:
ox_targetfor third-eye interactions - Optional:
sh-societyorsyn_societyfor external ledger integration - Optional:
rsg-inventoryorvorp_inventoryfor framework stash support
sh-doctorjob.
Installation
1
Install dependencies
Install and verify your framework and
oxmysql. If you use target interactions, install ox_target.2
Add the resource
Copy the
sh-doctorjob folder into your server resources directory.3
Import persistence SQL
Run
sql/install.sql against your database. This creates patient state and internal ledger tables.4
Register medical items
For VORP, run
sql/items.sql against the framework items table. For RSG, copy the entries from sql/rsgitems.txt into your RSG shared item config.5
Register jobs
Add the medical jobs you want to use, such as
doctor, doctorR, doctorS, medic, and shaman, to your framework job registry with the required grades.6
Configure server.cfg
Start dependencies before
sh-doctorjob.server.cfg
7
Configure the script
Edit the files in
config/ for framework mode, jobs, hospitals, death handling, items, crafting, wagons, storage, webhooks, and integrations.8
Test the full flow
Assign a test character a doctor job, clock in at a duty station, open
/medui, down another test character, submit /alertdoctor, and confirm treatment, revive, respawn, payroll, and ledger behavior.Framework Support
Set framework detection inconfig/main.lua:
config/main.lua
auto unless your server needs a fixed framework mode.
Interaction Modes
sh-doctorjob can use target interactions, native RedM prompt groups, or 3D text prompts.
config/target.lua
auto if you want ox_target when available and prompt fallback when it is not.
Supported Jobs
Medical job access is configured inConfig.Jobs:
config/main.lua
config/main.lua
Features
Death, Bleedout, And Respawn
Death, Bleedout, And Respawn
The built-in death handler puts players into a downed state, starts a bleedout timer, supports a free-roam downed camera, and can show an optional NUI deathscreen with configurable buttons. Defaults are
Config.Death.BleedoutMs = 600000 and Config.Death.ReviveWindowMs = 480000.Patient State, Injuries, And Diseases
Patient State, Injuries, And Diseases
Patient state is saved by character in
sh_doctor_patients. The system tracks body-region injuries, bleeding, broken bones, cold exposure, heat stroke, and snake bites. Diseases can auto-heal, progress by stage, apply damage or hydration effects, and be cured through configured treatments.Medical Dashboard
Medical Dashboard
Doctors can open the dashboard with
/medui, at configured medical UI stations, or through the doctorfieldkit usable item. The UI shows patient injuries, diseases, and available medical actions.Treatment And Revive Items
Treatment And Revive Items
Items are configured in
Config.Items.Catalog. Default treatment items include bandages, splints, antibiotic, antipoison, and cool_rag. Default revive items are syringe and firstaidkit, restricted to doctor/shaman jobs.Duty System
Duty System
Doctors toggle duty at station points or with
/docduty. Server validation can require the player to be near a station. On-duty status controls dispatch visibility, restricted actions, payroll, storage access, and NPC fallback checks.Alerts And Shaman Alerts
Alerts And Shaman Alerts
/alertdoctor sends a medical alert to on-duty doctor jobs. /alertshaman routes to configured shaman jobs. Staff can respond with /responddoctor and clear alerts with /cleardoctoralerts.NPC Services
NPC Services
Static hospital NPC doctors can heal or revive players for a configured price. NPC service can be blocked while doctors are on duty, with an exception for doctor self-service. Optional ledger deposits send service revenue to the clinic ledger.
NPC Dispatch Revive
NPC Dispatch Revive
/sendmedic summons a traveling NPC doctor when Config.NPCRevive.Enabled = true. By default this is blocked when any doctor is on duty. The NPC can charge payment, spawn with a horse, approach the patient, play a revive animation, and leave after a delay.Clinic Storage
Clinic Storage
Clinic storage points use
Config.DoctorStorages. Storage can require on-duty status and supports RSG stash IDs, VORP inventory IDs, max weight, slots, job, and minimum grade.Crafting Stations
Crafting Stations
Doctor crafting is configured in
config/crafting.lua. Default recipes create bandages, splints, and firstaidkit, and can require doctor job, duty state, station proximity, job allowlists, blocked jobs, and minimum grades.Medical Wagons
Medical Wagons
Hospitals can define
wagonStation spawn points. Default wagon types are wagondoc01x with storage and buggy02 without storage. Wagon stash IDs can be personal per character or shared by wagon type.Discord Logging
Discord Logging
Config.Logging can log revives, treatments, admin commands, boss actions, duty toggles, alerts, and wagon events to per-channel Discord webhooks or a default webhook.Hospitals
Clinic locations are configured inconfig/hospitals.lua. The resource includes these default hospital IDs:
Example hospital entry:
config/hospitals.lua
Commands
Set a command to
nil in config to disable it where supported.
Keybind Defaults
config/main.lua
Items
Config.Items.RegisterAsUsable = true lets the script register framework usable item handlers automatically.
Medical item use runs a server precheck, optional client animation/progress UI, final server validation, item consumption, and treatment application.
Death Handling
Core settings live inconfig/death.lua:
config/death.lua
config/death.lua
request_help and respawn, or run custom commands with executeCommand.
Diseases And Injuries
Disease definitions live inconfig/diseases.lua.
Tracked body regions are
head, chest, abdomen, leftArm, rightArm, leftLeg, and rightLeg.
Boss, Ledger, And Society Integration
Boss access is controlled byConfig.Management:
config/main.lua
config/integration.lua:
config/integration.lua
internal to store balances in sh_doctor_ledger and sh_doctor_ledger_tx.
Payroll
Payroll pays on-duty doctors at a fixed interval:config/main.lua
Storage
Clinic storage is configured withConfig.DoctorStorage and Config.DoctorStorages.
config/main.lua
id, label, job, minGrade, pedModel, pedCoords, rsgStashId, rsgStashSize, and vorpInvId.
Crafting
Doctor crafting can require doctor job, duty state, and station proximity:config/crafting.lua
bandages, splints, and firstaidkit. Recipe-level restrictions can use allowedJobs, blockedJobs, minGrade, and minGradeByJob.
Wagons
Medical carts are configured inconfig/wagons.lua:
config/wagons.lua
Personal = true, wagon storage persists per character.
NPC Services
Static hospital NPCs are configured per hospital. Global NPC settings include:config/main.lua
config/main.lua
Admin Access
Admin commands useConfig.Admin:
config/main.lua
server.cfg
External Revive And Respawn
Use the built-in compatibility events/exports when another resource revives or respawns a player. Server events:Config.Integration.ExternalRevive and Config.Integration.ExternalRespawn.
Respawn payloads may include hospitalId, hospital, or direct coords/spawn data. If no location is provided, the script falls back to the nearest hospital.
Exports
Server exports:Database Tables
sql/install.sql creates:
sql/items.sql contains VORP item inserts. sql/rsgitems.txt contains RSG shared item definitions.
Localization
Set the active locale inconfig/main.lua:
config/main.lua
locales/en.lua, locales/es.lua, and locales/de.lua.
Discord Webhooks
Configure webhook logging inConfig.Logging:
config/main.lua