>
Tutorial 2026-02-19

Sistema de Morte e Respawn em FiveM - Guia Completo

OntelMonke

OntelMonke

Admin & Developer na Agency Scripts

Detectando a morte do jogador

O sistema de morte e reaparecimento é uma das mecânicas mais fundamentais em qualquer servidor de RPG FiveM, governando o que acontece quando a saúde de um jogador chega a zero e como ele retorna ao jogo. O comportamento padrão de morte do GTA V envolve um reaparecimento automático no hospital mais próximo após uma breve cinemática, que quebra completamente a imersão no RPG. Para construir um sistema adequado, você precisa interceptar o estado de morte antes que o manipulador padrão do jogo assuma o controle. Monitore a saúde do jogador a cada frame usando GetEntityHealth e detecte quando ele cai para o limite de morte, que é 0 para peds. Quando a morte for detectada, use imediatamente NetworkResurrectLocalPlayer para evitar que a tela de morte padrão apareça e, em seguida, coloque o jogador em um estado de boneco de pano usando SetPedToRagdoll para simular estar incapacitado. Desative o sistema de respawn padrão chamando SetPlayerInvincible temporariamente enquanto você faz a transição para seu manipulador de estado de morte personalizado. Essa abordagem oferece controle total sobre a experiência da morte, mantendo o realismo visual.

O sistema de temporizador de sangramento

O cronômetro de sangramento cria uma janela crítica entre ser derrubado e estar totalmente morto, durante a qual outros jogadores podem interagir com a pessoa incapacitada. Quando um jogador entra no estado abatido, inicia uma contagem regressiva que o representa sangrando lentamente. Exiba este cronômetro com destaque na tela por meio de uma sobreposição NUI mostrando o tempo restante e instruções relevantes. Durante a fase de sangramento, o jogador deve estar em uma animação de ragdoll ou rastejante no chão, incapaz de usar armas, dirigir veículos ou interagir com a maioria dos objetos do mundo. Permita que jogadores abatidos usem bate-papo por voz de proximidade para que possam pedir ajuda ou interpretar seus ferimentos. A duração do temporizador deve ser configurável, normalmente entre 5 e 15 minutos, e longa o suficiente para que o EMS responda de forma realista. Implemente um sistema em que o cronômetro acelere se o jogador sofrer dano adicional enquanto estiver caído, e desacelere ou pause se outro jogador começar a aplicar itens de primeiros socorros, como bandagens ou um kit médico.

-- Client-side death state management
local isDead = false
local bleedoutTime = Config.BleedoutDuration -- seconds
local bleedoutTimer = 0
local lastStandUsed = false

CreateThread(function()
    while true do
        local ped = PlayerPedId()
        local health = GetEntityHealth(ped)

        if health <= 0 and not isDead then
            isDead = true
            bleedoutTimer = bleedoutTime
            lastStandUsed = false

            -- Prevent default death
            NetworkResurrectLocalPlayer(
                GetEntityCoords(ped), GetEntityHeading(ped),
                true, false
            )
            SetEntityHealth(ped, 1)
            SetEntityInvincible(ped, true)
            SetPedToRagdoll(ped, -1, -1, 0, false, false, false)
            ClearPedTasks(ped)

            -- Notify server
            TriggerServerEvent('death:playerDowned', GetEntityCoords(ped))

            -- Show death UI
            SendNUIMessage({ action = 'showDeathScreen', timer = bleedoutTimer })
        end

        if isDead then
            bleedoutTimer = bleedoutTimer - 1
            SendNUIMessage({ action = 'updateTimer', timer = bleedoutTimer })

            -- Disable controls while downed
            DisableControlAction(0, 22, true)  -- jump
            DisableControlAction(0, 24, true)  -- attack
            DisableControlAction(0, 25, true)  -- aim
            DisableControlAction(0, 75, true)  -- exit vehicle

            if bleedoutTimer <= 0 then
                -- Fully dead - offer respawn options
                SendNUIMessage({ action = 'showRespawnOptions' })
            end
        end

        Wait(isDead and 1000 or 500)
    end
end)

Mecânico da última posição

