Services Манифест: PlayerPort

default_npc

Vagabond
Game Client Dev
Project Partner
Привет. Со кем то из вас мы знакомы, с кем то сотрудничали, а с некоторыми работаем по сей день. Кто меня не знает: Я делаю интерфейсы в Lineage2, занимаюсь клиентами\серверами, интересуюсь всякими странными штуками, а ещё - люблю эту игру.

Некоторое время назад на досуге я занялся своим пет-проектом aka очередной странной штукой, которую я назвал PlayerPort. Тут мы немного пообщаемся на эту тему, нальём много воды, умных слов и терминологии. Важно упомянуть, что это не презентация, а скорее мысли, рассуждения и легкая реклама существования проекта как рыночное предложение.

Ниже около 13 тысяч символов, поэтому для общих черт я задам тег-лист, дабы внести ясность и отфильтровать всех, кому это не интересно:
УИ-фреймворки, радио, системы поддержки, http, легаси web, размышления, интерфейсы л2, браузер в клиенте л2, веб бекенд-фронтенд, квилети оф лайф, администрирование


  • Это что такое?

Всё началось с того, что я твёрдо решил изучить возможности клиентов в контексте веб-браузера, который достаточно давно доступен как UI элемент и небольшой набор API. Некоторое время спустя была реализована простейшая петиция (на стандартном Lineage2 petition-UI), которая просто отправляла информацию на ендпоинт, а он в телеграм бота. Забавно же? Вот и я подумал так же.

Со временем я начал думать дальше: "Окей, но почему бы не сделать это чуть-чуть гибче, чуть-чуть модульнее и собрать не просто один маленький незаметный сервис для одного проекта, а стать полноценным модулем для обслуживания множества проектов одновременно?" Сказано - сделано.

PlayerPort - попытка сделать действительно универсальный, модульный и мультисерверный in-game веб-движок.
Это не просто браузер, это - набор мини-приложений и сервисов, что бы сделать проекты ещё более удобными для всех, как администратору, так и игроку.
Единая точка входа
1778422326316.webp

Приветственные страницы, парсеры чего угодно.
1778422332690.webp

Системы репортов
1778422344097.webp
1778422366698.webp
Администратор видит большой набор информации о каждом пользователе - но это не предел.
1778422371689.webp

Или радио
1778422377129.webp

Стримы
1778422855596.webp
1778422836803.webp
Картография проекта с подробной информацией - каждый сервер как на ладони. Населённость, коллизии, кучность в реальном времени (ну или почти).
1778422389712.webp
Система не просто сухо анализирует текущее состояние, со временем она накапливает определённый набор информации о игроке и может построить связь между, на первый взгляд, несвязанными персонажами (даже для игрового сервера).
1778422395250.webp
Дашбоарды


  • Ну рассказывай уже

Это клиентский модуль, позволяющий подключиться к единой, мультисерверной инфраструктуре, которая уже работает и показывает результаты.
  • Фронтенд:
1) Базовый UnrealScript\XML (native engine layer)
2) Новый JavaScript\HTML\CSS (web-view layer)
Если рассматривать это не просто как браузер, а как условное полотно для творчества, мы получаем, если позволите, "фронт в фронте" (гибридный УИ), первый позволяет создать удобный фундамент и безшовную интеграцию в клиент, второй - предоставить бОльше возможностей визуализации.
  • Бекенд:
Pure PHP 8.x, redis (Multi-instanced, Lua-atomic), mysql innoDB (основные данные), postgresql (тяжелая json-логика\аналитика)
Упор на скорость и отзывчивость, даже при условии высокой нагрузки.


