DRS Deathscreen

Ecrã de morte moderno com monitor cardíaco ao vivo, temporizador, causa da morte e arma, pedido de ajuda ao INEM e câmara à volta do corpo.

v2.6.3 QBCoreQboxESXStandalone drs_deathscreen
Ver na loja

Ecrã de morte moderno que funciona por cima do teu sistema de ambulância: monitor cardíaco ao vivo com som, temporizador circular, causa da morte e arma, INEM de serviço, pedido de ajuda com blip e câmara à volta do corpo. Reviver e fazer respawn continua a ser do teu sistema — sem conflitos.

#Requisitos

Sistema de ambulânciaqb-ambulancejob, qbx_medical, esx_ambulancejob, nenhum (modo standalone) ou outro através de exports
Base de dadosNão precisa

#Instalação

  1. Coloca a pasta drs_deathscreen em resources e adiciona ao server.cfg, depois do sistema de ambulância:
server.cfg
ensure drs_deathscreen
  1. Desliga o deathscreen antigo, se tiveres.
  2. Ajusta os empregos do INEM, as teclas, a câmara e o som no config.lua.

Dica

qb-ambulancejob: os tempos (ReviveInterval e DeathTime) são lidos sozinhos do config dele. O DeathTime é quanto tempo se espera, morto, até poder ir ao hospital.

Atenção

qb-ambulancejob: para esconder o texto antigo e não haver dois alertas ao INEM, comenta em qb-ambulancejob/client/dead.lua as linhas DrawTxt(...) (dentro de if isDead then e elseif InLaststand then) e a linha TriggerServerEvent('hospital:server:ambulanceAlert', Lang:t('info.civ_down')).

#Como funciona

  • Ferido (last stand): o monitor bate cada vez mais devagar e o temporizador mostra o tempo até perder os sentidos.
  • Inconsciente: linha reta com alarme; o temporizador mostra o tempo até poder ir ao hospital.
  • G pede ajuda: os INEM de serviço recebem uma notificação e um blip que desaparece aos poucos. O cooldown é contado no servidor.
  • E segurado, quando o tempo acaba, leva ao hospital (no modo nativo é o teu sistema de ambulância que o faz).
  • A câmara anda à volta do corpo sem atravessar paredes, e o minimapa é escondido e reposto como estava.

#Causas de morte

Tiro, tiro na cabeça, arma branca, agressão, atropelamento, queda, afogamento, fogo, explosão e animal. O nome da arma vem do framework; quando o framework não o tem, é usada a lista das armas do GTA (PT/EN) incluída no script.

Nota

Em RP o autor da morte fica escondido por defeito (Config.ShowKiller = false).

#Opções principais

OpçãoPor defeitoDescrição
Config.DeathSystemautoSistema de ambulância usado
Config.Timersferido 360 / ajuda 0 / morto 300Tempos (com o qb-ambulancejob vêm do config dele)
Config.CallKey / Config.CallCooldownG / 60Pedir ajuda
Config.EmsJobsambulance, ems, doctorQuem recebe os alertas
Config.CustomDispatchnilFunção para enviar também para outro dispatch (ex.: ps-dispatch)
Config.ShowKiller / ShowWeapon / ShowDistancenão / sim / simO que aparece no ecrã
Config.DeathCamligadaCâmara à volta do corpo
Config.Soundligado, 0.25Som do batimento

#Configuração completa

config.lua
Config = {}

-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'

-- Framework: 'auto' deteta Qbox/QBCore/ESX (ou 'qbx' | 'qb' | 'esx' | 'none')
Config.Framework = 'auto'

-- ------------------------------------------------------------------ sistema de morte / death system
-- O DRS Deathscreen é o ecrã; a morte, o reviver e o respawn continuam a ser do teu sistema de ambulância.
-- DRS Deathscreen is the screen; dying, reviving and respawning stay with your ambulance system.
--   'auto'              deteta / detects qb-ambulancejob, qbx_medical, esx_ambulancejob
--   'qb-ambulancejob' | 'qbx_medical' | 'esx_ambulancejob'
--   'standalone'        sem sistema de ambulância: o próprio script faz o respawn / no ambulance system: this script respawns
--   'exports'           outro script controla o ecrã com exports.drs_deathscreen:SetState(...) / another script drives it
Config.DeathSystem = 'auto'

-- Tempos em segundos. Devem ser iguais aos do teu sistema de ambulância.
-- Times in seconds. They must match your ambulance system.
-- Com o qb-ambulancejob, 'down' e 'dead' são lidos sozinhos do config dele (ReviveInterval e DeathTime).
-- With qb-ambulancejob, 'down' and 'dead' are read from its own config (ReviveInterval and DeathTime).
Config.ReadAmbulanceConfig = true
Config.Timers = {
    down = 360,        -- ferido no chão (last stand) até morrer / downed (last stand) until dead
    helpAfter = 0,     -- segundos no chão até poder pedir ajuda (0 = logo) / seconds downed before help can be called (0 = right away)
    dead = 300,        -- morto até poder fazer respawn / dead until respawn is allowed
}

