Skip to main content
The sh-doctorjob resource delivers a complete medical profession to your RedM server. It covers the full player life cycle — from a configurable bleedout and death system through item-based treatments to NPC fallback services — while giving on-duty doctors a management panel, boss menu, society-ledger integration, and per-clinic storage. Three regional clinic jobs (doctor, doctorR, doctorS) and a shaman variant are supported out of the box, each with their own hospital location, duty station, NPC, and storage. The resource supports both VORP and RSG frameworks.

Framework Support

sh-doctorjob supports both VORP and RSG frameworks. Set the framework in your server-side config before starting the resource:
config/main.lua
Config.Framework = 'auto'  -- 'auto', 'vorp', or 'rsg'

Supported Jobs

sh-doctorjob is multi-job aware. All of the following job names are recognized as medical staff out of the box:
JobDefault location
doctorValentine Clinic
doctorRRhodes Clinic
doctorSStrawberry Clinic
medicAny clinic
shamanShaman-specific alerts and locations
You can add or remove jobs from Config.Jobs and configure which jobs receive doctor alerts versus shaman alerts separately.

Features

sh-doctorjob includes a full server-authoritative death handler. When downed, players enter a bleedout state for a configurable duration (Config.Death.BleedoutMs, default 15 seconds) during which they can be revived by a doctor. A free-roam camera lets downed players observe the scene. After bleedout ends, players either wait for a doctor during the revive window (Config.Death.ReviveWindowMs, default 5 minutes) or respawn manually. A deathscreen overlay with Call Doctor and Respawn buttons is optionally available.Set Config.Death.Enabled = false when using your own death handler.
Doctors toggle duty at a configured station inside their clinic using the [G] key by default. Only on-duty doctors appear in dispatch alerts and unlock restricted interactions. Duty state resets on disconnect. Each hospital entry in Config.Hospitals provides the dutyStation coordinates for its clinic.
On-duty doctors use inventory items to treat patients. Each item is defined in Config.Items.Catalog with a class of treatment or revive, a use duration, health and core restoration values, disease cure probabilities, and optional job restrictions. Default items include:
ItemClassEffect
bandagestreatmentStops bleeding, restores health and core
splintstreatmentApplies a splint to reduce movement for fracture recovery
antibiotictreatmentCures cold
antipoisontreatmentCures snake bite
cool_ragtreatmentCures heat stroke
syringereviveRevives a downed player (restricted to doctor/shaman jobs)
firstaidkitreviveRevives a downed player (restricted to doctor/shaman jobs)
sh-doctorjob tracks diseases per character. Treatments have configurable cure probabilities for each disease type. Diseases persist through death and respawn unless Config.Death.RespawnRemoveDiseases is enabled. The Medical Dashboard UI (/medui or via the doctorfieldkit item) gives on-duty doctors a full view of a patient’s active conditions.
Each hospital has an optional NPC doctor (Config.Hospitals[*].npc) that provides heal and revive services when no player-doctors are on duty. The NPC can be disabled when doctors come online (disableWhenDoctorsOnline = true). A configurable percentage of each NPC service payment is deposited into the clinic’s boss menu ledger (Config.NpcService.Ledger.DepositPercent, default 100%).
When Config.NPCRevive.Enabled = true, players can use /sendmedic to summon an NPC doctor to their location (blocked when any player-doctor is on duty by default). The NPC rides or walks to the downed player, plays a revive animation, and departs after a delay.
Players use /alertdoctor to broadcast their location to all on-duty doctors. Doctors see a blip on their map with the patient’s name. Shaman alerts route to the shaman job via /alertshaman. Alerts expire after Config.Alerting.BlipTimeoutSeconds (default 300 seconds).
Doctors with a minimum grade of Config.Management.MinGrade (default 3) access the boss menu via /docboss. The boss menu manages hiring, firing, promotions, and a clinic ledger. Automatic payroll pays on-duty doctors every Config.Payroll.IntervalMinutes (default 15 minutes) at per-grade salary rates defined in Config.Payroll.Jobs.
Each hospital can have a wagon spawn station (wagonStation) where on-duty doctors can spawn and use a medical wagon for field response.

Hospital Configuration

