Система смерти и возрождения FiveM: последний стенд, возрождение и сумки состояния

Как работает система смерти FiveM: последний стенд в сравнении с мертвецом, таймер возрождения, возрождение от администратора или EMS, синхронизация мертвого состояния с сумками состояния и исправление боевого выхода.

Симптом: игрок умирает и не видит опцию возрождения, или не может быть возрожден, или выходит в сети, пока мертв, и возвращается в полном здоровье.

Смерть в FiveM — это не одна функция. Двигатель только знает, что пед имеет нулевое здоровье. Все остальное (мертвая анимация, таймер, возрождение) строится вашим фреймворком и ресурсом скорой помощи. Эта статья объясняет движущиеся части, чтобы вы могли найти, какая сломана.

Что знает игра

Движок сообщает вам, что пед мертв, ничего больше. Ресурсы обнаруживают это с проверкой нативного или с игровым событием урона, затем берут на себя:

lua
-- client
CreateThread(function()
    local wasDead = false
    while true do
        Wait(500)
        local dead = IsEntityDead(PlayerPedId())
        if dead and not wasDead then
            TriggerServerEvent('myjob:playerDied')
        end
        wasDead = dead
    end
end)

Ядро ESX запускает событие смерти для прослушивания скриптов, и QBCore держит флаги в метаданных игрока. В обоих ваш ресурс скорой помощи слушает смерть и запускает остальное.

Последний стенд в сравнении со смертью

Многие установки имеют две стадии:

Состояние Что может делать игрок Как это заканчивается
Последний стенд (ослаблен) Ползать, звать на помощь, ждать Возрожден EMS, или таймер истекает и они умирают
Мертв Ничего, экран показывает таймер возрождения Возрождение в больнице, или возрождение

Установки в стиле QBCore показывают это как отдельные флаги (флаг последнего стенда и мертвый флаг). Установки ESX обычно имеют только мертвое состояние. Выберите то, что нужно вашему серверу и не смешивайте два ресурса скорой помощи, потому что каждый отслеживает свои собственные флаги и они борются над педом.

Таймер возрождения

Таймер — это отсчет клиента с правилом сервера позади. Два параметра имеют наиболее важное:

  • Время возрождения: как долго перед тем как игрок может нажать клавишу для возрождения.
  • Время кровотечения (если вы используете последний стенд): как долго перед ослабленным игроком смерть.

Если клавиша возрождения ничего не делает, причина почти всегда в том, что таймер никогда не запустился, потому что мертвый флаг никогда не был установлен. Проверьте консоль на ошибки в момент смерти.

Возрождение должно сбросить несколько вещей вместе: здоровье, мертвый флаг, мертвую анимацию, эффекты экрана и позицию в больнице. Если вы только сбросите здоровье, игрок встанет внутри мертвой анимации.

Возрождение от администратора или EMS

Большинство фреймворков и ресурсов скорой помощи доставляют команду в стиле /revive для администраторов и действие EMS для игроков на работе. Они все заканчиваются одним и тем же на клиенте:

lua
-- client: bring the local player back at their current position
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)

NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, GetEntityHeading(ped), true, false)
ClearPedTasksImmediately(ped)
SetEntityHealth(ped, GetEntityMaxHealth(ped))
ClearPedBloodDamage(ped)

Затем ресурс очищает мертвый флаг. Если вы только вызовете нативных и пропустите флаг, игрок жив в мире, но все еще "мертв" для фреймворка, и экран возрождения остается. Используйте функцию возрождения вашего ресурса скорой помощи, когда вы можете, и напишите свою только, когда вы его заменяете.

Внимание: команда возрождения должна быть ограничена разрешением и работой для версии EMS. Смотрите ACE permissions для стороны администратора.

Синхронизация мертвого состояния с сумками состояния

Другие игроки и другие скрипты должны знать, что кто-то мертв: метки EMS, проверка "не грабьте мертвого игрока", инвентарь, который отказывается открываться. Опрос каждого клиента медленно. Сумка состояния — естественный выбор, потому что поздние присоединяющиеся также это видят:

