RE:NODE

Руководства12 мин чтения

Настройка серверов surf, bhop и KZ в CS2

Как настроить сервер surf, bhop или KZ в CS2: cvars движения и их значения по умолчанию, настройки раундов, плагины-таймеры, зоны, карты Workshop и типичные баги.

0 прочтений

Сервер движения в Counter-Strike 2 - это обычный сервер CS2, у которого выключена логика раундов и изменено несколько cvars движения. Для surf это в основном sv_airaccelerate, поднятый со значения по умолчанию 12 примерно до 100-150, убранная выносливость и бесконечное возрождение игроков. Для bunnyhop добавьте sv_enablebunnyhopping 1 и обычно sv_autobunnyhopping 1. KZ стоит особняком: серьёзные KZ-сообщества запускают специальный плагин Metamod, который заменяет правила движения, а не подкручивает cvars. Поверх любого из них ставится плагин-таймер, которому нужны зоны для каждой карты и место для хранения рекордов. Сам сервер лёгкий - серверы движения тратят CPU на физику игроков, а не на пули, - но к конфигурации они придирчивее публичного defuse-сервера, потому что один неправильный cvar меняет то, как играется каждая карта.

Surf, bhop и KZ: что нужно каждому#

Эти три режима часто валят в одну кучу, а от сервера им нужно разное.

РежимОсновная механикаЧто меняет серверНужен плагин
SurfНабор скорости стрейфами по наклонным рампамВысокое ускорение в воздухе, без выносливости, без урона от паденияТаймер, по желанию
BhopЦепочка прыжков без потери скоростиВключённый bunnyhop, часто auto-hop, высокое ускорение в воздухеТаймер, по желанию
KZТочное лазание и прыжки, измеряемые прыжкиПравила движения ближе к CS:GO, часто отдельная система режимовОбычно KZ-плагин

Surf и bhop - режимы на cvars: стандартный сервер с правильной конфигурацией и surf-картой уже даёт играбельный surf, а таймер - слой поверх. KZ - режим на плагине: играть KZ-карты на стандартном сервере можно, но сообщество ждёт движения, чекпоинтов, jumpstats и рекордов, которые даёт KZ-плагин, и его игроки сразу замечают, если этого нет.

Все три зависят от карт, сделанных под них, и почти все такие карты берутся из Workshop. Как их загружать, рассказано в статье карты и коллекции Workshop в CS2; если коротко - по публичной коллекции на режим и host_workshop_collection в строке запуска.

Требования и размер сервера#

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

СерверRAMCPUПримечания
Surf или bhop, до 16 игроков1-2 ГБ1 ядроБольшинство серверов сообщества
Surf или bhop, 24-32 игрока2-3 ГБ1,5-2 ядраБольшие карты, много реплеев
KZ с плагином и рекордами, 16-242 ГБ1,5 ядраJumpstats и чекпоинты лёгкие
Любой из вышеперечисленных с replay-ботамиплюс 0,5-1 ГБплюс 0,5 ядраРеплеи - самая дорогая функция

Replay-боты - призрачные прохождения текущего рекорда - та функция, которая превращает лёгкий сервер в средний. Каждый реплей - это сохранённые данные движения, проигрываемые через бота, а это память на запись и CPU на бота. Если сервер тормозит с включёнными реплеями и нормально работает без них - вот и ответ.

Если вы держите несколько коллекций, диск важнее памяти: surf-карты часто большие, и коллекция из тридцати таких карт - это несколько гигабайт сверх базовой установки.

Cvars движения#

Они идут в game/csgo/cfg/server.cfg, а лучше - в отдельный конфиг режима, который вы вызываете оттуда через exec, чтобы переключать сервер с surf на bhop изменением одной строки. Значения по умолчанию ниже взяты из актуальных сборок CS2; проверить любое из них на своей сборке можно, введя в консоли имя cvar без значения - тогда выводятся текущее значение и значение по умолчанию.

