# DayZ Command Line Launcher **dayz-ctl** — це експериментальний лаунчер (браузер серверів і засіб запуску) [DayZ][] в [Steam][221100] [Proton][] для Linux. > Цей документ доступний у мовах: [ua 🇺🇦][], [eng 🇬🇧][], [rus 🇷🇺][] ![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` — відображає назву GPU та версію драйвера. * `fps` - показує поточну частоту кадрів. * `frametimes` - показує часовий графік кадру. * `submissions` — показує кількість командних буферів, надісланих на кадр. * `drawcalls` - показує кількість викликів малювання та проходів рендерингу на кадр. * `pipelines` - показує загальну кількість графічних і обчислювальних конвеєрів. * `descriptors` - показує кількість пулів дескрипторів і наборів дескрипторів. * `memory` — показує обсяг виділеної та використаної пам’яті пристрою. * `gpuload` - показує приблизне навантаження GPU. Може бути неточним. * `version` - Показує версію DXVK. * `api` - показує рівень функцій D3D, який використовує програма. * `cs` - Показує статистику робочого потоку. * `compiler` - показує діяльність компілятора шейдера * `samplers` — показує поточну кількість використаних пар семплерів [лише D3D9] * `scale=x` - масштабує HUD за коефіцієнтом x (наприклад, 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