ShadowDeathScreen
An immersive death flow: agony, a styled screen with a countdown, an EMS call and revival by medics.
- Version
- 1.1.0
- Resource
- SF-DeathScreen
Overview#
SF-DeathScreen replaces the moment a player dies with something worth playing. The world drains to black and white, blurs, and a heartbeat rises while the countdown runs. The player stays in the scene and can still roleplay: pressing E calls the medics, pressing G respawns at the nearest hospital once the timer is out. Exports let it sit underneath the ambulance script you already run, rather than replace it.
Agony screen
The player collapses and the screen shows the cause of death alongside the countdown.
Visual effects
Black and white, blur, ragdoll and a heartbeat whose volume and interval you set.
Roleplay while downed
The player keeps the use of /me during agony, so the scene continues.
Calling the medics
Pressing E alerts every EMS on duty and drops a blip on the body, with a cooldown.
Hospital respawn
Pressing G respawns at the nearest configured hospital once the timer is out, against medical fees.
Free EMS revival
A medic revives at any moment and at no cost, with no waiting on the timer.
Detection on three paths
The game damage event, the framework announcement and a safety watch. The first to answer wins.
Five languages
French, English, Spanish, German and Italian, in files that stay editable after escrow.
Dependencies#
| Resource | Required | Why |
|---|---|---|
ox_lib | Yes | Interface and notifications, declared in the manifest. |
es_extended / qb-core / qbx_core | No | Detected at startup. Without one, the resource runs standalone and skips the job checks. |
Installation#
- Disable the death screen of your ambulance script first, or stop that resource if it only served that purpose.
- Drop the SF-DeathScreen folder into your server resources directory.
- Add the ensure lines below to your server.cfg, after ox_lib and your framework.
- Set Config.Hospitals with your respawn points and Config.EmsJobs with your medical jobs.
- Check Config.AdminGroups so your staff can use /revive me.
- Run refresh, then restart SF-DeathScreen. A restart alone does not re-read the manifest.
ensure ox_lib ensure SF-DeathScreen # Optional: grant the revive permission by ACE rather than by framework rank add_ace group.admin sf.revive allow
Configuration#
| Key | Default | What it does |
|---|---|---|
Config.Enabled | true | Turns the whole death flow off without uninstalling the resource. |
Config.DisableFrameworkDeath | true | Blocks the game automatic respawn so the agony screen has time to appear. |
Config.RespawnTimer | 300 | Seconds before the player may respawn at hospital. |
Config.RespawnCost | โ | Medical fee charged on respawn, taken server-side. |
Config.EmsJobs | โ | Jobs treated as medical staff. |
Config.AdminGroups | โ | Framework ranks allowed to use /revive me. |
Config.Hospitals | โ | Respawn points. The nearest one is chosen. |
Config.Effects | โ | Black and white, blur, ragdoll, heartbeat volume and interval. |
Config.EmsAlert | โ | Blip, display duration and call cooldown. |
Config.ExtraDeathEvents | โ | Additional death events specific to your server. |
Config.Locale | fr | fr ยท en ยท es ยท de ยท it |
Commands#
| Command | Who | What it does |
|---|---|---|
/revive | EMS | Revives the nearest downed player, within five metres. |
/revive <id> | EMS | Revives that player, within five metres. |
/revive <id> | Admin | Revives at any distance. |
/revive me | Admin | Revives yourself. |
revive <id> | Console | From the server console. |
/sf_death_debug | Admin | Lists downed players and the current configuration. |
/deathtest | โ | Forces the screen without dying. Only when Config.Debug is true. |
Staff are recognised either by ACE permission โ sf.revive, group.admin โ or by their framework rank listed in Config.AdminGroups. Most ESX servers declare no ACE at all, so both paths are accepted.
Exports#
Three server exports let your ambulance script read and drive the downed state.
exports['SF-DeathScreen']:IsPlayerDowned(source) --> boolean exports['SF-DeathScreen']:RevivePlayer(source) --> boolean exports['SF-DeathScreen']:GetDownedPlayers() --> { { source, elapsed, coords, cause, called } }