Configuration

38 min readUpdated Yesterday

Overview

Configuration is split by feature under shared/config/, plus a server-only file. There is no single shared/config.lua table; edit each value in its feature file.

text
1shared/config/
2├── core.lua          # Debug, Locale, Theme, native regen toggle
3├── blood_groups.lua  # Blood-type weights, compatibility modes and transfusion reactions
4├── vitals.lua        # MaxHealth, Blood, Armor, Wound levels, BloodTrails, Casts
5├── bodyparts.lua     # Single table for the 9 body parts
6├── diseases.lua      # Disease definitions, stages, contagion, treatments
7├── items.lua         # Medical items + XP cooldown
8├── anim_presets.lua  # Reusable animation presets referenced by items
9├── masks.lua         # Masks (item + drawable) and clothing protection
10├── effects.lua       # Visual effects, Voice, Flare, Vehicle crash, NPC behavior
11├── fractures.lua     # Fall-fracture chance + per-part fracture penalties
12├── integrations.lua  # Radiation, contact infection, LifePoints zones
13├── item_diseases.lua # Food/item → disease map
14├── lifecycle.lua     # Last stand + Death
15├── respawn.lua       # Spawn points, cinematic cam, bed, respawn tent
16├── security.lua      # AntiBunnyHop (Enabled + Sensitivity preset)
17├── ui.lua            # Scan UI, Medic jobs, Commands
18├── zombie.lua
19└── open.lua          # Open-handler event toggles
20server/config_server.lua  # Webhooks, LifePoints, inventory wipe, revive/hospital reset
Escrowed balance numbers are not editable

