Привет всем. Разберем, чего такое хеадлесс клиент и как с ним сосуществовать на примере миссий для сервера Arma-3
Итак:
Headless клиент, это штуковина встроенная в серверную часть Arma3, которая помогает серверу проводить расчеты для AI - другими словами повышает FPS:). Кол-во клиентов, указывается в файле server.cfg вашего сервера. А запускается клиент путем запуска сервера с параметром -client:)
Фактически это дополнительный клиент, управляемый AI который будет подключаться к нашему серверу и рулить там миссиями.... снижая нагрузку на все остальное.
Давайте рассмотрим пример миссии HOG-а с dayz_epoch.com, как он реализовал свою миссию. Чуток подготовки:
1) Софт, который нам понадобится (если мы создаем миссию с нуля и ничего еще не редактировали).
- упаковщик распаковщик pbo - pbo manager
- утилита urap.exe для декомпилляции mission.sqm
- notepad ++ для того чтобы редактировать mission.sqm (он очень критичен, к редакции).
C помощью их готовим папку к инсталляции, как это написано в моем гайде про разбин mpmission.sqmhttp://s-platoon.ru/index.php?/topic/2124-kak-razbinarit-missionsqf-v-arma3-epoch/
2) Теперь договоримся о следующем у меня сервер ARMA3 стоит в папке C:\ARMA3\ поэтому пути я буду указывать именно туда. Вам же необходимо будет исправить пути в тот каталог где у вас установлен сервер Arma3 (где у вас находится Arma3server.exe)
3) Скачиваем архив миссий HOG-а с его GitLib-а https://github.com/hogscraper/HOGS_AI (репозиторий активный и он его постоянно обновляет.) И распаковываем его куда-нибудь в укромное место :)
4) Идем в папку c:\Arma3\MpMission\Epoch.Altis\ и создаем там папку Hogs_AI в папке Custom должно получится
C:\Arma3\MpMission\Epoch.Altis\Custom\Hogs_Ai\ в эту папку помещаем 5 файлов и скаченного архива находящихся в одноименной папке:
AI_Functions.sqf
AI_Init.sqf
Hogs_AI.sqf
Server_PVEH.sqf
fn_fetchCfgDetails.sqf
поднимаемся выше в папку C:\Arma3\MpMission\Epoch.Altis\ и создаем пустой файл init.sqf (если у нас уже есть в нем, что-либо вставляем текст ниже в самый верх:
if(isserver) then{
execVM "custom\Hogs_AI\Server_PVEH.sqf";
};
//Only uses this code if the connecting client is not the server
//and doesn't have an interface(our headless client)
if (!hasInterface and !isServer) then {
execVm "custom\Hogs_AI\AI_Init.sqf";
sleep 1;
execVm "custom\Hogs_AI\AI_Functions.sqf";
sleep 5;
execVm "custom\Hogs_AI\Hogs_AI.sqf";
};
player enableFatigue false;
"GlobalHint" addPublicVariableEventHandler
{
private ["_GHint"];
_GHint = _this select 1;
hint parseText format["%1", _GHint];
};
5) Во избежание сложностей в этом шаге используем строго notepad++ (либо FAR)
открываем им наш разбинаренный mission.sqm И создаем точку входа для нашего клиента. Ведь на сервер зайдет не живой игрок, а виртуальный.
Для этого: в файле mission.sqm в районе строки №33 находим
items = 100;
этот параметр указывает кол-во подключений к нашему серверу (максимально есть точки спавна для 100 игроков по умолчанию).
и меняем этот параметр на
items = 101;
6) Нажимаем сохранить, и спускаемся в этом же файле примерно до строчки 2034
там как раз заканчивается }; блок venchicle 99 номере...
и вставляем туда еще одну точку спавна для нашего клиента...
class Item100 {
side="LOGIC";
class Vehicles {
items=1;
class Item0 {
position[]={14093.1, 10.4375, 11552.1};
id=100;
side="LOGIC";
vehicle="HeadlessClient_F";
player="PLAY CDG";
leader=1;
skill=0.60000002;
text="MissionBuddy";
};
};
};
Результат должен выглядеть примерно так:
.......
class Groups {
items = 101;
class Item0 {
side = CIV;
class Vehicles {
items = 1;
class Item0 {
position[] = {23598.1, 3.19, 17997.1};
azimut = 136.241;
special = NONE;
id = 0;
side = CIV;
vehicle = "VirtualMan_EPOCH";
player = "PLAY CDG";
leader = 1;
skill = 0.6;
};
};
};
---> повторяющийся код до № 99 вырезан....
class Item99 {
side = CIV;
class Vehicles {
items = 1;
class Item0 {
position[] = {23605.1, 3.19, 17998.1};
azimut = 130.016;
special = NONE;
id = 99;
side = CIV;
vehicle = "VirtualMan_EPOCH";
player = "PLAY CDG";
leader = 1;
skill = 0.6;
};
};
};
class Item100 {
side="LOGIC";
class Vehicles {
items=1;
class Item0 {
position[]={14093.1, 10.4375, 11552.1};
id=100;
side="LOGIC";
vehicle="HeadlessClient_F";
player="PLAY CDG";
leader=1;
skill=0.60000002;
text="MissionBuddy";
};
};
};
}; // <----- эта скобка закрывает весь блок Vehicles
class Sensors { // <--- начало блока vechcles
Нам необходимо указать серверу что мы будем использовать headless клиент и что он будет к нему подключаться..
Добавляем в файл: где-то после MODT ""
headlessClients[]={"127.0.0.1"};
localClient[]={"127.0.0.1"};
В моем случает запуск происходит на той же машине , что и сервер, но вполне можно сделать это вообще на другом компьютере или запустить несколько клиентов.... но у меня это так :))
Шаг № 7. Создаем мегабатник для запуска нашего клиента....
echo STARTING NEW EPOCH BEC SERVER PLEASE WAIT
cd C:\Arma3\instance_epoch.Altis\bec
start Bec.exe -f Config.cfg –dsc
timeout 5
echo STARTING NEW EPOCH SERVER PLEASE WAIT
cd C:\Arma3\
start arma3server.exe -mod=@epoch -port=2302 -noSound -nosplash -nopause -enableHT -cpuCount=16 -exThreads=15 -maxmem=6144 -config=instance_epoch.Altis\server.cfg -cfg=instance_epoch.Altis\basic.cfg -profiles=instance_epoch.Altis -name=instance_epoch.Altis -mod=@Epoch;@EpochHive;
timeout 20
start arma3server.exe -client -connect=127.0.0.1 -mod="@epoch"
timeout 5
Примерно с таким содержимым .... как вы видите я запускаю BEC после запуска он ждет 5 секунд пока запустится сервер
Сервер запускается и мы выдерживаем 20 секунд паузы, дожидаясь пока он прогрузится... (тайминг меняйте в зависимости от мощности вашего сервере)... после чего запускаем сервер повторно уже с значением -cleint позволяющий пускать headless клиента.
start arma3server.exe -client -connect=127.0.0.1 -mod="@epoch"
Шаг № 7.
не забываем вернувшись в C:\ARMA3\MPMission\Epoch.Altis\description.ext изменить значение кол-ва игроков мы ведь добавили еще одного, виртуального... без этого запустится но в RPT найдете ошибку о несоответствии...
minPlayers = 1;
maxPlayers = 101;
Ну собственно все :)))
У меня все работает :)))
Доп материалы:
https://github.com/hogscraper/A3_EPOCH_Headless_Client - headless клиент файлы настройки
http://epochmod.com/forum/index.php?/topic/29541-a3-epoch-headless-clients-walkthrough-updateddec-22nd/ - обсуждение миссии на сайте epoch
https://community.bistudio.com/wiki/Arma_3_Headless_Clien - описание, как это работает от bistudio