local deadAnimDict = "dead" local deadAnim = "dead_a" local hold = 5 deathTime = 0 -- Functions local function loadAnimDict(dict) while (not HasAnimDictLoaded(dict)) do RequestAnimDict(dict) Wait(5) end end function OnDeath() if not isDead then isDead = true TriggerServerEvent("hospital:server:SetDeathStatus", true) TriggerServerEvent("InteractSound_SV:PlayOnSource", "demo", 0.1) local player = PlayerPedId() while GetEntitySpeed(player) > 0.5 or IsPedRagdoll(player) do Wait(10) end if isDead then local pos = GetEntityCoords(player) local heading = GetEntityHeading(player) local ped = PlayerPedId() if IsPedInAnyVehicle(ped) then local veh = GetVehiclePedIsIn(ped) local vehseats = GetVehicleModelNumberOfSeats(GetHashKey(GetEntityModel(veh))) for i = -1, vehseats do local occupant = GetPedInVehicleSeat(veh, i) if occupant == ped then NetworkResurrectLocalPlayer(pos.x, pos.y, pos.z + 0.5, heading, true, false) SetPedIntoVehicle(ped, veh, i) end end else NetworkResurrectLocalPlayer(pos.x, pos.y, pos.z + 0.5, heading, true, false) end SetEntityInvincible(player, true) SetEntityHealth(player, GetEntityMaxHealth(player)) if IsPedInAnyVehicle(player, false) then loadAnimDict("veh@low@front_ps@idle_duck") TaskPlayAnim(player, "veh@low@front_ps@idle_duck", "sit", 1.0, 1.0, -1, 1, 0, 0, 0, 0) else loadAnimDict(deadAnimDict) TaskPlayAnim(player, deadAnimDict, deadAnim, 1.0, 1.0, -1, 1, 0, 0, 0, 0) end TriggerServerEvent('hospital:server:ambulanceAlert', Lang:t('info.civ_died')) end end end function DeathTimer() hold = 5 while isDead do Wait(1000) deathTime = deathTime - 1 if deathTime <= 0 then if IsControlPressed(0, 38) and hold <= 0 and not isInHospitalBed then TriggerEvent("hospital:client:RespawnAtHospital") hold = 5 end if IsControlPressed(0, 38) then if hold - 1 >= 0 then hold = hold - 1 else hold = 0 end end if IsControlReleased(0, 38) then hold = 5 end end end end local function DrawTxt(x, y, width, height, scale, text, r, g, b, a, _) SetTextFont(4) SetTextProportional(0) SetTextScale(scale, scale) SetTextColour(r, g, b, a) SetTextDropShadow(0, 0, 0, 0,255) SetTextEdge(2, 0, 0, 0, 255) SetTextDropShadow() SetTextOutline() SetTextEntry("STRING") AddTextComponentString(text) DrawText(x - width/2, y - height/2 + 0.005) end -- Damage Handler AddEventHandler('gameEventTriggered', function(event, data) if event == "CEventNetworkEntityDamage" then local victim, attacker, victimDied, weapon = data[1], data[2], data[4], data[7] if not IsEntityAPed(victim) then return end if victimDied and NetworkGetPlayerIndexFromPed(victim) == PlayerId() and IsEntityDead(PlayerPedId()) then if not InLaststand then SetLaststand(true) elseif InLaststand and not isDead then SetLaststand(false) local playerid = NetworkGetPlayerIndexFromPed(victim) local playerName = GetPlayerName(playerid) .. " " .. "("..GetPlayerServerId(playerid)..")" or Lang:t('info.self_death') local killerId = NetworkGetPlayerIndexFromPed(attacker) local killerName = GetPlayerName(killerId) .. " " .. "("..GetPlayerServerId(killerId)..")" or Lang:t('info.self_death') local weaponLabel = QBCore.Shared.Weapons[weapon].label or 'Ukendt' local weaponName = QBCore.Shared.Weapons[weapon].name or 'Ukendt' TriggerServerEvent("qb-log:server:CreateLog", "death", Lang:t('logs.death_log_title', {playername = playerName, playerid = GetPlayerServerId(playerid)}), "red", Lang:t('logs.death_log_message', {killername = killerName, playername = playerName, weaponlabel = weaponLabel, weaponname = weaponName})) deathTime = Config.DeathTime OnDeath() DeathTimer() end end end end) -- Threads emsNotified = false CreateThread(function() while true do local sleep = 1000 if isDead or InLaststand then sleep = 5 local ped = PlayerPedId() DisableAllControlActions(0) EnableControlAction(0, 1, true) EnableControlAction(0, 2, true) EnableControlAction(0, 245, true) EnableControlAction(0, 38, true) EnableControlAction(0, 0, true) EnableControlAction(0, 322, true) EnableControlAction(0, 288, true) EnableControlAction(0, 213, true) EnableControlAction(0, 249, true) EnableControlAction(0, 46, true) EnableControlAction(0, 47, true) if isDead then if not isInHospitalBed then if deathTime > 0 then DrawTxt(0.93, 1.44, 1.0,1.0,0.6, Lang:t('info.respawn_txt', {deathtime = math.ceil(deathTime)}), 255, 255, 255, 255) else DrawTxt(0.865, 1.44, 1.0, 1.0, 0.6, Lang:t('info.respawn_revive', {holdtime = hold, cost = Config.BillCost}), 255, 255, 255, 255) end end if IsPedInAnyVehicle(ped, false) then loadAnimDict("veh@low@front_ps@idle_duck") if not IsEntityPlayingAnim(ped, "veh@low@front_ps@idle_duck", "sit", 3) then TaskPlayAnim(ped, "veh@low@front_ps@idle_duck", "sit", 1.0, 1.0, -1, 1, 0, 0, 0, 0) end else if isInHospitalBed then if not IsEntityPlayingAnim(ped, inBedDict, inBedAnim, 3) then loadAnimDict(inBedDict) TaskPlayAnim(ped, inBedDict, inBedAnim, 1.0, 1.0, -1, 1, 0, 0, 0, 0) end else if not IsEntityPlayingAnim(ped, deadAnimDict, deadAnim, 3) then loadAnimDict(deadAnimDict) TaskPlayAnim(ped, deadAnimDict, deadAnim, 1.0, 1.0, -1, 1, 0, 0, 0, 0) end end end SetCurrentPedWeapon(ped, `WEAPON_UNARMED`, true) elseif InLaststand then sleep = 5 if LaststandTime > Config.MinimumRevive then DrawTxt(0.94, 1.44, 1.0, 1.0, 0.6, Lang:t('info.bleed_out', {time = math.ceil(LaststandTime)}), 255, 255, 255, 255) else DrawTxt(0.845, 1.44, 1.0, 1.0, 0.6, Lang:t('info.bleed_out_help', {time = math.ceil(LaststandTime)}), 255, 255, 255, 255) if not emsNotified then DrawTxt(0.91, 1.40, 1.0, 1.0, 0.6, Lang:t('info.request_help'), 255, 255, 255, 255) else DrawTxt(0.90, 1.40, 1.0, 1.0, 0.6, Lang:t('info.help_requested'), 255, 255, 255, 255) end if IsControlJustPressed(0, 47) and not emsNotified then TriggerServerEvent('hospital:server:ambulanceAlert', Lang:t('info.civ_down')) emsNotified = true end end if not isEscorted then if IsPedInAnyVehicle(ped, false) then loadAnimDict("veh@low@front_ps@idle_duck") if not IsEntityPlayingAnim(ped, "veh@low@front_ps@idle_duck", "sit", 3) then TaskPlayAnim(ped, "veh@low@front_ps@idle_duck", "sit", 1.0, 1.0, -1, 1, 0, 0, 0, 0) end else loadAnimDict(lastStandDict) if not IsEntityPlayingAnim(ped, lastStandDict, lastStandAnim, 3) then TaskPlayAnim(ped, lastStandDict, lastStandAnim, 1.0, 1.0, -1, 1, 0, 0, 0, 0) end end else if IsPedInAnyVehicle(ped, false) then loadAnimDict("veh@low@front_ps@idle_duck") if IsEntityPlayingAnim(ped, "veh@low@front_ps@idle_duck", "sit", 3) then StopAnimTask(ped, "veh@low@front_ps@idle_duck", "sit", 3) end else loadAnimDict(lastStandDict) if IsEntityPlayingAnim(ped, lastStandDict, lastStandAnim, 3) then StopAnimTask(ped, lastStandDict, lastStandAnim, 3) end end end end end Wait(sleep) end end)