Arma 3
Not enough ratings
Выделенный сервер с поддержкой Безголовых клиентов
By pomikrus
Данное руководство написано в помощь тем, кто хочет запустить свой собственный выделенный сервер для Arma 3. Постараюсь объяснить простым языком основные моменты создания и настройки сервера, как это реализовано у меня.
   
Award
Favorite
Favorited
Unfavorite
Вступление
Приветствую всех игроков и фанатов игры Arma 3.

В данном руководстве хотелось бы поделиться опытом создания запуска, настройки и оптимизации Выделенного сервера (Dedicated Server).

Основа здесь страница с оффициального сайта богемии[community.bistudio.com]

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

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

Рассмотрим вариант как это организовано у меня.

Имеется домашний интернет - оптика от Ростелекома со скоростью 100 Мбит/с, обычный домашний роутер к которому через провод подключены два компа, основной игровой и старый для организации сервера.

Конфигурация старого компа:
Процессор Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz 2.80 GHz
Оперативная память 16,0 ГБ
Видяха GF 6600 c 256 Мб памяти даже без кулера))
SSD Smartbuy 120 Gb

Для организации нормальной локальной сети на него установлена
Выпуск Windows Server 2022 Datacenter
Версия 21H2
Дата установки ‎01.‎04.‎2023
Сборка ОС 20348.2340

На игровом компе Win10 с настройкой подключения удаленного рабочего стола



Согласно инструкции[community.bistudio.com]

На сервере:

Скачиваем устанавливаем DirectX

Создаем папку под установку STAEM, скачиваем, разархивируем и запускаем файл



Создаем две папки для игры


Создаем файл Arma3server_steamcmd_example.cmd (обычный текстовый файл и меняем расширение на cmd)


вставляем туда текст из примера[community.bistudio.com]

редактируем строку SET STEAMLOGIN= указав свой логин и пароль (у меня заведена отдельная учётка STEAM под этот случай)

проверяем путь в строках
SET A3serverPath=
SET STEAMPATH=

Запускаем файл


Дожидаемся скачивания файлов сервера


Файл Arma3server_steamcmd_example.cmd запускаю примерно раз в месяц для проверки и скачивания обновлений файлов сервера (но не модов!, как обновлять автоматически моды пока не разобрался).

на папку A3Master открываю общий полный доступ для копирования файлов (моды, файлы настройки, распределители памяти) с основного игрового компьютера.


Папка A3Master будет основным корнем сервера в котором расположится файл arma3server_x64.exe

Здесь же создаем два файла arma3profile.cfg и CONFIG_server.cfg их настройку рассмотрим в следующем разделе руководства.

Также можно сразу создать bat файл для запуска сервера. (обычный текстовый файл и меняем расширение на .bat)

Должно выглядеть примерно так


