AGPsource Game Platform — заметки о способах общения в онлайн играх
Приветствуем наших читателей. Сегодня я продолжу развивать свои мысли по теме онлайн игр. И для этого есть множество предпосылок, например, я только что уволился и сейчас не только рассматриваю различные предложения по работе, но и собираюсь организовать собственную компания по разработке браузерных игр, которая, конечно же, будет основываться на наших разработках движка. Поэтому я продолжаю публичное исследование различных аспектов игровой платформы - это и публичное такое мое резюме в этой области, и задел на будущее для собственных проектов. В этот раз я бы хотел поднять тему общения, или более точно - коммуникации между игроками и всеми участниками, как технические аспекты, так и больше архитектурные и геймдизайнерские.
И так, сначала давайте определим, что в игровом мире могут быть несколько видов коммуникаций. Их можно разделять по различным признакам, мы же используем всего несколько.
Общение может быть как личное между конкретными двумя игроками, так и общение игрок -> группа. При этом не следует понимать это как традиционно, например обычный чат. Эта модель построения браузерных игр, на мой взгляд (да и многие признают), когда пол экрана занимает сам чат где все игроки локации, и где-то там что-то происходит, что и есть сама игра - это уже, простите, прошлый век. Как интерфейсно, по дизайну, так и сама концепция. Поэтому, как я уже описывал в статьях по проекту WarAliance [часть 1, часть 2], мы применили другой подход, сделав плавающие окошки чата, которых могло быть любое количество на экране одновременно, где бы игрок мог вести беседу, не отрываясь от игры.
Во всех играх игроки группируются, кланы, альянсы, союзы - это все формы некоторого объединения игроков. Соответственно, появляются требования обеспечить возможности общения как внутри такой группы, так и между группами и между отдельными игроками и группами. В одних играх это находится на очень зачаточном уровне, к примеру, в OGame есть возможность просто послать общее сообщение всей группе, но только если ты состоишь в ней. Внутри группы необходимы все те же средства общения, что и раньше, для всех игроков, но этого недостаточно.
Кстати, группы игроков могут быть динамическими. Например, в игре SanCity у нас был чат, который распространялся на всех, кто сейчас был в здании, как только игрок выходил из здания, он выходил и из чата. Это приемлемо даже для игр с единым игровым миром, где нет выраженных локаций - и полезно для сужения круга общения. Даже сейчас, после десятка лет в онлайне, мне очень сложно понять, как можно более менее разумно общаться в одном общем чате, где под сотню или больше людей, совершенно разных. Поэтому основным моим соображением будет - никакого общего чата внутри игры, максимум - как сторонний сервис, в той же SanCity именно так и было, но там изначально не было чата внутри и потом его организовали на отдельном сервере, это, кстати, позволили разгрузить и основные сервера игры.
Чаты как средство общения в реальном времени, внутри игры должны быть. И организуются они как для всех групп, так и лично игроком, который может создавать у себя в контактах (а значит - между теми игроками, которых он знает или как-то связан с ними). Здесь мы переходим к дополнительному сервису - адресной книге контактов, куда каждый игрок добавляет себе тех людей, с которыми хочет общаться. Ну а если игрок асоциальный, а есть и такие, он просто может никого не добавлять и играть себе самостоятельно, никто его не собирается насиловать и приводить в чат.
Но чаты как средство мгновенного общения далеко не единственная система для коммуникации. Самая традиционная система - это внутренняя почта. Почему-то часто я вижу в играх ее игнорирование или даже ее просто нет, к примеру, в разработанной мною "Роза ветров", в OGame эта функция очень обрезана. А вместе с этим почтовая система это не только канал оповещения игрока о значимых событиях, но и может быть неотъемлемым игровым элементом. Для примера, мы в WarAliance завязали на почтовую систему дипломатию и экономику - здесь работал специальный модуль почтовой системы, который применял шифрование и цифровую подпись с паролем для подписи сообщений-контрактов или дип. договоров. Таким образом, почтовая система выступает неким репозитарием всех документов, что имеют хождение в игре. О технической реализации я расскажу свои мысли чуть ниже.
Остался еще один канал коммуникации, несколько более специфичный. Речь идет о связи между пользователями и администрацией игры. В данном случае мое мнение - лучше пере, чем недо. То есть, правильно организованная тех. поддержка предлагает максимум возможных способов коммуникации, а не только, к примеру, внутриигровые сообщения и ICQ. Тем более, если игра направлена на другие рынки, там могут быть популярны свои системы общения, например, Skype, MSN, Yahoo Messenger и другие. Кроме этого хорошо бы предоставить игрокам собственные инструменты общения с администрацией. Например, ссылаясь на пример того же WarAliance, в игровой интерфейс был встроен простой багтрекинг, где учетная запись создавалась сразу с регистрацией в игре, кроме этого, во все адресные книги автоматически добавлялась группа Администрация и Техподдержка, контакты отдельных официальных лиц, которые рассматривали те или иные вопросы. А сам интерфейс игры был построен таким образом, что с любого места, где бы не находился игрок было максимум два клика мышью для отправки сообщения любому сотруднику администрации. Особенно это важно для игр, где присутствует финансовая составляющая.
Ага, мы еще не рассмотрели некоторые виды коммуникаций, которые выходя за рамки описанных. Форум - это достаточно важная часть, по сути, комьюнитиобразующая, но это если не использовать другие возможности. Во многих играх форум несет и функции справочной системы и помощи новым игрокам и энциклопедии и даже рупора администрации для обязательных уведомлений. Но по моему мнению, это не лучший способ. Такие обязательные элементы, как FAQ, энциклопедия и руководство для игроков - все это лучше вынести отдельно, для организации таких систем есть собственное ПО и способы организации и работы, кроме этого, лучшим способом будет встроить справку внутри самой игры, при этом соблюдая все то же правило - с любого места до справочной системы должно быть не более двух кликов. И обязательно встроенный полнотекстовый поиск по всем материалам. Дополнением к этому может стать специальный бот в чате, который будет пробовать отвечать на типовые вопросы, формируя базу знаний по игре, аналогичные разработки давно пытаются применить в электронной коммерции, но мне кажется, именно в играх их применение самое оправданное.
Для отдельных групп игроков, например, кланов или альянсов стоит предусмотреть встроенный функционал форума, лучше всего с заранее предопределенной структурой, как в игре Война племен. Тогда общий форум для всех будет разгружен от несвойственных ему функций, а будет служить именно местом общения и обсуждения, игроки же будут избавлены от необходимости держать открытым несколько окон сразу, чтобы читать справку и играть - мой железный принцип - справочная система должна быть полностью интегрирована в игру и служить ее продолжением.
Не забывайте и о других формах самовыражения игроков. Разрешите им вести собственные блоги, да и сама администрация должна вести блог, кроме этого, хорошим решением будет введение некоторой формы СМИ в игре, например, еженедельной новостной газеты. Это было отлично реализовано в SanCity, где я как раз руководил этим подпроектом и считаю, что инициатива была очень успешной, насколько я знаю, выпуск газеты продолжается и сейчас. Я пока не говорю о более технически сложных коммуникационных каналах вроде онлайн радио, хотя это на самом деле не так и сложно, диджеями с удовольствием станут сами игроки, а присутствие в игре своего радио очень заманчивая фишка, это так же было организовано в SanCity, хотя я изначально думал организовать партнерство с уже существующим в сети радио (с созвучным игре названием SanRadio), однако игроки настояли и администрация пошла на это, создав собственную радиостанцию.
Теперь коснемся немного технической стороны реализации систем общения.
После некоторого опыта в разработке игр, и в особенности - в реализации чат-систем, я однозначно склонился к решению выбросить все варианты веб-чатов и организовать его с помощью специальных систем - а именно использовать Jabber. Если раньше с интеграцией Jabber-а в AJAX приложения были определенные сложности, то сейчас их уже почти не осталось. В мощнейшей библиотеке Dojo Toolkit есть уже компонент XMPP, для Flash-а есть библиотеки, да и сетевые коммуникации там легче реализуются, на серверной стороне кроме достаточно странного (но мощного) ejabberd есть наконец и достаточно человечный сервер OpenFire (который очень серьезная и даже приятная коммуникационная система). Так что реализация системы чатов должна быть построена на этой платформе, что обеспечит как стандартность инфраструктуры, так и ее гибкость, масштабированность и расширяемость, не говоря уже о достаточно легком введении дополнительных фич, вплоть до добавления голосовых коммуникаций, голосовой почты и т.п. Ведь Jabber именно для этого и создавался, так зачем придумывать что-то оригинальное или особенное, когда есть уже необходимая платформа. Да и серверная сторона реализована, для РНР есть несколько библиотек для работы с XMPP, а скоро и в Zend Framework будет доступный компонент (сейчас он в лабораторной секции как проект). Максимум, при необходимости, можно рассмотреть дополнение - реализовать общий чат на основе Comet-технологии (например, используя выделенный сервер на базе Jetty + Comet servlet или Grizzle Framework, если пытаться сделать более легковесное решение).
В любом случае, система чата должна располагать ресурсами отдельно от основного сервера игры, это должен быть отдельный сервер, который только связан с системой авторизации и реестром игроков, что можно реализовать в виде внутреннего веб-сервиса. Тот же OpenFire имеет возможность хранить авторизационные данные в MySQL базе, как локальной, так и уже существующей. Применение Jabber сервера позволит реализовать поддержку общения десятков тысяч и даже сотен тысяч игроков, чего для обычных систем очень затруднительно. Мы в последнем проекте пытались извратится, реализовав AJAX-чат, который работал на базе Memory-таблиц MySQL, совместно с дублированием данных, это позволило получить хорошую скорость, и даже реализовать бекап чата полностью, когда раз в некоторое время данные с таблиц в памяти копировались в обычные таблицы базы. Конечно, при перезапуске сервера состояние чата терялось, но это непринципиально.
Такое решение еще и позволит игрокам общаться не только внутри игры, а и за ее пределами, так как каждый игрок получает собственный Jabber ID, он может использовать для общения любой клиент, не теряя связи с игровым комьюнити. Если очень уж не хочется выпускать наружу, можно ввести это как премиум-услугу, как и другие функции, вроде голосовых возможностей, транспорты для других протоколов и т.п.
Теперь на счет почтовой системы. Перебрав множество вариантов (а также с дрожью в руках посмотрев, как же я неоптимально сделал этот в WarAliance, хотя, тем не менее, это работало), я теперь пришел к выводу, что почтовая система должна быть... именно почтовой системой! Основной становится почтовый сервер (снова таки - выделенный отдельный сервер), обязательно с поддержкой IMAP. А внутри игры будет встроен несложный почтовый клиент, который обеспечит все необходимое для общения. Почтовые сервера создавались именно для этого, поддержка тысяч и более пользователей на сервер это вполне рабочие нагрузки, число пересылаемых писем вполне укладывается в возможности современных платформ. Ведь учтите, что этот сервер не пересылает наружу почту, все пересылки внутри одной системы. А вот стандартные возможности вроде поддержки списков рассылки, копий, правил, папок и т.п. - все это именно то, что надо для реализации полноценной почтовой системы внутри игры. В будущем вполне возможно и внедрение платных функций, вроде пересылок внутриигровых писем на другие почтовые ящики - имея столь мощную систему на сервере, можно очень тонко настраивать все функции. Применение IMAP хорошо именно из-за экономии трафика, так как можно работать только с заголовками писем, что сэкономит трафик между почтовым сервером и игровыми узлами. Например, в том же Zend Framework или ezComponents - везде есть хорошая поддержка работы с почтой, поэтому от игрока вполне можно скрыть нюансы реализации, обеспечив максимум возможностей. Кстати, я уже и конкретный сервер присмотрел - vPostMaster, который поддерживает все необходимые возможности "с коробки", включая IMAP. Если необходимо обеспечить секретность или дополнительную безопасность, такой подход позволит легко применять шифрование и цифровые подписи, что пока слабо используется в играх, но, по моему, вполне необходимо и может расширить игровые возможности.
И в завершение этого несколько длинного и местами пространного описания, кратко упомяну о еще нескольких интересных вещах. Хорошо бы использовать возможности RSS для трансляции обновлений в игре, если игрок не может находится в мире. Для каждого игрока публиковать его личную, секретную конечно, RSS ленту для слежения за персонажем или игровыми изменениями. Например, слежение за биржей и поиск интересных предложений по обмену ресурсами - там нужна мощная система уведомлений, включая как раз сообщения на мессенжер (реализуется тем же jabber-ом и почтой, что дает возможность послать сообщение в любую систему, вплоть до SMS-оповещения). Реализовать такое не особо сложно, а сама возможность вполне востребована, особенно в играх, больше направленных на анализ и тактику/стратегию. Twitter также может сослужить хорошую службу игровому миру, например, туда можно вполне также транслировать действия игрока. Впрочем, это более тонкие вещи и их надо хорошо продумывать ещё на этапе создания концепции игры.
В итоге мы имеем несколько базовых принципов построения игровой инфраструктуры, которых мы будем придерживаться при создании собственного игрового движка:
- Полная справочная система по игре (энциклопедия, FAQ, правила, база знаний) должны быть всегда доступны внутри игры и с любого места не более чем через два клика. И сопровождаться не только рубрикацией, но и полнотекстовой системой поиска, без необходимости перехода в другие сервисы, открытия доп. окон браузера и т.п.
- По возможности исключить традиционный общий чат на экране игры. Пусть игрок сам выбирает когда и с кем общаться.
- В собственной адресной книге игрок должен иметь возможность создавать свои группы и использовать чаты для общения внутри групп, дополнительно существуют некоторые стандартные группы вроде администрации.
- Контакты с администрацией и тех. поддержкой также должны быть доступны всегда и с любого экрана игры максимум в два клика.
- Основной системы общения в игре должен быть выделенный jabber-сервер.
- Основной организации внутренней почтовой системы должен быть выделенный почтовый сервер.
- Игрокам полезно дать возможности для самовыражения и "благоустройства" игрового мира - это и внутренние СМИ, радиостанции и личные блоги. В идеале - игроки сразу попадают в социальную сеть.
- Использовать возможности внешней коммуникации - игрок даже не в игре должен иметь возможность следить за игровой информацией и обстановкой, это может быть и платной услугой.
Полностью согласен, очень неудобно, когда чат в игре занимает значительную часть страницы. Поэтому плавающие окошки- это действительно очень неплохой вариант для геймеров. А возможность общаться с другими игроками в другое воремя- вообще замечательно
играю в тотал инфлюенс и там чат довольно удобный в самом низу страницы, может видели, и что самое удобное игра происходит в окне. Можно еще и в асе сидеть и общатся с кем надо. Хотя большинство онлайн игр в окнах, я много игр переиграл но имхо в тотал инфлюенс самый удобный чат. 🙂
имхо часто можно в любой онлайн игре вобще ползоватся асей что как общение самый удобный способ во время игры. Например в Рим Тотал war, свернул быстро окошко сообразил обсудил дальнейшие действия в битве и вперед!
пс. там вообще нет чата поэтому ася это получается единственный способ общения…
Всеволод, ну это, на мой взгляд спороно. В смысле, индивидуально. Мне, например, вообще претят всплывающие окна, даже только для случая диалога. — Не люблю дополнительное мелькание на экране во время игры.
По мне статичное, но аккуратное окошко чата — более удобно.