Clinic locations, NPC positions, duty stations, and respawn points are defined in config/hospitals.lua. Three clinics ship by default:
config/hospitals.lua
Config.Hospitals = {
    {
        id            = 'valentine',
        label         = 'Valentine Clinic',
        jobId         = 'doctor',
        coords        = vector3(-283.03, 806.52, 119.39),
        respawn       = vector4(-282.54, 805.89, 119.39, 96.18),
        dutyStation   = vector4(-289.41, 808.13, 119.38, 216.06),
        bossStation   = vector4(-289.41, 808.13, 119.38, 216.06),
        npc = {
            enabled                = true,
            model                  = 'u_m_m_valdoctor_01',
            coords                 = vector4(-288.05, 804.24, 119.39, 283.92),
            disableWhenDoctorsOnline = true,
            healCost               = 15,
            reviveCost             = 30,
            reviveTime             = 15,
        },
    },
    -- rhodes and strawberry entries follow the same structure
}
Add additional entries to support more clinic locations across the map.

Commands

CommandConfig keyDescription
/meduiOpenMedicalUiOpen the Medical Dashboard UI
/alertdoctorRequestDoctorHelpBroadcast a help alert to on-duty doctors
/alertshamanRequestShamanCommandBroadcast an alert to the shaman job
/responddoctorRespondHelpMark yourself as responding to an alert
/cleardoctoralertsClearHelpClear your active alert responses
/docbossBossMenuOpen the boss management panel
/docdutyToggleDutyToggle on/off duty state
/sendmedicConfig.NPCRevive.CommandRequest an NPC doctor dispatch

Payroll Configuration

Per-grade salaries are defined per job in Config.Payroll.Jobs. Payroll runs every Config.Payroll.IntervalMinutes minutes for all currently on-duty staff:
config/main.lua
Config.Payroll = {
    Enabled         = true,
    IntervalMinutes = 15,
    CurrencyRSG     = 'cash',
    CurrencyVORP    = 0,  -- 0 = cash, 1 = gold
    Jobs = {
        doctor = {
            [0] = 5,
            [1] = 10,
            [2] = 15,
            [3] = 20,
            [4] = 25,
            [5] = 30,
        },
        -- doctorR, doctorS, medic, shaman follow the same structure
    },
}

Discord Webhook Logging

sh-doctorjob logs to configurable per-channel webhooks defined in Config.Logging.Webhooks. Separate channels are available for revives, treatments, duty toggles, admin actions, boss actions, alerts, and wagon events:
config/main.lua
Config.Logging = {
    Enabled  = true,
    Username = 'DoctorJob Logs',
    Webhooks = {
        Default   = '',
        Revive    = '',
        Treatment = '',
        Admin     = '',
        Boss      = '',
        Duty      = '',
        Alert     = '',
        Wagon     = '',
    },
}

Installation

1

Add the resource

Copy the sh-doctorjob folder into your server’s resources directory.
2

Add to server.cfg

Ensure sh-doctorjob after your framework. If you use sh-society for the boss ledger, ensure it first:
server.cfg
ensure vorp_core    # or rsg-core
ensure sh-society   # optional, for boss ledger integration
ensure sh-doctorjob
3

Import the SQL files

Run the SQL files from the sql/ folder against your database to create the duty log, ledger, and patient records tables.
4

Register the doctor job

Add the doctor, doctorR, doctorS, medic, and shaman jobs (as needed) and their grades to your framework’s job registry.
5

Register medical items

Register each medical item (bandages, splints, syringe, firstaidkit, doctorfieldkit, etc.) as usable items in your framework’s item registry.
6

Disable framework death handler

If you are using VORP, set Config.UseDeathHandler = false in vorp_core/config/config.lua to hand death management to sh-doctorjob. Remove rsg_medic if it is running on RSG.
7

Configure hospitals and payroll

Edit config/hospitals.lua to set clinic coordinates, NPC positions, and duty station locations. Edit config/main.lua to adjust payroll rates, bleedout timers, and alert settings.
8

Restart and test

Start the resource, assign a character the doctor job, and clock in at the duty station. Down a test character and confirm the bleedout timer, doctor alert, and revive flow all work end-to-end.
Set Config.Death.Enabled = false if you are running a third-party death handler on your server. Running two death handlers simultaneously will cause conflicting downed states and unpredictable revive behavior.