-- ===================================================================== -- Aether Death — Clientlogik -- Erkennt den Tod, legt den Spieler zu Boden und zeigt den Screen. -- ===================================================================== local istVerletzt = false local istGeladen = false local function SendeAnNui(nachricht) SendNuiMessage(json.encode(nachricht)) end --- Legt den Spieler in den Verletzt-Zustand local function LegeZuBoden() local ped = PlayerPedId() -- Am Leben halten, aber bewegungsunfaehig — GTA soll nicht respawnen SetEntityHealth(ped, 101) SetEntityInvincible(ped, true) NetworkSetFriendlyFireOption(false) -- Liegende Haltung RequestAnimSet('move_m@injured') SetPedMoveRateOverride(ped, 0.0) SetPedToRagdoll(ped, 8000, 8000, 0, false, false, false) -- Steuerung einschraenken (nur Umsehen bleibt moeglich) SetPlayerInvincible(PlayerId(), true) end --- Hebt den Verletzt-Zustand wieder auf --- @param leben number Lebensenergie nach dem Aufstehen local function StelleWiederHer(leben) local ped = PlayerPedId() ClearPedTasksImmediately(ped) SetEntityHealth(ped, leben or 200) SetEntityInvincible(ped, false) SetPlayerInvincible(PlayerId(), false) SetPedMoveRateOverride(ped, 1.0) ResetPedMovementClipset(ped, 0.0) istVerletzt = false SetNuiFocus(false, false) SendeAnNui({ aktion = 'schliessen' }) pcall(function() exports['aether-hud']:SetzeSichtbar(true) end) end -- --------------------------------------------------------------------- -- Todeserkennung -- --------------------------------------------------------------------- AddEventHandler('aether:client:bereit', function() istGeladen = true end) CreateThread(function() while true do Wait(300) if istGeladen and not istVerletzt then local ped = PlayerPedId() -- GTA meldet den Spieler als tot, sobald die Lebensenergie faellt if IsEntityDead(ped) or GetEntityHealth(ped) <= 100 then istVerletzt = true LegeZuBoden() TriggerServerEvent('aether:death:gefallen') end end end end) --- Verhindert, dass GTA den Spieler automatisch respawnt CreateThread(function() while true do if istVerletzt then Wait(0) -- Steuerung sperren, Umsehen erlauben DisableAllControlActions(0) EnableControlAction(0, 1, true) -- Kamera horizontal EnableControlAction(0, 2, true) -- Kamera vertikal EnableControlAction(0, 245, true) -- Chat -- Automatischen Respawn unterbinden local ped = PlayerPedId() if GetEntityHealth(ped) < 101 then SetEntityHealth(ped, 101) end IgnoreNextRestart(true) SetFadeOutAfterDeath(false) else Wait(500) end end end) -- --------------------------------------------------------------------- -- Ereignisse vom Server -- --------------------------------------------------------------------- RegisterNetEvent('aether:death:zeige', function(zustand) istVerletzt = true LegeZuBoden() SetNuiFocus(true, true) pcall(function() exports['aether-hud']:SetzeSichtbar(false) end) zustand.aktion = 'oeffnen' SendeAnNui(zustand) end) RegisterNetEvent('aether:death:zustand', function(zustand) zustand.aktion = 'zustand' SendeAnNui(zustand) end) RegisterNetEvent('aether:death:hinweis', function(text) SendeAnNui({ aktion = 'hinweis', text = text }) end) --- Ein Sanitaeter hat geholfen RegisterNetEvent('aether:death:wiederbelebt', function(daten) SendeAnNui({ aktion = 'behandelt' }) Wait(2500) -- Ergebnisbildschirm kurz stehen lassen StelleWiederHer(daten.leben) end) --- Aufgegeben oder verblutet: im Krankenhaus aufwachen RegisterNetEvent('aether:death:krankenhaus', function(daten) SendeAnNui({ aktion = 'krankenhaus', klinik = daten.klinik, kosten = daten.kosten, bezahlt = daten.bezahlt, grund = daten.grund, }) DoScreenFadeOut(800) Wait(1200) local ped = PlayerPedId() local ziel = daten.position SetEntityCoordsNoOffset(ped, ziel.x, ziel.y, ziel.z, false, false, false) SetEntityHeading(ped, ziel.w or 0.0) StelleWiederHer(daten.leben) -- Warten, bis die Umgebung geladen ist local versuche = 0 while not HasCollisionLoadedAroundEntity(ped) and versuche < 60 do Wait(50) versuche = versuche + 1 end DoScreenFadeIn(1000) end) -- --------------------------------------------------------------------- -- NUI-Callbacks -- --------------------------------------------------------------------- RegisterNUICallback('emsRufen', function(_, rueckgabe) TriggerServerEvent('aether:death:emsRufen') rueckgabe({ ok = true }) end) RegisterNUICallback('aufgeben', function(_, rueckgabe) TriggerServerEvent('aether:death:aufgeben') rueckgabe({ ok = true }) end) --- Um Hilfe rufen: Umstehende hoeren es (rein oertlich) RegisterNUICallback('hilfeRufen', function(_, rueckgabe) local ped = PlayerPedId() PlayPain(ped, 6, 0) SendeAnNui({ aktion = 'hinweis', text = 'Du schreist um Hilfe …' }) rueckgabe({ ok = true }) end) -- --------------------------------------------------------------------- -- Aufraeumen -- --------------------------------------------------------------------- AddEventHandler('onResourceStop', function(ressource) if ressource ~= GetCurrentResourceName() then return end SetNuiFocus(false, false) local ped = PlayerPedId() SetEntityInvincible(ped, false) SetPlayerInvincible(PlayerId(), false) SetPedMoveRateOverride(ped, 1.0) end)