FiveM Tod und Belebungssystem: letzter Stand, Respawn und State Bags
Wie ein FiveM-Sterbensystem funktioniert: letzter Stand vs. tot, Respawn-Timer, Beleben von Admin oder EMS, Syncing des toten Zustands mit State Bags und Behebung von Combat-Logging.
Das Symptom: Ein Spieler stirbt und sieht keine Respawn-Option, oder kann nicht belebt werden, oder disconnectet während des Todes und kommt mit voller Gesundheit zurück.
Der Tod in FiveM ist nicht eine Funktion. Das Spiel weiß nur, dass ein Ped null Gesundheit hat. Alles andere (die Niedergestreckt-Animation, der Timer, die Belebung) wird von deinem Framework und der Krankenwagen-Ressource erstellt. Dieser Artikel erklärt die beweglichen Teile, damit du finden kannst, welche kaputt ist.
Was das Spiel weiß
Das Engine sagt dir, dass ein Ped tot ist, nichts mehr. Ressourcen erkennen es mit einem nativen Check oder mit dem Schaden-Game-Event, dann übernehmen:
-- client
CreateThread(function()
local wasDead = false
while true do
Wait(500)
local dead = IsEntityDead(PlayerPedId())
if dead and not wasDead then
TriggerServerEvent('myjob:playerDied')
end
wasDead = dead
end
end)Der ESX-Kern verursacht ein Todes-Event, das Skripte hören können, und QBCore behält Flags in den Metadaten des Spielers. In beiden hört deine Krankenwagen-Ressource auf den Tod und führt den Rest aus.
Letzter Stand vs. Tod
Viele Setups haben zwei Stufen:
| Zustand | Was der Spieler tun kann | Wie es endet |
|---|---|---|
| Letzter Stand (Niedergestreckt) | Kriechen, um Hilfe rufen, warten | Von EMS belebt, oder der Timer läuft ab und sie sterben |
| Tot | Nichts, der Bildschirm zeigt einen Respawn-Timer | Respawn im Krankenhaus, oder eine Belebung |
QBCore-Stil-Setups exponieren dies als separate Flags (ein letzter Stand-Flag und ein Todes-Flag). ESX-Setups haben normalerweise nur den toten Zustand. Wähle, was dein Server braucht und mische nicht zwei Krankenwagen-Ressourcen, da jede ihre eigenen Flags verfolgt und sie über dem Ped kämpfen.
Der Respawn-Timer
Der Timer ist ein Client-Countdown mit einer Server-Regel dahinter. Zwei Einstellungen sind am wichtigsten:
- Respawn-Zeit: Wie lange, bevor der Spieler einen Schlüssel zum Respawn drücken darf.
- Verblutz-Zeit (wenn du letzten Stand verwendest): Wie lange, bevor der niedergestreckte Spieler stirbt.
Wenn die Respawn-Taste nichts macht, ist die Ursache fast immer, dass der Timer nie gestartet wurde, da das Todes-Flag nie gesetzt wurde. Überprüfe die Konsole auf Fehler im Moment des Todes.
Das Respawnen muss mehrere Dinge zusammen zurücksetzen: Gesundheit, das Todes-Flag, die Todes-Animation, die Bildschirm-Effekte und die Position im Krankenhaus. Wenn du nur Gesundheit zurücksteuerst, steht der Spieler in der Todes-Animation auf.
Beleben von Admin oder EMS
Die meisten Frameworks und Krankenwagen-Ressourcen versenden einen /revive-Stil-Befehl für Admins und eine EMS-Aktion für Spieler im Job. Sie enden alle damit, das Gleiche auf dem Client zu tun:
-- client: bring the local player back at their current position
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, GetEntityHeading(ped), true, false)
ClearPedTasksImmediately(ped)
SetEntityHealth(ped, GetEntityMaxHealth(ped))
ClearPedBloodDamage(ped)Dann löscht die Ressource sein Todes-Flag. Wenn du nur die Natives aufrufst und das Flag überspringst, ist der Spieler lebendig in der Welt, aber immer noch „tot" für das Framework, und der Respawn-Bildschirm bleibt oben. Verwende die Belebungsfunktion deiner Krankenwagen-Ressource, wann immer du kannst, und schreibe deine eigene nur, wenn du sie ersetzt.
Achtung: Der Belebungs-Befehl muss durch Berechtigung eingeschränkt werden, und durch Job für die EMS-Version. Siehe ACE permissions für die Admin-Seite.
Syncing des toten Zustands mit State Bags
Andere Spieler und andere Skripte müssen wissen, dass jemand tot ist: EMS-Blips, eine „Rob nicht einen toten Spieler"-Überprüfung, ein Inventar, das sich weigert zu öffnen. Das Abfragen jedes Clients ist langsam. Ein state bag ist das natürliche Fit, da späte Beitretende es auch sehen:
-- server
RegisterNetEvent('myjob:playerDied', function()
local src = source
Player(src).state:set('isDead', true, true)
end)
local function revive(src)
Player(src).state:set('isDead', false, true)
TriggerClientEvent('myjob:revive', src)
end-- any script, server
if Player(targetSrc).state.isDead then
-- allow the revive action
endVerwende einen Namen, den deine anderen Skripte auch lesen, oder das Flag hilft niemandem. Einige Frameworks behalten bereits ein Todes-Flag in Spieler-Daten, also überprüfe zuerst und lese es, anstatt eine zweite Wahrheitsquelle zu machen.
Combat-Logging
Ein Spieler, der sich während des Todes disconnectet, dann wiederverbindet, sollte immer noch tot sein. Ohne das, Jemanden zu töten macht nichts.
- Auf
playerDropped, überprüfe, ob der Spieler tot war und speichere das in der Datenbank mit dem Charakter. - Wenn der Charakter geladen wird, lese das Flag und setze ihn zurück in den toten oder niedergestreckt Zustand.
- Mache den Respawn-Timer erneut starten, oder behalte die verbleibende Zeit, wenn du streng sein möchtest.
AddEventHandler('playerDropped', function()
local src = source
if Player(src).state.isDead then
-- save the dead flag for this character
end
end)Wo das Flag gespeichert wird, hängt von deinem Framework ab. Viele Krankenwagen-Ressourcen behalten bereits ein Todes-Flag in der Datenbank, also suche zuerst danach, bevor du ein zweites hinzufügst. Schütze auch vor dem Gegenteil: Ein Spieler, der nach einem Crash tot steckt, braucht einen Admin-Belebung, weshalb der Befehl oben existieren sollte.
Checkliste
| Symptom | Lösung |
|---|---|
| Respawn-Taste macht nichts | Das Todes-Flag wurde nie gesetzt: Suche nach einem Skript-Fehler im Moment des Todes |
| Spieler belebt, aber Bildschirm sagt immer noch tot | Leere das Framework-Todes-Flag, nicht nur die Gesundheit |
| Spieler steht in der Todes-Animation auf | Leere Aufgaben und setze den Ped nach dem Respawn zurück |
| Zwei Krankenwagen-Skripte kämpfen | Führe nur ein Sterbens-System aus |
| Andere können nicht sehen, wer tot ist | Setze einen replizierten State Bag auf den Spieler |
| Spieler kommt lebend zurück, nachdem ich disconnectet | Speichere das Todes-Flag auf playerDropped und stelle es auf Laden wieder her |
Kurze Antworten
Wie belebe ich einen Spieler als Admin?
Die meisten Frameworks und Krankenwagen-Ressourcen enthalten einen /revive-Stil-Admin-Befehl. Der Name und die Berechtigung, die er braucht, hängen von deinen Ressourcen ab, also überprüfe deine Krankenwagen- oder Admin-Menü-Ressource.
Was ist der Unterschied zwischen letztem Stand und Tod?
Letzter Stand ist ein Niedergestreckt-Zustand, in dem der Spieler kriechen oder darauf warten kann, geholfen zu werden. Tot ist der letzte Zustand, in dem nur ein Respawn oder eine Belebung sie zurückbringt. Nicht jedes Framework hat beide.
Wie halte ich Spieler davon ab, während des Todes zu disconnecten?
Speichere den Todes-Zustand, wenn der Spieler verlässt, und wende ihn wieder an, wenn sie zurück laden. Wenn die Todes-Flag nicht gespeichert ist, kommt der Spieler wieder am Leben.