-- Respawn: tecla e tempo a segurar. No modo nativo, é o sistema de ambulância que faz o respawn
-- (o qb-ambulancejob usa E durante 5 s) e o ecrã só mostra o progresso.
-- Respawn: key and hold time. In native mode the ambulance system does the respawn (qb-ambulancejob uses
-- E for 5 s) and the screen only shows the progress.
Config.RespawnKey = 38            -- E
Config.RespawnKeyLabel = 'E'
Config.RespawnHold = 5

-- Só para 'standalone' / Only for 'standalone'
Config.Standalone = {
    hospital = vector4(298.6, -584.5, 43.26, 70.0),
    cost = 0,                     -- preço do respawn (0 = grátis) / respawn price (0 = free)
    account = 'bank',
}

-- ------------------------------------------------------------------ pedir ajuda / calling EMS
Config.CallKey = 47               -- G
Config.CallKeyLabel = 'G'
Config.CallCooldown = 60          -- segundos entre pedidos (validado no servidor) / seconds between calls (server-checked)
Config.EmsJobs = { 'ambulance', 'ems', 'doctor' }
Config.EmsRequireDuty = true
-- Alerta para o INEM: notificação e blip no mapa durante estes segundos / EMS alert: notification and map blip for these seconds
Config.AlertBlipTime = 90
Config.AlertBlip = { sprite = 153, color = 1, scale = 1.1 }
-- Enviar também para um dispatch externo. Recebe (src, coords) e corre no SERVIDOR.
-- Also send to an external dispatch. Receives (src, coords) and runs on the SERVER.
Config.CustomDispatch = nil
--[[ exemplo / example (ps-dispatch):
Config.CustomDispatch = function(src, coords)
    TriggerEvent('ps-dispatch:server:notify', { message = 'Pessoa inconsciente', codeName = 'civdown', code = '10-52',
        icon = 'fas fa-heart-pulse', priority = 1, coords = coords, jobs = { 'ems' } })
end
]]

-- ------------------------------------------------------------------ o que aparece / what is shown
Config.ShowKiller = false          -- mostrar o ID de quem matou (em RP costuma ficar desligado) / show the killer's ID (usually off for RP)
Config.ShowWeapon = true
Config.ShowDistance = true
Config.ShowEmsOnline = true
Config.HideRadar = true            -- esconder o mapa enquanto está no chão / hide the minimap while down

-- Frases que aparecem por baixo do título (uma ao calhas). Vazio = nenhuma.
-- Lines shown under the title (one at random). Empty = none.
Config.Quotes = {
    pt = {
        'Aguenta. A ajuda pode estar a caminho.',
        'Respira fundo. Ainda não acabou.',
        'Alguém há de ouvir o teu pedido.',
    },
    en = {
        'Hold on. Help might be on the way.',
        'Breathe. It is not over yet.',
        'Someone will hear your call.',
    },
}

-- Som do batimento (gerado no ecrã, sem ficheiros) / Heartbeat sound (generated, no files)
Config.Sound = { enabled = true, volume = 0.25 }

-- Câmara à volta do corpo / Camera circling the body
Config.DeathCam = {
    enabled = true,
    distance = 4.5,
    height = 2.2,
    speed = 4.0,        -- graus por segundo / degrees per second
    fov = 55.0,
    onlyWhenDead = false, -- true = só depois de morrer, não quando está ferido / only after death, not while downed
}

-- Deixar a rádio ao morrer (pma-voice) / Leave the radio on death (pma-voice)
Config.LeaveRadioOnDeath = false

-- Webhook do Discord para as mortes (vazio = desligado) / Discord webhook for deaths (empty = off)
Config.Webhook = ''

-- Notificações com ox_lib quando estiver a correr / Use ox_lib notifications when it is running
Config.UseOxNotify = false

#Para programadores

client
-- para ligar outro sistema de morte (Config.DeathSystem = 'exports')
exports.drs_deathscreen:SetState('down', 300)   -- 'alive' | 'down' | 'dead', segundos opcionais
exports.drs_deathscreen:GetState()
server
exports.drs_deathscreen:IsDown(src)
exports.drs_deathscreen:GetState(src)           -- 'alive' | 'down' | 'dead'

#Resolução de problemas

Aparece o texto antigo do qb-ambulancejob por baixo — vê o aviso na instalação.

O INEM recebe dois alertas — comenta o alerta do G no qb-ambulancejob (aviso na instalação).

A arma aparece como "Desconhecida" — a arma não existe no framework nem é uma arma base do GTA (armas addon sem nome); acrescenta-a aos itens/armas do framework.