A mecânica da última resistência dá aos jogadores abatidos uma breve oportunidade de revidar ou rastejar para um local seguro, adicionando uma camada tática aos encontros de combate. Quando um jogador cair pela primeira vez, ofereça a ele uma ativação única que o coloque em uma posição de bruços, onde ele possa disparar uma arma com precisão e velocidade de movimento bastante reduzidas por 15 a 30 segundos antes de desmaiar completamente. Implemente isso colocando o jogador em uma animação rastejante usando TaskPlayAnim com um dicionário de animação baseado no solo e, em seguida, reativando temporariamente o uso de armas, mas restringindo-o apenas a pistolas. Aplique um efeito de balanço pesado da arma usando a manipulação da câmera para simular a dificuldade de mirar enquanto estiver mortalmente ferido. A última posição deve drenar o cronômetro de sangramento mais rapidamente, pois o esforço acelera a perda de sangue. Exiba indicadores visuais como dessaturação da tela, efeitos de vinheta e um som de batimento cardíaco que diminui com o tempo para criar tensão. Esta mecânica só deve estar disponível uma vez por ciclo de morte para evitar abusos, e deve ser totalmente desativada se o jogador for morto por um tiro na cabeça, representando um ferimento instantaneamente incapacitante.

Interação e Reavivamento EMS

O sistema de renascimento EMS é onde a mecânica da morte cria interações significativas entre o jogador abatido e os serviços médicos de emergência. Quando um jogador EMS se aproxima de um jogador caído, ele deverá ver um aviso de interação que inicia uma sequência de tratamento. O processo de tratamento deve levar um tempo realista, normalmente de 10 a 20 segundos, durante o qual o jogador do EMS realiza uma animação médica e não pode se mover ou se defender, criando vulnerabilidade que acrescenta riscos às respostas de emergência em áreas perigosas. Implemente vários níveis de tratamento: estabilização básica que impede o progresso do cronômetro de sangramento, tratamento avançado que começa a restaurar lentamente a saúde e renascimento total que retorna o jogador a um estado de pé com saúde parcial. Cada nível deve exigir itens médicos específicos do inventário do jogador EMS, como bandagens para estabilização, kit médico para tratamento e adrenalina para renascimento. Após o renascimento, aplique um debuff temporário onde o jogador reduziu o máximo de saúde e resistência por vários minutos, representando a recuperação de ferimentos quase mortais que desencoraja o retorno imediato ao combate.

-- Server-side EMS revival handler
RegisterNetEvent('death:attemptRevive')
AddEventHandler('death:attemptRevive', function(targetId, treatmentType)
    local src = source
    local emsPed = GetPlayerPed(src)
    local targetPed = GetPlayerPed(targetId)

    if not emsPed or not targetPed then return end

    -- Check distance
    local emsCoords = GetEntityCoords(emsPed)
    local targetCoords = GetEntityCoords(targetPed)
    if #(emsCoords - targetCoords) > 3.0 then return end

    -- Check if EMS has required items
    local requiredItems = Config.TreatmentItems[treatmentType]
    for _, item in ipairs(requiredItems) do
        if exports.ox_inventory:Search(src, 'count', item.name) < item.count then
            TriggerClientEvent('ox_lib:notify', src, {
                title = 'Missing supplies',
                description = 'You need: ' .. item.label,
                type = 'error'
            })
            return
        end
    end

    -- Remove items and start treatment
    for _, item in ipairs(requiredItems) do
        exports.ox_inventory:RemoveItem(src, item.name, item.count)
    end

    -- Trigger animations on both players
    TriggerClientEvent('death:startTreatmentAnim', src, targetId)
    TriggerClientEvent('death:receivingTreatment', targetId, src, treatmentType)

    -- After treatment duration, revive
    SetTimeout(Config.TreatmentDurations[treatmentType], function()
        TriggerClientEvent('death:revived', targetId, treatmentType)
        TriggerClientEvent('death:treatmentComplete', src)
    end)
end)

Sistema de reaparecimento hospitalar

Quando o cronômetro de sangramento expira sem a intervenção do EMS ou o jogador decide desistir, o sistema de respawn do hospital cuida do retorno deles ao jogo. Apresente ao jogador uma tela de morte NUI que mostra duas opções: esperar pelo EMS com um indicador visual de médicos de plantão próximos ou reaparecer no hospital mais próximo mediante o pagamento de uma taxa. O reaparecimento do hospital não deve ser instantâneo. Aplique uma animação de carregamento ou uma transição de fade to black e, em seguida, teletransporte o jogador para o interior do hospital com uma animação de acordar na cama usando um interior de quarto de hospital apropriado e um suporte de cama. Cobrar uma conta médica que corresponda à situação financeira atual do jogador, retirando uma porcentagem de seu dinheiro em mãos, em vez de uma taxa fixa, o que evita que o custo seja trivial para jogadores ricos e devastador para os recém-chegados. Após o reaparecimento do hospital, aplique um período de espera de lesão em que o jogador reduziu as estatísticas e está visualmente vestindo uma bata de hospital antes de poder trocar de roupa. Rastreie a frequência de mortes para implementar uma penalidade leve, onde jogadores que morrem com muita frequência em um curto espaço de tempo enfrentam custos crescentes de reaparecimento e períodos de recuperação mais longos, desencorajando comportamentos imprudentes sem fazer com que a morte pareça excessivamente punitiva por incidentes ocasionais.