Уже, как готовые решения или не очень длинная разработка\доработка под нужды:
  • Собственный легковесный UI фреймворк: Основанный на поведении и методологии оригинального UI lineage2, без внешних библиотек и тяжелых модулей - ванильный js. Является основным движком текущей версии и все скриншоты выше - это исключительно PortUI
  • Парсинг: Социальные сети, сайты, rss, любые доступные веб страницы и вывод информации внутри игрового веб-браузера c оформлением
  • Тикет-система: Внутриигровые репорты игроков, внутриигровая админка, внутриигровая\телеграм нотификатор, API для внешних админок (если нужно вывести в свой веб), отправка в брокеров (пр: kafka), хранение
  • Радио-модуль: Радио-сервис с десятками веб-радиостанций, удобные выбором, обновлениями станций, сохранением и возможностью открыть как большое окно, так и маленький плеер с удобным функционалом для управления воспроизведением
  • Поддержка стриминговых платформ: Стримеры вашего проекта или любые - прямо в клиенте
  • Система общения**: Форум для внутриигрового веба, возможность организовать общение игроков прямо в игре, причём всё это может быть межсерверным - к примеру коллаборирующие проекты могут объединиться в кластер с единым внутренним форумом, приветствием и т.п.
  • Модули** анализа чата, поведения, трейдов, почт и т.п.: Упрощение работы администраторов для анализа и отслеживания ботов, РМТ, и пр. - мы можем анализировать поведение, оценивать риски, показывать цепочки связей между персонажами и т.п.
  • Телеграм боты как панацея**: Оповещения для администраторов (централизованный бот) и бот для игроков, с возможностью привязки к серверу для получения системных уведомлений или же уведомлений в стиле "ты умер".
  • Приветственные страницы на PortUI или ванильном html+js+css (legacy), которые вы можете сверстать и разместить сами
  • Любой дизайн, цветовая палитра, подключенные модули - всё максимально гибко от проекта к проекту
  • Внешний web для полноценных браузеров (больше возможностей, дашборды, современных технологии, реализация необходимых задач)
  • Мультиязычность
*Всё это работает как на древних клиентах (к примеру Grand Crusade p110) и вплоть до самых последних клиентов essence\live.
**Некоторые упомянутые вещи реализованы абстрактно или поверхностно, без четкого понимания цели и необходимого результата, поэтому требуют корректировки\дополнения\улучшения



  • Но подожди

Мы в 2026 году, у нас 10 мониторов - мне проще хром открыть, зачем?

Потому что люди ленивы. Допустим: Как связаться с администрацией на большинстве проектов? Требует открыть браузер, зайти на сайт, войти в лк и уже там создать обращение и ждать ответа. Быстро? Да, но не слишком. Удобно? Признаем, что не совсем.

Я же предлагаю быстрее: Прямо в игре нажал кнопку, написал сообщение, система уже знает откуда ты, твой ник, ИД, локацию и всё, что нужно знать, что бы администрация поняла кто ей пишет и откуда. А как только поддержка даст ответ - игрок получит маячок-оповещение в игре или телеграм-нотификаторе, что потребует буквально 1 нажатие, что бы его прочесть.


  • Как это работает?

Система имплементируется в UI игры и общается с удалённым сервером через POST-запросы (Lineage2UI > endpoint > Lineage2WebView), связь происходит как автоматически (авто-апдейт), так и ручные - чаты, почту и некоторые др. действия.

Система минует основной сервер (gameserver) и общается напрямую client<>endpoint(webserver), но может быть соединена с игровым сервером напрямую для опр. задач.
Важно понимать, что из-за обособленности мы основываемся исключительно на том, что знает базовый UI (Lineage2). Это обусловлено тем, что не все владельцы серверов имеют исходники\разработчиков, поэтому в первую очередь важно обеспечить возможности поверх compiled-версий как Lucera или Eternity, а наладить связь с ГС для других проектов это лишь вопрос желания\необходимости, но никак не техническое ограничение.


  • И что, действительно работает?