Папки
!Workshop для хранения модов под вашу миссию (обычно бывает скрытая, делаем видимой всегда)
dll для хранения распределителей памяти (на сегодняшний день я использую mimalloc_v219_20250213.dll качал здесь[github.com] (но вы можете протестировать работу и других и выбрать подходящий)

Копируем моды для вашей миссии через сетевое окружение на основном игровом компьютере


и переходим к настройке сервера...



Настройка выделенного сервера
Как уже упоминалось ранее в корневой папке A3Master мы создали три файла
arma3profile.cfg
CONFIG_server.cfg
и bat (имя любое, например startDS.bat)

Начнем с arma3profile.cfg
У меня он выглядит так, путем экспериментов с этими значениями у меня сервер показывает лучшие показатели в производительности и серверного FPS
Описание что за что отвечает читать здесь[community.bistudio.com]

language="Russian"; Windowed=0; adapter=-1; MinBandwidth=24576000; MaxBandwidth=786432000; MaxMsgSend=8192; MaxSizeGuaranteed=512; MaxSizeNonguaranteed=256; MinErrorToSend=0.001; MinErrorToSendNear=0.005; MaxCustomFileSize=1024; serverLongitude=2; serverLatitude=49; serverLongitudeAuto=0; serverLatitudeAuto=0; class sockets { maxPacketSize=1400; };

Примечательна следующая строка инструкции:
Наибольший уровень оптимизации может быть достигнут путем установки параметров MAXMSGSEND и MinBANDWIDTH. Для сервера с 1024 кбит/с мы рекомендуем следующие значения:
MaxMsgSend = 256;
MinBandwidth = 768000;
MinBandwidth в 3000 раз больше MaxMsgSend

Это рекомендация для сервера с 1024 кбит/с, у нас в 2025 г. скорости выше, поэтому я смело умножил MaxMsgSend на 32 и получил 8192, MinBandwidth 8192*3000 = 24576000

Идем дальше, настраиваем CONFIG_server.cfg
У меня выглядит так, настройки сервера на миссию NDS - Чернарусь зимняя
hostName = "NOVA Server"; password = "12345"; passwordAdmin = "secret"; serverCommandPassword = "secret"; persistent = 1; maxPlayers = 20; upnp = false; // Настройки голосового чата disableVoN = 1; // Если стоит 1,голосовой чат будет отключен,включить должно стоят 0. vonCodecQuality = 10; // Частота звука (Значения от 1 до 30) 1-10=8Кгц,11-20=16Кгц,21-30=32Кгц.Чем выше значение тем лучше качества звука,но при этом увеличивается потребление пропускной способности. // Голосование voteMissionPlayers = 1; // Минимальное количество игроков ,необходимых перед отображением меню выбора миссии, если вы еще не выбрали миссия в этой конфигурации.0=Отключить голосование. voteThreshold = 0.33; // Процент голосов (от 0,00 до 1,00).Процент голосов, необходимых для подтверждения голоса.К примеру 0.1 значение =1% проценту голоса. allowedVoteCmds[] = // Команды голосования разрешены для игрока. { // {команда, preinit, postinit, Порог голосов} Указав порог голоса,voteThreshold не будет действовать. {"admin", false, false}, // голоса администратора {"kick", false, false, 0.51}, // голоса кика {"missions", false, false}, // Изменение миссии {"mission", false, false}, // Выбор миссии {"restart", false, false}, // Рестарт миссии {"reassign", false, false} // Перезапуск миссия с ролями назначенных }; // Приветственное сообщение игроку. // Это может быть несколько строк,разделенных запятыми. // Пустые сообщения "" не будет отображаться,но могут быть использованы для увеличения задержки перед другими сообщениями. motd[] = { "Welcome to NOVA-Test_Server_1.0!" }; motdInterval = 5; // Количество секунд между каждым сообщением // Цикл миссий class Missions { class Mission1 { template = "NDS_Chernarus_winter.Chernarus_winter"; // Filename of pbo in MPMissions folder NDS_Ivanivokova.Ivanivokova NDS_Chernarus_winter.Chernarus_winter difficulty = "Custom"; // "Recruit", "Regular", "Veteran", "Custom" class Params { NDS_flag = 1; // 1-"Россия", 2-"ДНР", 3-"ЛНР", 4-"Вагнер", 5-"Новороссия", 6-"СССР" NDS_newGame = 1; // 0 - новая игра, 1 - старая игра (загружается из сохранения) NDS_dayTime = 6; //6 утро, 12 день, 18 вечер, 0 ночь NDS_basePlayerSide = 0; NDS_timeMultiplier = 12; NDS_distBtB = 2000; //"1000м", "2000м", "3000м" расстояние между базами NDS_timeAttack = 2; // 1 "Часто", 2 "Нормально", 3 "Редко" }; }; }; // Логирование //logFile = "A3Master.log"; timeStampFormat = "short"; // Формат метки времени в логах сервера.Значение "none"-нету меток,"short"-короткие метки,"full"-полные метки. // Безопасность BattlEye = 0; // 1=Включение Анти-чита BattlEye,0=Выключен.Рекомендуется значение 1. verifySignatures = 0; // 2=Игроки не подписанным или неизвестным модом не будут подключаться.0=Выключить проверку.Рекомендуется значение:2 kickDuplicate = 1; // 1=Игроки с одинаковыми id будут кикнуты с сервера.0=выключить проверку.Рекомендуется значение:1. // Расширения allowedLoadFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"}; // Только позволит файлы с этими расширениями будут загружены с помощью команды LoadFile (Arma 3 v1.19.124216) allowedPreprocessFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"}; //Только позволит файлы с этими расширениями будут загружены с помощью команды preprocessFile/preprocessFileLineNumber (Arma 3 v1.19.124216) allowedHTMLLoadExtensions[] = {"htm","html","xml","txt"}; //Только позволяют файлы с этими расширениями будут загружены с помощью команды HTMLLoad (Arma 3 v1.27.126715) onUserConnected = ""; // Команда для запуска , когда игрок соединяется onUserDisconnected = ""; // Команда для запуска , когда игрок отключается doubleIdDetected = ""; // Команда для запуска,если есть игроки с одинаковым id. onUnsignedData = ""; // Команда для запуска , если игрок имеет не подписанных файлов. onHackedData = ""; // Команда для запуска,если у игрока подделаны файлы. //kick (_this select 0) // HEADLESS клиенты headlessClients[] = {"127.0.0.1", "192.168.100.5", "192.168.1.110"}; // Список IP- адресов,которые могут подключиться с помощью HEADLESS клиентов.Пример:{"127.0.0.1", "192.168.1.100"}; localClient[] = {"127.0.0.1", "192.168.100.5", "192.168.1.110"}; // Список IP -адресов,которые выдают неограниченную пропускную способность.Пример:{"127.0.0.1", "192.168.1.10"};
Пароли, название сервера, название и настройки миссии ставите свои.

Последние два пункта headlessClients[] = и localClient[] = рассмотрим при подключении к серверу Безголовых клиентов (headlessClients)

Осталось настроить последний файл BAT
для Миссии NDS - Чернарусь зимняя выглядит следующим образом
start arma3server_x64.exe -port=2302 -config=CONFIG_server.cfg -cfg=arma3profile.cfg -profiles=A3Master -name=A3Master -maxmem=12288 -malloc=mimalloc_v219_20250213 -world=empty -hugePages -skipIntro -enableHT -noSplash -noPause -noPauseAudio -loadMissionToMemory -limitFPS=300 -mod="!Workshop\@CBA_A3";"!Workshop\@CUP Terrains - Core";"!Workshop\@Drone Landing Fix";"!Workshop\@CUP Weapons";"!Workshop\@CUP Vehicles";"!Workshop\@CUP Units";"!Workshop\@Armed Forces of Ukraine 2020 (CUP)";"!Workshop\@RMF";"!Workshop\@Enhanced Movement";"!Workshop\@Mavic 3";"!Workshop\@Mavic 3 drop mod";"!Workshop\@UAF Vehicles Pack";"!Workshop\@Ukrainian Armed Forces Gear - Monk";"!Workshop\@RHSUSAF";"!Workshop\@RHSAFRF";"!Workshop\@Verba MANPADS";"!Workshop\@Lancet-3 & Izdelie-53";"!Workshop\@FPV Drone Crocus";"!Workshop\@Krasnopol Fire Support";"!Workshop\@Orlan UAV";"!Workshop\@Orion UAV";"!Workshop\@Country of Heroes";"!Workshop\@Change_the_distance";"!Workshop\@-AMZ- Improved WS Sounds V7.8";"!Workshop\@UAZ 452 (Bukhanka)";"!Workshop\@COUNTRY of HEROES II";"!Workshop\@Zala Z-16 UAV";"!Workshop\@NDS Plus";"!Workshop\@Chernarus winter With fixed footsteps";"!Workshop\@Interiors for CUP" -autoinit
никаких переносов строк быть не должно!

Проброс портов на роутере и запуск сервера
Последнее что нужно сделать, это пробросить порты на роутере чтобы ваш сервер отображался в закладке СЕВЕРЫ лаунчера.

Роутеры у всех разные, ищите инструкцию к своему.

У меня в настройках роутера зарезервированы IP адреса с привязкой по MAC-адресу для сервера 192.168.1.171, для игрового 192.168.1.110


И ПОРТЫ ПРОПИСАНЫ СЛЕДУЮЩИМ ОБРАЗОМ




Возможно что-то лишнее, но с такими настройками все работает.

Теперь все готово. Запускаем наш BAT файл
Окно сервера готового к подключению клиентов должно выглядеть так


В лаунчере клиента у меня сервер не видит, у друзей видит по фильтру Имя сервера через закладку ИНТЕРНЕТ.
Произвел подключение через кнопку ПРЯМОЕ ПОДКЛЮЧЕНИЕ, и затем подключаюсь через закладку ПОСЛЕДНИЕ + добавил сервер в ИЗБРАННЫЕ нажав на звездочку слева от имена сервера.


Последний раздел данного руководства будет посвящен Безголовым клиентам...
Подключение безголовых клиентов
Основная информация взята здесь[community.bistudio.com]

Так гласит перевод
Клиент без головы используется для разгрузки расчетов искусственного интеллекта из экземпляра сервера.
Клиент без головы интегрируется в игровой клиент и специальный исполняемый файл сервера (Windows и Linux, используйте параметр -client).

В PvE миссиях с использованием большого количества одновременно загруженных юнитов на сервер накладывается большая нагрузка по их обработке, что может привести к уменьшению серверного FPS (не путать с клиентским) и даже к зависанию сервера.

Безголовые клиенты берут на себя часть нагрузки по обработке юнитов, чем сильно выручают сервер. К примеру в миссии NDS Plus при одновременном респе около 200 юнитов, FPS сервера без использования безголовых клиентов у меня держался порядка 30, при продолжительной сессии миссии, мог падать до 9. Миссия часто крашилась и приходилось перезапускать сервер (даже снимать задачу).
С двумя Безголовыми клиентами при 5 часовой продолжительности миссии FPS не падал ниже 70, в среднем около 90. Хороший результат, не правда ли?!

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

Это вообще одна из ключевых особенностей запуска таких миссий как Antistasi и NDS Plus.
И так мало информации на этот счет. Например, мне стало об этом известно только пару недель назад, хотя отыграно в арму более 3950 часов.

Вообще, я замечал серый значок в лобби выбора ролей, но почему то всегда казалось, что Безголовые клиенты это так, зайти за чайку и понаблюдать за игрой со стороны. А тут вон он ЧО)))

