Second Life без вьюера

Ведите своих аватаров, а не ферму окон.

Клиент Second Life для тех, кто ведёт больше одного аватара.

Настольное приложение для Linux, Windows и macOS. Один процесс, все аватары.

Замысел

Три решения, из которых следует всё остальное

01

Прежде всего без экрана

Трёхмерного вида нет, и ничего не отрисовывается. То, что вьюер тратит на видеокарту, NeuraCore тратит на возможность держать открытым десяток сессий сразу на обычной машине.

02

Много аватаров, один процесс

Каждый аватар это сессия внутри одного приложения, со своим окном, своим инвентарём, своим чатом. Переключение между ними это щелчок, а не вход в систему.

03

Скриптуется до самого низа

Каждая возможность интерфейса зарегистрирована как действие Automation и доступна встроенному Python и контроллеру ИИ. Ничего из того, что делают кнопки, не находится вне досягаемости скрипта.

Возможности

Что внутри на самом деле

Сессии

Подключайте, переподключайте и запускайте по очереди целые группы аватаров, в Second Life или на сетке OpenSimulator. Каждый возвращается сам после обрыва, отвечает на код двухфакторной проверки, когда сетка его просит, и сообщает в строке состояния, под какой лицензией работает.

Профиль и уведомления

Публичный профиль, пики, объявления, заметки и надетая форма, а также всё, что присылает сетка: приглашения, извещения о платежах, запросы разрешений и системные сообщения, с подсчётом тех, что ещё ждут ответа.

Деньги

Баланс в линденах и вся история платежей, полученных и отправленных. Оплата выключена, пока вы её не включите, и это единственная настройка по умолчанию, о которой стоит сказать.

Инвентарь

Просмотр, поиск, создание, перемещение, копирование, предпросмотр, передача и удаление. Фильтр по дате находит только что появившееся, а Fetch All загружает всё, когда поиск должен охватить весь инвентарь.

Внешность и прикрепления

Надевать и снимать наряды, заменять весь образ или добавлять поверх, видеть, что и к какой точке прикреплено, и править надетую форму ползунок за ползунком, если она допускает изменение.

Чат, ЛС и группы

Локальный чат, личные сообщения и групповые беседы, разделённые по аватарам со счётчиком непрочитанного и пересылаемые вашему аватару, когда вы этого попросите.

Карта, радар и мир

Телепорт домой, в названный регион или по координатам, ответ на предложения телепорта, кто рядом и кого видели раньше, и список объектов, присланных регионом.

Движение и следование

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

Маршруты патрулирования

Пройдите маршрут один раз сами, и аватар пройдёт его сам: вперёд, по кругу, задом наперёд или в случайном порядке, садясь там, где сели вы, и продолжая после обрыва связи.

Automation и Python

Реестр каждого действия, доступного клиенту, отдельный переключатель разрешения на каждое, история каждой попытки с её результатом и встроенный Python, чтобы связать их вместе. В соответствии с интерфейсом его держит правило проекта, а не чья-то память.

Контроллер ИИ

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

Знание о магазине

Расскажите аватару о своём деле в Second Life, и он будет отвечать покупателям тем, что вы написали, а не догадками, беря только ту часть, которая нужна вопросу. Идёт с лицензией Business.

Архитектура

Четыре части, один ответ

Продукт это настольный клиент. Всё остальное существует, чтобы ответить на один вопрос о нём, под какой лицензией он работает, и честно сказать, когда ответить не может.

Настольный клиент HUD в мире API лицензий MariaDB

Настольный клиент

Запускает аватаров и спрашивает при старте, а затем регулярно, что ему разрешено. Сам он ничего о лицензиях не решает.

API лицензий

Единственное место, где решается вопрос о лицензии. Каждый вызывающий подтверждает, кто он, общим секретом, а запросу, который этого не может, отвечают 403 без объяснений.

HUD в мире

Вторая половина покупки. Надетый HUD записывает аватара, который его носит, и этим единственным применением расходуется.

MariaDB

Каждое чтение и каждая запись идут через хранимую процедуру. У учётной записи приложения есть EXECUTE и больше ничего: ни одного права на таблицы.

Лицензии

Куплены в мире, определяются при запуске

Лицензии продаются как HUD для Second Life в marketplace. Надеть такой и активировать значит записать его на вашего аватара; клиент заметит изменение при следующей проверке.

Бесплатная

Один главный аватар и одно место, навсегда. Ничего покупать не нужно, и ничто не истекает.

Начальная

Входная покупка и обязательное условие для любой лицензии со сроком. Даёт шесть месяцев Individual или три месяца Business, и что именно, вы выбираете в HUD.

Individual

Неделя, месяц или год времени на одном месте. Приостанавливается, а не теряется, пока идёт время Business.

Business

Те же три срока на уровне Business. Имеет приоритет на месте и держит время Individual в ожидании, пока не закончится.

Время живёт на месте, а не в календаре: приостановленная лицензия не расходуется.

Что несёт каждая действующая лицензия. Начальная лицензия это не столбец: это покупка, которая превращает Бесплатную в одну из двух других.

БесплатнаяIndividualBusiness
Сколько аватаров можно вестиОдногоПо одному на место, места можно докупатьПо одному на место, места можно докупать
Подключение, автопереподключение, Master, разрешённые жителиВходитВходитВходит
Профиль, инвентарь, внешность, друзья, группы, чат, карта, радарВходитВходитВходит
Follow MeФиксированные полметраРасстояние и направление на выборРасстояние и направление на выбор
ДеньгиНе входитВходитВходит
Объекты мираНе входитВходитВходит
Automation и встроенный PythonНе входитВходитВходит
Контроллер ИИ и памятьНе входитВходитВходит
Сервисы ИИНетЧетыре облачных сервисаЧетыре облачных сервиса, а также Ollama и LM Studio на вашей машине
Знание о магазине для покупателейНе входитНе входитВходит
Характер Formal BusinessНе входитНе входитВходит
Позволить ИИ отвечать всем жителямНе входитНе входитВходит
Запись маршрутов патрулированияНетОдин маршрут на аватараСто маршрутов на аватара

Как это сделано

Части, которые не являются возможностями

Нигде никакого сырого SQL

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

Ничему не доверяют по месту происхождения

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

Записей намеренно мало

Отображаемые имена не хранятся. Телеметрия клиента истекает сама, когда клиент перестаёт отчитываться. Хранится то, что нужно для решения о лицензии, и журнал, по которому расследовали бы происшествие.