DayZ Command Line Launcher
dayz-ctl — это экспериментальный лаунчер (обозреватель серверов и средство запуска) DayZ в Steam Proton для Linux.
На момент реализации этого проекта Bohemia Interactive всё еще не смогла сделать рабочий лаунчер для игры, который мог бы корректно устанавливать модификации и подключатся к игровым серверам. По этой причине появился этот проект.
Основные особенности:
- Обозреватель серверов с информацией о каждом сервере
- Нечеткий поиск в обозревателе серверов на базе fzf
- Автоматическая установка модов (как опция)
- Широкий набор фильтров для поиска серверов (карта, время суток, модификации, количество игроков, от первого лица, пароль и т.п.)
- Дополнительная информация в виде страны расположения (используя geoip базу) и ping для каждого сервера
- Список избранного, история последних 10 игр и создание ярлыков быстрого запуска для подключения к серверам
- Оффлайн режим DayZCommunityOfflineMode с автоматической установкой, обновлением и возможностью выбора модификаций
- Меню конфигурации с параметрами запуска игры, настройками лаунчера, управлением и статистикой по модам
- Предоставляет ссылку с подробной информацией о сервере на battlemetrics
Отдельное спасибо dayz-linux-cli-launcher за идею и dayzsalauncher за API.
Предварительный просмотр
Демонстрация лаунчера
Больше скриншотов 👈
Главное меню |
Браузер серверов |
Фильтрация серверов |
Фильтрация по карте |
Применение фильтра |
Браузер избранного |
Браузер истории |
Нечеткий поиск |
Оффлайн режим |
Моды для оффлайн |
Моды сервера |
Информация о модах |
Меню конфигурации |
Параметры запуска |
Информация |
Новости DayZ |
Особенности использования SteamCMD
Имеется два режима работы лаунчера с использованием SteamCMD для управления модами и без него в ручном режиме.
Вы можете комбинировать оба подхода, к примеру подписываться на те модификации которые вам точно нужны будут в будущем переходя по ссылке, а наличие обновлений проверять или принудительно обновлять моды при помощи лаунчера. Также вы можете не подписываться на “сомнительные 50 модов” очередного сервера и с легкостью удалить их одним действием из лаунчера, при этом сохранив все моды на которые имеется подписка.
Используя SteamCMD
- 🟢 Всё происходит автоматически
- 🟢 Автоматическая проверка наличия обновлений модов прямо сейчас (принудительно)
- 🟡 Не создается подписки на моды, они просто скачиваются
- 🟡 Требует закрытия клиента Steam для загрузки модов
- 🔴 Иногда нужно повторно авторизоваться в Steam
Не используя SteamCMD
- 🟢 Привычное поведение если вы уже использовали другие решения, к примеру dayz-linux-cli-launcher
- 🟡 Игра сама не запустится после скачивания модов
- 🟡 Steam бывает задерживает проверку обновлений и скачивает их только после перезапуска или подписки/отписки от мода
- 🔴 Подписываться на моды нужно самому руками
Установка
При помощи установщика
Для удобства установки имеется небольшой скрипт который сделает всё за вас (по крайней мере попытается сделать)
Выполните это:
curl -sSfLA dayz-ctl bit.ly/3Vf2zz3 | bash
Ручная установка
Для работы лаунчера вам необходимо убедится что у вас установлены все зависимости:
- jq - утилита для обработки JSON
- fzf - утилита для нечеткого поиска
- gum - утилита для создания диалогов и стилизации вывода
ping
(iputils-ping
) - узнаем пинг до сервера (где включен ICMP)geoiplookup
(geoip-bin
) - узнаем страну размещения сервераwhois
- запасной вариант для geoiplookup, менее точный и более медленный, но не все записи есть в стандартной БД geoipcurl
- утилита для комуникации с различными API по HTTP/Scut, tr, grep, pgrep, pkill, killal, timeout, sed, awk
(gawk
) - куда же без класических утилит в скриптах- Steam - онлайн-сервис цифрового распространения компьютерных игр
- SteamCMD - steamcmd Консольный клиент Steam
- DayZ - и естественно сама игра
После чего можете склонировать репозиторий:
git clone [email protected]:WoozyMasta/dayz-ctl.git
# or
git clone https://github.com/WoozyMasta/dayz-ctl.git
# and run
cd dayz-ctl
./dayz-ctl
Или скачать сам файл скрипта:
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/ubuntugoogle-noto-emoji-color-fonts
- centosgoogle-noto-emoji-fonts
- fedoranoto-fonts-emoji
- archfont-noto-emoji
- alpinenoto-coloremoji-fonts
- suse
Или же если вам не нравятся emoji или вы не можете использовать их по какой то причине, вы можете применить патч для замены их на строки:
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 и управлять ими из лаунчера или наоборот. Так как ключи могут дублироваться и это может вызвать путаницу, или в худшем случае обрежет часть ключей, ведь у строки аргументов есть лимит длинны, а на серверах с большим количеством модов используется и так очень длинный параметр запуска.
Т.е. оставьте параметры запуска пустыми, или укажите только нужный вам набор вспомогательных утилит и переменных, к примеру:
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 |
Термин с одним символом черты действует как оператор ИЛИ
PVE | RP
Переменные окружения
Вы можете более тонко управлять работой лаунчера при помощи переменных
окружения которые вы можете передавать в окружение как обычно так и записать
в файл конфигурации $HOME/.local/share/dayz-ctl/dayz-ctl.conf
(по
умолчанию)
Список доступных переменных:
DAYZ_CTL_VERSION
— версия приложенияDAYZ_CTL_NAME
=dayz-ctl
— название приложенияDAYZ_GAME_ID
=221100
— ID игры в SteamAPPLICATIONS_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-ctlDAYZ_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 для получения списка серверовDAYZ_STEAMCMD_ENABLED
=true
— переключатель для включения или отключения использования SteamCMDDAYZ_FILTER_MOD_LIMIT
=10
— величина фильтра лимита модов по умолчаниюDAYZ_FILTER_PLAYERS_LIMIT
=50
— величина фильтра лимита игроков по умолчаниюDAYZ_FILTER_PLAYERS_SLOTS
=60
— величина фильтра лимита слотов для игроков по умолчанию
Полезное
- https://github.com/FeralInteractive/gamemode — может помочь с производительностью игры
- https://github.com/flightlessmango/MangoHud — вывод информации о использовании ресурсов и позволяет ограничивать частоту кадров
- https://github.com/DadSchoorse/vkBasalt — улучшение изображения, добавляет четкости картинке
- https://github.com/crosire/reshade-shaders — дополнительные шейдеры, могут использоватся из vkBasalt
- https://github.com/StuckInLimbo/OBS-ReplayBuffer-Setup — настройка записи повторов в OBS
- https://github.com/matanui159/ReplaySorcery — утилита для записи повторов
Параметры запуска игры в Steam c включенным MangoHud, vkBasalt и gamemode:
MANGOHUD=1 ENABLE_VKBASALT=1 gamemoderun %command%
Также не прибегая к сторонним утилитам вы можете вывести оверлей с информацией о ресурсах и ограничить FPS штатными средствами DXVK, к примеру:
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