Çarpışma tespiti sunucu tarafında mı yoksa müşteri / sunucu arasında mı işbirliği yapmalı?


24

Çok ağır çarpışma algılama işlemlerine sahip bir çevrimiçi oyun üzerinde çalışıyorum. Oyuncu modelleri, yalnızca sunucu tarafında bulunan (istemci veri dosyalarında depolanmayan) diğer oyuncular, çeteler, yapılar, arazi ve katı nesnelerle çarpışacaktır.

Güvenlik nedeniyle, tüm çarpışma saptama sunucu tarafında mı yapmalıyım? Veya istemcinin algılama yapmasını ve sunucunun bir şekilde onu takip etmesini sağlamalı mıyım? Sunucunun kendi başına yapması için çok fazla olacağını hissediyorum (motoru bir sunucudaki yüzlerce oyuncu için tasarlıyorum).

Genel MMO'ların bunu nasıl yaptığını bilen var mı? Şu anda neredeyse tüm MMO'ların fizik saldırılarına duyarlı olduğunu ve genellikle saldırı tespit ederek ve insanları yasaklayarak onlarla ilgilendiğini biliyorum. En azından fizik bileşeni için bilgisayar korsanlarının işe yaramadığını tercih ederim.

Yanıtlar:


21

Görünen o ki, bariz cevap sizin algılama müşteri tarafında (pürüzsüzlük için) çoğunu yapmaktır ve ardından müşteriniz çok uzaksa sunucunun söylediklerine enterpolasyon yaparsınız. Sunucu, istemciden daha az sıklıkta işaretleyecektir (örneğin, 10hz gibi) ve muhtemelen "bu oyuncunun şu anda son bilinen konumundan olduğunu söylediği yere ulaşmış olabilir" kodunu kullanması gerekebilir; bir tür nav mesh tipi çözüm ve yol bulma.

İhtiyaçlarınızın ne olduğuna bağlı olarak bu oldukça yavaş olabilir. Örneğin, sunucudaki oyuncu-oyuncu çarpışmasına aldırış etmemek için bir tasarım kararı verebilirsiniz. Bildiğim kadarıyla çoğu oyun istemcide bunu umursamıyor bile. Bu gerçekten ihtiyaçlarınızın neler olduğuna bağlı.

Ancak temel kural, müşteriye asla güvenmemeniz gerektiğidir. Oynanışı etkilerse, en azından sunucuda doğrulamanız gerekir.


24

Yani, burada birkaç cevap.

  • Müşteri tarafında çarpışma, performans açısından ve oyuncu bakış açısından idealdir. Çarpışmanın gecikmesini istemiyorsunuz, oyuncuların sağlam bir nesneye girip durmasını istiyorsunuz. Sunucu tarafında yaparsanız, ya her yerdeki lastik bant oyuncularına bakıyorsunuz ya da oyunculara hareket etmeye çalıştıklarında fark edilebilir bir gecikme sağlıyorsunuz. Her iki durumda da kötü mojo.

  • Sunucu tarafı çarpışması güvenlik açısından idealdir. Müşterileriniz "aptal terminallere" ne kadar yaklaşırsa oyununuz o kadar az sömürülebilir. Metin tabanlı bir MUD oynayan hiç kimsenin duvar ya da speedhacks konusunda endişelenmemesinin bir nedeni var - bunun nedeni müşterinin söylemeye değer bir şey yapmamasıdır.

  • Her ikisini de yapmak neredeyse her durumda "ideal" dir. İstemcilerin işlerini yapmasına izin verin, sonra insanların aldatmadıklarından emin olmak için sunucuda iki kez kontrol edin. Dezavantajları karmaşıklık, senkronizasyon ( ikisi de aynı fikirde değilseniz tam olarak ne yaparsınız ) ve saf sunucu CPU kullanımıdır.

  • Önerim, neredeyse tamamen müşteri tarafında yapmak. Müşteri, tam bir müşteri tarafı sistemindeki gibi, konumu hakkında yetkili ve tüm işlemlerini gerçekleştiriyor. Bunun da ötesinde, rasgele olarak sunucuyu arada sırada çeşitli oyuncuları kontrol ettirirsiniz. Sunucu yükünü düşük tutun, ancak bu dolandırıcıların şaşırtıcı şekilde hızlı bir şekilde yayınlanmasını sağlar.

Alternatif olarak, şu an için istemci tarafında yapın, oyununuz insanların hile yaptığı kadar popüler hale gelirse, gelecekte bir noktada sunucu tarafı doğrulamasını ekleyin. Dürüst olalım, muhtemelen olmayacak, bu yüzden şu anda kodlayıcı zamanını harcamanın bir anlamı yok.


3

World of Warcraft oyuncular / çetelerin arasında çarpışma algılama yapmaz. Bu kararın arkasında teknik nedenler olabilir veya olmayabilir, fakat gerçekten, bunun teknik bir karardan çok bir oyun tasarım kararı olması gerekir:

Oyuncu-oyuncu durumlarında ne kadar sömürülebilir olabileceğini bir düşünün. Veya diğer (genellikle boşta) oyuncular hareketlerinizi engellediğinde banka / müzayede evini / posta kutularını kullanmak ne kadar zor olabilir!

İstemci vs sunucu tabanlı çarpışma tespiti gelince - gerçekten, hareket çok yavaş olmadıkça, öncelikle müşteri tarafı olması gerekir, bu yüzden her müşteriye doğru görünüyor. Gecikmeli / gecikmeli çarpışma tepkisi ve / veya 'görünmez' nesnelerle çarpışması oldukça rahatsız edici olabilir.


1
Soru, oyuncuya karşı mob / oyuncu çarpışmasının kötü oyun tasarımı olup olmadığıyla ilgili olmasa da, her şeyin sağlam olduğu Darkfall Online gibi oyunlara bakmanızı öneririm. Oynanışa yeni bir boyut ekler ve oyunla çok ilginç şeyler yapmanıza izin verir. Oyunumda bankalar gibi şeyleri engelleyen oyuncular hakkında endişelenmem çünkü oyuncuların nesneyi açmak için her zaman görebilecekleri küçük bir boşluk olacaktır.
BarakatX2

Oyuncular saldırabilecekleri ve saldıramayacakları herhangi bir şey tarafından kolayca yürüyebilecekleri bir engellenmiş olabilir. Mesela, oyuncular çetelere saldıramayacaklarından çetelerin içinden geçemezler. Ayrıca PVP olarak işaretlendikleri için PVP olarak işaretlendiklerinde oyuncular arasında yürüyemezlerdi. PVP işaretli olmayan bir oyuncu, PVP işaretli olmayan herhangi bir oyuncudan geçebilir, çünkü bu oyunculara saldıramazlar.
Azaral

2

Hack'lerle ilgileniyorsanız ve bu oyunda büyük etkiye sahipse, cevabınız YES.

"Şehir kurma" türünde bir oyun olan tarayıcı tabanlı oyunumda, bilgisayar korsanlarından rahatsızlık duymuyorum çünkü kaydedilmiş oyun durumunu düzenlerken istemci motoru başarısız olmayacak.

Ancak, oyuncunun daha fazla ev / bina inşa etmek için oynanabilir alanı genişletmek için oyun paraları (veya birinci sınıf nakit) harcaması gerektiğinden oyunu potansiyel olarak kötüye kullanabilir. Bu yüzden, yeni eklenen binanın işgal ettiği karo sayısının basit bir kontrolünü uygulayacağım.

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.