Да, пиковый онлайн который обрабатывал ендпоинт - 12.464 игроков и не смотря на слабый сетап - показал стабильность без падений, гонки или утечек, "переваривая" все движения игроков (чаты, почты, движение, т.п.)
Основным сервисом-потребителем была тикет-система, совокупно (с нескольких проектов) обработано около 15 тысяч тикетов и 30-35 тысяч ответов в них. Это небольшой результат, но он показывает стабильность системы, стабильность хранимых данных и перспективы развития.


  • А я думаю будет лагать

Здравое замечание, но вначале важно понимать устройство движка: У нас есть всего 2 типа обновлений, "ленивые" и "активные"
  • Ленивые: Раз в N-секунд (не чаще 20-30) клиент выполняет автоматическую отправку данных на эндпоинт (POST)
  • Активные: Обновления, что подписаны на определённые события, к примеру отправка сообщения в чат.
Общая нагрузка от выполнения простейших http-post ничтожна, сетевая нагрузка в сравнении с траффиком клиента - минимальна.

Важный нюанс также скрыт в том, что всей сетевой активностью, рендерингом и пр. занимается внешний процесс, а не основной (l2.exe\l2.bin), что полностью изолирует происходящее в отдельном "котле".
Т.к. мы выяснили, что сетевая активность минимальна, у нас остаётся один вариант - перегрузка старого, ограниченного вебкита тяжелыми JS-скриптами, стилями и пост-обработками. Но это ближе тестированию и выявлению ошибок фронтенда, а не к фундаментальным нерешаемым проблемам.


  • Хочешь сказать всё так безоблачно?

Конечно же нет, не смотря на амбициозность всё не может быть идеально. Наши основные проблемы (не кратко):

1. Клиентская (Lineage 2) UI имплементация: Само по себе то, что это внутри основного интерфейса уже выглядит как проблема и ограничение, требующее более гибкого решения
2. Сепарация нескольких проектов внутри одной авторизации: Существует реализация на беке, но разделение по списку серверов (серверИД из авторизации которые получает клиент) усложняет поддержку для пользователя, при добавлении\удалении прокси-серверов.
3. Валидация сервером, фильтрация спама, ддоса, несанкционированного доступа: Прибито гвоздями, поэтому почти не шатается. Но гвозди - сомнительное решение.
4. Так как на данном этапе сервис не предполагает работы с чувствительными\личными данными: Траффик не шифруется, взаимодействие идёт по http протоколу. Проблема это или нет в контексте существующих модулей - думать вам.
5. PortUI: Опциональный компонентный UI-фреймворк, ванильный JS, никакого grid, никакого flexbox (потому что вебкит просто не умеет). Упор на легкость и скорость. Пока известен как "версия1": Несколько основных контролов, якорьМанагер, ассеты Л2, работает примерно как обычный UI Lineage 2 - те же абсолютные координаты, якорные системы, АПИ контролов, общий АПИ и т.п. Из минусов (?) - изолирован внутри JS


  • И что это будет?

Как я уже упомянул выше, появилась идея создать именно мультисерверный сервис, поэтому я двигаюсь именно в этом направлении.

Моя первичная цель - небольшие\средние проекты, популяризация сервиса и демонстрация его возможностей. Технически это может быть что угодно, вплоть до полной замены некоторых окон в игре на новые веб компоненты, с реализацией на html\js\css.

Если укоротить: Я хочу сделать сервис, который будет частью современного рынка Lineage2, как защиты, лк и другие маленькие кусочки формирующие QoL игрока\администратора.

В ближайшее время:
  • (выполнено) Обновление LuceraFree до версии 2.1 с модулем PlayerPort
  • (выполнено) Активация сервиса внутри LuceraFree v2.1. В базовой версии будет доступен только радиомодуль, при желании - каждый потребитель обновленной версии может запросить под свой проект поддержку отдельной ветки.


  • Ну и что тебе надо-то? В чём идея?

