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
— відображає назву 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