Отключить или уменьшить трафик и персонажей NPC в FiveM: density natives
Отключите или уменьшите NPC, трафик и припаркованные машины в FiveM с множителями плотности native, правило за кадр, маршрутизирующие вёдра, удаление полиции и стоимость каждой опции.
Типичные симптомы:
Streets full of NPCs and traffic, low fps in the city, or random police responses nobody asked for.Население в GTA контролируется набором native, которые вы вызываете на клиенте. Главная ловушка в том, что большинство из них сбрасываются каждый кадр. Эта статья показывает native, цикл, который им требуется, опция на стороне сервера, и компромиссы пустого города.
Единственное правило: каждый кадр
Множители плотности применяются к текущему кадру только. Вызовите их один раз при запуске и они ничего не делают мгновение спустя. Они должны работать в цикле без задержки:
CreateThread(function()
while true do
SetVehicleDensityMultiplierThisFrame(0.0)
SetPedDensityMultiplierThisFrame(0.0)
SetRandomVehicleDensityMultiplierThisFrame(0.0)
SetParkedVehicleDensityMultiplierThisFrame(0.0)
SetScenarioPedDensityMultiplierThisFrame(0.0, 0.0)
Wait(0)
end
end)Множитель между 0.0 (нет) и 1.0 (величина по умолчанию). Каждый native управляет другой частью:
| Native | Управляет |
|---|---|
SetVehicleDensityMultiplierThisFrame |
Движущийся трафик |
SetRandomVehicleDensityMultiplierThisFrame |
Случайные транспортные средства на дорогах |
SetParkedVehicleDensityMultiplierThisFrame |
Припаркованные машины на улице |
SetPedDensityMultiplierThisFrame |
Ходящие пешеходы |
SetScenarioPedDensityMultiplierThisFrame |
Персонажи, занимающиеся деятельностью (интерьер, экстерьер) |
SetScenarioPedDensityMultiplierThisFrame принимает два значения, одно для интерьера и одно для экстерьера.
Уменьшите вместо удаления
Город с никем в нём выглядит сломанным, и игроки это замечают. Используйте значение между 0 и 1, чтобы его разреживать:
local traffic = 0.3
local peds = 0.4
CreateThread(function()
while true do
SetVehicleDensityMultiplierThisFrame(traffic)
SetRandomVehicleDensityMultiplierThisFrame(traffic)
SetParkedVehicleDensityMultiplierThisFrame(traffic)
SetPedDensityMultiplierThisFrame(peds)
SetScenarioPedDensityMultiplierThisFrame(peds, peds)
Wait(0)
end
end)Сначала попробуйте 0.3 на 0.5, затем отрегулируйте для вашего сервера. Положите значения в файл конфигурации, чтобы вы могли их менять без трогания кода.
На стороне сервера: маршрутизирующие вёдра
Сервер может выключить население для целого маршрутизирующего вёдра, который полезен для экземпляра, как интерьер или событие, без клиентского цикла:
-- server
SetRoutingBucketPopulationEnabled(bucketId, false)С этим, никакие окружающие NPC или трафик не спавнят для игроков в этом вёдре. Вёдро 0 — мир по умолчанию. Оставьте его включённым для основного мира и отключите его для приватных экземпляров. См. маршрутизирующие вёдра, чтобы узнать, как поместить игроков в один.
Удалите полицию и отправку
Установка плотности на ноль не останавливает ответ полиции. Уровни розыска и отправка работают на своих собственных системах. Чтобы их удалить, отключите их один за одним:
CreateThread(function()
SetMaxWantedLevel(0)
SetCreateRandomCops(false)
SetCreateRandomCopsNotOnScenarios(false)
SetCreateRandomCopsOnScenarios(false)
for service = 1, 15 do
EnableDispatchService(service, false)
end
end)
CreateThread(function()
while true do
if GetPlayerWantedLevel(PlayerId()) > 0 then
SetPlayerWantedLevel(PlayerId(), 0, false)
SetPlayerWantedLevelNow(PlayerId(), false)
end
Wait(500)
end
end)EnableDispatchService принимает индекс услуги и логическое значение. Цикл над 1 на 15 охватывает полицию, вертолёт, пожарных, скорую помощь и другие услуги, которые игра определяет. Цикл уровня розыска ловит всё, что проскакивает.
Если вы держите полицию на своём сервере для ролевой игры, не отключайте услуги для игроков, которые в режиме ожидания. Обработайте этот случай в скрипте вашей работы.
Другие вещи, которые вы можете захотеть выключить
Население — это больше, чем персонажи и машины. Эти native удаляют несколько других источников, каждый принимает логическое значение:
SetGarbageTrucks(false)
SetRandomBoats(false)
SetRandomTrains(false)Вызовите их один раз при запуске, они не требуют цикла за кадр.
Компромиссы производительности
Что вы получаете. Каждый персонаж и транспортное средство моделируются, рисуются и синхронизируются. Сокращение их сокращает стоимость клиента и количество сущностей в сети. На слабых ПК это может быть большой разницей fps. Для других исправлений fps см. низкий FPS в FiveM.
Что вы платите. Цикл с Wait(0) работает каждый кадр, поэтому держите его крошечным и положите native в один единственный поток. Цикл пяти вызовов дешёвый, но десять разных скриптов, каждый со своим циклом, — нет. Проверьте, что ваш сервер не устанавливает плотность, и монитор ресурсов в resmon.
Атмосфера. Мир без NPC — это без жизни. Сокращение трафика и сохранение некоторых персонажей — лучший компромисс, и припаркованные машины дешёвые, чтобы держать, так как они не движутся.
Геймплей. Много скриптов полагаются на персонажей или машины: продажа наркотиков, грабёж с заложниками, ограбление с трафиком. Протестируйте их с вашими параметрами плотности, так как работа, которая требует прохожего, будет не удаётся в пустом городе.
Распространённые ошибки
- Вызов множителей один раз. Они сбрасываются каждый кадр, используйте цикл.
- Долгое
Waitв цикле. СWait(1000)плотность применяется один кадр в секунду и NPC спавнят в промежутках. Это должно бытьWait(0). - Два скрипта с разными значения. Последний вызов кадра побеждает, поэтому вы получаете непостоянные результаты. Держите один источник.
- Забыв припаркованные машины. Трафик на ноль и припаркованные машины по умолчанию всё ещё оставляет улицу полной машин.
- Ожидание, что сервер удалит NPC, которыми он не владеет. Окружающее население на стороне клиента, кроме переключателя маршрутизирующего вёдра.
Контрольный список
| Проблема | Решение |
|---|---|
| NPC возвращаются через мгновение | Вызовите native множители плотности каждый кадр с Wait(0) |
| Трафик исчезает, припаркованные машины остаются | Добавьте SetParkedVehicleDensityMultiplierThisFrame |
| Персонажи сидят в сценариях | Добавьте SetScenarioPedDensityMultiplierThisFrame(interior, exterior) |
| Полиция всё ещё показывается | Уровень розыска 0, EnableDispatchService выкл, случайные полицейские выкл |
| Нужно без NPC в экземпляре | SetRoutingBucketPopulationEnabled на сервере |
| Город выглядит пусто | Используйте значения типа 0.3 на 0.5 вместо 0.0 |
| Высокое время resmon | Один цикл только, нет дублирующихся скриптов |
Короткие ответы
Почему NPC возвращаются после того, как я установил плотность на 0?
Native множители плотности действуют только один кадр. Если вы вызовете их один раз, игра вернётся по умолчанию на следующий кадр, поэтому они должны быть вызваны в цикле, который работает каждый кадр.
Улучшает ли отключение NPC производительность?
Да, меньше персонажей и автомобилей означает меньше работы для клиента и больше fps на слабых машинах. Это также делает город пустым, поэтому многие серверы уменьшают плотность вместо её удаления.
Как мне удалить ответ полиции?
Выключите услуги отправки с EnableDispatchService, установите уровень розыска на 0 и остановите случайных полицейских. Сделайте все три, так как каждый охватывает другую часть.
Скрипты без этой проблемы
Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →
Quest CreatorВизуальный редактор квестов и диалогов с NPC — узел за узлом прямо в игре.Смотреть скрипт →
CCTV Security CamerasУстанавливаемые камеры, планшет с мультиэкраном в реальном времени и распечатанные фото-улики.Смотреть скрипт →