Я давно заметил проблему: Экосистема проектов фрагментирована и раздроблена - сайт, форум, телеграм\дискорд, лк, поддержка и т.п. Другими словами мы всеми силами выталкиваем игрока с игры, с перспективой что он залипнет в браузер, телегу или другое промежуточное звено между игрой, точкой назначения и обратно. Т.е. цели как вы уже поняли просты: Упростить и ускорить. А самое главное - не выгонять игрока с игры, а удерживать его в ней, дав ему всё необходимое прямо внутри клиента.

Основная идея не просто впарить это кому то, а сделать новый шаг для этой игры и нашего комьюнити в целом. Я напомню, что Lineage2 всегда была рынком инноваций, разработок, порой даже вперёд корейского паровоза. Ни одна мморпг в истории не была так востребована. Почему бы не добавить к ней ещё одну штуку, которая сделает нас ещё чуть более уникальными?

Я ищу энтузиастов, проекты, проекты энтузиастов, которые так же как и я увидят в этом нечто новое для нашей игры, заинтересуются и захотят использовать это у себя, развивать и улучшать свою жизнь и жизнь игроков.
В первую очередь это может быть интересно небольшим\средним проектам, а так же моим клиентам с которыми мы сотрудничаем - тем, кому имплементировать текущую систему будет максимально быстро и просто, т.к. все исходники клиентов надежно хранятся на моей стороне.
Это БЕСПЛАТНО.


  • Итоги

Хорошо посидели, душевно поговорили. Надеюсь было интересно и вы впитали что-то новое в свои извилины. Как мы выяснили, проект имеет как и плюсы, так и минусы.

Из плюсов: Безусловная доступность проекта в контексте "низших" прослоек серверстроя и новые возможности для "малышей" рынка, у которых нет больших денег и(или) штата разработчиков.

Из минусов: Технические недостатки, аспекты клиент-части (которая lineage2) и само-собой ввиду ограниченного, устаревшего и просто богомерзкого вебкита, периода 2012-2016 года. Ну и конечно же огромное число работы, прежде чем это станет чем то действительно стоящим.


  • Эпилог

Если кто-то дочитал до сюда - спасибо, что осилили это поток сознания.
Несмотря на все ЗА и ПРОТИВ, проект жизнеспособен и определённо имеет право на существование. Главным препятствием, как это часто бывает в системном администрировании и разработке, остается дефицит времени. Однако мой скромный опыт подтверждает: любая амбициозная цель достижима, если сохранять уверенность в том, что неразрешимых проблем не существует.



Ваши вопросы, негатив и прочее жду в этом треде или по контактам ниже.


До встречи.
 
What is the purpose of it and how can it help actively servers?
Communication between administration <> player (specific in-game forums\support system\etc.)
Socials, messengers, news blocks directly into the game (data parsing)
Radio integration (your or any other)
Streams integration (your, your server, any other)
Analytics (watchdog - deep players activity, login's chains, etc)


An important nuance is that this can be anything, in the context of the "external" internet. We are practically not limited in any way - we can take, save and give any info\data to the player in-game view, or provide him with specific services (radio\streams\video\films\music\game databases\server wiki\etc).
Also we are not limited in any way in developing webviews, because, the engine is completely self-written.
 
Обновление от 10 мая


PlayerPort
не стоит на месте, мы развиваем свои возможности, что бы игра стала ещё более дружелюбной и интересной.

Следующее крупное обновление это поддержка стриминговых сервисов (PortStream).
  • Мы знаем все популярные платформы и поддерживаем неограниченное число стримов у вашего проекта - вы можете разместить как своих стримеров, так и использовать просто списки популярных потоков.
  • Выделение важных потоков, отключение всех потоков кроме необходимого
  • Нотификации о запуске важного потока прямо внутри игры.

Удобная плитка выбора, актуальный статус стримера, актуальные превью.
IIcmPbf.png

Свой плеер, поддержка любого доступного кач-ва потока
PIP - смотреть можно не только в громоздком окне, но и в маленьком плеере поверх остальных окон
Отсутствие рекламы внутри потока - один из небольших, но приятных плюсов.
iSqHZNV.png







Обновление от 7 июня

Привет. Краткий дайджест по прошедшему месяцу.

Тезисно:

-Рефакторинг стилизатора PortUI и имплементация в него нового - от простых ассетов до низкоуровневых возможностей.
-Клиент-часть постепенно становится обособленным веб-приложением, которое использует Lineage2 лишь как оболочку и базу для разработки.
-Комбайн внутри клиента, или как сидеть в php\js\uc\as\c++ одновременно и не сойти с ума




Развернуто:

1) PortUI растёт и распределяет обязанности. Для каждой задачи - своё место:
  • JavaScript: оболочка для создания скелета страницы\модуля\виджетов, базовая стилизация
  • Flash(запеканки): графическая оболочка, расчёты физики (далее для простоты физический движок) переходы, анимации, графика
  • PortNatives: С++ (API) - математика, логирование, взаимодействие с windows, вебсокеты, низкоуровневые задачи



