FiveM транспортные средства исчезают или деспавнятся: почему это происходит и исправление

Созданные машины исчезают через несколько секунд или когда вы уходите? Кулирование сущностей OneSync, режим сирот, владельцы уходят, скрипты очистки и как сохранить транспортное средство персистентным.

Типичные симптомы:

text
You spawn a car, walk a few hundred metres, and it is gone. Or a car you left on the street is missing after you log out.

Есть несколько различных систем, которые удаляют транспортные средства, и каждая имеет разное исправление. Эта статья объясняет каждую и способы сделать транспортное средство персистентным.

Кто удаляет транспортное средство

Сетевое транспортное средство может быть удалено:

  1. Кулированием сущностей. На OneSync сервер хранит только объекты, актуальные для по крайней мере одного игрока. Объект далеко от всех может быть удален.
  2. Владельцем, оставляющим. Объект имеет клиента-владельца, который его имитирует. Если владелец отключится, объект может быть удален, если сервер не скажет игре его сохранить.
  3. Очисткой популяции игры. Игра удаляет окружающие транспортные средства, которые она считает ненужными. Машина, созданная определенным образом, может рассматриваться как одна из них.
  4. Скриптом. Многие серверы запускают скрипт очистки, который удаляет незанятые машины на таймере.
  5. Вашим собственным кодом. DeleteEntity в цикле или скрипт, который удаляет все рядом с игроком.

Найдите, какой это, перед изменением кода.

Машины исчезают в фиксированное время

Если транспортное средство исчезает после точно такой же задержки, это скрипт очистки. Ищите в ваших ресурсах DeleteEntity, DeleteVehicle и GetAllVehicles:

bash
grep -ri "GetAllVehicles" resources/ --include=*.lua

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

Машины исчезают, когда вы идете

Это кулирование и правило владельца. OneSync не хранит объекты, рядом с которыми никто не находится. Когда вы спавните машину для игрока и игрок покидает его область, машина - кандидат на удаление.

Сервер может решить, что происходит с объектом с его режимом сирот:

lua
-- server
SetEntityOrphanMode(vehicle, 2)

SetEntityOrphanMode принимает объект и режим. Режимы: 0, удалить объект, когда он больше не актуален (по умолчанию); 1, удалить его, когда его владелец отключится; 2, оставить его. Проверьте текущую справку встроенной функции для вашей сборки сервера перед тем как полагаться на числа.

Транспортное средство должно быть создано на сервере для того, чтобы это было надежно. Машина, созданная клиентом, с CreateVehicle, первоначально принадлежит этому клиенту. Смотрите spawning a vehicle on the server для полного потока:

lua
local vehicle = CreateVehicleServerSetter(joaat('sultan'), 'automobile', x, y, z, heading)

while not DoesEntityExist(vehicle) do
    Wait(0)
end

SetEntityOrphanMode(vehicle, 2)

Внимание: сохраненный объект остается до тех пор, пока вы его не удалите. Если вы установите режим сирот для сохранения на каждой машине, заброшенные транспортные средства накапливаются и количество объектов растет. Удалите их сами, когда игрок сохранит машину или уходит.

Нужен OneSync

Большинство это применимо только на OneSync. Проверьте, что это включено в server.cfg, и прочитайте how to enable OneSync. Без этого транспортные средства основаны на клиенте и исчезают со своим владельцем.

Очистка игры на клиенте

Когда вы спавните машину на клиенте, игра может рассматривать ее как часть окружающей популяции и удалить ее. Отметьте ее как миссионный объект, чтобы она рассматривалась как ваша:

lua
local vehicle = CreateVehicle(model, x, y, z, heading, true, false)
SetEntityAsMissionEntity(vehicle, true, true)

SetEntityAsMissionEntity также имеет значение, когда вам нужно удалить транспортное средство позже. DeleteEntity на транспортном средстве, владельцем которого клиент не является как миссионный объект, может молча не удаться.

Распространенный паттерн - взять управление объектом, а затем удалить его:

lua
local function removeVehicle(vehicle)
    if not DoesEntityExist(vehicle) then return end
    SetEntityAsMissionEntity(vehicle, true, true)
    DeleteEntity(vehicle)
end

Персистентные транспортные средства: реальные подходы

