Bir MMO’da AI hesaplamalarını kim yapar?


30

Bir MMO yapıyorum ve NPC eklemek istiyorum. Mesele şu ki, temel tasarımı bilmiyorum. Hesaplamalar, istemciler veya sunucu nedir? Sunucunun olayları ve tepkileri hesapladığını anlayacağım, ama yol bulma ve oyuncunun pozisyonu ve hareketi ile ilgili olarak, bunu kim hesaplar?

Sunucuyu veya istemciyi AI kim hesaplar? Sunucunun yol bulma, konum, hareket vb. Hesaplamalarını hayal edemiyorum. Lütfen bunu anlamak için yardıma ihtiyacım var, teşekkürler, her şey yardımcı olacak.


2
Terminolojinize dikkat edin - örneğin NPC'ler oyuncu değil.
Kylotan

Yanıtlar:


25

Günümüzde MMO'ların çoğu, güvenlik nedeniyle, sunucu tarafında yapılan önemli bir şeye sahiptir. Müşteriye çok fazla yük atamazsınız, bu yüzden ilk gönderilen şeylerden biri AI rutinleridir. Bence çoğu geliştirici, müşteri tarafının bir istisna değil, kural olarak ihlal edilebileceğini düşünüyor.

Scalify'ın Badumna'sı ( http://www.scalify.com/badumna.php ), müşterilerin hesaplarını yapmaları ve birbirlerine göndermeleri için müşterilere bir kısmını boşaltmaya çalışır; Bazı veriler, tıpkı özel bir sunucu gibi, istemcilere iletilmeden önce doğrulanması için yetkili bir eşe gönderilir. Sorun, çok oyunculu bir oyunda TÜM verilerinin hile yapmasını önlemek için yetkili bir meslektaş aracılığıyla gönderilmesi gerektiğidir. İstediğinize en yakın göründüğü için Badumna'yı büyüttüm, ancak hile yakalayamayacak - hatta bazılarını yakalayabilir, ancak kritik bir şey (yani, her şey, hemen hemen) sunucudan yapılmalı - yan.

Badumna'da bazılarını genişletebilirim, çünkü yine de yararlı bulabileceğiniz bir şey olabilir (ancak müşteriler için önemli olan bir şeyi yüklemeyi yeniden düşünmenizi rica ediyorum, çünkü müşteriler hile yapacaklar).

Badumna, veri işlemleri için karma bir mimari sunar. Neyin kritik olduğuna (ve doğrulanması gerektiğine) ve neyin olmadığına (ve merkezi olmayan ağ tarafından gönderilebilir) karar vermede geliştiriciye tam kontrol sağlar.

Bir MMO, her bir bilgi bitinin doğrulanması gerektiğini gerektiriyorsa, Badumna bir istemci-sunucu çözümü olarak işlev görür. Ancak, farklı gereksinimleri olan farklı kategorilerde MMO uygulamaları olduğuna inanıyorum. Örneğin, çoğu zaman bir MMO, oyuncuların hile yapabileceği savaş bölgelerine sahip olacak ve bu nedenle her bilginin doğrulanması gerekiyor. Ancak, oyuncuların yalnızca yürüyebileceği / koşabileceği / dans edebileceği / sohbet edebileceği bölgeler de var. Bu bölgeler tam bir doğrulama gerektirmez ve Badumna'nın merkezi olmayan ağını kullanabilir ve sunabileceği ölçeklenebilirlikten yararlanabilir.

İkincisi, Badumna, geliştiricilerin kimlik koruması (kullanıcıların başkası gibi davranmasını önleyemezler), şikayet proxy'si (müşterilerin kötü niyetli / hile yapan oyuncuları güvenilir bir kaynağa bildirecek şekilde yapılandırılmalarına izin verme) ve kara listeleme gibi erişebilecekleri ek güvenlik özellikleri sunar. (Kötü niyetli oyuncuların oyunlardan yasaklanması).

Badumna'yı o kadar fazla araştırmamıştım, bu yüzden farkında olmadığım konular ve özellikler olabilir, ama en azından onlara bir bakış açısı verdim.

tl; dr: müşteri gerçekten sadece internete bağlı bir klavye ve fare olmalıdır.


9

Kısa cevap, standart bir MMO için AI hesaplamalarının her zaman sunucu tarafından gerçekleştirilmesidir.

Bazı oyunlar müşterinin AI'yı tahmin etmesini sağlayacak, böylece NPC'ler daha hızlı tepki verecek gibi gözüküyor, ama bu sadece bir yanılsama; Gerçek NPC her zaman sunucu tarafından kontrol edilir.


5

Bir MMO halka açık (Internet) bir sunucudur. Tamamen kontrol edebilmek istediğiniz hiçbir şey halka açık olmamalıdır, aksi takdirde bir saldırganın NPC'leri kontrol etmesine izin verme riskiniz vardır. Komutlarınız üzerinde bir çeşit şifreleme yapmıyorsanız (performansı etkileyecektir), müşteriye yalnızca kendi kodunuzu çalıştırdığına güvenemezsiniz.

İstemcide gecikmeyi telafi etmek için NPC hareketlerini tahmin etmek harika bir fikirdir; Müşteri programında istediğiniz kadar AI davranışını teorik olarak dahil edebilir ve periyodik olarak senkronize etmelerini sağlayabilirsiniz - ancak müşterinin bir NPC davranışını dikte etmesine izin vermek müşteriye oyun dünyasıyla uğraşma potansiyeli verir. Eğer müşteri sunucudaki oyun dünyasından ayrılırsa, kontrol edilemez hileli NPC'lerle karşılaşırsınız.

Bu gerçekten bir utançtır, çünkü AI'yı müşterilere dağıtmak ölçeklenebilirliği etkileyebilir.


2
Şifreleme çoğunlukla yararsızdır - müşterinin kendisine gönderilen herhangi bir şeyin şifresini çözebilmesi gerekir ve müşteri tersine mühendislik edilebilir. En iyi şifreleme, hile yapan bir müşteri yaratan birini yavaşlatır.
Adam,

2

Genellikle sunucu, müşteriye iletilen veya müşteriden alınan her veriyi hesaplamalı veya doğrulamalıdır. Ancak müşteriye ne kadar güvenebileceğinize ve bu hesaplamanın ne kadar önemli olduğuna bağlıdır. Bazen ana hesaplama müşteri üzerinde yapılabilir ve sunucu sonuçta elde edilen verileri doğrulamak için basit bir yöntem kullanabilir.


1

Diğer cevaplar üzerine inşa etmek için, "boşaltım ve doğrulama" stratejisi, doğrulamanın orijinal hesaplamaya göre daha kolay olduğu durumlarda (veya sadece zaman zaman yapılan kontrollerin hile yapmak için yeterli olduğu durumlarda) gerçekten yararlı olabilir.

Örneğin, müşteriye A * yolunu bulma ve sonuçları sunucuya göndermiş olmanız durumunda, tüm sunucunun yapması gereken tek şey a) yolun geçerli olup olmadığını ve b) daha kısa bir yol olup olmadığını kontrol etmektir. Yol geçerliliğini kontrol etmek kolay olmalı ve iyiliği kontrol etmek , başlamak için gereken en uygun yolu bulmaktan daha kolay olabilir , çünkü artık kontrol etmeniz gereken yolların uzunluğuna bir üst sınırınız vardır. (Özellikle, müşteri düz çizgi bir yol döndürürse, geçerli olduğu sürece açıkça en uygunudur.) Dürüst olmak gerekirse, bu özel hilenin pratikte yararlı olup olmayacağı konusunda hiçbir fikrim yok, ancak temel bir engel göremiyorum. ona.

