Как Ит-Сообщество Игроков Развивало Экосистему Mmo-Игр

Существует множество игр, которые сообщество регулярно поддерживает модификациями.

Для моего горячо любимого Fallout: New Vegas модификации продолжают выпускаться спустя шесть лет после окончания поддержки.

Для некоторых других игр (привет, EVE!) люди держат «гугловские» планшеты, а для других просто пишут подробные руководства или рисуют небольшие диаграммы.

Я расскажу вам об игре, для которой сообщество делает все вышеперечисленное и даже больше, Elite: Dangerous.

Как ИТ-сообщество игроков развивало экосистему MMO-игр




Elite Dangerous — космический симулятор, изначально однопользовательский, а позже «обросший» многопользовательской частью, где вы сможете:
  • Драться .

    С пиратами, с другими фракциями, с мирными жителями или со всеми сразу.

    Главное, что это весело! Игра очень хорошо передает ощущение, что ты находишься как бы в кабине стотонной махины посреди пустоты космоса, со всеми вытекающими отсюда последствиями.

  • Исследовать .

    Во-первых, весь Млечный Путь был сгенерирован в режиме реального времени (и довольно тщательно), в масштабе 1:1. Звездные системы на сервере обрабатываются очень крутым движком, Звездная кузница , который способен выдавать адекватные характеристики планет, на логическом расстоянии от звезд, с нормальным ландшафтом, а очень скоро к планетам добавится еще и атмосфера.

    Что ж, звездные системы не пусты; в разных регионах Млечного Пути есть свои аномалии и другие интересные объекты.

    Во-вторых, в игре можно исследовать древние руины и, скажем прямо, « сходить с ума " В игре присутствуют инопланетяне, целых две расы.

    Они по-своему опасны, бороться с ними непросто (но для некоторых оказывается ), поэтому я, например, просто изучаю их, не вступая в прямой контакт.

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

  • Играйте за какое-нибудь сообщество, которых в игре немало: исследуйте расы Стражей и Таргоидов и разгадайте их загадки в команде Канона, убивайте террористов в туалете и присоединяйте исторические родины к фракции Юрия Грома или других галактических Сил ( Сила в игре — это суперсила со всеми атрибутами силы.

    ).

    Или защищать системы от пришельцев, строить кластер союзников, развивать технику, улучшать всё вокруг с помощью дипломатии и научного обмена, чем, например, и занимается наша группа — Close Encounters Corps.

  • Сделайте все вышеперечисленное, чтобы потом уединиться и полежать в джакузи, где-нибудь на роскошной Орке, или удостоиться чести управлять по-императорски изящным Imperial Cutter.
Это все игра.

А теперь, конечно же, о технологиях.



Услуги

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

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

Официальные инструкции Пример кода в Ktor (веб-фреймворк для Kotlin)

  
   