Гараж не держит машину в мире. Он держит строку в базе данных и спавнит машину по необходимости. Для персистентной парковки на улице есть два подхода:

Сохраните объект

Создайте машину на сервере, установите режим сирот для сохранения и помните ее (net id и номерной знак) в таблице. Машина остается в мире, пока работает сервер. Удалите ее, когда ее владелец сохранит машину.

Это просто, но требует объекты и все теряется при перезагрузке. Это подходит для небольшого количества машин.

Сохраните и заново спавньте

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

  1. Когда игрок припаркует машину, сохраните номерной знак, координаты, направление и свойства.
  2. Удалите объект.
  3. Когда игрок входит в радиус или при запуске сервера, спавньте его снова из строки.

Свойства рассматриваются в vehicle properties и сторона таблицы в garage tables.

Другие причины

Игрок находится в большом расстоянии и машина далеко от любого радиуса кулирования. Объекты за определенным расстоянием не синхронизируются с клиентом. Машина может выглядеть отсутствующей на клиенте далеко от нее, пока все еще существует на сервере. Проверьте на сервере с DoesEntityExist(vehicle) перед тем как предположить, что она удалена.

Маршрутные баки. Транспортное средство в другом маршрутном баке, чем игрок, невидимо для них. Смотрите routing buckets.

Лимит объектов. Очень высокое количество транспортных средств попадает в пределы движка. Удалите неиспользуемые транспортные средства вместо сохранения всего.

Net id устарел. Скрипт, который держит net id для машины, которая была удалена, хранит дескриптор, который больше не существует. Проверьте с NetworkDoesEntityExistWithNetworkId перед использованием.

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

Симптом Решение
Машина исчезает в одно и то же время каждый раз Найдите скрипт очистки и настройте или удалите его
Машина исчезает, когда вы идете Создайте его на стороне сервера и установите SetEntityOrphanMode на сохранение
Машина исчезает, когда владелец выходит Режим сирот сохранения или сохраняйте и заново спавньте из базы данных
Машина, созданная клиентом, удаляется SetEntityAsMissionEntity(vehicle, true, true)
DeleteEntity не удаляет Установите его как миссионный объект сначала на клиенте владельца
Машины накапливаются Удалите транспортные средства при сохранении, не сохраняйте каждый объект
Машина невидима для одного игрока Проверьте маршрутный бак и что OneSync включен

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

Почему припаркованные машины исчезают, когда я уходу?

На OneSync объект, который больше не актуален ни для одного игрока, удаляется сервером. Если вы хотите припаркованную машину, которая остается, сервер должен ее держать, например установив его режим сирот, или скрипт должен ее заново спавнить, когда кто-то вернется.

Что такое SetEntityOrphanMode?

Встроенная функция сервера, которая говорит игре, что делать с объектом, владелец которого ушел. Это может удалить объект, удалить его, когда он больше не актуален, или оставить его.

Мне все еще нужен SetEntityAsMissionEntity?

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

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

Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →Chameleon Paints82 краски-хамелеона с переливом цвета в одном меню — наносятся в один клик.Смотреть скрипт →Car BombЗакладывайте, находите и обезвреживайте бомбы в машинах — с телефоном-детонатором и мини-игрой C4.Смотреть скрипт →

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

FiveMLuaServerСпавн транспортного средства в FiveM: CreateVehicle vs CreateVehicleServerSetterСпавньте транспортные средства правильно в FiveM: клиент CreateVehicle с RequestModel, сервер CreateVehicleServerSetter на OneSync, net ids, номерные знаки, ключи и исчезающие машины.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMLuaScriptingFiveM повреждение транспортного средства: здоровье двигателя, здоровье корпуса и настройка обработкиКак работает повреждение транспортного средства в FiveM: диапазоны здоровья двигателя, корпуса и топливного бака, GetVehicleEngineHealth, множители повреждения обработки и как работают реалистичные скрипты повреждения.1 октября 2026 г. · 4 мин чтенияЧитать →FiveMLuaScriptingТопливо автомобиля FiveM: установить топливо при спауне и исправить автомобили, застрявшие на 0Как работает топливо в FiveM: GetVehicleFuelLevel и SetVehicleFuelLevel, топливо в state bags, установка топлива при спауне автомобиля и почему автомобили начинают с пустым баком.1 октября 2026 г. · 4 мин чтенияЧитать →