Zurück zum Blog
Tutorial8 Min. Lesezeit

FiveM-Todes- und Respawn-System: Realistische Wiederbelebungen per Script

Gestalte ein ausgereiftes FiveM-Todes- und Respawn-System mit Ausblut-Timern, EMS-Wiederbelebungen, Krankenhausabläufen und Scripts für QBCore und ESX.

Agency Scripts

Gründer und leitender Entwickler bei Agency Scripts

Erkennen des Spielertods

Das Todes- und Respawn-System gehört zu den grundlegendsten Mechaniken auf jedem FiveM-Rollenspielserver. Es bestimmt, was passiert, wenn die Gesundheit eines Spielers auf null sinkt und wie er ins Spiel zurückkehrt. Das standardmäßige Todesverhalten von GTA V sieht nach einer kurzen Zwischensequenz einen automatischen Respawn im nächstgelegenen Krankenhaus vor, was die Rollenspiel-Immersion völlig zerstört. Für ein richtiges System musst du den Todeszustand abfangen, bevor die standardmäßige Spielroutine übernimmt. Überwache die Gesundheit des Spielers in jedem Frame mit GetEntityHealth und erkenne, wenn sie den Schwellenwert für den Tod erreicht, der bei Peds 0 beträgt. Wenn der Tod erkannt wird, verwende sofort NetworkResurrectLocalPlayer um zu verhindern, dass der standardmäßige Todesbildschirm erscheint. Versetze den Spieler anschließend mit SetPedToRagdoll in einen Ragdoll-Zustand, um eine Bewusstlosigkeit zu simulieren. Deaktiviere das standardmäßige Respawn-System vorübergehend mit SetPlayerInvincible während du zu deinem eigenen Handler für den Todeszustand wechselst. So hast du die volle Kontrolle über das Todeserlebnis und bewahrst gleichzeitig den visuellen Realismus.

Das Ausblutungs-Timersystem

Der Ausblutungs-Timer schafft ein entscheidendes Zeitfenster zwischen dem Niedergeschlagenwerden und dem endgültigen Tod. In dieser Zeit können andere Spieler mit der bewusstlosen Person interagieren. Starte einen Countdown, sobald ein Spieler in den niedergeschlagenen Zustand wechselt, um das langsame Ausbluten darzustellen. Zeige den Timer gut sichtbar in einem NUI-Overlay an, zusammen mit der verbleibenden Zeit und relevanten Anweisungen. Während der Ausblutungsphase sollte der Spieler am Boden in einer Ragdoll- oder Kriechanimation liegen und keine Waffen benutzen, Fahrzeuge fahren oder mit den meisten Objekten in der Spielwelt interagieren können. Erlaube niedergeschlagenen Spielern, den Sprachchat in ihrer Nähe zu nutzen, damit sie um Hilfe rufen oder ihre Verletzungen ausspielen können. Die Dauer des Timers sollte konfigurierbar sein, normalerweise zwischen 5 und 15 Minuten, und lang genug, damit der EMS realistisch reagieren kann. Implementiere ein System, bei dem der Timer schneller abläuft, wenn der Spieler im niedergeschlagenen Zustand weiteren Schaden erleidet, und langsamer läuft oder pausiert, wenn ein anderer Spieler mit Erste-Hilfe-Artikeln wie Verbänden oder einem Medizinkoffer Erste Hilfe leistet.

-- 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)

Letztes Gefecht

Die Mechanik des letzten Gefechts gibt niedergeschlagenen Spielern kurz die Möglichkeit, zurückzuschießen oder sich in Sicherheit zu kriechen. So erhält ein Kampf eine zusätzliche taktische Ebene. Wenn ein Spieler erstmals niedergeschlagen wird, biete ihm einmalig die Möglichkeit, sich in eine Bauchlage zu begeben. Dort kann er 15-30 Sekunden lang mit stark verringerter Genauigkeit und Bewegungsgeschwindigkeit eine Kurzwaffe abfeuern, bevor er endgültig zusammenbricht. Setze den Spieler dafür mit TaskPlayAnim in eine Kriechanimation mit einem Animations-Dictionary für Bodenbewegungen und aktiviere anschließend vorübergehend die Waffennutzung wieder, beschränkt auf Pistolen. Verwende Kameramanipulation, um starkes Waffenschwanken anzuwenden und so die Schwierigkeiten beim Zielen im schwer verletzten Zustand zu simulieren. Während des letzten Gefechts sollte der Ausblutungs-Timer schneller ablaufen, da die Anstrengung den Blutverlust beschleunigt. Zeige visuelle Hinweise wie entsättigte Farben, Vignettierungseffekte und einen Herzschlagton an, der mit der Zeit langsamer wird, um Spannung aufzubauen. Diese Mechanik sollte pro Todeszyklus nur einmal verfügbar sein, damit sie nicht missbraucht wird. Wurde der Spieler durch einen Kopfschuss getötet, sollte sie vollständig deaktiviert sein, da diese Verletzung sofort kampfunfähig macht.

