Wie soll ich Benutzerverhaltensdaten in einem MMO erfassen?

9

In einem MMO versuche ich, Daten über das Benutzerverhalten zu sammeln, um die Spielregeln zu optimieren und maximale Benutzerzufriedenheit zu erzielen.

Eine Möglichkeit, dies zu tun, besteht eindeutig darin, bestimmte Dinge von Hand in eine Anwendung zu rollen, ähnlich wie man sie Console.WriteLine()zum Anzeigen des Inhalts einer Variablen oder der StopWatch()Klasse verwenden kann, um zu sehen, wie lange die Ausführung dauert. Sie können jedoch anstelle von StopWatch einen Profiler und anstelle von WriteLine einen Debugger verwenden.

Wie soll ich meine Daten sammeln? Gibt es verallgemeinerte Techniken zum Instrumentieren einer Anwendung zur Beobachtung des Benutzerverhaltens oder irgendeine Form von Code-Instrumentierungstechnik?

Außerdem interessiere ich mich nur für Sammeltechniken; Sie können davon ausgehen, dass ich bereits weiß, wie diese Daten übertragen, gespeichert und analysiert werden.

Robert Harvey
quelle

Antworten:

14

Wir verwenden die befehlsorientierte Schnittstelle / Architektur , um die Benutzeraktivität zu überwachen.

Dies bedeutet, dass Anforderungen an den Server die Serverseite veranlassen, Instanzen von Klassen zu instanziieren, die Befehle darstellen (atomare Aktionen, die der Benutzer ausführen kann).

Angenommen, der Benutzer tätigt einen Kauf in einem Artikelgeschäft:

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

Jetzt fügen wir Protokollierungs- / Überwachungsfunktionen hinzu cmdExecuter, die für alle Befehle gelten. Auf diese Weise gibt es kaum oder gar keine Codeduplizierung, und wir können die Überwachung deaktivieren, indem wir entweder bestimmte Befehlsklassenkonstanten neu konfigurieren und / oder den cmdExecuter ändern.

Es hilft, die Dinge zu organisieren. Derzeit erstellen wir für jeden "wichtigen" Befehl einen Datenbankeintrag. Dies hilft dabei, das für uns interessante Verhalten zu verfolgen.

Weiterführende
Literatur Befehlsorientierte Schnittstelle von Martin Fowler

AturSams
quelle
Dies ist genau das, wonach ich gesucht habe, danke.
Robert Harvey
@RobertHarvey (Wenn Sie sich dafür entscheiden) Halten Sie einfach die Befehlsklassen schlank, sie sind schließlich Methoden. Sie sollen sehr dünn sein.
AturSams
Der Vorteil ist, dass wir genau sehen können, welche Buffs auf den Benutzer angewendet wurden und gegen welche Monster sie gekämpft hat, als es einen Anstieg in xp / s gab. Manchmal müssen wir einige Daten löschen, aber derzeit gibt es nicht viel Aktivität, so dass es uns nicht sehr betrifft.
AturSams
7

Die "Technik" ist hier so einfach, dass sie es fast nicht verdient, als solche bezeichnet zu werden: Sie zeichnen nur die Daten von Spielsystemen auf, die Sie für relevant halten.

Wie Sie diese Daten (in einer Datenbank, in Dateien usw.) aufzeichnen, ist zu umfassend, um hier diskutiert zu werden (und die Techniken und Muster sind in keinem Fall besonders spielentwicklungsspezifisch, sodass sie für die Diskussion über SO besser geeignet sind) die Frage, welche Systeme relevant sind. Es gibt keine cleveren automatischen Techniken, um diese Fragen zu beantworten. das wäre ein Kunststück der künstlichen Intelligenz.

Das, was Sie bei einem Spiel sicherstellen möchten, bei dem es eine Serverkomponente gibt, ist, dass der Server alle Protokollierungen durchführen sollte, die er kann. Nichts, was Sie vom Client erhalten, kann als vertrauenswürdig eingestuft werden. Insbesondere wenn Sie diese Daten verwenden, um Änderungen am Spiel anzupassen, möchten Sie nicht, dass die Spieler daran manipulieren können.

Der Client sollte nur Statistiken aufzeichnen und übertragen, auf die der Server normalerweise auch keinen Zugriff hat. Wenn Sie beispielsweise UI-Click-Heatmaps aufzeichnen möchten, ist dies wahrscheinlich nur auf dem Client möglich.


quelle
2

In einem MMO haben Sie bereits Daten darüber, wohin der Benutzer geht, welche Quests er annimmt und welche Ausrüstung er verwendet, die an den Server gesendet wird.

Andere Daten, die Sie interessieren könnten, sind, wie sie die verschiedenen Guis verwenden, wie lange sie Statistik- und Inventarbildschirme geöffnet halten. Sie können beispielsweise aufzeichnen, wie oft eine Funktion mit der Maus oder der Tastatur aktiviert wurde.

Ein wichtiger Faktor besteht darin, dem Benutzer zu ermöglichen, die (nicht kritische) Datenerfassung zu deaktivieren (oder die Erfassung zu deaktivieren), um den Datenschutzbestimmungen zu entsprechen. Und damit der Server entscheiden kann, welche Daten während der Spielsitzung / der nächsten Stunde aufgezeichnet werden sollen, um Ihren Spielern etwas Bandbreite zu ersparen.

Ratschenfreak
quelle
1
und vergessen Sie nicht die Erfolgs- und Misserfolgsraten für bestimmte Quests, um herauszufinden, ob Teile des Spiels zu schwer oder zu einfach sind.
Jwenting