Design de interface do usuário da tela da morte

A tela da morte é a principal interface que os jogadores veem durante o momento de jogo mais vulnerável, por isso precisa ser limpa, informativa e atmosférica. Construa-o como uma sobreposição NUI que assume o controle da tela quando o jogador entra no estado abatido. Aplique um filtro de dessaturação gradual que remove a cor do mundo do jogo, uma vinheta vermelha sutil ao redor das bordas da tela que pulsa com um ritmo cardíaco e um leve efeito de desfoque que se intensifica à medida que o temporizador de sangramento diminui. Exiba o tempo de sangramento restante como uma contagem regressiva proeminente no centro ou na parte superior da tela, junto com instruções de ação: pressione E para pedir ajuda através do telefone do jogo, segure G para ativar a última resistência, se disponível, ou segure X para desistir e reaparecer no hospital. Mostre uma notificação quando o EMS estiver a caminho com um horário estimado de chegada e exiba os nomes e distâncias dos jogadores próximos que poderiam ajudar. Mantenha a interface do usuário mínima e evite sobrecarregar a tela com informações desnecessárias durante o que deveria ser um momento tenso e envolvente. Use animações GSAP sutis para o aparecimento gradual dos elementos da IU e a contagem regressiva do cronômetro para manter o polimento visual.

Sistema de Lesões e Recuperação

Estenda o sistema de morte com uma camada de lesão que persista após o renascimento para adicionar profundidade e consequências. Quando um jogador é revivido pelo EMS ou reaparece no hospital, atribua os efeitos dos ferimentos com base na causa da morte. Ferimentos à bala causam uma animação flácida que reduz a velocidade de movimento em 20% por 15 minutos. As colisões de veículos aplicam um efeito de atordoamento com oscilações periódicas da tela por 10 minutos. Quedas de altura causam lesões nas pernas que impedem a corrida. O afogamento causa animação de tosse e redução da resistência. Armazene lesões ativas na bolsa de estado do jogador para que elas persistam após as reinicializações do script e fiquem visíveis para outros jogadores. Crie um caminho de tratamento de lesões onde os jogadores possam visitar um médico NPC ou um farmacêutico para receber medicamentos que reduzam a duração dos efeitos das lesões. Implemente um sistema de dor onde lesões graves causem tremores ocasionais na tela e sons de gemidos suprimidos que jogadores próximos possam ouvir, criando oportunidades para cidadãos preocupados ou criminosos predadores identificarem e interagirem com jogadores recentemente feridos. O sistema de lesões preenche a lacuna entre a morte e a recuperação total, tornando cada morte uma experiência multifásica que estende a dramatização em vez de ser uma inconveniência momentânea.

Configuração e controles administrativos

Um sistema de óbito flexível necessita de opções de configuração abrangentes e ferramentas administrativas. Fornece aos proprietários de servidores um arquivo de configuração que controla todos os aspectos de tempo: duração do sangramento, duração e disponibilidade do último suporte, fórmula de custo de reaparecimento hospitalar, durações de tratamento EMS por nível, durações de efeito de lesão por tipo e o tempo de espera entre as mortes antes da aplicação de penalidades crescentes. Adicione comandos administrativos que permitem aos membros da equipe reviver instantaneamente um jogador, matar um jogador para fins administrativos, ajustar o cronômetro de sangramento de um jogador específico, eliminar todas as lesões ativas e alternar o modo deus para eventos ou situações administrativas. Crie um registro de morte que registre a morte de cada jogador com data e hora, coordenadas de localização, causa da morte, identificador do assassino, se aplicável, tempo de resposta do EMS e se o jogador foi revivido ou reapareceu. Exponha esse registro através do seu painel de administração para que a equipe possa investigar padrões suspeitos, como mortes repetidas no mesmo local, indicando um acampamento de desova, ou reavivamentos incomumente rápidos, sugerindo abuso de EMS. O sistema de morte deve emitir eventos aos quais outros scripts podem se conectar, permitindo que seu sistema de trabalho notifique o EMS em serviço sobre jogadores abatidos próximos e seu sistema policial sinalize locais com mortes violentas frequentes.

Partilhar este artigo

Pronto para melhorar o teu servidor?

Explora os nossos scripts FiveM premium na loja Agency Scripts ou junta-te à nossa comunidade no Discord para suporte e atualizações.