lua
-- server
RegisterNetEvent('myjob:playerDied', function()
    local src = source
    Player(src).state:set('isDead', true, true)
end)

local function revive(src)
    Player(src).state:set('isDead', false, true)
    TriggerClientEvent('myjob:revive', src)
end
lua
-- any script, server
if Player(targetSrc).state.isDead then
    -- allow the revive action
end

Используйте имя, которое также читают ваши другие скрипты, или флаг помогает никому. Некоторые фреймворки уже держат мертвый флаг в данных игрока, поэтому проверьте это первым и прочитайте вместо создания второго источника истины.

Боевой выход

Игрок, который отключается, пока мертв или ослаблен, затем переподключается, должен все еще быть мертвым. Без этого убийство кого-то ничего не делает.

  1. На playerDropped проверьте, был ли игрок мертв и сохраните это в базе данных вместе с персонажем.
  2. Когда персонаж загружается, прочитайте флаг и поместите их обратно в мертвое или ослабленное состояние.
  3. Сделайте таймер возрождения снова или сохраните оставшееся время, если вы хотите быть строгим.
lua
AddEventHandler('playerDropped', function()
    local src = source
    if Player(src).state.isDead then
        -- save the dead flag for this character
    end
end)

Где флаг сохраняется, зависит от вашего фреймворка. Многие ресурсы скорой помощи уже держат мертвый флаг в базе данных, поэтому посмотрите его перед добавлением второго. Также охранитесь от обратного: игрок, который застрял мертв после краша, нуждается в возрождении администратора, поэтому команда выше должна существовать.

Контрольный список

Симптом Исправление
Клавиша возрождения ничего не делает Мертвый флаг никогда не был установлен: посмотрите ошибку скрипта в момент смерти
Игрок возрожден, но экран все еще говорит мертв Очистите мертвый флаг фреймворка, не только здоровье
Игрок встает в мертвую анимацию Очистите задачи и сбросьте педа после возрождения
Два скрипта скорой помощи борются Запустите только одну систему смерти
Другие не могут видеть, кто мертв Установите репликацию сумку состояния на игрока
Игрок возвращается живым после выхода в сети Сохраните мертвый флаг на playerDropped и восстановите при загрузке

Короткие ответы

Как мне возродить игрока как администратор?

Большинство фреймворков и ресурсов скорой помощи включают команду администратора в стиле /revive. Имя и разрешение, которое ему нужно, зависят от ваших ресурсов, поэтому проверьте ваш ресурс скорой помощи или меню администратора.

Какова разница между последним стендом и мертвецом?

Последний стенд — это ослабленное состояние, где игрок может ползать или ждать помощи. Мертвец — это окончательное состояние, когда только возрождение или возрождение возвращает их. Не каждый фреймворк имеет оба.

Как мне остановить игроков от боевого выхода во время смерти?

Сохраните мертвое состояние, когда игрок уходит, и примените его снова при загрузке. Если мертвый флаг не хранится, игрок вернется живым.

Скрипты без этой проблемы

Mic PhoneСкладной телефон, который раскладывается в планшет и работает и на настоящем телефоне игрока.Смотреть скрипт →Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →

Читайте также

FiveMESXQBCoreFiveM полиция работа setup: ранги, duty, armory и полиция количествоКак установить полиция работу на FiveM сервере: работа и ранги, duty toggle, armory с магазином и stash, наручники и конвоирование, проверки полиция количества, MDT и dispatch.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMLuaСценарииFiveM механик работа: repair natives, tuning модификации и проверки работыПостройте FiveM механик работу: отремонтируйте машину с SetVehicleFixed и health natives, настройте с SetVehicleModKit и SetVehicleMod, сохраните модификации, и заблокируйте действия по работе.1 октября 2026 г. · 2 мин чтенияЧитать →FiveMБезопасностьСкриптингДизайн системы наркотиков FiveM: сбор, обработка и безопасная продажаКак спроектировать систему наркотиков FiveM: сбор и обработка с проверками предметов на сервере, ограничения скорости, безопасная продажа NPC, оповещения полиции и балансировка выплат.1 октября 2026 г. · 3 мин чтенияЧитать →