Модель позволяет создавать эффективные "бутерброды", на основе текущего конструктора:
  • JS (layer0): создание кнопки с базовыми стилями\вашего элемента
  • Flash(layer1): кнопка получает анимация\переходы\мерцание\ваши желания
  • Native: кнопка совершает ЛЮБОЕ действие - внутри браузера\игры\windows\шлет пакет серверу\ваши действия
-Разделение графики распределяет нагрузку: это позволяет создать плавные, интерактивные, а самое главное - быстрые UI.
-PortNatives позволяет расширить возможности: это развязывает нам руки и мы можем создавать практически безграничный функционал, от простого оповещения в windows, до VoIP или полноценного Proxy прямо в клиенте.
1780851755608.gif


2) PlayerPort:Report становится дружелюбнее.
Больше не нужно использовать ссылки или сторонние сервисы для загрузки изображений - его можно выбрать прямо внутри игры, либо просто скопировать нужную картинку с вашего компьютера. Либо сделать это скриншотером и просто вставить из буфера обмена. А можно и не скриншотером - просто PrntScrn и вставить, поддерживается любой из способов передачи изображений.
1780851770163.gif
1780851775806.gif
Поддержка всех популярных типов изображений

PortNatives обработает даже несжатые\сверхвысокие разрешение 4k\8k\16k за считанные миллисекунды, вместе с этим оптимизировав изображение, снизив конечный вес до х50(!) от изначального. Это прекрасный результат, который позволяет отдавать изображения молниеносно, без задержек, статтеров, шторок и пр.
Автоматическая генерация сверхмаленьких preview\blurred(1-5kb) копий - так загрузка становится ещё более незаметной и плавной.

Примеры оптимизации без потери качества, это позволяет PlayerPort эффективно хранить тысячи изображений, а пользователю - не ждать загрузки, ведь теперь изображение весит всего несколько кб.
1780851790988.webp


3) Редизайн, итеративность и быстрота.
PlayerPort\PortUI больше не использует ассеты LineageII, а переходит на свой базовый набор стилей, элементов, атласов текстур и пр.
Мы лишь сохраняем единообразие цвета, шрифта, стилистики, что бы не выбиваться из целевого UI, но идем своей дорогой на раннем этапе.
1780851799605.gif
1780851804736.webp

Вместе с этим PortUI становится более плавным, тактильным и интерактивным. Элементы не просто существуют и выполняют действия, а реализуют переходы\анимации\эффекты\меняют состояния на базовом уровне либо 1 строчкой кода.
1780851809712.gif
1780851818132.gif

Под капотом клиентской части PlayerPort отныне находится графический и физический движок, посему нам доступна реализация сложных схем - частицы, ветер, паралакс, физическое взаимодействие с минимальной нагрузкой на систему и игру.

Графический движок способен создавать сложные графические переходы и эффекты "на лету", без спрайтов, сложной конфигурации и пр. - полная динамика и ваш полет фантазии.
1780851825581.gif

