# DayZ Command Line Launcher **dayz-ctl** — это экспериментальный лаунчер (обозреватель серверов и средство запуска) [DayZ][] в [Steam][221100] [Proton][] для Linux. > Этот документ доступен на языках: [rus 🇷🇺][], [eng 🇬🇧][], [ua 🇺🇦][] ![logo][] На момент реализации этого проекта [Bohemia Interactive][] всё еще не смогла сделать рабочий лаунчер для игры, который мог бы корректно устанавливать модификации и подключатся к игровым серверам. По этой причине появился этот проект. Основные особенности: * Обозреватель серверов с информацией о каждом сервере * Нечеткий поиск в обозревателе серверов на базе [fzf][] * Автоматическая установка модов (как опция) * Широкий набор фильтров для поиска серверов (карта, время суток, модификации, количество игроков, от первого лица, пароль и т.п.) * Дополнительная информация в виде страны расположения (используя geoip базу) и ping для каждого сервера * Список избранного, история последних 10 игр и создание ярлыков быстрого запуска для подключения к серверам * Оффлайн режим [DayZCommunityOfflineMode][] с автоматической установкой, обновлением и возможностью выбора модификаций * Меню конфигурации с параметрами запуска игры, настройками лаунчера, управлением и статистикой по модам * Предоставляет ссылку с подробной информацией о сервере на [battlemetrics][] Отдельное спасибо [dayz-linux-cli-launcher][] за идею и [dayzsalauncher][] за API. ## Предварительный просмотр > ![Демонстрация лаунчера](extra/dayz-ctl-demo.svg) > **Демонстрация лаунчера**
Больше скриншотов 👈

Главное меню

Браузер серверов

Фильтрация серверов

Фильтрация по карте

Применение фильтра

Браузер избранного

Браузер истории

Нечеткий поиск

Оффлайн режим

Моды для оффлайн

Моды сервера

Информация о модах

Меню конфигурации

Параметры запуска

Информация

Новости DayZ

