FiveM Система смерти и возрождения: скрипт реалистичных возрождений
Разработайте отточенную систему смерти и возрождения для FiveM. Таймеры кровотечения, воскрешения EMS, поток в больнице и лучшие скрипты смерти для QBCore и ESX.
Agency Scripts
Основатель и ведущий разработчик Agency Scripts
Обнаружение смерти игрока
Система смерти и возрождения является одной из самых фундаментальных механик на любом FiveM ролевом сервере, определяя, что происходит, когда здоровье игрока достигает нуля и как он возвращается в игру. Поведение смерти по умолчанию в GTA V включает автоматическое возрождение в ближайшей больнице после короткой кинематографической сцены, что полностью разрушает погружение в ролевую игру. Чтобы построить правильную систему, нужно перехватить состояние смерти до того, как сработает обработчик по умолчанию. Отслеживайте здоровье игрока каждый кадр с помощью GetEntityHealth и обнаруживает, когда оно падает до порога смерти, который равен 0 для пешеходов. При обнаружении смерти немедленно используйте NetworkResurrectLocalPlayer предотвратить появление стандартного экрана смерти, затем перевести игрока в состояние ragdoll с помощью SetPedToRagdoll для симуляции состояния недееспособности. Отключите стандартную систему возрождения, вызвав SetPlayerInvincible временно, пока вы переходите к своему обработчику состояния смерти. Такой подход даёт полный контроль над опытом смерти при сохранении визуального реализма.
Система таймера кровотечения
Таймер кровотечения создаёт критическое окно между состоянием без сознания и полной смертью, в течение которого другие игроки могут взаимодействовать с потерявшим сознание. Когда игрок входит в состояние без сознания, запускается обратный отсчёт, отображаемый на экране через NUI с оставшимся временем и инструкциями. Во время кровотечения игрок находится в анимации ragdoll или ползания по земле, не может использовать оружие, водить транспорт или взаимодействовать с большинством объектов мира. Позволяйте без сознания игрокам использовать голосовой чат по близости, чтобы звать на помощь или разыгрывать травмы. Длительность таймера настраивается, обычно от 5 до 15 минут, достаточно для реалистичного реагирования EMS. Реализуйте систему ускорения таймера при получении дополнительного урона и замедления или паузы, если другой игрок начинает оказывать первую помощь с помощью бинтов или медицинского набора.
-- Client-side death state management
local isDead = false
local bleedoutTime = Config.BleedoutDuration -- seconds
local bleedoutTimer = 0
local lastStandUsed = false
CreateThread(function()
while true do
local ped = PlayerPedId()
local health = GetEntityHealth(ped)
if health <= 0 and not isDead then
isDead = true
bleedoutTimer = bleedoutTime
lastStandUsed = false
-- Prevent default death
NetworkResurrectLocalPlayer(
GetEntityCoords(ped), GetEntityHeading(ped),
true, false
)
SetEntityHealth(ped, 1)
SetEntityInvincible(ped, true)
SetPedToRagdoll(ped, -1, -1, 0, false, false, false)
ClearPedTasks(ped)
-- Notify server
TriggerServerEvent('death:playerDowned', GetEntityCoords(ped))
-- Show death UI
SendNUIMessage({ action = 'showDeathScreen', timer = bleedoutTimer })
end
if isDead then
bleedoutTimer = bleedoutTimer - 1
SendNUIMessage({ action = 'updateTimer', timer = bleedoutTimer })
-- Disable controls while downed
DisableControlAction(0, 22, true) -- jump
DisableControlAction(0, 24, true) -- attack
DisableControlAction(0, 25, true) -- aim
DisableControlAction(0, 75, true) -- exit vehicle
if bleedoutTimer <= 0 then
-- Fully dead - offer respawn options
SendNUIMessage({ action = 'showRespawnOptions' })
end
end
Wait(isDead and 1000 or 500)
end
end)
Механика последнего шанса
Механика последнего сопротивления дает поверженным игрокам краткую возможность дать отпор или доползти до безопасности, добавляя тактический слой в боевые столкновения. Когда игрок впервые падает, предложите ему однократную активацию, которая переводит его в положение лежа, где он может стрелять из пистолета с сильно сниженной точностью и скоростью передвижения в течение 15-30 секунд, прежде чем полностью упасть. Реализуйте это, помещая игрока в анимацию ползания с помощью TaskPlayAnim с анимационным словарём на земле, затем временно включая использование оружия, но ограничивая его только пистолетами. Примените эффект сильного раскачивания оружия с помощью манипуляции камерой, чтобы симулировать трудности прицеливания в смертельно раненом состоянии. Последний бой должен ускорять таймер кровотечения, так как усилия ускоряют потерю крови. Отображайте визуальные индикаторы, такие как десатурация экрана, виньетирование и звук сердцебиения, который замедляется со временем для создания напряжения. Этот механизм должен быть доступен только один раз за цикл смерти, чтобы предотвратить злоупотребления, и полностью отключаться, если игрок был убит выстрелом в голову, что представляет мгновенно обездвиживающее ранение.
Взаимодействие EMS и оживление
Система оживления EMS , это место, где механика смерти создаёт значимые ролевые взаимодействия между упавшим игроком и службами экстренной медицинской помощи. Когда EMS-персонаж подходит к упавшему игроку, он видит подсказку для взаимодействия, запускающую последовательность лечения. Процесс лечения должен занимать реалистичное время, обычно 10-20 секунд, в течение которых EMS выполняет медицинскую анимацию и не может двигаться или защищаться, создавая уязвимость, которая добавляет напряжённости при экстренных вызовах в опасных зонах. Реализуйте несколько уровней лечения: базовая стабилизация, которая останавливает прогресс таймера кровотечения, продвинутое лечение, которое постепенно восстанавливает здоровье, и полное оживление, возвращающее игрока в стоячее состояние с частичным здоровьем. Каждый уровень требует определённых медицинских предметов из инвентаря EMS, таких как бинты для стабилизации, медицинская аптечка для лечения и адреналин для оживления. После оживления применяется временное ослабление, при котором у игрока снижены максимальное здоровье и выносливость на несколько минут, что отражает восстановление после близкой к смерти травмы и препятствует немедленному возвращению в бой.
-- Server-side EMS revival handler
RegisterNetEvent('death:attemptRevive')
AddEventHandler('death:attemptRevive', function(targetId, treatmentType)
local src = source
local emsPed = GetPlayerPed(src)
local targetPed = GetPlayerPed(targetId)
if not emsPed or not targetPed then return end
-- Check distance
local emsCoords = GetEntityCoords(emsPed)
local targetCoords = GetEntityCoords(targetPed)
if #(emsCoords - targetCoords) > 3.0 then return end
-- Check if EMS has required items
local requiredItems = Config.TreatmentItems[treatmentType]
for _, item in ipairs(requiredItems) do
if exports.ox_inventory:Search(src, 'count', item.name) < item.count then
TriggerClientEvent('ox_lib:notify', src, {
title = 'Missing supplies',
description = 'You need: ' .. item.label,
type = 'error'
})
return
end
end
-- Remove items and start treatment
for _, item in ipairs(requiredItems) do
exports.ox_inventory:RemoveItem(src, item.name, item.count)
end
-- Trigger animations on both players
TriggerClientEvent('death:startTreatmentAnim', src, targetId)
TriggerClientEvent('death:receivingTreatment', targetId, src, treatmentType)
-- After treatment duration, revive
SetTimeout(Config.TreatmentDurations[treatmentType], function()
TriggerClientEvent('death:revived', targetId, treatmentType)
TriggerClientEvent('death:treatmentComplete', src)
end)
end)
Система возрождения в больнице
Когда таймер кровотечения истекает без вмешательства EMS или игрок выбирает сдаться, система возрождения в больнице возвращает его в игру. Покажите игроку NUI-экран смерти с двумя опциями: ждать EMS с визуальным индикатором ближайших дежурных медиков или возродиться в ближайшей больнице за плату. Возрождение в больнице не должно быть мгновенным. Примените анимацию загрузки или плавное затемнение, затем телепортируйте игрока внутрь больницы с анимацией пробуждения в кровати, используя соответствующий интерьер и мебель. Снимите медицинский счёт, который масштабируется в зависимости от финансового состояния игрока, беря процент от наличных, а не фиксированную сумму, чтобы стоимость не была тривиальной для богатых и неразрешимой для новичков. После возрождения в больнице примените период восстановления с пониженной статистикой и визуальным отображением больничной одежды, прежде чем игрок сможет сменить одежду. Отслеживайте частоту смертей, чтобы реализовать мягкое наказание: игроки, часто умирающие за короткий промежуток, сталкиваются с растущими затратами на возрождение и более длительным восстановлением, что снижает безрассудное поведение без чрезмерного наказания за редкие случаи.
Дизайн экрана смерти UI
Экран смерти , это основной интерфейс, который видят игроки в самый уязвимый момент игры, поэтому он должен быть чистым, информативным и атмосферным. Создайте его как NUI-оверлей, который берёт контроль над экраном, когда игрок входит в состояние без сознания. Примените постепенный фильтр десатурации, убирающий цвет из игрового мира, тонкую красную виньетку по краям экрана, пульсирующую в ритме сердцебиения, и лёгкий эффект размытия, усиливающийся по мере уменьшения таймера кровотечения. Отображайте оставшееся время кровотечения крупным обратным отсчётом в центре или вверху экрана вместе с подсказками: нажмите E, чтобы вызвать помощь через встроенный телефон, удерживайте G для активации последнего сопротивления, если доступно, или удерживайте X, чтобы сдаться и возродиться в больнице. Показывайте уведомление, когда скорая в пути с примерным временем прибытия, а также имена и расстояния до ближайших игроков, которые могут помочь. Сохраняйте UI минималистичным и избегайте загромождения экрана лишней информацией в этот напряжённый, атмосферный момент. Используйте тонкие анимации GSAP для плавного появления элементов интерфейса и обратного отсчёта таймера для поддержания визуального качества.
Система травм и восстановления
Расширьте систему смерти слоем травм, который сохраняется после оживления, добавляя глубину и последствия. Когда игрок оживляется EMS или возрождается в больнице, назначайте эффекты травм в зависимости от причины смерти. Огнестрельные ранения вызывают анимацию хромоты, снижающую скорость передвижения на 20% на 15 минут. Аварии с транспортом вызывают эффект оглушения с периодической тряской экрана на 10 минут. Падения с высоты вызывают травму ноги, препятствующую бегу. Утопление вызывает анимацию кашля и снижение выносливости. Храните активные травмы в state bag игрока, чтобы они сохранялись при перезапуске скриптов и были видимы другим игрокам. Создайте путь лечения травм, где игроки могут посетить NPC врача или игрока-фармацевта для получения медикаментов, уменьшающих длительность эффектов травм. Реализуйте систему боли, при которой серьёзные травмы вызывают случайные подёргивания экрана и приглушённые стоны, слышимые рядом находящимися игроками, создавая возможности для обеспокоенных граждан или хищных преступников идентифицировать и взаимодействовать с недавно пострадавшими игроками. Система травм заполняет промежуток между смертью и полным восстановлением, делая каждую смерть многофазным опытом, который расширяет ролевую игру, а не является моментальным неудобством.
Конфигурация и админские настройки
Гибкая система смерти требует обширных настроек и административных инструментов. Предоставьте владельцам серверов конфигурационный файл, контролирующий все временные параметры: длительность кровотечения, время последнего шанса и его доступность, формулу стоимости возрождения в больнице, длительности лечения EMS по уровням, длительности эффектов травм по типам и время восстановления между смертями перед применением ужесточённых наказаний. Добавьте админ-команды, позволяющие сотрудникам мгновенно оживлять игрока, убивать для административных целей, регулировать таймер кровотечения конкретного игрока, очищать все активные травмы и переключать режим бога для событий или административных ситуаций. Создайте лог смерти, который записывает каждую смерть игрока с отметкой времени, координатами, причиной смерти, идентификатором убийцы при наличии, временем реакции EMS и информацией о том, был ли игрок оживлён или возрождён. Предоставьте доступ к этому логу через админ-панель для расследования подозрительных паттернов, таких как повторяющиеся смерти в одном месте, указывающие на спаун-кампинг, или слишком быстрые оживления, свидетельствующие о злоупотреблениях EMS. Система смерти должна генерировать события, к которым могут подключаться другие скрипты, позволяя вашей системе работ уведомлять дежурных EMS о близлежащих упавших игроках и вашей полицейской системе отмечать места с частыми насильственными смертями.