Короче, отставить лирику, ближе к делу.

Безголовых клиентов запускаем в отдельном окне на стороне клиента. Для миссии NDS Plus поддерживается только два (можно и с одним).

Создаем BAT файл в корне клиента Arma 3 (например с именем HC1.bat) и пишем туда следующее
start arma3server_x64.exe -port=2302 -cfg=arma3profile.cfg -client -connect=192.168.1.171 -password=12345 -maxmem=8163 -malloc=mimalloc_v219_20250213 -hugepages -world=empty -mod="!Workshop\@CBA_A3";"!Workshop\@CUP Terrains - Core";"!Workshop\@Drone Landing Fix";"!Workshop\@CUP Weapons";"!Workshop\@CUP Vehicles";"!Workshop\@CUP Units";"!Workshop\@Armed Forces of Ukraine 2020 (CUP)";"!Workshop\@RMF";"!Workshop\@Enhanced Movement";"!Workshop\@Mavic 3";"!Workshop\@Mavic 3 drop mod";"!Workshop\@UAF Vehicles Pack";"!Workshop\@Ukrainian Armed Forces Gear - Monk";"!Workshop\@RHSUSAF";"!Workshop\@RHSAFRF";"!Workshop\@Verba MANPADS";"!Workshop\@Lancet-3 & Izdelie-53";"!Workshop\@FPV Drone Crocus";"!Workshop\@Krasnopol Fire Support";"!Workshop\@Orlan UAV";"!Workshop\@Orion UAV";"!Workshop\@Country of Heroes";"!Workshop\@Change_the_distance";"!Workshop\@-AMZ- Improved WS Sounds V7.8";"!Workshop\@UAZ 452 (Bukhanka)";"!Workshop\@COUNTRY of HEROES II";"!Workshop\@Zala Z-16 UAV";"@NDS Plus";"!Workshop\@Chernarus winter With fixed footsteps";"!Workshop\@Interiors for CUP" -autoinit