Bununla birlikte, NPC AI'yi istemcilere boşaltırsanız, saldırıya uğramış bir müşterinin NPC davranışını önceden tahmin etmek için potansiyel olarak kullanabileceğini unutmayın. Bazı oyun türleri veya durumlar için bu ciddi bir sorun olabilir.


1

İstemci tarafında karmaşık olmayan kritik oyun işlemlerini yürütürken, sunucu tarafında bazı basit AI rutinlerine ve oyun için kritik hesaplamalara sahip olmak muhtemelen en iyisidir.

Örneğin, sunucu düşman NPC'nin nerede olduğunu ve oyuncu karakterlerinin nerede olduğunu bilir. Oyuncu karakteri NPC'nin kapsamına girdiğinde, NPC'nin oyuncuya saldırıp saldırmaması gerektiğini görmek için sunucu tarafında bir hesaplama yapılabilir ve NPC'nin oyuncuya ulaşmasının ne kadar süreceğini belirlemek için basit bir yol bulma rotasyonu yapılabilir.

NPC saldırı durumuna geçtikten sonra müşteri animasyon ve ince taneli yol bulma ile ilgilenebilir. NPC, sunucuya saldırmak için müşteriye yeterince yakın olduğunda, saldırının yapılıp yapılmadığını, hasarın ne olduğunu vb. Görmek için hesaplamalar yapabilir ...

Oyunun sonucunu gerçek anlamda etkileyen hesaplamaların sunucu tarafından yapıldığından ve müşteriye iletildiğinden emin olun, kritik olmayan hesaplamalar ise müşteri tarafından gerçekleştirilir.

En basit durumda, istemciyi sunucunun beklediği yer ile senkronize halde tutacaksınız, sunucu doğrulayacak ve ardından istemci yeniden hesaplayacaktır.

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.