Como devo coletar dados de comportamento do usuário em um MMO?

9

Em um MMO, estou tentando coletar dados sobre o comportamento do usuário com o objetivo de ajustar as regras do jogo para alcançar a máxima satisfação do usuário.

Claramente, uma maneira de fazer isso é rolar manualmente coisas específicas em um aplicativo, da mesma forma que alguém pode usar Console.WriteLine()para exibir o conteúdo de uma variável ou a StopWatch()classe para ver quanto tempo leva para executar. Mas você pode usar um profiler no lugar do StopWatch e um depurador no lugar do WriteLine.

Como devo coletar meus dados? Existem técnicas generalizadas para instrumentar um aplicativo para observar o comportamento do usuário ou alguma forma de técnica de instrumentação de código?

Além disso, estou interessado apenas em técnicas de coleta; você pode assumir que eu já sei transmitir, armazenar e analisar os dados.

Robert Harvey
fonte

Respostas:

14

Estamos usando a Interface / Arquitetura Orientada a Comandos para auditar a atividade do usuário.

Isso significa que as solicitações ao servidor fazem com que o lado do servidor instancia instâncias de classes que representam comandos (ações atômicas que o usuário pode executar).

Por exemplo, digamos que o usuário faça uma compra em uma loja de itens:

//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);

Agora adicionamos recursos de registro / auditoria nos cmdExecuterque se aplicam a todos os comandos. Dessa forma, há pouca ou nenhuma duplicação de código e podemos desativar a auditoria, reconfigurando uma constante de classe de comando específica e / ou modificando o cmdExecuter.

Ajuda a manter as coisas organizadas. Atualmente, criamos um registro de banco de dados para cada comando "importante". Isso ajuda a rastrear comportamentos que são interessantes para nós.

Leitura adicional
Interface orientada a comandos por Martin Fowler

AturSams
fonte
Isso está na veia do que eu estava procurando, obrigado.
Robert Harvey
@RobertHarvey (Se você decidir usar isso) Apenas mantenha as classes de comando reduzidas, afinal elas são métodos. Eles deveriam ser muito magros.
AturSams
A vantagem é que podemos ver exatamente quais buffs foram aplicados ao usuário e quais monstros ele lutou quando houve um aumento no xp / s. Às vezes, precisamos excluir alguns dados, mas atualmente não há muita atividade, portanto isso não nos afeta muito.
AturSams
7

A "técnica" aqui é tão simples que quase não merece ser chamada assim: você apenas grava os dados dos sistemas de jogo que considera relevantes.

Como você registra esses dados (em um banco de dados, em arquivos, o que for) é muito amplo para discutir aqui (e as técnicas e padrões não são particularmente específicos para o desenvolvimento de jogos, tornando-os mais adequados para a discussão sobre SO), como é a questão de quais sistemas são relevantes. Não há técnicas automáticas inteligentes para responder a essas perguntas; isso seria uma façanha da inteligência artificial.

O que você deseja garantir em um jogo em que há um componente do servidor é que o servidor faça todo o log possível. Nada do que você recebe do cliente pode ser confiável, e especialmente se você estiver usando esses dados para personalizar as mudanças no jogo, não deseja que os jogadores possam adulterá-los.

O cliente deve registrar e transmitir apenas estatísticas que o servidor normalmente não teria acesso também. Por exemplo, se você deseja gravar mapas de calor de cliques da interface do usuário, provavelmente isso só é possível no cliente.


fonte
2

Em um MMO, você já possui dados sobre onde o usuário está indo, quais missões ele realiza e quais equipamentos ele usa enviados para o servidor.

Outros dados nos quais você pode se interessar são como eles usam os vários recursos, por quanto tempo mantêm as telas de estatísticas e inventário abertas. Você pode, por exemplo, registrar o número de vezes que um recurso foi ativado com o mouse e o teclado.

Um fator importante é permitir que o usuário exclua (ou faça a coleta incluir) da coleta de dados (não crítica) para cumprir com os regulamentos de privacidade. E para permitir que o servidor decida quais dados devem ser registrados durante a sessão do jogo / próxima hora, para poupar aos seus jogadores alguma largura de banda.

catraca arrepiante
fonte
11
e não se esqueça das taxas de sucesso e fracasso de missões específicas, uma boa maneira de descobrir se partes do jogo são difíceis ou fáceis demais.
jwenting