IP и пароль прописать свои которые указаны в настройках сервера
-maxmem и -malloc тоже свои значения
список модов должен совпадать с серверным!

файл arma3profile.cfg такой же как на сервере положить в корневую папку игры;

на сервере в файле CONFIG_server.cfg
в самом низу прописать IP адреса Безголовых клиентов
// HEADLESS клиенты
headlessClients[] = {"127.0.0.1", "192.168.100.5", "192.168.1.110"}; // Список IP- адресов,которые могут подключиться с помощью HEADLESS клиентов.Пример:{"127.0.0.1", "192.168.1.100"};
localClient[] = {"127.0.0.1", "192.168.100.5", "192.168.1.110"}; // Список IP -адресов,которые выдают неограниченную пропускную способность

если ваш друг будет подключать Безголового клиента попросите его дать свой глобальный IP и занесите его в список.

Запускаем созданный BAT файл, при успешном подключении видим следующее окно



Запускаем основной клиент игры. В лобби выбора роли нажимаем клавишу / справа от Ю и вводим команду #login пароль администратора Жмем Enter
Для отслеживания серверного FPS таким же образом вводим команду #monitor 10
(10 - это количество секунд через которое будет обновляться информация)

Видим следующую картину


Безголовый клиент HC1 подключен, FPS 270

Начинаем игру, следим за FPS


На этом ВСЁ. Спасибо за внимание! Надеюсь будет полезно...
4 Comments
pomikrus  [author] May 30 @ 2:39am 
можно и на одном компьютере запускать... либо лаунчер запусти сначала, потом с ярлыка сервер, потом через лаунчер цепляйся к клиенту. Либо, если запустил сначала сервер и не выбрать в стиме запуск клиента, запусти лаунчер через проводник из корня Arma3
novoestaroe May 22 @ 5:20pm 
Запустил сервер на отдельном компьютере. Если я правильно понимаю, выясняется, что для сервера и для клиента нужно две копии игры. Одна для сервера, одна для того, чтобы играть. Иначе на компьютере, с которого хотел зайти на сервер, я не могу запустить игру, поскольку она уже используется другим компьютером (сервером). Я что-то не так делаю или это действительно так и есть?
Dron Mar 18 @ 4:40am 
Спасибо , будем завтра обкатывать )
Челябинск Mar 18 @ 4:16am 
Лайк