Interaktion mit dem EMS und Wiederbelebung

Beim EMS-Wiederbelebungssystem entstehen bedeutungsvolle Rollenspielinteraktionen zwischen dem niedergeschlagenen Spieler und dem Rettungsdienst. Nähert sich ein EMS-Spieler einem niedergeschlagenen Spieler, sollte ein Interaktionshinweis erscheinen, über den die Behandlung gestartet werden kann. Der Behandlungsvorgang sollte eine realistische Zeit dauern, normalerweise 10-20 Sekunden. Währenddessen führt der EMS-Spieler eine medizinische Animation aus und kann sich weder bewegen noch verteidigen. Das schafft in gefährlichen Gebieten eine zusätzliche Gefahr und erhöht den Einsatz bei Rettungsmaßnahmen. Implementiere mehrere Behandlungsstufen: eine grundlegende Stabilisierung, die den Ausblutungs-Timer anhält, eine fortgeschrittene Behandlung, die die Gesundheit langsam wiederherstellt, und eine vollständige Wiederbelebung, die den Spieler mit teilweise wiederhergestellter Gesundheit wieder auf die Beine bringt. Für jede Stufe sollten bestimmte medizinische Gegenstände aus dem Inventar des EMS-Spielers benötigt werden, zum Beispiel Verbände zur Stabilisierung, ein Medizinkoffer für die Behandlung und Adrenalin zur Wiederbelebung. Wende nach der Wiederbelebung mehrere Minuten lang einen vorübergehenden Debuff an, durch den maximale Gesundheit und Ausdauer des Spielers reduziert sind. So wird die Erholung von Verletzungen nahe am Tod dargestellt und verhindert, dass Spieler sofort wieder in den Kampf einsteigen.

-- 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)

Respawn im Krankenhaus

Wenn der Ausblutungs-Timer ohne Eingreifen des EMS abläuft oder der Spieler aufgibt, bringt das Respawn-System im Krankenhaus ihn zurück ins Spiel. Zeige dem Spieler einen NUI-Todesbildschirm mit zwei Optionen: auf den EMS warten, mit einem visuellen Hinweis auf Sanitäter im Dienst in der Nähe, oder gegen eine Gebühr im nächstgelegenen Krankenhaus respawnen. Der Respawn im Krankenhaus sollte nicht sofort erfolgen. Verwende eine Ladeanimation oder einen Übergang mit Überblendung zu Schwarz und teleportiere den Spieler anschließend ins Krankenhausinnere. Spiele dort mit einem passenden Krankenhauszimmer-Innenraum und Bett-Prop eine Aufwachanimation ab. Berechne eine Krankenhausrechnung anhand der aktuellen finanziellen Situation des Spielers und ziehe einen Prozentsatz des mitgeführten Bargelds statt einer Pauschalgebühr ab. So ist der Betrag für wohlhabende Spieler nicht belanglos und für Neulinge nicht verheerend. Wende nach dem Respawn im Krankenhaus eine Verletzungs-Abklingzeit an, in der die Werte des Spielers reduziert sind und er sichtbar ein Krankenhaushemd trägt, bevor er seine Kleidung wechseln kann. Erfasse, wie häufig ein Spieler stirbt, und setze eine milde Strafe um: Spieler, die innerhalb kurzer Zeit sehr oft sterben, müssen mit steigenden Respawnkosten und längeren Erholungszeiten rechnen. So wird leichtsinniges Verhalten gebremst, ohne dass gelegentliche Todesfälle übermäßig bestraft werden.

Design des Todesbildschirms

