2025-04-07 01:41:12 +00:00

95 lines
3.3 KiB
Lua

local config = require 'config.client'
local sharedConfig = require 'config.shared'
local WEAPONS = exports.qbx_core:GetWeapons()
---blocks until ped is no longer moving
function WaitForPlayerToStopMoving()
local timeOut = 10000
while GetEntitySpeed(cache.ped) > 0.1 and IsPedRagdoll(cache.ped) and timeOut > 1 do
timeOut -= 10 Wait(10)
end
end
--- low level GTA resurrection
function ResurrectPlayer()
local pos = GetEntityCoords(cache.ped)
local heading = GetEntityHeading(cache.ped)
NetworkResurrectLocalPlayer(pos.x, pos.y, pos.z + 0.5, heading, true, false)
if cache.vehicle then
SetPedIntoVehicle(cache.ped, cache.vehicle, cache.seat)
end
end
---remove last stand mode from player.
function EndLastStand()
TaskPlayAnim(cache.ped, LastStandDict, 'exit', 1.0, 8.0, -1, 1, -1, false, false, false)
LaststandTime = 0
TriggerServerEvent('qbx_medical:server:onPlayerLaststandEnd')
end
local function logPlayerKiller()
local killer_2, killerWeapon = NetworkGetEntityKillerOfPlayer(cache.playerId)
local killer = GetPedSourceOfDeath(cache.ped)
if killer_2 ~= 0 and killer_2 ~= -1 then
killer = killer_2
end
local killerId = NetworkGetPlayerIndexFromPed(killer)
local killerName = killerId ~= -1 and (' %s (%d)'):format(GetPlayerName(killerId), GetPlayerServerId(killerId)) or locale('info.self_death')
local weaponItem = WEAPONS[killerWeapon]
local weaponLabel = locale('info.wep_unknown') or (weaponItem and weaponItem.label)
local weaponName = locale('info.wep_unknown') or (weaponItem and weaponItem.name)
local message = locale('logs.death_log_message', killerName, GetPlayerName(cache.playerId), weaponLabel, weaponName)
lib.callback.await('qbx_medical:server:log', false, 'playerKiller', message)
end
---count down last stand, if last stand is over, put player in death mode and log the killer.
local function countdownLastStand()
if LaststandTime - 1 > 0 then
LaststandTime -= 1
else
exports.qbx_core:Notify(locale('error.bled_out'), 'error')
EndLastStand()
logPlayerKiller()
DeathTime = config.deathTime
OnDeath()
end
end
local startLastStandLock = false
---put player in last stand mode and notify EMS.
function StartLastStand(attacker, weapon)
if startLastStandLock then return end
startLastStandLock = true
TriggerEvent('ox_inventory:disarm', cache.playerId, true)
WaitForPlayerToStopMoving()
TriggerServerEvent('InteractSound_SV:PlayOnSource', 'demo', 0.1)
LaststandTime = config.laststandReviveInterval
ResurrectPlayer()
SetEntityHealth(cache.ped, 150)
SetDeathState(sharedConfig.deathState.LAST_STAND)
TriggerEvent('qbx_medical:client:onPlayerLaststand', attacker, weapon)
TriggerServerEvent('qbx_medical:server:onPlayerLaststand', attacker, weapon)
CreateThread(function()
while DeathState == sharedConfig.deathState.LAST_STAND do
countdownLastStand()
Wait(1000)
end
end)
CreateThread(function()
while DeathState == sharedConfig.deathState.LAST_STAND do
DisableControls()
PlayLastStandAnimation()
Wait(0)
end
startLastStandLock = false
end)
end
exports('StartLastStand', StartLastStand)