v1.0.1

Summary

This release adds drowning, hospital Self Check-In when no medics are on duty, and a citizen EMS phone app (call, health, insurance, prescriptions, outbreaks). Merge config/config.lua and the locale files — insurance auto-renews every Config.health_insurance_days (default 30).

What's New

Features

  • Self Check-In at hospital reception when no medics are on duty (Config.features.self_check_in)
  • Drowning (mild / water aspiration / respiratory failure); last-standing players left underwater go into arrest (Config.drowning)
  • okokPhone EMS app: call an ambulance, My Health, nearby hospitals, insurance, prescriptions, certifications, job application, and outbreaks (Config.mobile_app)
  • Insurance plans last Config.health_insurance_days (default 30) and auto-renew from the player's bank; plan cards list coverage from treatment services
  • HUD layout editor opens on the first clock-in
  • Units can leave a dispatch call without concluding it
  • Deathscreen Config.status.dead.freeze_frame (default off)
  • Rain no longer gives a cold by default

Bug Fixes

  • /revive no longer silently does nothing for invalid, missing, or console targets
  • Opening the patient hotbar holsters the medic's weapon
  • Bandage props no longer linger after a resource restart

File Changes

⚙️ Configuration & Bridge Files

These files are not encrypted. Review the changes below — you may need to manually apply updates to your server's config files.

config/config.lua

     features = {
         --- Outbreaks, infections (zones, rain, food, player spread), and the tablet Diseases page.
-        --- Legacy master switch; Config.diseases.enabled=false also forces this off (see shared/init.lua).
+        --- Legacy master switch; Config.diseases.enabled=false also forces this off (see core/shared.lua).
         diseases = true,
 
+        --- Reception "Self Check-In": with no medics on duty and a free bed, the player is
+        --- admitted and the bed heals them to full health before discharging them.
+        self_check_in = true,
+
         --- EMS staff can train and certify normal players
                 spawn_probability = 0, -- rain-only, no zones
                 --- Rain exposure vector: standing in rain can give you a cold.
-                rain = { enabled = true },
+                rain = { enabled = false },
     hospital_respawn_hold_duration = 3000,
     condition_damage_interval = 5000,
+    --- Insurance plans last this many days, then auto-renew from the player's bank into the society.
+    health_insurance_days = 30,
     --- How often (hours) expired plans of online players are renewed, or dropped if they can't pay.
     health_insurance_hours_renewal = 1,
 
+    --[[ Citizen phone app (okokPhone) ]]
+    mobile_app = {
+        call_cooldown = 120, -- seconds between EMS calls from the same player's phone
+    },
+
     --[[ Blood donation & transfusion ]]
             respawn_min_wait = 5 * 60 * 1000,
+            -- Deathscreen burn freezes the last frame alive. false keeps the live world moving under the red.
+            freeze_frame = false,
             -- Hospital E-respawn inventory wipe. false keeps everything and ignores filtered_items.
             clear_inventory = true,
         respect_care_owner = true,
     },
 
+    --[[ Drowning ]]
+    --- Builds up while the head is underwater with no air left. Downed players can't hold their breath,
+    --- so they start aspirating as soon as they go under.
+    drowning = {
+        enabled = true,
+        -- Seconds underwater before the condition worsens. It starts as mild on the first second.
+        stages = { moderate = 10, severe = 20 },
+        -- Mild drowning clears on its own after this many seconds. Moderate and severe need treatment.
+        mild_recovery_seconds = 120,
+        -- A player in last standing still underwater after this many seconds goes into cardiac arrest.
+        arrest_seconds = 30,
+        -- Success multipliers while drowning is untreated. Rescue breaths are what brings a drowned patient back,
+        -- a shock rarely does.
+        cpr_chance_mult = 2.0,
+        defib_chance_mult = 0.5,
+    },
+
     --[[ AI NPC ]]
             params = {
-                { name = "target", help = "Server Id of the targeted player", optional = true }
+                { name = "target", type = "playerId", help = "Server Id of the targeted player", optional = true }
             },

bridge/server/player.lua

 function player.getMetadata(source, key)
     local playerObj = player.getPlayerObject(source)
-    if not playerObj then return end
+    if not playerObj then return nil end
 
     if Framework.name == "esx" then
-        return playerObj.getMeta(key)
+        return (playerObj.getMeta(key))
     else
         return playerObj.PlayerData.metadata[key]
     end

fxmanifest.lua

 description "Luxu Medicine - Ambulance Job"
-version "1.0.0"
+version "1.0.1"

locales/en.json (also es.json, pt.json)