Der Todesbildschirm ist die zentrale Benutzeroberfläche, die Spieler in ihrem verletzlichsten Gameplay-Moment sehen. Daher muss sie übersichtlich, informativ und atmosphärisch sein. Erstelle sie als NUI-Overlay, das den Bildschirm übernimmt, sobald der Spieler niedergeschlagen wird. Wende einen allmählichen Entsättigungsfilter an, der die Farben aus der Spielwelt nimmt, eine dezente rote Vignette an den Bildschirmrändern, die im Rhythmus eines Herzschlags pulsiert, sowie einen leichten Unschärfeeffekt, der mit abnehmendem Ausblutungs-Timer stärker wird. Zeige die verbleibende Ausblutungszeit als gut sichtbaren Countdown in der Mitte oder am oberen Bildschirmrand an, zusammen mit Aktionshinweisen: E drücken, um über das Ingame-Telefon Hilfe zu rufen, G gedrückt halten, um, falls verfügbar, das letzte Gefecht zu aktivieren, oder X gedrückt halten, um aufzugeben und im Krankenhaus zu respawnen. Zeige eine Benachrichtigung an, wenn der EMS unterwegs ist, einschließlich der geschätzten Ankunftszeit. Zeige außerdem die Namen und Entfernungen nahegelegener Spieler an, die möglicherweise helfen können. Halte die Benutzeroberfläche minimal und vermeide unnötige Informationen in einem Moment, der angespannt und immersiv sein soll. Verwende dezente GSAP-Animationen, um UI-Elemente einzublenden und den Countdown darzustellen, damit alles visuell ausgefeilt wirkt.

Verletzungs- und Erholungssystem

Erweitere das Todessystem um eine Verletzungsebene, die nach der Wiederbelebung bestehen bleibt und für mehr Tiefe und Konsequenzen sorgt. Weise dem Spieler bei einer Wiederbelebung durch den EMS oder einem Respawn im Krankenhaus je nach Todesursache Verletzungseffekte zu. Schusswunden verursachen eine Hinkanimation, die die Bewegungsgeschwindigkeit 15 Minuten lang um 20% reduziert. Autounfälle verursachen 10 Minuten lang einen Benommenheitseffekt mit regelmäßigem Bildschirmwackeln. Stürze aus großer Höhe führen zu einer Beinverletzung, die das Sprinten verhindert. Ertrinken verursacht Husten und verringert die Ausdauer. Speichere aktive Verletzungen im State Bag des Spielers, damit sie auch nach einem Neustart des Skripts bestehen bleiben und für andere Spieler sichtbar sind. Erstelle einen Behandlungsweg, über den Spieler einen Arzt-NPC oder eine Apothekerfigur unter den Spielern aufsuchen können, um Medikamente zu erhalten, die die Dauer der Verletzungseffekte verkürzen. Implementiere ein Schmerzsystem, bei dem schwere Verletzungen gelegentliches Zucken des Bildschirms und unterdrückte Stöhngeräusche verursachen, die nahegelegene Spieler hören können. So können besorgte Bürger oder räuberische Kriminelle kürzlich verletzte Spieler erkennen und mit ihnen interagieren. Das Verletzungssystem schließt die Lücke zwischen Tod und vollständiger Genesung. Dadurch wird jeder Todesfall zu einem mehrphasigen Erlebnis, das das Rollenspiel erweitert, statt nur eine vorübergehende Unannehmlichkeit zu sein.

Konfiguration und Admin-Steuerung

Ein flexibles Todessystem benötigt umfassende Konfigurationsoptionen und Admin-Werkzeuge. Stelle Serverbesitzern eine Konfigurationsdatei bereit, über die sie alle Zeitangaben steuern können: Ausblutungsdauer, Dauer und Verfügbarkeit des letzten Gefechts, Berechnungsformel für die Respawnkosten im Krankenhaus, Behandlungszeiten des EMS pro Stufe, Dauer der Verletzungseffekte pro Typ und die Abklingzeit zwischen Todesfällen, bevor steigende Strafen greifen. Füge Admin-Befehle hinzu, mit denen Mitarbeiter einen Spieler sofort wiederbeleben oder aus administrativen Gründen töten, den Ausblutungs-Timer eines bestimmten Spielers anpassen, alle aktiven Verletzungen entfernen und für Events oder administrative Situationen den God Mode ein- und ausschalten können. Erstelle ein Todesprotokoll, das jeden Tod eines Spielers mit Zeitstempel, Standortkoordinaten, Todesursache, gegebenenfalls der Kennung des Täters, der Reaktionszeit des EMS sowie dem Status der Wiederbelebung oder des Respawns erfasst. Stelle dieses Protokoll über dein Admin-Panel bereit, damit Mitarbeiter verdächtige Muster untersuchen können, etwa wiederholte Todesfälle am selben Ort, die auf Spawn-Camping hindeuten, oder ungewöhnlich schnelle Wiederbelebungen, die auf einen Missbrauch durch den EMS schließen lassen. Das Todessystem sollte Events auslösen, an die andere Skripte anknüpfen können. So kann dein Jobsystem den EMS im Dienst über niedergeschlagene Spieler in der Nähe informieren und dein Polizeisystem Orte mit häufigen gewaltsamen Todesfällen markieren.

Bereit loszulegen?

Hol dir die Scripts in unserem Shop, oder komm auf den Discord für Support, Updates und einen Blick auf das, was kommt.