Как мне собирать данные о поведении пользователей в MMO?

9

В MMO я пытаюсь собрать данные о поведении пользователей с целью настройки правил игры для достижения максимального удовлетворения пользователей.

Ясно, что один из способов сделать это - вручную свернуть определенные вещи в приложение, так же, как можно использовать Console.WriteLine()для просмотра содержимого переменной или StopWatch()класса, чтобы узнать, сколько времени занимает выполнение чего-либо. Но вы можете использовать профилировщик вместо StopWatch, и вы можете использовать отладчик вместо WriteLine.

Как я должен собрать свои данные? Существуют ли обобщенные методы инструментирования приложения для наблюдения за поведением пользователя или какой-либо вид техники инструментария кода?

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

Роберт Харви
источник

Ответы:

14

Мы используем командно-ориентированный интерфейс / архитектуру для аудита активности пользователей.

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

Например, предположим, что пользователь совершает покупку в магазине товаров:

//We could have done something like
someShop.sell(item, player); // This function deducts money from the player
                             // and stores the new item in their inventory

//Instead we do this:
$buyItemCmd = new BuyItemCommand(item); // The player is already known from the sessionId
$cmdExecuter.run($buyItemCmd);

Теперь мы добавляем функции ведения журнала / аудита, cmdExecuterкоторые применяются ко всем командам. Таким образом, дублирование кода практически отсутствует, и мы можем отключить аудит, либо переконфигурировав конкретные константы класса команды и / или изменив cmdExecuter.

Это помогает держать вещи в порядке. В настоящее время мы создаем запись базы данных для каждой «важной» команды. Это помогает отслеживать поведение, которое нам интересно.

Дальнейшее чтение
командно-ориентированного интерфейса Мартина Фаулера

AturSams
источник
Это в духе того, что я искал, спасибо.
Роберт Харви
@RobertHarvey (если вы решите использовать это) Просто держите командные классы тонкими, в конце концов, они являются методами. Они должны быть очень худыми.
AturSams
Преимущество состоит в том, что мы можем точно видеть, какие баффы были применены к пользователю и с какими монстрами он сражался, когда был скачок в xp / s. Иногда нам нужно удалить некоторые данные, но в настоящее время нет особой активности, поэтому это не сильно влияет на нас.
AturSams
7

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

Как вы записываете эти данные (в базу данных, в файлы и т. Д.) Слишком широко, чтобы обсуждать их здесь (а методы и шаблоны не особенно специфичны для разработки игр, что делает их более подходящими для обсуждения на SO), как вопрос о том, какие системы актуальны. Нет умных автоматических методов, чтобы ответить на эти вопросы; это был бы подвиг искусственного интеллекта.

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

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


источник
2

В MMO у вас уже есть данные о том, куда пользователь отправляется, какие квесты он берет и какое оборудование он использует отправляет на сервер.

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

Одним из важных факторов является предоставление пользователю возможности отказаться (или включить сбор) от сбора (некритических) данных в соответствии с правилами конфиденциальности. И позволить серверу решить, какие данные должны быть записаны во время сеанса игры / следующего часа, чтобы сэкономить вашим игрокам некоторую пропускную способность.

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