MMO'da kullanıcı davranış verilerini nasıl toplamalıyım?


9

Bir MMO, ve ben maksimum kullanıcı memnuniyeti elde etmek için oyun kurallarını değiştirmek amacıyla kullanıcı davranışları hakkında veri toplamaya çalışıyorum.

Bunu yapmanın açık bir yolu Console.WriteLine(), bir değişkenin içeriğini veya bir StopWatch()şeyin yürütülmesinin ne kadar sürdüğünü görmek için sınıfın içeriğini görüntülemek için kullanabileceği gibi, belirli şeyleri bir uygulamaya elle aktarmaktır . Ancak bir profil oluşturucuyu StopWatch yerine kullanabilir ve WriteLine yerine bir hata ayıklayıcı kullanabilirsiniz.

Verilerimi nasıl toplamalıyım? Kullanıcı davranışını veya bir tür kod enstrümantasyon tekniğini gözlemlemek için bir uygulamayı enstrümenize etmek için genelleştirilmiş teknikler var mı?

Ayrıca, sadece toplama teknikleriyle ilgileniyorum; söz konusu verilerin nasıl aktarılacağını, saklanacağını ve analiz edileceğini zaten bildiğimi varsayabilirsiniz.

Yanıtlar:


14

Kullanıcı etkinliğini denetlemek için Komut Odaklı Arayüz / Mimari kullanıyoruz .

Sunucuya yapılan isteklerin, sunucu tarafının komutları temsil eden sınıf örneklerini başlatmasına neden olduğu anlamına gelir (kullanıcının önceden oluşturabileceği atom eylemleri).

Örneğin, kullanıcının bir eşya mağazasında alışveriş yaptığını varsayalım:

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

Şimdi cmdExecutertüm komutlar için geçerli olan günlük / denetim özelliklerini ekliyoruz . Bu şekilde, kod çoğaltması çok azdır veya hiç yoktur ve belirli bir komut sınıfı sabitlerini yeniden yapılandırarak ve / veya cmdExecuter'ı değiştirerek denetimi kapatabiliriz.

İşlerin organize kalmasına yardımcı olur. Şu anda her "önemli" komut için bir veritabanı kaydı oluşturuyoruz. Bu, bizim için ilginç olan davranışı izlemeye yardımcı olur.

İleri Okuma
Komut Odaklı Inteface - Martin Fowler


Bu aradığım şeyin damarında, teşekkürler.
Robert Harvey

@RobertHarvey (Bunu kullanmaya karar verirseniz) Sadece komut sınıflarını ince tutun, sonuçta yöntemlerdir. Çok sıska olmaları gerekiyordu.
AturSams

Avantajı, kullanıcıya hangi güçlendirmelerin uygulandığını ve xp / s'de bir artış olduğunda hangi canavarlarla savaştığını görebilmemizdir. Bazen bazı verileri silmemiz gerekir, ancak şu anda çok fazla etkinlik yoktur, bu yüzden bizi fazla etkilemez.
AturSams

7

"Teknik" burada o kadar basit ki, neredeyse böyle adlandırılmayı hak etmiyor: sadece ilgili olduğunu düşündüğünüz oyun sistemlerinden verileri kaydediyorsunuz.

Nasıl burada tartışmak için çok geniş (her ne dosyalara bir veritabanına,) o verilerini kaydetmek (ve teknikler ve desenler onları daha iyi SO üzerinde tartışma için uygundur yapım her durumda özellikle oyun-geliştirme özgü değildir) gibi, hangi sistemlerin ilgili olduğu sorusu . Bu soruları cevaplayacak akıllı otomatik teknikler yoktur; bu yapay zekanın başarısıdır.

Bir sunucu bileşeninin bulunduğu bir oyunda emin olmak istediğiniz şey, sunucunun yapabileceği tüm günlük kaydını yapmasıdır. İstemciden aldığınız hiçbir şeye güvenilemez ve özellikle bu verileri oyunda yapılan değişiklikleri uyarlamak için kullanacaksanız, oyuncuların kurcalamalarını istemezsiniz.

İstemci yalnızca sunucunun normalde erişemeyeceği istatistikleri kaydetmeli ve iletmelidir. Örneğin, kullanıcı arayüzü tıklama ısı haritalarını kaydetmek istiyorsunuz, bu muhtemelen istemcide mümkündür.


2

Bir MMO'da, kullanıcının nereye gittiği, hangi görevleri aldığı ve kullandığı ekipmanların sunucuya gönderildiği hakkında zaten verileriniz var.

İlginizi çekebilecek diğer veriler, çeşitli tabloları nasıl kullandıkları, stat ve envanter ekranlarını ne kadar süre açık tuttuklarıdır. Örneğin, bir özelliğin fare ile klavye arasında kaç kez etkinleştirildiğini kaydedebilirsiniz.

Önemli bir faktör, kullanıcının (kritik olmayan) veri koleksiyonunun gizlilik düzenlemelerine uyması için devre dışı kalmasına (veya koleksiyonun kapsamı dışında kalmasına) izin vermesidir. Ve sunucunun oyun oturumunda / sonraki saatte hangi verilerin kaydedilmesi gerektiğine karar vermesine izin vermek için, oyuncularınıza bir miktar bant genişliği ayırın.


1
ve belirli görevler için başarı ve başarısızlık oranlarını unutmayın, oyunun bazı bölümlerinin çok zor veya çok kolay olup olmadığını öğrenmenin iyi bir yolu.
14'te
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.