Laststand = Laststand or {} Laststand.ReviveInterval = 360 Laststand.MinimumRevive = 300 InLaststand = false LaststandTime = 0 lastStandDict = "combat@damage@writhe" lastStandAnim = "writhe_loop" isEscorted = false local isEscorting = false -- Functions local function GetClosestPlayer() local closestPlayers = QBCore.Functions.GetPlayersFromCoords() local closestDistance = -1 local closestPlayer = -1 local coords = GetEntityCoords(PlayerPedId()) for i=1, #closestPlayers, 1 do if closestPlayers[i] ~= PlayerId() then local pos = GetEntityCoords(GetPlayerPed(closestPlayers[i])) local distance = #(pos - coords) if closestDistance == -1 or closestDistance > distance then closestPlayer = closestPlayers[i] closestDistance = distance end end end return closestPlayer, closestDistance end local function LoadAnimation(dict) while not HasAnimDictLoaded(dict) do RequestAnimDict(dict) Wait(100) end end function SetLaststand(bool, spawn) local ped = PlayerPedId() if bool then Wait(1000) local pos = GetEntityCoords(ped) local heading = GetEntityHeading(ped) while GetEntitySpeed(ped) > 0.5 or IsPedRagdoll(ped) do Wait(10) end TriggerServerEvent("InteractSound_SV:PlayOnSource", "demo", 0.1) LaststandTime = Laststand.ReviveInterval 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 SetEntityHealth(ped, 150) if IsPedInAnyVehicle(ped, false) then LoadAnimation("veh@low@front_ps@idle_duck") TaskPlayAnim(ped, "veh@low@front_ps@idle_duck", "sit", 1.0, 8.0, -1, 1, -1, false, false, false) else LoadAnimation(lastStandDict) TaskPlayAnim(ped, lastStandDict, lastStandAnim, 1.0, 8.0, -1, 1, -1, false, false, false) end InLaststand = true TriggerServerEvent('hospital:server:ambulanceAlert', Lang:t('info.civ_down')) CreateThread(function() while InLaststand do ped = PlayerPedId() player = PlayerId() if LaststandTime - 1 > Laststand.MinimumRevive then LaststandTime = LaststandTime - 1 Config.DeathTime = LaststandTime elseif LaststandTime - 1 <= Laststand.MinimumRevive and LaststandTime - 1 ~= 0 then LaststandTime = LaststandTime - 1 Config.DeathTime = LaststandTime elseif LaststandTime - 1 <= 0 then QBCore.Functions.Notify(Lang:t('error.bled_out'), "error") SetLaststand(false) local killer_2, killerWeapon = NetworkGetEntityKillerOfPlayer(player) local killer = GetPedSourceOfDeath(ped) if killer_2 ~= 0 and killer_2 ~= -1 then killer = killer_2 end local killerId = NetworkGetPlayerIndexFromPed(killer) local killerName = killerId ~= -1 and GetPlayerName(killerId) .. " " .. "("..GetPlayerServerId(killerId)..")" or Lang:t('info.self_death') local weaponLabel = Lang:t('info.wep_unknown') local weaponName = Lang:t('info.wep_unknown') local weaponItem = QBCore.Shared.Weapons[killerWeapon] if weaponItem then weaponLabel = weaponItem.label weaponName = weaponItem.name end TriggerServerEvent("qb-log:server:CreateLog", "death", Lang:t('logs.death_log_title', {playername = GetPlayerName(-1), playerid = GetPlayerServerId(player)}), "red", Lang:t('logs.death_log_message', {killername = killerName, playername = GetPlayerName(player), weaponlabel = weaponLabel, weaponname = weaponName})) deathTime = 0 OnDeath() DeathTimer() end Wait(1000) end end) else TaskPlayAnim(ped, lastStandDict, "exit", 1.0, 8.0, -1, 1, -1, false, false, false) InLaststand = false LaststandTime = 0 end TriggerServerEvent("hospital:server:SetLaststandStatus", bool) end -- Events RegisterNetEvent('hospital:client:SetEscortingState', function(bool) isEscorting = bool end) RegisterNetEvent('hospital:client:isEscorted', function(bool) isEscorted = bool end) RegisterNetEvent('hospital:client:UseFirstAid', function() if not isEscorting then local player, distance = GetClosestPlayer() if player ~= -1 and distance < 1.5 then local playerId = GetPlayerServerId(player) TriggerServerEvent('hospital:server:UseFirstAid', playerId) end else QBCore.Functions.Notify(Lang:t('error.impossible'), 'error') end end) RegisterNetEvent('hospital:client:CanHelp', function(helperId) if InLaststand then if LaststandTime <= 300 then TriggerServerEvent('hospital:server:CanHelp', helperId, true) else TriggerServerEvent('hospital:server:CanHelp', helperId, false) end else TriggerServerEvent('hospital:server:CanHelp', helperId, false) end end) RegisterNetEvent('hospital:client:HelpPerson', function(targetId) local ped = PlayerPedId() isHealingPerson = true QBCore.Functions.Progressbar("hospital_revive", Lang:t('progress.revive'), math.random(30000, 60000), false, true, { disableMovement = false, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = healAnimDict, anim = healAnim, flags = 1, }, {}, {}, function() -- Done isHealingPerson = false ClearPedTasks(ped) QBCore.Functions.Notify(Lang:t('success.revived'), 'success') TriggerServerEvent("hospital:server:RevivePlayer", targetId) end, function() -- Cancel isHealingPerson = false ClearPedTasks(ped) QBCore.Functions.Notify(Lang:t('error.canceled'), "error") end) end)