-  "mobile_app_title": "Outbreak Map",
-  "mobile_app_medics_online": "%s medics online · %s on duty",
-  "mobile_app_no_medics": "No medics online",
-  "mobile_app_updated": "Updated %s",
+  "mobile_app_no_medics": "No medics on duty",
+  "mobile_loading": "Loading...",
+  "mobile_tab_home": "Help",
+  "mobile_tab_health": "My Health",
+  "mobile_tab_outbreaks": "Outbreaks",
+  "mobile_tab_services": "Services",
+  "mobile_call_title": "Call an ambulance",

New keys also cover the rest of the phone app (mobile_call_*, mobile_nearby_*, mobile_insurance_*, mobile_prescriptions_*, mobile_certifications_hint, mobile_application_*, mobile_outbreak_*), drowning labels, Self Check-In, dispatch leave, and insurance renew/lapse copy.

+  "drowning_mild": "Drowning - Mild",
+  "drowning_moderate": "Drowning - Water Aspiration",
+  "drowning_severe": "Drowning - Respiratory Failure",
   "dispatch_answered": "You have answered the dispatch call",
   "dispatch_concluded": "You have concluded the dispatch call",
+  "dispatch_left": "You are no longer responding to the dispatch call",
-  "insurance_save_percent": "Save %s%",
   "insurance_current_plan": "Current plan",
-  "insurance_per_month": "/ month",
+  "insurance_per_days": "/ %s days",
-  "insurance_cancel_confirm": "Are you sure you want to cancel your %s plan?",
-  "insurance_select_confirm": "Are you sure you want to select the %s plan?",
+  "insurance_cancel_confirm": "Are you sure you want to cancel your %s plan? The remaining days are not refunded.",
+  "insurance_select_confirm": "Subscribe to %s for %s? It renews automatically from your bank every %s days.",
   "insurance_confirm_plan": "Confirm Plan",
+  "insurance_switch_note": "Your current plan will be replaced without a refund.",
+  "insurance_feature_free": "Free: %s",
+  "insurance_feature_discount": "%s%% off: %s",
+  "insurance_renewed": "Your %s insurance has been renewed",
+  "insurance_lapsed": "Your insurance expired: not enough bank balance to renew",
-  "creator_preview_on_ground": "Preview on ground: move with cursor, scroll to rotate, E to confirm"
+  "creator_preview_on_ground": "Preview on ground: move with cursor, scroll to rotate, E to confirm",
+  "self_check_in_title": "Self Check-In",
+  "self_check_in_description": "Get admitted to a bed when no medics are on duty",
+  "self_check_in_medics_online": "There are medics on duty. Please ask them for assistance.",
+  "self_check_in_no_beds": "There are no free beds at this hospital right now.",
+  "self_check_in_not_needed": "You don't need medical treatment.",
+  "self_check_in_unavailable": "You can't check in right now.",
+  "self_check_in_admitted": "You've been admitted to %s. Rest until you're fully healed.",
+  "self_check_in_discharged": "You're fully healed and have been discharged."

Full list of files changed

Change File
Modified bridge/server/player.lua
Modified client/cl_main.lua
Modified client/handlers/complaints.lua
Modified client/handlers/dev_commands.lua
Added client/handlers/mobile_app.lua
Modified client/handlers/nui.lua
Modified client/handlers/targets.lua
Added client/modules/conditions/drowning.lua
Modified client/modules/status.lua
Modified client/modules/treatment/bandage.lua
Modified client/modules/treatment/hand_tools/bandage.lua
Modified client/modules/treatment/hospital_beds.lua
Modified client/modules/treatment/patient_hotbar.lua
Modified config/config.lua
Added core/server.lua
Added core/shared.lua
Added core/version_check.lua
Modified data/hospitals.json
Modified fxmanifest.lua
Modified locales/en.json
Modified locales/es.json
Modified locales/pt.json
Modified server/features/damage.lua
Modified server/features/dispatch.lua
Modified server/features/insurance.lua
Added server/features/mobile_app.lua
Modified server/features/player_formation.lua
Modified server/features/treatment.lua
Modified server/modules/care.lua
Modified server/modules/conditions.lua
Added server/modules/drowning.lua
Modified server/modules/job.lua
Modified server/modules/mobility.lua
Modified server/modules/statistics.lua
Modified server/services/database.lua
Removed server/services/version_check.lua
Modified server/sv_main.lua
Removed server/sv_utils.lua
Modified shared/constants.lua
Removed shared/init.lua
Modified shared/phone_app.lua
Modified web/