Физический движок и тяжелые сцены - тысячи элементов, расчет тысяч столкновений каждый кадр? Без проблем (на записи пример: динамическая сцена "разрезания" шариков курсором - 1000 шариков, используется простой метод Стёрмера-Верле + пространственное хеширование, без оптимизации).
Сцена показывает, насколько эффективно может работать компонент даже в перегруженной сцене.
Реализация необходимого - вопрос желания.
3dxDYUt.gif

zCjudUV.gif



Это позволяет вывести создание UI Lineage 2 на новый уровень - теперь можно думать не только о функциональности, но и о красоте, которая ранее была недоступна в ограниченном и слабопроизводительном xmlui\unrealscript, либо доступна, но через кучу дополнительного кода.
Это становится возможным за счёт использования полноценного GPU-рендеринга\аппаратного ускорения, что критически важно для UI.

Вышесказанное выведет разработку клиента но новый уровень и позволит людям с базовым уровнем вебразработки создавать UI любой сложности.
Никакого софта, никаких компиляторов, никаких редакторов - только вы и PortUI, который является обёрткой для всего - от базовых стилей до низкоуровнего взаимодействие за счет C++ API.
Порог вхождения уже на уровне начального понимания вебстака - это главная цель.



4) Остальное

Видео\аудиоплеер доведён до ума.

-Любой медиакомпонент требующий постоянного соединения - предварительно проверяет возможности сети, что бы исключить цикличный таймаут из за высокого качества видео\потока
-Таймаут загрузки медиаконтента теперь определяет PortNatives исходя из реальной обстановки, а не статичная цифра "на авось"
-Разрыв радиопотока исключен - больше не бывает разрывов во время прослушивания (jitter fix)
-Зависание стрим-плеера исключено на стадии запуска - система сначала проверит и в случае ошибки сообщает о невозможности запустить стрим в том или ином регионе, а не пытается пробиться (kick RU-blocking) (не касется re-stream через внутреннюю сеть PlayerPort)
-Стримы научились выдавать честные 1080|1080+\60fps, а не "дрожать" в диапазоне 50-60 FPS
-Видеоплеер синхронизирует честную громкость c Windows, а не цифру ниже реальной громкости на 5-15%
-Видео\аудио плеер получил усилитель звука до 200% (vlc-like)


Логирование
-Все логируются через чистое с++ API в *.log файлы, вместо логирования через JS-обертки.



5) Будущее
На данном этапе я всё ещё занимаюсь оптимизацией UI - моя главная задача сейчас вычистить обертку (PortUI) - создать\подключить все необходимые нативные API, вынести всё что тяжелое в плюсы, убрать дублирование скриптовой части и т.д. и т.п.

Попутно с этим идёт развитие PortCanvas - это прокси для основного интерфейса, которое откроет прямые возможности к созданию окон основанных на PortUI для интерфейса lineage2.
Это значит, что можно будет без проблем создать новое или заменить целое окошко в интерфейса на веб-интерфейс, который сможете сделать лично вы, использовав для вывода те же самые пакеты, что использует ваш сервер и unrealscript - ломать старое не нужно, только сделать новое, а старое всегда остаётся fallback-логикой.

И напоследок, как вы уже знаете (а если не знаете я напомню) - PlayerPort доступен от GrandCrusade до последних (и будущих) протоколов Essence\Live, точкой входа являтся interface.u\interfaceClassic.u - это полностью регулируемый и не скрытый компонент интерфейса игры, который через 1 окошко (на самом деле 2) реализует бездонную яму возможностей веб разработки -

  • Локальные: уи\окошки\информация\т.п.
  • Внешние: Я предлагаю услуги разного характера, такие как аналитика сервера, отслеживание ботов, чёрные списки, поддержка системы репортов под выделенный сервер (хранение-отдача контента)


Если есть вопросы или вы хотите попробовать - контакты для связи:

До встречи через некоторое время
 
Last edited:
Back
Top