CvarПо умолчанию в CS2SurfBhopЧто делает
sv_airaccelerate12100-150100-1000Ускорение в воздухе
sv_enablebunnyhopping011Снимает ограничение скорости при приземлении
sv_autobunnyhopping00 или 11Зажатый прыжок прыгает при приземлении
sv_staminamax8000Система выносливости; 0 её отключает
sv_staminajumpcost0.0800Потеря скорости за прыжок
sv_staminalandcost0.0500Потеря скорости за приземление
sv_falldamage_scale100Множитель урона от падения
sv_maxvelocity35003500 или выше3500Жёсткий потолок любой скорости
sv_accelerate5.5по умолчаниюпо умолчаниюУскорение на земле
sv_friction5.2по умолчаниюпо умолчаниюТрение о землю
sv_gravity800по умолчаниюпо умолчаниюГравитация
cfg/surf.cfg
sv_airaccelerate 150sv_enablebunnyhopping 1sv_autobunnyhopping 0sv_staminamax 0sv_staminajumpcost 0sv_staminalandcost 0sv_falldamage_scale 0sv_maxvelocity 3500

Спорят обычно о двух вещах: sv_airaccelerate и auto-hop. Ускорение в воздухе 150 - распространённое значение для surf; 100 ощущается тяжелее, а 1000 - это фактически мгновенное управление в воздухе, при котором многие surf-карты становятся тривиальными. Для bhop auto-hop - это выбор между режимом о стрейфах (auto-hop включён) и режимом о тайминге клавиши прыжка (auto-hop выключен, часто с прыжком на колёсико мыши). Выберите что-то одно для сервера и укажите это в названии сервера; несовпадение ожиданий - самая частая жалоба на серверы движения.

Почему движение в CS2 ощущается иначе, чем в CS:GO

Ветераны surf и bhop замечают, что при тех же значениях cvars движение в CS2 ощущается не так, как в CS:GO. Отчасти дело в sub-tick вводе: прыжки и стрейфы получают метку времени между тиками, а не привязываются к ним, и это меняет ощущение идеально рассчитанных прыжков. Отчасти в том, что CS2 работает на 64 tick, а аргумент запуска -tickrate не учитывается, поэтому серверы на 102,4 и 128 tick, которые некоторые сообщества держали в CS:GO, недоступны. Хостинг это изменить не может. Почему номер tick влияет на ощущения меньше, чем кажется, объясняет статья что на самом деле означает tick rate.

Есть плагины Metamod, созданные специально для того, чтобы менять поведение движения, до которого cvars не дотягиваются, - например, убрать ограничение скорости на земле, которое срезает pre-speed. Они работают, патча бинарник игры в памяти, поэтому ломаются первыми после обновления CS2.

Настройки раундов, которые выключают игру#

Сервер движения никогда не должен завершать раунд, продавать оружие или считать очки команд. Помимо cvars движения, ему нужно обезвредить механику раундов. Обычная база - запуск с game_alias custom или casual и такие настройки:

cfg/movement_rounds.cfg
mp_freezetime 0mp_roundtime 60mp_timelimit 30mp_ignore_round_win_conditions 1mp_respawn_on_death_ct 1mp_respawn_on_death_t 1mp_autoteambalance 0mp_limitteams 0mp_solid_teammates 0mp_death_drop_gun 0mp_buytime 0mp_warmuptime 0sv_full_alltalk 1

Главная здесь - mp_ignore_round_win_conditions 1: она не даёт раунду закончиться, когда одна из команд пуста, а на сервере движения так всегда. mp_solid_teammates 0 позволяет игрокам проходить друг сквозь друга, что важно в стартовой зоне, где все толпятся. mp_timelimit определяет, сколько идёт карта до голосования, и на surf-сервере тридцать минут - мало для сложной карты и много для лёгкой; многие сообщества останавливаются на 30-45.

Помните, что конфиг игрового режима выполняется после server.cfg при каждой загрузке карты. Если настройки раундов постоянно сбрасываются, вызывайте свой конфиг движения через exec из файла переопределений режима - gamemode_casual_server.cfg на casual-сервере, который вы создаёте рядом с gamemode_casual.cfg от Valve, - или пусть их выставляет плагин-таймер при старте карты, большинство так и делает. Порядок выполнения подробно описан в статье команды и cvars сервера CS2.

Плагины-таймеры, зоны и рекорды#

Таймер - это то, что превращает surf-карту в соревнование: стартовая зона, финишная зона, время, таблица лидеров и обычно этапы, чекпоинты и реплеи. В CS2 любой таймер работает на Metamod:Source, а большинство - ещё и на CounterStrikeSharp поверх него; таймеры SourceMod из CS:GO не запускаются. Установка этого стека описана в статье Metamod и CounterStrikeSharp в CS2.