val FRONTIERSTORE_URL = " https://auth.frontierstore.net " val settings = OAuthServerSettings.OAuth2ServerSettings( name = "frontier", authorizeUrl = "$FRONTIERSTORE_URL/auth", accessTokenUrl = "$FRONTIERSTORE_URL/token", requestMethod = HttpMethod.Post, clientId = ".

", clientSecret = ".

", defaultScopes = listOf("auth", "capi") ) class CompanionAPI(val authType: String, val token: String) { val baseUrl = " https://companion.orerve.net " suspend fun getProfile(): JsonNode { val rawValue = get("/profile") val value = readJson(rawValue) return value } suspend fun getFleetCarrier(): JsonNode { val rawValue = get("/fleetcarrier") val value = readJson(rawValue) return value } private suspend fun get(url: String): String { return http.get(baseUrl + url) { header(HttpHeaders.Authorization, "$authType $token") } } }

В 2015 году, через год после выхода игры, появился неигровой каталог практически всех звездных систем, он назывался ЭДСМ .

Сегодня это больше, чем каталог, в нем есть подробные данные о системах, как населенных, так и не очень населенных, можно строить собственные маршруты, планы исследования регионов, а также есть REST API. https://www.edsm.net Пример использования (httpie):

$ http https://www.edsm.net/api-v1/system 'systemName=HIP 74258' showCoordinates=1 { "coords": { "x": 112.4375, "y": 70.4375, "z": 206.65625 }, "coordsLocked": true, "name": "HIP 74258" }

ЕБРР .

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

Это также позволяет строить торговые пути.

Из API есть только полные JSON-дампы по разным категориям: товары и их средняя стоимость, системы, станции, фракции и т.д. Некоторые дампы весят несколько сотен килобайт, а другие достигают около шести гигабайт. Код, увы, закрыт. https://eddb.io База данных систем региона Колония .

Каталог посвящен далекому форпосту человечества – Колонии.

https://cdb.sotl.org.uk Инара .

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

Я часто там зависаю, чтобы понять, где проседает влияние нашей фракции.

https://inara.cz https://inara.cz/inara-api/ ЭдМаркетКоннектор .

Некоторым из вас может быть интересно, откуда все эти сервисы берут свои данные? Ответ: ПК-игроки летают с включенным EDMC, это Python-утилита, которая парсит игровые логи в формате JSON и отправляет их дополнительным плагинам, а они в свою очередь отправляют то, что им нужно, в API EDSM, INARA и EDDN, о которых мы и поговорим.

о сейчас.

Инструмент написан на Python 3, интерфейс — на tkinter, код находится в свободном доступе на Github. https://github.com/EDCD/EDMarketConnector ЭДДН .

Ядро сети технического сообщества Elite. Получает данные от EDMC и подобных систем, анонимизирует их и отправляет подписчикам.

Я немного поработал с его API, есть ZeroMQ и JSON со схемой.

Короче, сделано по-человечески, папа грит малаца.

Код с открытым исходным кодом, Python 3 и JS. https://eddn.edcd.io https://github.com/EDCD/EDDN Кориолис И ЭД Верфь .

Сайты судового дизайна.

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

Код открытый, оба инструмента на JavaScript, потому что передний.

https://coriolis.io https://github.com/EDCD/coriolis https://edsy.org https://github.com/EDCD/EDSY EDDiscovery .

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

Написан на C# и имеет открытый исходный код. https://github.com/EDDiscovery/EDDiscovery Голосовая атака .

Если вам надоело управлять кораблем руками, попробуйте использовать голос! Ставьте VA, платите деньги (10$) и наслаждайтесь погружением в игру.

https://voiceattack.com ФКМС .

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

А с помощью этого сервиса вы сможете просмотреть информацию об этом авиаперевозчике и интегрироваться с другими сервисами.

Написан на Python, интерфейс на JS. https://github.com/FuelRats/FCMS Если вы ничего не поняли, вот схема: ЭДМК И EDDiscovery изучить логи игры, ЭДДН они отправляются на серверы ЕБРР , ЭДСМ , ИНАРА и не только, еще, скажем, ИНАРА берет данные напрямую из EDMC для получения исчерпывающей информации об игроке.

То есть вариантов анализа данных много.

Можно, например, периодически скачивать дампы с ЕБРР и получать актуальные данные из ЭДДН , вы можете использовать ЭДСМ API или вы можете написать плагин для ЭДМК и иногда заглядывайте на другие ресурсы, как это сделали мы.

Как мы это сделали? Когда летом 2020 года я присоединился к команде Close Encounters Corps, у нас был только модный плагин для ЭДМК , который называется Триумвират , обрабатывал часть событий, несколько вебхуков Discord, поддерживал интеграцию с несколькими API и базу данных в виде, извините, таблиц Google. В то время я по-настоящему влюбился в Котлин.

У него волшебный синтаксис, за ним стоит отличная команда, и он компилируется для различных платформ, от JVM до JS и двоичных файлов.

Мне очень-очень хотелось попробовать этот язык в продакшене, я даже искал работу бекендером на котлине, лол.

Короче говоря, я решил перенести большую часть функционала из плагина в API-сервис.

В Котлине.



Платформа Корпуса близких контактов

В качестве стека на бэкэнде я выбрал следующий пакет:
  • Ктор.

    Да просто так.

    HTTP4K слишком простой, Spring слишком чудовищный, да и вообще с Ktor я тогда не работал, но хотелось.

    Как оказалось, он умеет много чего вкусного, от конвейеров обработчиков запросов и перехватчиков до OAuth и.

    Ну в общем, у него просто красивый API. И я упоминал, что есть сопрограммы?

  • Сериализация - Джексон.

    На момент выбора стека kotlinx.serialization я был еще молод и мало что знал, с Moshi мне работать не приходилось, а Джексон был мне знаком и во всем меня устраивал.

  • Коин.

    Ешь, пей, жуй Коин.

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

    Я взял его без колебаний.

  • Спящий режим.

    Примерно по той же причине, что и Джексон.

    Мне Expose кажется простым, но я предполагал, что наши запросы будут сложными.

    Что касается JOOQ, то мы до этого не дошли.

    Может быть, нам этого будет достаточно, а может быть, и нет.

  • MySQL. Я много работал с ним раньше, и поэтому имею большой опыт. Однако вопрос о переходе на Postgres открыт. Может, пойдём дальше, может, останемся, ведь от «тазика» нам многого не надо.

    Администрировать мускул не сложно, репликация есть, кластеризацию тоже недавно сделали, JSON тоже, полнотекстовый индекс тоже, а что еще нужно для счастья?

Передний:
  • КВижн.

    Честно говоря, я вообще раньше не плавал спереди, поэтому мне не с чем сравнивать.

    Я просто взял первый попавшийся фреймворк с крутым количеством звездочек, и он мне понравился.

    Что-то он берёт от себя, что-то из десктопных фреймворков, что-то из импортированных JS-библиотек, а ещё могу отметить, что Роберт Ярос энергично закрывает тикеты и отвечает на все вопросы в Kotlin Slack. За это я ставлю ему лайк.

  • Фомантический интерфейс.

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

    Итак, я обнаружил, что Gitea использует Fomantic-UI, ответвление Semantic-UI, спереди.

    Мне он понравился больше, чем Bootstrap, поэтому я взял его.

  • Kotlinx-сериализация.

    Работать с голым JSON в Kotlin/JS не так удобно, как хотелось бы, а Джексон доступен только под JVM. Мы взяли Котлинкс.

Что еще мы сделали в этом химерном проекте? Например, мы написали собственную библиотеку конфигурации — Krait. Я настолько к нему привык, что даже использую его в рабочих проектах, поскольку он с открытым исходным кодом.

Например, мы написали обертку в Hibernate. Мы туда наворачивали DSL, сопрограммы (через пул потоков как CoroutineDispatcher, да что еще) и прочие мелочи.

Получилось «кусна»! В нескольких местах все еще используется SessionFactory Hibernate, но остальная часть проекта использует DSL. Например, мы храним исторические данные (аудит действий API, логи доступа, логи командира) в ClickHouse. В библиотеке сообщества АОРМ не хватало пары функций, но нам не составило труда ее расширить.

Например, мы размещаемся (планируем разместиться) в Docker на трех подключенных Raspberry Pi 4. Не смейтесь.

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

А вообще скажу как владелец домашнего медиасервера - три малины гораздо проще обслуживать, чем сервер.

С дистрибутивами, конечно, пришлось повозиться, потому что сначала мы были на Raspbian и не могли сидеть на месте, потом все-таки перешли на Ubuntu 20.10. Кроме того, у нас есть Caddy, потому что TLS настроить проще, чем nginx. Но это не все! Мы хотим объединить наш плагин, сервер и сайт в единую среду.

Сайт еще не совсем готов: некоторый функционал (например, оперативные задачи сообщества) еще не доработан, где-то фронт выглядит просто некрасиво (как всегда, если за UI брать бэкенд), в общем есть работы достаточно.

Хотели бы вы тоже поиграть? Смотреть обзоры и решите, подойдет ли вам эта игрушка.

Когда-то можно было скачать демо и опробовать игру, но сейчас демо можно найти только на трекерах.

Игра не для всех, повторюсь, это космический симулятор, но в свое время она распространялась в Epic Games Store и вообще, купить ее на ближайшей распродаже можно за 350 рублей и даже если нет как и ЭД, вы мало что потеряете.

Если вы ищете любимый проект на Kotlin/JVM, Kotlin/JS или Python, хотите переписать наш интерфейс в каком-нибудь интересном JS-фреймворке, добавить Kafka и микросервисы или просто хотите помочь нам, Close Encounters Corps, тогда приходите на наш Discord-сервер или напишите мне напрямую (dis: Osmium#5856).

Есть инвайт на сервер, например в Ссылки на сообщества ВК .

Мы будем рады вашим идеям и будем просто благодарны за вашу поддержку.

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

Разработчики сообщества ED, вот сайт , зайдите там в дискорд EDCD и найдите понравившийся проект. Теги: #Игры и игровые приставки #Elite #elitedangerous

Вместе с данным постом часто просматривают: