Comment dois-je collecter les données de comportement des utilisateurs dans un MMO?

9

Dans un MMO, et j'essaie de collecter des données sur les comportements des utilisateurs dans le but de peaufiner les règles du jeu pour obtenir une satisfaction maximale des utilisateurs.

Clairement, une façon de le faire est de rouler à la main des choses spécifiques dans une application, un peu comme on pourrait utiliser Console.WriteLine()pour afficher le contenu d'une variable, ou la StopWatch()classe pour voir combien de temps quelque chose prend pour s'exécuter. Mais vous pouvez utiliser un profileur à la place de StopWatch et vous pouvez utiliser un débogueur à la place de WriteLine.

Comment dois-je collecter mes données? Existe-t-il des techniques généralisées pour instrumenter une application afin d'observer le comportement des utilisateurs, ou une certaine forme de technique d'instrumentation de code?

De plus, je ne m'intéresse qu'aux techniques de collecte; vous pouvez supposer que je sais déjà comment transmettre, stocker et analyser ces données.

Robert Harvey
la source

Réponses:

14

Nous utilisons une interface / architecture orientée commande pour auditer l'activité des utilisateurs.

Cela signifie que les requêtes adressées au serveur obligent le serveur à instancier des instances de classes qui représentent des commandes (actions atomiques que l'utilisateur peut exécuter).

Par exemple, supposons que l'utilisateur effectue un achat dans une boutique d'articles:

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

Nous ajoutons maintenant des fonctionnalités de journalisation / d'audit dans le cmdExecuterqui s'appliquent à toutes les commandes. De cette façon, il y a peu ou pas de duplication de code et nous pouvons désactiver l'audit, soit en reconfigurant une constante de classe de commande spécifique et / ou en modifiant cmdExecuter.

Cela aide à garder les choses organisées. Nous créons actuellement un enregistrement de base de données pour chaque commande "importante". Cela permet de suivre les comportements qui nous intéressent.

Lectures
orientées commande par Martin Fowler

AturSams
la source
C'est dans la veine de ce que je cherchais, merci.
Robert Harvey
@RobertHarvey (Si vous décidez de l'utiliser) Gardez simplement les classes de commandes, ce sont des méthodes après tout. Ils sont censés être très maigres.
AturSams
L'avantage est que nous pouvons voir exactement quels buffs ont été appliqués à l'utilisateur et quels monstres elle a combattus quand il y avait un pic dans xp / s. Parfois, nous devons supprimer certaines données, mais actuellement il n'y a pas beaucoup d'activité, donc cela ne nous affecte pas beaucoup.
AturSams
7

La "technique" est ici est si simple qu'elle ne mérite presque pas d'être appelée comme telle: vous enregistrez simplement les données des systèmes de jeu que vous jugez pertinentes.

La façon dont vous enregistrez ces données (dans une base de données, dans des fichiers, etc.) est trop large pour être discutée ici (et les techniques et les modèles ne sont pas particulièrement spécifiques au développement de jeu en tout cas, ce qui les rend mieux adaptés à la discussion sur SO), comme c'est le cas la question de savoir quels systèmes sont pertinents. Il n'y a pas de techniques automatiques intelligentes pour répondre à ces questions; ce serait tout un exploit de l'intelligence artificielle.

La chose dont vous voulez vous assurer avec un jeu où il y a un composant serveur est que le serveur doit faire toute la journalisation qu'il peut. Rien de ce que vous obtenez du client ne peut être fiable, et surtout si vous allez utiliser ces données pour adapter les modifications au jeu, vous ne voulez pas que les joueurs puissent les altérer.

Le client doit uniquement enregistrer et transmettre des statistiques auxquelles le serveur n'aurait normalement pas accès également. Par exemple, si vous souhaitez enregistrer des cartes de chaleur de clic sur l'interface utilisateur, cela n'est probablement possible que sur le client.


la source
2

Dans un MMO, vous disposez déjà de données sur la destination de l'utilisateur, les quêtes qu'il entreprend et les équipements qu'il utilise envoyés au serveur.

Les autres données qui pourraient vous intéresser sont la façon dont ils utilisent les différents types, la durée pendant laquelle ils gardent les écrans de statistiques et d'inventaire ouverts. Vous pouvez par exemple enregistrer le nombre de fois qu'une fonction a été activée avec la souris par rapport au clavier.

Un facteur important est de permettre à l'utilisateur de se retirer (ou de faire participer la collecte) à la collecte de données (non critique) pour se conformer aux règles de confidentialité. Et pour permettre au serveur de décider quelles données doivent être enregistrées pendant la session de jeu / l'heure suivante pour épargner à vos joueurs une certaine bande passante.

monstre à cliquet
la source
1
et n'oubliez pas les taux de réussite et d'échec pour des quêtes spécifiques, un bon moyen de savoir si certaines parties du jeu sont trop difficiles ou trop faciles.
jwenting