Перейти к содержимому

Зомби

Зомби это bs_zombies. Это самый большой ресурс с большим отрывом. Коротко о том, как он работает: сервер ведёт список каждого ходячего (реестр), его здоровья и того, кто его хостит. Игроки видят только педов ходячих рядом с собой. Всё лежит в resources/[beyond]/bs_zombies/config/.

Три типа в Zombies.Types (config_zombies.lua): walker, brute, crawler. Для ползунов ресурс nutria_crawl_anims должен быть запущен до bs_zombies, иначе они встают на ноги.

-- bs_zombies/config/config_net.lua
Zombies.Mode = 'networked' -- or 'legacy'
  • networked (по умолчанию) - один настоящий пед OneSync на ходячего, созданный сервером. Все видят одного и того же зомби в одном месте. OneSync передаёт владение ближайшему клиенту, и только владелец запускает его ИИ.
  • legacy - старый способ. Каждый клиент создаёт собственных локальных педов и отправляет позиции обратно. Используй, если сетевой режим доставляет проблемы, это лишь перезапуск bs_zombies и ничего больше.

Переключить можно и из консоли F1 (категория Зомби), нужен перезапуск bs_zombies.

Сколько ходячих одновременно получают настоящего педа:

cap = min(hardCap, baseCap + perPlayerCap * (players - 1))
КлючПо умолчаниюЗначение
promoteRadius300ходячий в этом радиусе от любого игрока получает педа
demoteHysteresis60пед удаляется, когда никого нет в радиусе + это значение
baseCap24при одном игроке онлайн
perPlayerCap18добавляется за каждого дополнительного игрока
hardCap160никогда больше этого
perPlayerNear34максимум вокруг одного игрока
perfBudgetMs70если среднее время кадра сервера выше этого, лимит снижается
perfMinFactor0.35…но никогда ниже этой доли
entitySoft / entityHard1400 / 1900всего педов+объектов+транспорта. Между ними лимит сжимается, на hard удаляются самые дальние ходячие
fpsGood / fpsLow / lowFpsFactor45 / 25 / 0.5у игрока с низким FPS вокруг меньше ходячих
corpseSeconds120время жизни сетевых трупов
simDensityScale0.35население симуляции умножается на это в сетевом режиме (перезапуск)

Если поднимаешь hardCap, подними и Streaming.PoolGuard.maxNetworked (по умолчанию 96), он ограничивает, сколько записей ходячих вообще существует.

Из config_streaming.lua:

КлючПо умолчанию
Streaming.spawnMin / spawnMax200 / 300ходячие появляются в этом кольце вокруг игрока
Streaming.PoolGuard.minSpawnDistance100ничто не появляется ближе этого к любому игроку
Zombies.Settings.spawnDistanceMin100тот же минимум, со стороны секторов
Streaming.PoolGuard.maxPerPlayer28ходячие, учитываемые вокруг каждого игрока
Streaming.PoolGuard.clientPedLimit180клиент перестаёт создавать педов при таком размере пула педов
Streaming.PoolGuard.clientMaxLocal40максимум педов ходячих у одного клиента (legacy)
Streaming.cleanupDistance480

Минимум появления равен наибольшему из spawnDistanceMin, minSpawnDistance и 100. Так что зомби никогда не возникают у тебя перед носом, кроме принудительного спавна персоналом.

В безопасных зонах ничего не появляется (config_zones.lua). Зомби также совсем не лазают. Это Zombies.Mobility, пожалуйста, не включай, они забираются на крыши и застревают.

Карта разбита на секторы, которые просыпаются и засыпают. Редактируешь их в панели карты секторов, веб-странице, которую отдаёт ресурс nodes. При первом запуске он выводит в консоль URL с ключом. Если хочешь свой ключ:

set bs_sectormap_key "your-own-long-random-token"

Используй set, не setr. setr отправляет convar каждому клиенту, и тогда у всех игроков будет твой ключ.

У персонала также есть /atlas (bs_atlas), живая карта симуляции в игре.

Выстрелы, машины, гаджет-приманка, события: всё это шумит, а шум привлекает ходячих (config_noise.lua, Zombies.NoiseSources). Глушители сильно снижают шум оружия (Weapons.Effects.suppressor.noiseScale = 0.28). Орды описаны в Zombies.Horde, волны орд мировых событий в разделе Мировые события.

КомандаСторонаЧто
/znetсервер, персоналсетевое число, лимит и почему, среднее время кадра, перепись сущностей, твоё число рядом
/zsyncсервер, персоналпо игрокам, ходячие сервера рядом против педов, которые клиент реально имеет
/zdiagсерверобщее состояние, включает строки /znet
/zstatus, /zsim, /znodes, /sectorсервердиректор, симуляция, узлы, твой сектор
/zclearсерверубрать ходячих
/znetc, /zgaitклиентпринятые сетевые ходячие, владелец, походка
/poolsклиентиспользование пула педов
/safezonesклиентрисовать круги безопасных зон

Полный список на странице API bs_zombies.

  1. Поставь Zombies.Mode = 'legacy' (F1 или файл), ensure bs_zombies. Готово.
  2. Сообщи, что ты видел, с выводом /znet и /zsync, это первое, о чём я спрошу.