На что смотреть в таймере:

  • Поддержка режимов. Одни таймеры работают с картами surf, bhop и в стиле KZ с настройками для каждой карты, другие - только с одним режимом. SharpTimer - широко используемый таймер на CounterStrikeSharp, покрывающий карты surf, bhop и KZ. Перед установкой проверьте на странице проекта, какую сборку CS2 он сейчас поддерживает.
  • Работа с зонами. Зоны - это объёмы, которые запускают и останавливают таймер. Хорошие таймеры читают зоны из триггеров самой карты, если маппер назвал их по соглашению, и дают админу нарисовать зоны в игре для карт, где этого нет. Зоны хранятся для каждой карты - в файле или в базе данных.
  • Хранилище. Рекорды должны переживать перезапуски. Маленьким серверам хватит локального файла SQLite; всему, где больше одного сервера или есть веб-таблица лидеров, нужна сетевая база данных. Каждый игровой тариф на RE:NODE включает слот базы данных, который создаётся из панели со сгенерированными хостом, пользователем и паролем, - проверьте, что таймер поддерживает этот движок, прежде чем на него полагаться.
  • Реплеи. Необязательная и самая дорогая функция. Включайте, когда всё остальное заработало.
UDP 27015запись в gameinfo.giна каждый забегИгрокистрейфы и прыжкиСервер CS2cvars движенияMetamod:Sourceaddons/metamodCounterStrikeSharpхост плагинов .NETПлагин-таймерзоны, время, реплеиБаза данныхрекорды и зоны
Из чего состоит сервер surf или bhop

KZ: плагин и есть режим

KZ-сообщества рано объединились вокруг CS2KZ - плагина Metamod от глобальной команды KZ, который реализует режимы движения KZ, чекпоинты, jumpstats и подключение к глобальному сервису рекордов. Это не плагин CounterStrikeSharp, и он заменяет значительную часть описанной выше настройки cvars собственными настройками режимов. Если вы хотите, чтобы забеги на вашем сервере шли в глобальные таблицы лидеров, требования перечислены в документации плагина - обычно это одобренный сервер, неизменённый плагин и собственный API-ключ. KZ-серверу, которому нужны только локальные рекорды, глобальную часть можно полностью пропустить.

Карты, коллекции и настройки для каждой карты#

У surf-карт есть tier, обычно от 1 до 6 или от 1 до 8, и репутация сервера - это в основном его список карт. Хороший публичный surf-сервер крутит в основном карты tier 1-3 и немного более сложных, потому что новички уходят с карты tier 5 через минуту. У bhop и KZ свои шкалы сложности, и принцип тот же: один сервер для новичков и один для постоянных игроков работает лучше, чем один сервер, который раздражает и тех и других.

Некоторые карты сделаны под другие настройки движения - surf-карта, рассчитанная на ускорение в воздухе 100, играется иначе при 150, а некоторые bhop-карты предполагают определённую гравитацию. Большинство таймеров поддерживают переопределение cvars для отдельных карт; в противном случае способ движка - конфиг для конкретной карты:

code
game/csgo/cfg/maps/surf_example.cfg

Многие плагины и некоторые сборки при загрузке выполняют конфиг с именем карты; если ваша сборка этого не делает, надёжный путь - настройки таймера для отдельных карт.

Голосования за карту на серверах движения обычно показывают tier рядом с названием. Плагины rock-the-vote для CounterStrikeSharp принимают список карт с именами и id в Workshop, а некоторые таймеры встраивают собственное меню номинаций.

Производительность и сеть#

Профиль нагрузки на CPU у сервера движения необычный: стоимость на игрока низкая, но он чувствителен к времени кадра, потому что вся игра - это точное движение. Скачок времени кадра раз в минуту на defuse-сервере незаметен, а bhop-цепочку губит. Что вызывает скачки:

  • Запись в базу данных в основном потоке. Таймер, который пишет рекорд синхронно, останавливает сервер на всё время выполнения запроса. Используйте таймер с асинхронной записью, держите базу данных близко и не запускайте тяжёлый запрос таблицы лидеров при каждом старте карты.
  • Реплеи. Запись и воспроизведение забегов - реальная работа. Ограничьте число replay-ботов.
  • Логирование с нагрузкой на диск. Некоторые таймеры логируют каждое касание зоны. Отключите подробное логирование, когда всё заработает.
  • Смена карт. Загрузка большой surf-карты - это остановка в любом случае. Держите список карт разумным и не ставьте перезапуски по расписанию на часы пик.

