Современный клиент для MUD «Былины» на Kotlin + Compose for Desktop. Windows, Linux, macOS.
Готовые сборки — в релизах:
bylins-client-windows.zip, bylins-client-linux.zip, bylins-client-macos.zip.
Распаковать и запустить (Bylins Client.exe, Bylins Client, Bylins Client.app).
Java ставить не нужно — своя JRE внутри. В комплекте идут плагины, примеры
скриптов и MCP-мост для ИИ-агентов.
Настройки, карты и логи клиент держит в ~/.bylins-client.
- ✅ Telnet, по умолчанию
bylins.su:4000 - ✅ Профили подключений — несколько серверов, быстрое переключение, запоминание последнего
- ✅ Кодировки — UTF-8 (по умолчанию), windows-1251, KOI8-R, ISO-8859-1; своя для каждого профиля
- ✅ ANSI цвета — 16/256/RGB, правильная VGA палитра
- ✅ MSDP — статус персонажа, комната, зона; подписка на переменные
- ✅ GMCP — разбор JSON, просмотр пакетов в UI, доступ из скриптов
- ✅ Триггеры — regex, группы
$1-$9, gag, приоритет, раскраска - ✅ Алиасы — regex, группы
$0-$9, приоритет - ✅ Горячие клавиши — любая клавиша с Ctrl/Alt/Shift. Клавиша определяется физически, поэтому хоткей работает в любой раскладке
- ✅ Контекстные команды — предложения по обстановке (
Alt+1..Alt+0), с областью действия: весь мир, зона или конкретные комнаты - ✅ Переменные —
#var/#unvar/#vars, подстановка@nameи${name}; автоматические из MSDP - ✅ Speedwalk —
5n,3n2e,10swпрямо в строке ввода - ✅ Профили персонажа — свои триггеры, алиасы, хоткеи и правила, активные только пока профиль в стеке
- ✅ Звуковые уведомления — низкое HP, tell/whisper и команда
#sound - ✅ Экспорт/импорт настроек в JSON, выборочный, с режимами merge и replace
- ✅ Автомаппер по MSDP — комнаты, выходы, зоны и тип местности строятся из данных сервера
- ✅ Визуализация на Canvas: перетаскивание, зум, уровни (z)
- ✅ Мини-карта на главной вкладке
- ✅ Цвета, заметки и произвольные свойства комнат; имена зон
- ✅ Ручная правка выходов — скрытые и тёмные проходы, которых нет в строке «Вых:», прописываются вручную
- ✅ Поиск пути — A* и BFS;
#goto <id>,#find <название>,#run - ✅ Ходок — идёт по маршруту шаг за шагом, дожидаясь подтверждения, и
пересчитывает путь, если персонажа снесло;
#stopпрерывает - ✅ База карт в SQLite (
~/.bylins-client/maps/maps.db), экспорт/импорт JSON
- ✅ Вкладки вывода — раскладка текста по regex, режимы copy и move, свой лог у вкладки, метки времени, сохранение между запусками
- ✅ Стандартная вкладка «Чат» — говорят, кричат, шепчут, оффтоп
- ✅ Прокрутка вывода с раздвоением — при чтении истории окно делится: сверху скроллбэк, снизу живой хвост
- ✅ Поиск по выводу (
Ctrl+F, на macOSCmd+F), выделение и копирование - ✅ Панель статуса, графики HP/Mana/Move в реальном времени
- ✅ Статистика сессии, логирование в файл, циклические бэкапы конфига
- ✅ 5 тем оформления и настройка шрифта — применяются сразу
Загружаются из каталога plugins рядом с приложением. Права (управление
клиентом, сеть, подключение) выдаёт игрок в настройках.
- ✅ Ассистент — определение промпта, разбор статов, автоматические
действия, мини-карта и панель статуса.
#assistant - ✅ Управление ИИ — локальный HTTP+JSON сервер для внешних ИИ-агентов:
свой контекст на агента, чтение вывода с последнего места, отправка команд,
правка триггеров и карты. Слушает только
127.0.0.1, каждое действие видно игроку.#ai- В комплекте
mcp/bylins_mcp.py— мост MCP, чтобы агент ходил в клиент штатными инструментами
- В комплекте
- ✅ JavaScript (Nashorn 15.4), Python (Jython 2.7), Lua (LuaJ 5.2)
- ✅ События:
on_load,on_unload,on_connect,on_disconnect,on_line,on_command,on_msdp,on_gmcp,on_trigger,on_alias,on_room_enter, плюс боевые (on_combat_start,on_damage_received,on_mob_killedи другие) - ✅ API:
send(),echo(),addTrigger(),addAlias(),setTimeout(),setInterval(), переменные, MSDP, GMCP, карта - ✅ Вызов скрипта с клавиши —
#script call <скрипт> <функция> [аргументы] - ✅ Автозагрузка из каталога
scripts, управление через UI - ✅ Примеры в
scripts/examples/: автолечение, автосбор, статистика боя
Всё, что начинается с #, обрабатывает сам клиент и на сервер не уходит:
| Команда | Что делает |
|---|---|
#help |
справка по командам |
#var, #vars, #unvar |
переменные |
#goto, #find, #run, #stop |
навигация по карте |
#script |
список, перезагрузка, #script call |
#plugin |
список, загрузка и выгрузка плагинов |
#context, #cc |
контекстные команды |
#zone |
зоны карты |
#sound |
проиграть звук |
Нужен JDK 17 или выше; Gradle идёт в комплекте (wrapper).
# Запуск в режиме разработки
./gradlew run
# Готовый к раздаче комплект: приложение со своей JRE, плагины,
# скрипты и MCP-мост -> build/release/
./gradlew releaseDist
# То же архивом
./gradlew releaseBundleУстановщики (packageDistributionForCurrentOS) собираются без плагинов:
jpackage строит их не из образа приложения, и всё, что туда положить,
попадает в classpath — плагины перестают выгружаться и перезагружаться.
Комплект для раздачи собирает releaseDist.
src/main/kotlin/com/bylins/client/
├── Main.kt # Точка входа
├── ClientState.kt # Состояние клиента, связывает подсистемы
├── ui/ # Compose UI: окно, панели, вкладки вывода
├── network/ # Telnet, MSDP, GMCP
├── connection/ # Профили подключения
├── commands/ # Команды клиента (#goto, #script, speedwalk)
├── triggers/ # Триггеры
├── aliases/ # Алиасы
├── hotkeys/ # Горячие клавиши
├── contextcommands/ # Контекстные команды
├── variables/ # Переменные и подстановка
├── mapper/ # Карта, поиск пути, ходок
├── scripting/ # Движки скриптов и их API
├── profiles/ # Профили персонажа
├── tabs/ # Вкладки вывода
├── status/ # Панель статуса
├── audio/ # Звуковые уведомления
├── config/ # Конфигурация и бэкапы
├── stats/ # Статистика
├── logging/ # Логирование
└── plugins/ # Загрузчик плагинов
plugins/ # Отдельные модули Gradle
├── core/ # PluginAPI: то, что видит плагин
├── assistant/ # Плагин «Ассистент»
└── ai-control/ # Плагин «Управление ИИ» + MCP-мост
Подробнее — в ARCHITECTURE.md, про вывод — в
docs/OUTPUT_PANELS.md, про скрипты — в
scripts/README.md.
MIT