## Особенности использования SteamCMD Имеется два режима работы лаунчера с использованием SteamCMD для управления модами и без него в ручном режиме. Вы можете комбинировать оба подхода, к примеру подписываться на те модификации которые вам точно нужны будут в будущем переходя по ссылке, а наличие обновлений проверять или принудительно обновлять моды при помощи лаунчера. Также вы можете не подписываться на "сомнительные 50 модов" очередного сервера и с легкостью удалить их одним действием из лаунчера, при этом сохранив все моды на которые имеется подписка. ### Используя SteamCMD * 🟢 Всё происходит автоматически * 🟢 Автоматическая проверка наличия обновлений модов прямо сейчас (принудительно) * 🟡 Не создается подписки на моды, они просто скачиваются * 🟡 Требует закрытия клиента Steam для загрузки модов * 🔴 Иногда нужно повторно авторизоваться в Steam ### Не используя SteamCMD * 🟢 Привычное поведение если вы уже использовали другие решения, к примеру [dayz-linux-cli-launcher][] * 🟡 Игра сама не запустится после скачивания модов * 🟡 Steam бывает задерживает проверку обновлений и скачивает их только после перезапуска или подписки/отписки от мода * 🔴 Подписываться на моды нужно самому руками ## Установка ### При помощи установщика Для удобства установки имеется небольшой скрипт который сделает всё за вас (по крайней мере попытается сделать) Выполните это: ```bash curl -sSfLA dayz-ctl bit.ly/3Vf2zz3 | bash ``` ### Ручная установка Для работы лаунчера вам необходимо убедится что у вас установлены все зависимости: * [jq][] - утилита для обработки JSON * [fzf][] - утилита для нечеткого поиска * [gum][] - утилита для создания диалогов и стилизации вывода * `ping` (`iputils-ping`) - узнаем пинг до сервера (где включен ICMP) * `geoiplookup` (`geoip-bin`) - узнаем страну размещения сервера * `whois` - запасной вариант для geoiplookup, менее точный и более медленный, но не все записи есть в стандартной БД geoip * `curl` - утилита для комуникации с различными API по HTTP/S * `cut, tr, grep, pgrep, pkill, killal, timeout, sed, awk` (`gawk`) - куда же без класических утилит в скриптах * [Steam][] - онлайн-сервис цифрового распространения компьютерных игр * [SteamCMD][] - steamcmd Консольный клиент Steam * [DayZ][221100] - и естественно сама игра После чего можете склонировать репозиторий: ```bash git clone git@github.com:WoozyMasta/dayz-ctl.git # or git clone https://github.com/WoozyMasta/dayz-ctl.git # and run cd dayz-ctl ./dayz-ctl ``` Или скачать сам файл скрипта: ```bash curl -sSfL -o ~/.local/bin/dayz-ctl \ https://raw.githubusercontent.com/WoozyMasta/dayz-ctl/master/dayz-ctl chmod +x ~/.local/bin/dayz-ctl # and run dayz-ctl ``` ### Emoji Для нормального отображения элеменотов используются emoji, возможно дополнительно вам понадобится установить их, к примеру вы можете использовать [Noto][] шрифт от Google. Ниже приведен список с названием пакета для разных дистрибутивов. * `fonts-noto-color-emoji` - debian/ubuntu * `google-noto-emoji-color-fonts` - centos * `google-noto-emoji-fonts` - fedora * `noto-fonts-emoji` - arch * `font-noto-emoji` - alpine * `noto-coloremoji-fonts` - suse Или же если вам не нравятся emoji или вы не можете использовать их по какой то причине, вы можете применить патч для замены их на строки: ```bash sed -e 's/▫️/•/g' -e 's/🟩/✕/g' -e 's/⬛/ /g' -e 's/🕒/time/g' -e 's/❔/?/g' \ -e 's/🟢/ok/g' -e 's/🔴/no/g' -e 's/🌙/night/g' -e 's/☀️/day/g' \ -e 's/🔒/yes/g' -e 's/🔓/no/g' -e 's/✅/ok/g' -e 's/❌/no/g' \ -i "$(which dayz-ctl)" ``` ## Проверялось в дистрибутивах * 🟢 Debian bookworm * 🟢 Debian bullseye * 🟢 Debian buster * 🟢 Ubuntu 18.04 * 🟢 Ubuntu 20.04 💯 * 🟢 Ubuntu 22.04 💯 * 🟢 Fedora latest * 🟡 Centos 7 (small bugs) * 🟡 Centos stream9 (small bugs) * 🟢 Alpine latest * 🟢 Alpine edge * 🟢 Archlinux * 🟡 Opensuse leap (small bugs) ## Прочее ### Steam Лучше убирать все параметры запуска DayZ в Steam и управлять ими из лаунчера или наоборот. Так как ключи могут дублироваться и это может вызвать путаницу, или в худшем случае обрежет часть ключей, ведь у строки аргументов есть лимит длинны, а на серверах с большим количеством модов используется и так очень длинный параметр запуска. Т.е. оставьте параметры запуска пустыми, или укажите только нужный вам набор вспомогательных утилит и переменных, к примеру: ```bash MANGOHUD=1 ENABLE_VKBASALT=1 gamemoderun %command% ``` ### Синтаксис поиска Вы можете ввести несколько условий поиска, разделенных пробелами. например `^namalsk DE !PVE !RP` | Ключ | Тип соответствия | Описание | | --------- | -------------------------------------- | -------------------------------------------- | | `sbtrkt` | нечеткое совпадение | Элементы, соответствующие `sbtrkt` | | `'wild` | точное совпадение (в кавычках) | Элементы, включающие `wild` | | `^music` | точное совпадение префикса | Элементы, начинающиеся с `music` | | `.mp3$` | суффикс-точное совпадение | Элементы, оканчивающиеся на `.mp3` | | `!fire` | обратное точное совпадение | Предметы, не содержащие слова `fire` | | `!^music` | точное соответствие обратного префикса | Элементы, которые не начинаются с `music` | | `!.mp3$` | точное соответствие обратного суффикса | Элементы, которые не заканчиваются на `.mp3` | Термин с одним символом черты действует как оператор ИЛИ ```regexp PVE | RP ``` ## Переменные окружения Вы можете более тонко управлять работой лаунчера при помощи переменных окружения которые вы можете передавать в окружение как обычно так и записать в файл конфигурации `$HOME/.local/share/dayz-ctl/dayz-ctl.conf` (по умолчанию) Список доступных переменных: * **`DAYZ_CTL_VERSION`** — версия приложения * **`DAYZ_CTL_NAME`**=`dayz-ctl` — название приложения * **`DAYZ_GAME_ID`**=`221100` — ID игры в Steam * **`APPLICATIONS_DIR`**=`$HOME/.local/share/applications` — каталог для хранения ярлыков приложений * **`DAYZ_CTL_DIR`**=`$HOME/.local/share/dayz-ctl` — рабочий каталог лаунчера * **`DAYZ_CTL_BIN_DIR`**=`$HOME/.local/share/dayz-ctl/bin` — каталог хранения дополнительных исполняемых файлов * **`DAYZ_REQUEST_TIMEOUT`**=`10` — стандартный таймаут для HTTP запросов в секундах * **`DAYZ_CONFIG_FILE`**=`$DAYZ_CTL_DIR/$DAYZ_CTL_NAME.conf` — конфигурационный файл dayz-ctl * **`DAYZ_SERVER_DB`**=`$DAYZ_CTL_DIR/servers.json` — файл базы серверов * **`DAYZ_SERVER_DB_TTL`**=`300` — TTL для базы серверов в секундах * **`DAYZ_SERVER_REQUEST_TIMEOUT`**=`30` — таймаут получения списка серверов в секундах * **`DAYZ_NEWS_DB`**=`$DAYZ_CTL_DIR/news.json` — файл базы новостей * **`DAYZ_NEWS_DB_TTL`**=`3600` — TTL для базы новостей в секундах * **`DAYZ_MODS_DB`**=`$DAYZ_CTL_DIR/mods.json` — файл базы модификаций * **`DAYZ_PROFILE`**=`$DAYZ_CTL_DIR/profile.json` — файл профиля пользователя * **`DAYZ_HISTORY_SIZE`**=`10` — размер истории для обозревателя серверов * **`DAYZ_FZF_HISTORY`**=`$DAYZ_CTL_DIR/.$DAYZ_CTL_NAME-history` — файл истории для нечеткого поиска * **`DAYZ_USERAGENT`**=`"$DAYZ_CTL_NAME $DAYZ_CTL_VERSION"` — User-Agent используемый при HTTP запросах * **`DAYZ_API`**=`https://dayzsalauncher.com/api/v1` — адрес [API][dayzsalauncher] для получения списка серверов * **`DAYZ_STEAMCMD_ENABLED`**=`true` — переключатель для включения или отключения использования [SteamCMD][] * **`DAYZ_FILTER_MOD_LIMIT`**=`10` — величина фильтра лимита модов по умолчанию * **`DAYZ_FILTER_PLAYERS_LIMIT`**=`50` — величина фильтра лимита игроков по умолчанию * **`DAYZ_FILTER_PLAYERS_SLOTS`**=`60` — величина фильтра лимита слотов для игроков по умолчанию ## Полезное * ­— может помочь с производительностью игры * — вывод информации о использовании ресурсов и позволяет ограничивать частоту кадров * ­— улучшение изображения, добавляет четкости картинке * — дополнительные шейдеры, могут использоватся из vkBasalt * — настройка записи повторов в OBS * ­— утилита для записи повторов Параметры запуска игры в Steam c включенным MangoHud, vkBasalt и gamemode: ```sh MANGOHUD=1 ENABLE_VKBASALT=1 gamemoderun %command% ``` Также не прибегая к сторонним утилитам вы можете вывести оверлей с информацией о ресурсах и ограничить FPS штатными средствами [DXVK][], к примеру: ```sh DXVK_HUD=fps DXVK_FRAME_RATE=60 gamemoderun %command% ``` Значение `DXVK_HUD=fps` ... `DXVK_HUD=full`: * `devinfo` — отображает название графического процессора и версию драйвера. * `fps` — показывает текущую частоту кадров. * `frametimes` — показывает график времени кадра. * `submissions` — показывает количество командных буферов, отправленных на кадр. * `drawcalls` — показывает количество вызовов отрисовки и проходов рендеринга на кадр. * `pipelines` — показывает общее количество графических и вычислительных конвейеров. * `descriptors` — показывает количество пулов дескрипторов и наборов дескрипторов. * `memory` — показывает объем выделенной и используемой памяти устройства. * `gpuload` — показывает предполагаемую загрузку графического процессора. Может быть неточным. * `version` — показывает версию DXVK. * `api` — показывает уровень функций D3D, используемый приложением. * `cs` — показывает статистику рабочего потока. * `compiler` — показывает активность компилятора шейдера. * `samplers` — показывает текущее количество используемых пар сэмплеров [только для D3D9] * `scale=x` — Масштабирует HUD в х раз (например, в 1,5) Ограничение частоты кадров `DXVK_FRAME_RATE=0` [eng 🇬🇧]: README.md [ua 🇺🇦]: README.ua.md [rus 🇷🇺]: README.ru.md [logo]: extra/dayz-ctl-logo.svg [DayZ]: https://dayz.com [Bohemia Interactive]: https://www.bohemia.net/games/dayz [221100]: https://store.steampowered.com/app/221100 [dayz-linux-cli-launcher]: https://github.com/bastimeyer/dayz-linux-cli-launcher [dayzsalauncher]: https://dayzsalauncher.com [battlemetrics]: https://www.battlemetrics.com [SteamCMD]: https://developer.valvesoftware.com/wiki/SteamCMD [fzf]: https://github.com/junegunn/fzf [jq]: https://github.com/stedolan/jq [gum]: https://github.com/charmbracelet/gum [DayZCommunityOfflineMode]: https://github.com/Arkensor/DayZCommunityOfflineMode [Steam]: https://store.steampowered.com/about/ [Proton]: https://github.com/ValveSoftware/Proton [Noto]: https://fonts.google.com/noto [DXVK]: https://github.com/doitsujin/dxvk