На тарифе с фиксированной долей CPU честная проверка - график CPU в консоли относительно лимита, пока сервер заполнен. Если он упирается в потолок, сервер троттлится и движение будет ощущаться неровным; на RE:NODE это медленно, а не опасно, и сервер на 100% никогда за это не приостанавливается, но это повод урезать плагины или перейти на тариф выше. Общее правило есть в статье CPU или RAM для игровых серверов.

Сетевой трафик на игрока такой же, как у любого сервера CS2. Игроки с высокой задержкой замечают её на картах движения сильнее, чем где-либо ещё, потому что их движение предсказывается локально и корректируется сервером - сильный jitter проявляется как откат назад на рампе. Как отличить плохой маршрут от загруженного сервера, объясняет статья задержка, jitter и потеря пакетов.

Решение проблем#

На surf игроки соскальзывают с рамп или резко останавливаются. Обычно это проблема карты, а не сервера: у некоторых портов на CS2 проблемы с коллизией на стыках рамп. Попробуйте то же место на другой карте. Если это происходит везде, проверьте sv_airaccelerate и то, что ни один плагин не сбрасывает cvars движения при старте карты.

Скорость в bhop упирается примерно в 300. sv_enablebunnyhopping равен 0, или конфиг режима сбросил его после выполнения server.cfg. Проверяйте текущее значение в консоли после загрузки карты, а не файл.

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

Рекорды пропали после перезапуска. Таймер писал в локальный файл, который был заменён, или в базу данных, до которой не мог достучаться, и молча откатился на запасной вариант. Найдите в логе плагина при старте строку подключения к базе данных.

Раунды продолжают заканчиваться. mp_ignore_round_win_conditions выключен, или конфиг игрового режима его перезаписал. Выполняйте свой конфиг раундов после конфига режима.

Всё сломалось после обновления CS2. Строка Metamod в gameinfo.gi откатилась, а плагинам движения, которые патчат память, нужны новые сборки. Верните строку и дождитесь обновлений плагинов, прежде чем снова открывать сервер. Держите backup рабочей папки addons - общий порядок действий описан в статье что делать, когда обновление мода всё сломало.

FAQ#

Какой sv_airaccelerate ставить на surf-сервер CS2?

150 - распространённое публичное значение и безопасный вариант по умолчанию. 100 даёт более тяжёлое управление в воздухе, которое предпочитают некоторые ветераны; значения сильно выше делают большинство карт лёгкими. Выберите одно и не меняйте, потому что рекорды, поставленные при одном значении, несопоставимы с рекордами при другом.

Можно ли запустить surf- или KZ-сервер на 128 tick в CS2?

Нет. CS2 работает на 64 tick с sub-tick вводом и игнорирует аргумент запуска -tickrate. Поэтому, а также из-за системы sub-tick, движение ощущается иначе, чем в CS:GO, и никакая настройка хостинга этого не меняет.

Нужен ли плагин для surf-сервера?

Чтобы играть - нет. Cvars выше и surf-карта дают играбельный surf. Плагин-таймер добавляет время, зоны и рекорды - именно то, ради чего игроки возвращаются, - поэтому большинство серверов добавляют его, как только заработала основа.

Включать ли auto-bunnyhopping?

Для публичного bhop-сервера обычно да: режим становится о стрейфах, а не о тайминге колёсика мыши, и новички задерживаются дольше. Многие опытные сообщества держат отдельный сервер с выключенным auto-hop. Укажите выбор в названии сервера.

Будет ли мой таймер SourceMod из CS:GO работать в CS2?

Нет. SourceMod в CS2 не работает. Таймеры переписаны под Metamod и CounterStrikeSharp, а рекорды из базы данных CS:GO не переносятся без инструмента конвертации от авторов таймера.

Сколько игроков выдержит surf-сервер?

Игра допускает до 64 слотов, но большинство surf-серверов держат 16-32, потому что на картах становится тесно, а реплеи с ростом числа игроков обходятся дороже. Ориентируйтесь на график CPU при заполненном сервере, а не на число слотов.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000