internal/balance/*.lua is encrypted by Cfx escrow and cannot be edited. It holds Config.Performance (tick intervals), Config.DamageControl (anti-exploit thresholds), per-weapon LifePoints penalties, AntiBunnyHop sensitivity presets and per-body-part balance numbers. internal/engine/*.lua contains visible technical data such as bone IDs, weapon hashes and cast prop offsets. The settings documented below are editable in shared/config/*.lua or server/config_server.lua. Blood-type weights, compatibility and reactions are configured in shared/config/blood_groups.lua. Do not edit the technical engine data.

Core

shared/config/core.lua
1Config.Debug              = false
2Config.Locale             = 'en'
3Config.Theme              = 'default'
4Config.DisableHealthRegen = true
  • Debug: enables console DebugLog output. Keep off in production.
  • Locale: language code. Default 'en'. Use any file present in the locales/ folder.
  • Theme: UI theme: default, cyberpunk, wasteland, noir, fantasy.
  • DisableHealthRegen: blocks GTA native health regeneration so wounds do not self-heal.

Vitals

shared/config/vitals.lua
1Config.MaxHealth            = 200
2Config.BleedRateMultiplier  = 0.5
3Config.ArmorDamageThreshold = 2
4
5Config.ArmorSettings = {
6    BleedReduction        = 0.80,
7    DamageReduction       = 0.20,
8    MinArmorForProtection = 5.0,
9}
10
11Config.Casts.Duration = 3600
  • MaxHealth: player max health ceiling (GTA caps usable health; 200 is the engine max).
  • BleedRateMultiplier: multiplier on blood lost per bleeding tick. 1.0 is the unscaled rate.
  • ArmorDamageThreshold: minimum incoming damage before armor degradation logic applies.
  • ArmorSettings.BleedReduction: fraction of bleed chance removed while armored.
  • ArmorSettings.DamageReduction: fraction of damage absorbed while armored.
  • ArmorSettings.MinArmorForProtection: minimum armor value before any protection counts.
  • Casts.Duration: fallback cast duration in seconds when a body part does not define its own. Per-part durations live in bodyparts.lua.

Blood

shared/config/vitals.lua
1Config.Blood.MaxVolume         = 6.0
2Config.Blood.WeaknessThreshold = 4.5
3Config.Blood.CriticalLevel     = 3.0
4Config.Blood.DeathThreshold    = 0.0
5Config.Blood.DrawAmount        = 0.25
6Config.Blood.RegenRate         = 0.05
7Config.Blood.RegenBoost        = 0.2
8Config.Blood.BleedingRates = {
9    [1] = 0.008,
10    [2] = 0.017,
11    [3] = 0.033,
12    [4] = 0.067,
13}
  • MaxVolume: maximum blood volume in liters.
  • WeaknessThreshold: below this liter level the player takes movement penalties.
  • CriticalLevel: below this level screen effects and severe debuffs apply.
  • DeathThreshold: blood level at which the player dies from blood loss.
  • DrawAmount: liters drawn per empty_syringe use.
  • RegenRate: liters regenerated per natural regen tick.
  • RegenBoost: liters regenerated per tick while a saline/regen buff is active.
  • BleedingRates: liters lost per tick at each bleeding level (1-4).

Blood types and transfusions

shared/config/blood_groups.lua
1Config.Blood.Probabilities = {
2    ['0+'] = 37,
3    ['A+'] = 36,
4    ['B+'] = 8,
5    ['AB+'] = 3,
6    ['0-'] = 6,
7    ['A-'] = 6,
8    ['B-'] = 2,
9    ['AB-'] = 2,
10}
  • Probabilities: positive relative weights used only when assigning a new blood type. The defaults total 100, so they give 37% 0+, 36% A+, 8% B+, 3% AB+, 6% 0-, 6% A-, 2% B- and 2% AB-. Changing these weights preserves existing player types.
shared/config/blood_groups.lua
1Config.Blood.Transfusion = {
2    Compatibility = 'abo_rh',
3    IncompatibleAction = 'reject',
4    IncompatibleDamage = 50,
5    AllowFatalReaction = false,
6    UnknownBagType = 'reject',
7    LegacyRh = 'abo',
8    DiseaseTransmission = true,
9}
  • Compatibility: off accepts any bag without a blood-type check; abo checks A, B, AB and 0 while ignoring the Rh sign; abo_rh checks both ABO and Rh; custom uses Config.Blood.Compatibility.
  • IncompatibleAction: reject stops an incompatible transfusion before consuming the bag or causing damage. damage consumes the bag and applies the configured reaction.
  • IncompatibleDamage: health damage from an incompatible transfusion when IncompatibleAction is damage.
  • AllowFatalReaction: false keeps damage from the incompatible reaction above the alive threshold. true allows that reaction to be fatal. Other medical effects continue normally.
  • UnknownBagType: reject blocks bags with a missing type. universal accepts bags whose type is absent or blank. Invalid non-empty types remain blocked when compatibility checks are enabled.
  • LegacyRh: in abo_rh mode, abo checks only ABO if the recipient or donor has a standard type without + or -. reject blocks that transfusion until both types include a sign. Stored types are preserved; no sign is assigned automatically.
  • DiseaseTransmission: allows diseases stored in a blood bag to infect the recipient after a successful transfusion. This setting is independent of the compatibility mode; with off, disease transmission still follows this field. Rejected transfusions do not transmit the bag's diseases.

Blood types accept O or 0, upper or lower case, and surrounding spaces. The normalized form uses 0. A bag can store its type in metadata.type, metadata.bloodType or metadata.blood_type. A missing type is never assumed to be A+. Newly drawn bags show the group in their label and description.

Custom compatibility

shared/config/blood_groups.lua
1Config.Blood.Compatibility = {
2    ['0-'] = { ['0-'] = true, ['0'] = true },
3    ['0+'] = { ['0-'] = true, ['0+'] = true, ['0'] = true },
4    ['A-'] = { ['0-'] = true, ['A-'] = true, ['0'] = true, ['A'] = true },
5    ['A+'] = { ['0-'] = true, ['0+'] = true, ['A-'] = true, ['A+'] = true, ['0'] = true, ['A'] = true },
6    ['B-'] = { ['0-'] = true, ['B-'] = true, ['0'] = true, ['B'] = true },
7    ['B+'] = { ['0-'] = true, ['0+'] = true, ['B-'] = true, ['B+'] = true, ['0'] = true, ['B'] = true },
8    ['AB-'] = { ['0-'] = true, ['A-'] = true, ['B-'] = true, ['AB-'] = true, ['0'] = true, ['A'] = true, ['B'] = true, ['AB'] = true },
9    ['AB+'] = { ['0-'] = true, ['0+'] = true, ['A-'] = true, ['A+'] = true, ['B-'] = true, ['B+'] = true, ['AB-'] = true, ['AB+'] = true, ['0'] = true, ['A'] = true, ['B'] = true, ['AB'] = true },
10    ['0'] = { ['0'] = true, ['0+'] = true, ['0-'] = true },
11    ['A'] = { ['0'] = true, ['A'] = true, ['0+'] = true, ['0-'] = true, ['A+'] = true, ['A-'] = true },
12    ['B'] = { ['0'] = true, ['B'] = true, ['0+'] = true, ['0-'] = true, ['B+'] = true, ['B-'] = true },
13    ['AB'] = { ['0'] = true, ['A'] = true, ['B'] = true, ['AB'] = true, ['0+'] = true, ['0-'] = true, ['A+'] = true, ['A-'] = true, ['B+'] = true, ['B-'] = true, ['AB+'] = true, ['AB-'] = true },
14}
  • Compatibility[recipient][donor]: only entries set to true allow a donor type for that recipient in custom mode. Missing rows or invalid entries are rejected. Include any legacy recipient and donor types that the server still uses.

Disable blood-type checks

shared/config/blood_groups.lua
1Config.Blood.Transfusion.Compatibility = 'off'

Stored blood types remain available and new characters still receive a type. Any bag can be used regardless of its type; disease transmission follows DiseaseTransmission.

Wound levels and blood trails

shared/config/vitals.lua
1Config.WoundLevels = {
2    [1] = { movementRate = 0.98, label = 'Minor' },
3    [2] = { movementRate = 0.85, label = 'Painful' },
4    [3] = { movementRate = 0.72, label = 'Severe' },
5    [4] = { movementRate = 0.59, label = 'Critical' },
6}
7
8Config.BloodTrails = {
9    Enabled   = true,
10    Threshold = 2,
11}
  • WoundLevels[n].movementRate: movement-speed multiplier at each wound severity.
  • WoundLevels[n].label: name shown for that severity.
  • BloodTrails.Enabled: leave blood decals on the ground while bleeding.
  • BloodTrails.Threshold: minimum bleeding level (1-4) before trails start.

Body Parts

shared/config/bodyparts.lua
1Config.BodyParts = {
2    head = {
3        armored     = false,
4        canFracture = true,
5        fracture    = { allowShoot = true, allowDrive = true, allowSprint = true },
6    },
7}

A single table defines all 9 parts (head, neck, chest, spine, pelvis, left_arm, right_arm, left_leg, right_leg).

  • armored: whether worn armor reduces damage to this part.
  • canFracture: whether the part can fracture. Ships true on every part except the pelvis.
  • fracture.allowShoot / allowDrive / allowSprint: what the player may do while this part is fractured.
  • cast.duration: optional per-part cast duration in seconds, overriding Config.Casts.Duration.
Per-part balance is escrowed

breakThreshold, fractureChance, staggerMult, and shakeIntensity for each part live in internal/balance/balance.lua and cannot be edited.

Lifecycle (Last Stand and Death)

shared/config/lifecycle.lua
1Config.LastStand = {
2    Duration             = 60,
3    InstantDeathOnDamage = false,
4    MinimumDamageToKill  = 50,
5    Anim = { dict = 'move_injured_ground', name = 'front_loop' },
6}
7
8Config.Death = {
9    Duration               = 600,
10    AutoRespawnOnZero      = false,
11    AutoRespawnGracePeriod = 600,
12    RespawnUITimeout       = 60,
13    Anim    = { dict = 'dead', name = 'dead_a' },
14    AnimVeh = { dict = 'veh@low@front_ps@idle_duck', name = 'sit' },
15}
  • LastStand.Duration: seconds in last stand before death.
  • LastStand.InstantDeathOnDamage: true kills immediately if damaged while downed.
  • LastStand.MinimumDamageToKill: damage needed to kill during last stand when InstantDeathOnDamage is false.
  • LastStand.Anim: downed ground animation dict/name.
  • Death.Duration: seconds before the respawn UI opens.
  • Death.AutoRespawnOnZero: auto-respawn when the timer reaches zero.
  • Death.AutoRespawnGracePeriod: when AutoRespawnOnZero is true, seconds the "Hold E" prompt stays open before a forced respawn. 0 or nil = instant auto-respawn with no prompt.
  • Death.RespawnUITimeout: seconds before the respawn UI auto-selects.
  • Death.Anim / Death.AnimVeh: death animation on foot / in a vehicle.

Effects

shared/config/effects.lua
1Config.Effects = {
2    CameraShake          = true,
3    ScreenEffects        = true,
4    WeaknessEffects      = true,
5    AimShake             = true,
6    ExternalRecoilScript = false,
7    FlashOnFracture      = true,
8    Blackout = {
9        Enabled     = true,
10        OnHeadShot  = true,
11        OnExplosion = true,
12        Chance      = 80,
13        Duration    = 4000,
14        MinDamage   = 20,
15    },
16}
  • CameraShake: camera shake on injury.
  • ScreenEffects: screen post-FX at critical blood levels.
  • WeaknessEffects: movement penalties at low blood.
  • AimShake: weapon sway while injured.
  • ExternalRecoilScript: set true when a standalone recoil script is present, to avoid conflicts.
  • FlashOnFracture: screen flash on fracture.
  • Blackout.Enabled: knockout on headshot/explosion.
  • Blackout.OnHeadShot / OnExplosion: which events can trigger a blackout.
  • Blackout.Chance: percent chance to trigger.
  • Blackout.Duration: blackout length in ms.
  • Blackout.MinDamage: minimum damage that can trigger a blackout.

NPC behavior and voice

shared/config/effects.lua
1Config.NPCInteraction = {
2    IgnoreOnDeath     = true,
3    IgnoreInLastStand = true,
4}
5
6Config.Voice = {
7    Enable        = true,
8    System        = 'pma-voice',
9    MuteDead      = true,
10    MuteLastStand = false,
11}
  • NPCInteraction.IgnoreOnDeath / IgnoreInLastStand: NPCs ignore the player while dead / downed.
  • Voice.Enable: enable voice muting integration.
  • Voice.System: voice resource name.
  • Voice.MuteDead: mute the player while dead.
  • Voice.MuteLastStand: mute the player while in last stand.

Flare

shared/config/effects.lua
1Config.Flare = {
2    Enabled      = true,
3    RequireItem  = true,
4    VisualEffect = true,
5    Item         = 'WEAPON_FLARE',
6    RemoveItem   = true,
7    Cooldown     = 60000,
8    Key          = 47,
9    AlertDispatch = {
10        Enabled = true,
11        Jobs    = { 'ambulance', 'police' },
12        Code    = '10-52',
13        Blip    = { sprite = 153, color = 1, scale = 1.2 },
14    },
15}
  • Enabled: allow downed players to fire a flare for help.
  • RequireItem: require the flare item to use it.
  • VisualEffect: fire the visual flare into the sky. Off sends the alert with no flare shot and the death-screen prompt becomes a plain call for help.
  • Item: inventory weapon key. WEAPON_FLARE is the base-game flare weapon (case-sensitive).
  • RemoveItem: consume the flare on use.
  • Cooldown: ms between flare uses.
  • Key: control index that fires the flare.
  • AlertDispatch.Enabled: alert police and medics through your dispatch when a downed player uses the flare.
  • AlertDispatch.Jobs: jobs that receive the call.
  • AlertDispatch.Code: dispatch code sent with the alert.
  • VisualEffect and AlertDispatch both off hide the signal prompt on the death screen.

Vehicle crash

shared/config/effects.lua
1Config.VehicleCrash = {
2    Enabled = true,
3    Tiers = {
4        { minSpeed = 100.0, damage = 15, bleedChance = 10, fractureChance = 12, stagger = true  },
5        { minSpeed = 70.0,  damage = 7,  bleedChance = 5,  fractureChance = 4, stagger = false },
6        { minSpeed = 40.0,  damage = 3,  bleedChance = 0,  fractureChance = 0, stagger = false },
7    },
8}
  • Enabled: apply crash injuries from high-speed impacts.
  • Tiers[n].minSpeed: speed threshold for the tier.
  • Tiers[n].damage: health damage applied.
  • Tiers[n].bleedChance / fractureChance: percent chance to start bleeding / fracture.
  • Tiers[n].stagger: whether the impact staggers the player.

Security (Anti-Bunny Hop)

shared/config/security.lua
1Config.AntiBunnyHop = {
2    Enabled     = true,
3    Sensitivity = 'medium',
4    Notify      = true,
5    Message     = "Slow down! Don't jump so often.",
6}
  • Enabled: toggle the anti-bunny-hop ragdoll.
  • Sensitivity: preset: low (only extreme hops), medium (recommended), high (aggressive), extreme (ragdoll almost always).
  • Notify: show a notification on a violation.
  • Message: notification text.
Sensitivity presets are escrowed

The concrete cooldown, ragdoll duration, and trigger chance behind each preset live in internal/balance/antibunnyhop.lua and cannot be edited. Pick a preset; the numbers are fixed.

Fractures

shared/config/fractures.lua
1Config.Fractures = {
2    enabled = true,
3    MaxConcurrent = 2,
4    Legs = {
5        FallOnlyRunning  = true,
6        FallChanceRun    = 10,
7        FallChanceSprint = 15,
8        FallChanceWalk   = 5,
9    },
10}
  • enabled: turns fractures on or off. Ships true. Parts with canFracture = false in bodyparts.lua never break
  • MaxConcurrent: most fractures a player can have at once. 0 stops fractures from damage
  • Legs.FallOnlyRunning: only count fall fractures while moving.
  • Legs.FallChanceRun / FallChanceSprint / FallChanceWalk: percent chance of a leg fracture from a fall at each movement state.
lua
1Config.FracturePenalties = {
2    ['left_arm']  = { allowShoot = true,  aimShake = true, shakeIntensity = 2.5 },
3    ['right_arm'] = { allowShoot = false, allowDrive = true },
4    ['left_leg']  = { limp = true, sprint = false, allowDrive = true },
5    ['right_leg'] = { limp = true, sprint = false, allowDrive = false },
6}

Config.FracturePenalties is built at start from the fracture block of each part in bodyparts.lua. Change the penalties there. Per part, it restricts:

  • allowShoot: whether the player can shoot with this part fractured.
  • allowDrive: whether the player can drive.
  • aimShake / shakeIntensity: add aim sway and how strong it is.
  • limp / sprint: apply a limp / block sprint.

Masks

shared/config/masks.lua
1Config.MaskSystem = {
2    EnableItemMode     = true,
3    EnableClothingMode = true,
4    Anim = {
5        dict    = 'mp_masks@on_foot',
6        putOn   = 'put_on_mask',
7        takeOff = 'put_on_mask',
8        flags   = 49,
9    },
10}
11
12Config.Masks = {
13    ['mask_surgical']    = { protection = 90,  component = { id = 7, male = 38,  female = 38,  texture = 0 }, label = 'Surgical Mask' },
14    ['mask_n95']         = { protection = 99,  component = { id = 7, male = 120, female = 120, texture = 0 }, label = 'N95 Mask' },
15    ['mask_dust_unisex'] = { protection = 30,  component = { id = 7, male = 46,  female = nil, texture = 0 }, label = 'Dust Mask',   itemless = true },
16    ['helmet_full_male'] = { protection = 100, component = { id = 1, male = 36,  female = 36,  texture = 0 }, label = 'Full Helmet', itemless = true },
17    ['helmet_half_male'] = { protection = 50,  component = { id = 1, male = 46,  female = nil, texture = 0 }, label = 'Half Helmet', itemless = true },
18}
  • MaskSystem.EnableItemMode: mask items from inventory grant disease protection.
  • MaskSystem.EnableClothingMode: worn clothing components grant protection.
  • MaskSystem.Anim: put-on / take-off animation.
  • Config.Masks: single source of truth for masks. Config.MaskItems (per-item lookup) and the mask entries in Config.ProtectiveClothing are derived from this table at runtime.
  • protection: filtering percentage (0-100).
  • component: clothing slot { id, male, female, texture }. Set female = nil if the drawable is male-only.
  • label: display name.
  • itemless: true means protection comes from the worn drawable only, with no dedicated inventory item.

Config.ProtectiveClothing (also in masks.lua) maps individual male/female drawable IDs for component slot [1] to a protection value (40 or 80), letting plain clothing offer partial protection without a mask item.

Add a mask in one place

Add or edit an entry in Config.Masks only. The item lookup and the clothing check are generated from it, no need to edit three tables. These are shipped defaults, not fixed values; add, remove, or rebalance them freely.

Diseases

Diseases live in shared/config/diseases.lua. They are shipped defaults, add, remove, or rebalance them freely. Each disease defines:

  • severity: mild, moderate, severe, or critical.
  • contagious: enabled, distance, chance, interval, useMasks.
  • trigger: optional auto-infect on injury (type = 'injury', parts, chance).
  • stages: timed progression; each stage has after, name, and an effects list.
  • treatment: cure item, optional maxCurableStage, tooLateMessage, suppressors, naturalRecovery.

The six shipped diseases:

  • influenza (Viral Flu), mild, contagious, 4 stages. Cure: paracetamol. Suppressors: vitalex, vitamin_cocktail.
  • patogeno_vx_9 (VX-9 Pathogen), critical, 5 stages (stage 5 terminal). Cure: retroxin (max curable stage 4).
  • radiazioni (Radiation Sickness), severe, 4 stages (stage 4 terminal). Cure: radiation_antidote (max curable stage 3). Wired to the radiation integration.
  • infezione (Wound Infection), moderate, triggered by cut/gunshot injuries (30%), 5 stages (stage 5 terminal). Cure: antibiotics.
  • intossicazione (Food Poisoning), mild, 3 stages with natural recovery. Cure: herbal_infusion.
  • tetano (Tetanus), severe, triggered by cut injuries (25%), 4 stages (stage 4 terminal). Cure: antibiotics.

Effect types usable in a stage: cough, stumble, damage, bleed, fever, movePenalty, vomit, lastStand, death, notify. Time format: '30s', '15m', '2h', '1d'. Add terminal = true to a stage to make it fatal.

Kill switch

shared/config/diseases.lua
1Config.DiseasesEnabled = true
2Config.AlwaysEnabledDiseases = {
3    'radiazioni',
4}
  • DiseasesEnabled: false disables every disease except those in AlwaysEnabledDiseases.
  • AlwaysEnabledDiseases: diseases that survive the kill switch. Keep radiazioni while the radiation integration is on, otherwise its silent terminal progression can cause "random" deaths.

Add an entry to Config.Diseases in shared/config/diseases.lua:

shared/config/diseases.lua
1['my_disease'] = {
2    label = 'My Disease',
3    icon = 'fa-virus',
4    severity = 'moderate',
5    contagious = { enabled = false },
6    stages = {
7        [1] = { after = '0s',  name = 'disease_my_disease_s1', effects = {} },
8        [2] = { after = '30m', name = 'disease_my_disease_s2', effects = {
9            { type = 'damage', amount = 2, interval = '10m' },
10            { type = 'notify', message = 'disease_my_disease_s2_msg' },
11        }},
12    },
13    treatment = {
14        cure = 'antibiotics',
15    },
16}

name and notify message fields are locale keys. Add the matching keys to every file in locales/: a missing key renders on screen as the literal MISSING: key, not a fallback. The cure item must exist in items.lua with type = 'cure_disease' and disease = 'my_disease'.

Item-triggered diseases

shared/config/item_diseases.lua
1Config.ItemDiseases = {
2    ['cibo_marcio'] = { disease = 'intossicazione', chance = 100 },
3    ['carne_rossa'] = { disease = 'intossicazione', chance = 50 },
4    ['carne_squalo'] = { disease = 'intossicazione', chance = 30 },
5}

Maps inventory items (raw meat, spoiled food, undercooked fish) to a disease applied on consumption. disease must exist in diseases.lua; chance is rolled per use (0-100). The shipped entries map to intossicazione. Edit freely to match your server's food items.

Zombie transformation

Player zombie transformation is disabled by default. The default profile keeps the player's original ped and clothing, with zombie-like movement, optional restrictions and a local screen effect.

shared/config/zombie.lua
1Config.ZombieTransformation = {
2    Enabled = false,
3    DefaultProfile = 'default',
4    TickInterval = 1000,
5    ExportAllowlist = {},
6    Diseases = {
7        ['patogeno_vx_9'] = {
8            Stage = 'terminal',
9            Profile = 'default',
10        },
11    },
12    Lifecycle = {
13        Respawn = 'cure',
14        Revive = 'preserve',
15        OfflineProgress = false,
16    },
17    Cure = {
18        Enabled = false,
19        Item = 'zombie_antidote',
20        MedicOnly = true,
21        AllowSelf = false,
22        TreatmentDuration = 6000,
23    },
24    MeleeInfection = {
25        Enabled = false,
26        Chance = 35,
27        Distance = 2.5,
28        Cooldown = 3000,
29        ConfirmationWindow = 1500,
30    },
31    Profiles = {
32        ['default'] = {
33            Duration = 0,
34            ExpiryAction = 'cure',
35            IgnoreByZombies = true,
36            Movement = {
37                Clipset = 'move_m@drunk@verydrunk',
38                Speed = 0.75,
39                Transition = 0.5,
40            },
41            Restrictions = {
42                BlockWeapons = true,
43                BlockInventory = true,
44                BlockSprint = true,
45                BlockJump = true,
46                BlockVehicleEntry = true,
47                BlockClimbing = true,
48                BlockSwimming = false,
49                BlockMelee = false,
50            },
51            Appearance = {
52                Mode = 'original',
53                Model = 's_m_y_zombie_01',
54                Provider = false,
55                EyeColor = 31,
56            },
57            Screen = {
58                Modifier = 'NG_filmic01',
59                Strength = 0.25,
60            },
61            Decay = {
62                Amount = 0,
63                Interval = 30,
64            },
65        },
66    },
67}

Enable and permissions

Config.ZombieTransformation.Enabled defaults to false. Set to true to enable player transformation. Disabled mode keeps the existing disease terminal behavior.

Config.ZombieTransformation.DefaultProfile defaults to 'default'. Name of the profile used when a transformation export does not select one. The name must exist in Profiles.

Config.ZombieTransformation.TickInterval defaults to 1000. Milliseconds between server checks for watched infections and transformed characters. The server clamps the interval to 250 to 10000 milliseconds.

Config.ZombieTransformation.ExportAllowlist defaults to {}. Allowed callers of the mutating server exports. An empty table allows any server resource. Use a list of resource names or map names to true. This setting does not control read exports or validated medical item treatment.

Disease triggers

Config.ZombieTransformation.Diseases.patogeno_vx_9.Stage defaults to 'terminal'. The 'terminal' option transforms at the first stage marked terminal in Config.Diseases. An integer from 1 to 100 transforms at that stage or later; choose a stage defined for the disease. Add other entries using existing disease names. Only configured diseases have their terminal effects replaced by transformation.

Config.ZombieTransformation.Diseases.patogeno_vx_9.Profile defaults to 'default'. Profile applied by this disease trigger. The profile name must exist in Profiles.

Death, recovery and offline time

Config.ZombieTransformation.Lifecycle.Respawn defaults to 'cure'. Use 'cure' to remove the transformation and its trigger infections after an authorized respawn. Use 'preserve' to keep the transformation.

Config.ZombieTransformation.Lifecycle.Revive defaults to 'preserve'. Use 'preserve' to resume zombie behavior after a revive, or 'cure' to remove the transformation and its trigger infections. Death suspends zombie presentation and does not cure the character. A client external respawn reset does not clear the transformation.

Config.ZombieTransformation.Lifecycle.OfflineProgress defaults to false. False pauses watched disease progression, transformation duration and the next decay deadline during offline time. True lets those timers continue. Health damage from missed decay intervals is not accumulated or replayed.

Special cure item

Config.ZombieTransformation.Cure.Enabled defaults to false. Enables a separate zombie antidote treatment in the medical interaction system. Ordinary cures for the configured trigger diseases do not clear an active transformation; other disease treatments remain available.

Config.ZombieTransformation.Cure.Item defaults to 'zombie_antidote'. Name of an item registered in the server inventory. This setting does not create the inventory item. When enabled, the script creates its medical treatment entry if Config.MedicalItems has no entry for that item. An existing entry must use type cure_zombie to route through the zombie treatment.

Config.ZombieTransformation.Cure.MedicOnly defaults to true. Requires a job listed in Config.MedicJobs. False allows other players to use the treatment.

Config.ZombieTransformation.Cure.AllowSelf defaults to false. Allows self treatment when true. The medic requirement still applies when MedicOnly is enabled.

Config.ZombieTransformation.Cure.TreatmentDuration defaults to 6000. Milliseconds for treatment progress and the medical animation.

Melee infection

Config.ZombieTransformation.MeleeInfection.Enabled defaults to false. Enables infection from a transformed player's confirmed unarmed attack. Config.ZombieBite.Enabled and Config.ContactInfection.Enabled must also be true. The disease comes from Config.ContactInfection.Disease. Weapon damage alone or a client damage report alone does not infect the victim.

Config.ZombieTransformation.MeleeInfection.Chance defaults to 35. Infection chance from 0 to 100 percent after a confirmed attack.

Config.ZombieTransformation.MeleeInfection.Distance defaults to 2.5. Maximum attacker-to-victim distance in meters. The server also requires both players to be in the same routing bucket.

Config.ZombieTransformation.MeleeInfection.Cooldown defaults to 3000. Milliseconds between infection attempts by the same attacker, including attempts that fail the chance roll.

Config.ZombieTransformation.MeleeInfection.ConfirmationWindow defaults to 1500. Milliseconds allowed to correlate server weapon damage with the victim's damage report. Keep this long enough for the server's expected network latency.

Profiles and duration

Config.ZombieTransformation.Profiles.default.Duration defaults to 0. Transformation duration in seconds. Zero keeps it until a cure or a lifecycle recovery removes it. Positive values use ExpiryAction when the timer expires. Duration strings such as '5m' or '1h' are also accepted; the maximum is 31536000 seconds. Add named entries under Profiles for other server modes.

Config.ZombieTransformation.Profiles.default.ExpiryAction defaults to 'cure'. Use 'cure' for automatic recovery that also clears trigger infections. Use 'death' for a fatal timeout through the medical death system; the transformation remains until its recovery policy or a cure removes it.

Config.ZombieTransformation.Profiles.default.IgnoreByZombies defaults to true. Marks an active transformed player as a target that cooperating zombie AI can ignore. The NPC resource must use the health system's server API when choosing and keeping targets.

Movement

Config.ZombieTransformation.Profiles.default.Movement.Clipset defaults to 'move_m@drunk@verydrunk'. Movement animation set. False leaves the walking animation unchanged.

Config.ZombieTransformation.Profiles.default.Movement.Speed defaults to 0.75. Accepted range 0.1 to 2.0. The medical movement controller caps the resulting rate at normal speed and applies stronger medical movement penalties.

Config.ZombieTransformation.Profiles.default.Movement.Transition defaults to 0.5. Animation blend duration in seconds, from 0.0 to 5.0.

Restrictions

Config.ZombieTransformation.Profiles.default.Restrictions.BlockWeapons defaults to true. Prevents weapon equipment while transformed and rejects non-unarmed weapon damage on the server.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockInventory defaults to true. Locks the inventory through the built-in ox inventory adapter or a registered inventory provider. Other inventories require a provider for a complete lock; blocked keys alone do not prevent inventory commands or exports.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockSprint defaults to true. Blocks sprinting while zombie behavior is active.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockJump defaults to true. Blocks jumping while zombie behavior is active.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockVehicleEntry defaults to true. Blocks entering vehicles. It does not eject a player already inside a vehicle.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockClimbing defaults to true. Blocks climbing and vaulting.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockSwimming defaults to false. Blocks swimming controls when true.

Config.ZombieTransformation.Profiles.default.Restrictions.BlockMelee defaults to false. Blocks unarmed melee attacks when true. Keep false to allow zombie attacks and optional melee infection.

Appearance

Config.ZombieTransformation.Profiles.default.Appearance.Mode defaults to 'original'. Use 'original' to retain the player's ped, face and clothing. Use 'model' for a temporary ped model, with a complete appearance provider.

Config.ZombieTransformation.Profiles.default.Appearance.Model defaults to 's_m_y_zombie_01'. Installed ped model name used only in model mode. No model is downloaded or installed by the health system.

Config.ZombieTransformation.Profiles.default.Appearance.Provider defaults to false. Registered appearance provider name. False delegates provider selection to open/client/zombie_handlers.lua. Model mode requires Capture and Restore support for the original appearance.

Config.ZombieTransformation.Profiles.default.Appearance.EyeColor defaults to 31. Temporary freemode eye color from 0 to 31. False preserves the original color. When zombie presentation ends, the original color is restored only if the same freemode ped still has the color applied by this feature. Later changes made by other resources are preserved.

Screen effect

Config.ZombieTransformation.Profiles.default.Screen.Modifier defaults to 'NG_filmic01'. Local timecycle effect name. False disables this zombie screen effect. Medical emergencies take priority.

Config.ZombieTransformation.Profiles.default.Screen.Strength defaults to 0.25. Effect strength from 0.0 to 1.0.

Health decay

Config.ZombieTransformation.Profiles.default.Decay.Amount defaults to 0. Health lost per decay tick, from 0 to 100. Zero disables decay. Fatal decay uses the medical death system.

Config.ZombieTransformation.Profiles.default.Decay.Interval defaults to 30. Seconds between decay ticks, from 1 to 86400. Duration strings are also accepted. The saved deadline is preserved across reconnects.

Model mode keeps the original ped if its provider is missing, capture fails or the requested model cannot load. Complete appearance recovery requires a provider that restores all captured appearance data, including the saved face. Its Restore handler must finish synchronously, including during resource stop.

Medical Items

Items live in shared/config/items.lua under Config.MedicalItems. The resource ships 28 medical items plus the respawn_tent. Item keys are English and must match the ox_inventory entries in _INSTALL/ox_items.txt exactly.

shared/config/items.lua
1Config.XpCooldownSeconds = 1800
2
3Config.MedicalItems = {
4    ['field_dressing'] = {
5        quickAccess = true,
6        type        = 'heal_wound',
7        allowSelf   = true,
8        remove      = true,
9        target      = { 'cut', 'gunshot' },
10        amount      = 1,
11        health      = 20,
12        anim        = 'bandage_shirt',
13        duration    = 13000,
14        xp          = { medico = 5 },
15        client = { labelKey = 'item_field_dressing', descKey = 'item_field_dressing_desc', icon = 'bandage' },
16    },
17}
  • Config.XpCooldownSeconds: seconds between XP awards on the same (healer, patient, treatmentType) tuple. Treatment still applies during cooldown; only the XP is suppressed. 0 disables the anti-grind. Default 1800.

Per-item fields:

  • type: action: heal_wound, fix_fracture, revive_player, cure_disease, boost_regen, draw_blood, transfuse_blood, relieve_pain.
  • allowSelf: usable on self.
  • remove: consumed on use. false with durabilityLoss + removeWhen0 makes a reusable item (the defibrillator).
  • quickAccess: appears in the quick-access panel.
  • target: wound types (cut, gunshot, blunt, burn, bite) or body parts the item treats.
  • amount / health / stopBleeding: wound severity reduced, health restored, and bleed-stop strength.
  • job: restricts use to a job (most advanced items require medico).
  • disease: for cure_disease, the disease(s) cured.
  • anim: references a preset in anim_presets.lua (syringe, pill, bandage, cast_anim, cpr, bandage_shirt, medkit, pill_capsule, bottle_herbal, bottle_pills, syringe_morphine).
  • animSelf / animTarget: explicit animations override the preset.
  • xp: XP awarded per category on a real success, integrating with ml_skills (e.g. { medico = 10 }). Self-treatments grant nothing.
  • requiredSkill: lock the item until the player has unlocked a specific ml_skills skill. Needs Config.Skills.Enabled. Always set category: it lets the client block the item before the use animation and hide it from the medic panel.
  • requiredLevel: lock the item below a minimum ml_skills category level. Combine with requiredSkill; both must pass.
  • allowDrive, allowShoot: on casts, whether the player can drive or shoot while wearing it. driveWobble and drivePull = 'left' or 'right' make the steering wander
  • effectDuration: seconds a relieve_pain item lasts
  • maxDoses, doseCooldown, doseGroup: how many doses fit inside the cooldown in seconds. Items with the same doseGroup share one counter
  • overdoseEffect: screen effect of an overdose, such as 'blur'
  • receiveItem: item given back after use, such as the full blood bag from empty_syringe
  • client: labelKey, descKey (locale keys) and icon.

The shipped items, grouped by purpose:

  • Bandages / dressings: crafted_gauze, field_dressing, elastic_bandage, packing_bandage, ifak, surgical_kit, improvised_tourniquet, tourniquet, suture_kit
  • Casts: arm_cast, leg_cast, neck_brace, body_cast
  • Disease cures: retroxin, herbal_infusion, paracetamol, radiation_antidote, antibiotics, vitalex, vitamin_cocktail
  • Pain relief: painkillers, morphine
  • Blood: empty_syringe, blood_bag_500, saline_500
  • Revival: revive_kit, ecg (defibrillator, reusable), epinephrine
  • Survival: respawn_tent
Quick access

Items with quickAccess = true appear in the HUD quick bar for fast use during combat.

Skill lock (ml_skills)

With ml_skills installed, an item can require an unlocked skill or a category level before it is usable. Locked items are stopped before the use animation starts and the message names the missing skill. The rule is enforced server-side and fails open, so a stopped ml_skills never locks players out of medical gear. requiredSkill and requiredLevel are optional fields in a medical item entry.

shared/config/items.lua
1Config.Skills = {
2    Enabled         = false,
3    FailOpen        = true,
4    XpOnSelfUse     = false,
5    HideLockedItems = false,
6}
7
8['surgical_kit'] = {
9    requiredSkill = { category = 'medico', skill = 'first_aid' },
10    requiredLevel = { category = 'medico', level = 5 },
11}
  • Enabled: turn the skill lock on. Off leaves every item usable (default).
  • FailOpen: if ml_skills is stopped or errors, allow the item anyway.
  • XpOnSelfUse: also grant item-use XP when a player treats themselves.
  • HideLockedItems: hide locked items from the medic panel. Off (default) keeps them listed and blocks them on use.

Weapons

shared/config/weapons.lua decides what each weapon does to the body.

shared/config/weapons.lua
1Config.WeaponClasses = {
2    ['MEDIUM_CALIBER'] = {
3        woundType = 'gunshot',
4        boneDamage = 12,
5        fractureChance = 6,
6        bleedChance = 10,
7        impact = 'minor',
8        staggerMult = 0.3,
9        minSeverity = 2,
10        maxSeverity = 3,
11        label = 'Medium Caliber',
12    },
13}
14
15Config.WeaponMap[`WEAPON_PISTOL`] = 'MEDIUM_CALIBER'
16
17Config.BodyHealth = {
18    ['chest'] = { breakThreshold = 200 },
19}
  • woundType: wound the hit leaves, gunshot, cut, blunt, burn or bite
  • boneDamage, fractureChance, bleedChance: bone damage per hit, and percent chances of a fracture and of bleeding
  • impact, staggerMult: how hard the hit shakes the player
  • minSeverity, maxSeverity: wound severity range from 1 to 4
  • minDamageThreshold: hits below this damage leave no wound
  • Config.WeaponMap: weapon hash to class. Add your custom weapons to the list in the file
  • Config.BodyHealth: bone damage each body part takes before it breaks

Respawn

shared/config/respawn.lua
1Config.RespawnSettings = {
2    UISelection   = true,
3    GTAcam        = true,
4    ShowAllSpawns = true,
5    RandomSpawn   = false,
6    FallbackSpawn = vector4(1651.01, 2543.6, 45.56, 53.03),
7    CinematicCam  = true,
8}
  • UISelection: show the spawn-selection UI on death.
  • GTAcam: use the GTA selection camera.
  • ShowAllSpawns: show all spawn points instead of only the nearest.
  • RandomSpawn: pick a random spawn instead of showing the UI.
  • FallbackSpawn: fallback respawn coord. Replace the example with one valid on your map.
  • CinematicCam: enable the cinematic fly-in camera.

Config.StartSpawn defines named spawn groups, each with a label, center, and a list of spawns. The shipped entry (prison, "Prison") is an example; replace its coordinates with your own hospitals or safe zones. HospitalRespawn selects this entry by its key, not its label.

Bed respawn

shared/config/respawn.lua
1Config.HrsBase = {
2    Enable          = true,
3    UseCinematicCam = false,
4    Anim = {
5        dict     = 'switch@trevor@bed',
6        name     = 'trevor_bed_exit_f_trevor',
7        duration = 8000,
8        blendIn  = 8.0,
9        blendOut = -8.0,
10    },
11}
  • Enable: offers respawn in your own bed when a supported base building resource runs, such as Outpost (ml_base_building). Safe to leave on without one.
  • UseCinematicCam: cinematic camera on bed respawn.
  • Anim: bed exit animation. Config.HrsBase.PropSettings defines per-prop zOffset / headingOffset.

Respawn tent

shared/config/respawn.lua
1Config.RespawnTent = {
2    Enabled             = true,
3    Item                = 'respawn_tent',
4    Model               = `prop_skid_tent_01`,
5    MaxPerPlayer        = 2,
6    PlacementRange      = 50.0,
7    InteractionDistance = 2.5,
8    SpawnLOD            = 200.0,
9    Permissions = {
10        Pickup  = 'owner',
11        Destroy = 'all',
12    },
13    Placement = {
14        RayCastDistance = 10.0,
15        Anim = { dict = 'anim@narcotics@trash', name = 'drop_front', duration = 3000 },
16    },
17    SpawnOffset = vec3(0.0, 1.5, 1.0),
18}
  • Enabled: false fully disables the tent feature.
  • Item: inventory item that starts placement (respawn_tent).
  • Model: tent prop. prop_skid_tent_01 is a base-game GTA prop, no stream needed.
  • MaxPerPlayer: maximum active tents per player.
  • PlacementRange: max placement distance (m) and minimum distance between two tents.
  • InteractionDistance: distance (m) the target menu appears at.
  • SpawnLOD: distance (m) within which the prop renders.
  • Permissions.Pickup / Destroy: 'owner' (only owner) or 'all' (anyone nearby). Pickup returns the item; destroy does not.
  • Placement.RayCastDistance: aim range (m).
  • Placement.Anim: placement confirmation animation and progress-bar duration.
  • SpawnOffset: respawn offset from the tent so the player does not spawn inside the prop.

Placed tents persist in the ml_health_tents table, created automatically.

Base Building

These settings only apply when Outpost (ml_base_building) runs.

shared/config/integrations.lua
1Config.BaseBuilding = {
2    enabled = 'auto',
3    canPlaceOutsideBase = true,
4    permission = false,
5    blockDuringRaid = false,
6    whileLoading = 'deny',
7    protectTentsInsideBases = true,
8    blockRespawnInsideForeignBase = true,
9    useBaseBeds = true,
10}
  • enabled: 'auto' follows the base script, true forces it on, false turns it off
  • canPlaceOutsideBase: allows respawn tents outside bases. Tents in another player's base are always refused
  • permission: base permission needed to place a tent in a base you belong to. false for none
  • blockDuringRaid: refuses tents while the base is raided
  • whileLoading: 'deny' or 'allow' while the base script loads after a restart
  • protectTentsInsideBases: only players who can remove base pieces can clear a tent inside a base
  • blockRespawnInsideForeignBase: refuses respawn on a tent that ended up in someone else's base
  • useBaseBeds: shows beds built in a base on the death screen

UI, Medic Jobs, Commands

shared/config/ui.lua
1Config.MedicJobs = {
2    'medico',
3}
4
5Config.SelfAlwaysAdvanced = false
6
7Config.ScanUI = {
8    Mode               = 'modern',
9    DragSensitivity    = 1.0,
10    CloseUpOnSelect    = true,
11    IntroDuration      = 800,
12    RevealMissingItems = true,
13}
14
15Config.Commands = {
16    Revive       = 'revive',
17    ReviveRadius = 'reviveall',
18    Debug        = 'meddebug',
19}
20
21Config.HealthMenu = {
22    Command = 'health',
23    Keybind = 'F9',
24}
  • MedicJobs: jobs that get full medical info (exact BPM, blood liters, blood type, numeric severity, disease names). Non-medics see vague symptoms. Empty {} disables gating (everyone sees everything).
  • SelfAlwaysAdvanced: true gives every player full self-diagnosis even when not a medic.
  • ScanUI.Mode: 'modern' (body labels + orbital camera) or 'classic' (2D grid).
  • ScanUI.DragSensitivity: mouse drag sensitivity when rotating the camera.
  • ScanUI.CloseUpOnSelect: cinematic zoom when a body part is clicked.
  • ScanUI.IntroDuration: open-animation duration in ms (0 instant).
  • ScanUI.RevealMissingItems: true shows valid-but-unowned items grayed out with a "MISSING" badge; false shows only owned items.
  • Commands.Revive / ReviveRadius / Debug: command names. Defaults are /revive, /reviveall, /meddebug.
  • HealthMenu.Command: chat command that opens the player's own health panel. false does not register it.
  • HealthMenu.Keybind: default key for that command, for example 'H'. It is registered through the FiveM key mapping system, so players can rebind or clear it in the game settings. false leaves it unbound. Other resources can open the same panel with exports.ml_healthsystem:OpenHealthPanel().

Integrations

shared/config/integrations.lua
1Config.RadiationIntegration = {
2    Enabled                = true,
3    PollInterval           = 5000,
4    DiseaseName            = 'radiazioni',
5    CureThreshold          = 2.0,
6    EntryGrace             = { Enabled = true, Duration = 15000, MaxRadiation = 15 },
7    RequireAntidoteForCure = true,
8    Thresholds = {
9        { level = 5,    action = 'infect' },
10        { level = 250,  action = 'accelerate', speedMult = 2 },
11        { level = 650,  action = 'escalade',   forceStage = 3 },
12        { level = 1000, action = 'escalade',   forceStage = 4 },
13    },
14    CureItems = {
15        ['radiation_antidote'] = 'all',
16    },
17}
  • Enabled: connect to ml_radiation.
  • PollInterval: ms between radiation polls.
  • DiseaseName: disease applied (radiazioni).
  • CureThreshold: radiation level below which the disease may auto-cure.
  • EntryGrace: grace window on zone entry (Duration ms, MaxRadiation) before infect/accelerate/escalade fires.
  • RequireAntidoteForCure: true blocks natural-decay auto-cure; only the antidote cleans the player.
  • Thresholds: radiation levels that infect, accelerate (with speedMult), or escalade (with forceStage).
  • CureItems: items that also remove radiation. 'all' clears it fully (recommended so the player is not re-infected on the next poll).
shared/config/integrations.lua
1Config.ContactInfection = {
2    Enabled        = true,
3    Disease        = 'patogeno_vx_9',
4    Chance         = 35,
5    SignalCooldown = 1000,
6}
  • Enabled: master toggle for the contact-infection API. Inert until an external script calls it, so it is safe to ship enabled.
  • Disease: disease applied on contact (must exist in diseases.lua).
  • Chance: percent chance per contact.
  • SignalCooldown: minimum ms between client contact signals (anti-spam).
shared/config/integrations.lua
1Config.ZombieBite = {
2    Enabled     = true,
3    WeaponClass = 'ZOMBIE_BITE',
4    Damage      = 12,
5    Infect      = true,
6    Chance      = nil,
7    Parts       = { 'left_arm', 'right_arm', 'neck', 'chest', 'left_leg', 'right_leg' },
8}

Bite wound for zombie and creature scripts, applied through exports.ml_healthsystem:ApplyZombieBite. Like the contact infection above, it stays inert until an external script calls it.

  • Enabled: master toggle for the bite API.
  • WeaponClass: entry in Config.WeaponClasses (shared/config/weapons.lua) that sets the bite bleeding and severity.
  • Damage: wound damage passed to the medical engine when the caller does not send its own.
  • Infect: also roll the contact infection on every bite.
  • Chance: infection chance in percent for a bite. nil uses the Chance of the contact infection above.
  • Parts: body zones a bite can land on when the caller does not pick one.
shared/config/integrations.lua
1Config.LifePoints.Zones = {
2    -- ['nuclear_plant'] = {
3    --     type = 'sphere', coords = vec3(2700.0, 1500.0, 30.0),
4    --     radius = 200.0, penalty = 25, label = 'Nuclear Plant',
5    -- },
6}

Geographic zones that apply an extra LifePoints penalty on death inside them. Each zone is type = 'sphere' (coords + radius) or type = 'poly' (points + thickness), plus a required penalty and a label. Ships empty (commented examples only).

Open-Handler Events

shared/config/open.lua
1Config.OpenHandlers = {
2    EnableDeathEvent     = true,
3    EnableLastStandEvent = true,
4    EnableRespawnEvent   = true,
5}
  • EnableDeathEvent: fire ml_healthsystem:onPlayerDeath.
  • EnableLastStandEvent: fire ml_healthsystem:onPlayerLastStand.
  • EnableRespawnEvent: fire ml_healthsystem:onPlayerRespawned.

Your own resources can listen to these events, see the Developer page.

Server Config

server/config_server.lua holds the server-only values: webhooks, LifePoints, inventory wipe, and reset behavior. A reference copy ships as _INSTALL/config_server.example.lua.

Discord webhooks

server/config_server.lua
1Config.Log = {
2    AdminRevive     = 'INSERT_WEBHOOK_LINK_HERE',
3    AdminAction     = 'INSERT_WEBHOOK_LINK_HERE',
4    PlayerDeath     = 'INSERT_WEBHOOK_LINK_HERE',
5    PlayerRevive    = 'INSERT_WEBHOOK_LINK_HERE',
6    ItemUsed        = 'INSERT_WEBHOOK_LINK_HERE',
7    Treatment       = 'INSERT_WEBHOOK_LINK_HERE',
8    Disease         = 'INSERT_WEBHOOK_LINK_HERE',
9    Injury          = 'INSERT_WEBHOOK_LINK_HERE',
10    ExploitDetected = 'INSERT_WEBHOOK_LINK_HERE',
11    LifePoints      = 'INSERT_WEBHOOK_LINK_HERE',
12}

Each key logs one event category. Replace the placeholder with a webhook URL to enable that log; leave the placeholder (or set false) to disable it.

Life Points

server/config_server.lua
1Config.LifePoints.Enabled        = true
2Config.LifePoints.StartingPoints = 100
3Config.LifePoints.MinPoints      = 0
4Config.LifePoints.DefaultPenalty = 10
5Config.LifePoints.PlayerKillPenalty = 3
6
7Config.LifePoints.NPCOverrides = {
8    [`Lurker`] = 7,
9    [`Gasbag`] = 7,
10}
11
12Config.LifePoints.ExternalReasons = {
13    ['radiazioni']    = 9,
14    ['infezione']     = 5,
15    ['patogeno_vx_9'] = 7,
16    ['bleedout']      = 5,
17    ['starvation']    = 2,
18    ['dehydration']   = 2,
19    ['overdose']      = 5,
20}
21
22Config.LifePoints.StaffPermissions = {
23    'god',
24    'admin',
25}
26
27Config.LifePoints.ExportAllowlist = {}
  • Enabled: toggle the LifePoints system.
  • StartingPoints: points each character starts with.
  • MinPoints: floor (points cannot drop below this).
  • DefaultPenalty: points lost per death without a more specific rule.
  • PlayerKillPenalty: points lost when killed by another player.
  • NPCOverrides: per-NPC-model penalty overrides (hashed model names).
  • ExternalReasons: penalties for non-combat death causes.
  • StaffPermissions: ACE / framework group names exempt from penalties and allowed to call the modify exports.
  • ExportAllowlist: resources permitted to call Set/Add/RemoveLifePoints. Empty allows any server resource (still blocks non-staff player context); populate to restrict.
Per-weapon penalties are escrowed

Config.LifePoints.PlayerKillWeapons and per-weapon penalty values live in internal/balance/weapon_penalties.lua and cannot be edited.

Life Points recovery

When a character's life points reach MinPoints, it enters a recovery period and cannot be played until the timer ends. Each character has its own timer, so the player can use another character in the meantime.

server/config_server.lua
1Config.LifePoints.Recovery = {
2    Enabled = false,
3    Duration = 3600,
4    Mode = 'hospital',
5    CountOffline = true,
6    RestorePoints = 100,
7}
  • Enabled: turns the recovery period on. When false or missing, reaching the minimum has no effect.
  • Duration: recovery length in real seconds (minimum 60). 3600 is one hour, 86400 is 24 hours.
  • Mode: 'hospital' holds the character at the nearest hospital spawn, frozen and invincible, with controls and inventory disabled and an on-screen countdown. 'logout' returns the player to character selection. 'kick' disconnects the player with the remaining time.
  • CountOffline: true counts real time, also while the player is offline. false counts only time spent online in recovery. Only applies to 'hospital'; the other modes always count real time.
  • RestorePoints: life points the character gets back when recovery ends.
Ending recovery early

Raising life points above MinPoints (/addlifepoints or the AddLifePoints export) ends the recovery immediately, without applying RestorePoints. In hospital mode, respawns during recovery always land at a hospital.

Character selection in logout mode

In 'logout' mode the client first calls RecoveryHandlers.Logout() in open/client/recovery_handlers.lua, which supports ml_multicharacter. If the character is still loaded after a few seconds, the framework logout runs, then a kick. Edit that function to use a different character selection resource.

Inventory wipe

server/config_server.lua
1Config.InventoryWipe = {
2    Enabled = true,
3    Whitelist = {
4        ['water']          = true,
5        ['id_card']        = true,
6        ['driver_license'] = true,
7        ['money']          = true,
8        ['phone']          = true,
9    },
10}
  • Enabled: wipe non-whitelisted inventory on respawn.
  • Whitelist: items kept on respawn; everything else is removed. The shipped list is a survival-server example, replace it with your server's protected items (IDs, licenses, owned weapons, blueprints).

Revive and hospital reset

server/config_server.lua
1Config.ReviveSettings = {
2    RestoreHealth     = true,
3    RestoreBlood      = true,
4    ResetBleeding     = true,
5    ClearInjuries     = true,
6    ClearFractures    = true,
7    ClearCasts        = true,
8    ClearDiseases     = true,
9    ResetHungerThirst = true,
10}
11
12Config.HospitalReset = {
13    RestoreHealth     = true,
14    RestoreBlood      = true,
15    ResetBleeding     = true,
16    ClearInjuries     = true,
17    ClearFractures    = true,
18    ClearCasts        = true,
19    ClearDiseases     = true,
20    ResetHungerThirst = true,
21}
  • ReviveSettings: Defaults applied on admin revives and calls to RevivePlayer. The export accepts a partial settings table to override fields for one call.
  • HospitalReset: Defaults applied on hospital/safe-zone respawn and calls to HospitalRespawn. The export accepts a partial settings table to override fields for one call.

Set ClearFractures / ClearCasts / ClearDiseases to false to keep fractures, casts, and diseases after hospital treatment. Medics can then treat fractures and diseases with casts and antibiotics.

server/config_server.lua
1Config.ReviveSettings.ClearDiseases = false
2Config.HospitalReset.ClearDiseases = false

These set the global defaults for their respective flows. To keep diseases for a single call without changing the configuration, pass only the field to override:

lua
1local ok, reason = exports.ml_healthsystem:RevivePlayer(source, { ClearDiseases = false })
lua
1local ok, reason = exports.ml_healthsystem:HospitalRespawn(source, { ClearDiseases = false })

Both exports accept the eight boolean fields listed above. Omitted fields inherit Config.ReviveSettings for RevivePlayer or Config.HospitalReset for HospitalRespawn. Neither export modifies the configuration or the supplied table. RestoreHealth = false keeps pre-reset health clamped between 101 and Config.MaxHealth. Preserved diseases, low blood volume, and bleeding continue their normal effects.

Fracture/injury reset interaction

ClearFractures = false with ClearInjuries = true causes a "ped slow after respawn / cannot sprint" bug because the leg fracture activates the limp clipset. Keep ClearFractures = true unless your medical workflow applies a cast post-respawn.

Database Tables

The resource creates three tables automatically on first start (no manual SQL):

  • ml_healthsystem: persisted per-character medical state (identifier, health_data LONGTEXT). Live in-session state runs on live states; this table is the save/load snapshot.
  • ml_health_tents: placed respawn tents bound to their owner.
  • ml_lifepoints: per-character life points and the recovery timer (recovery_until, recovery_left).
Health System Configuration, FiveM Docs | Micio Mods