Yüzlerce oyuncu ile sunucu tarafı fizik simülasyonları


9

Şu anda fiziğin sunucu tarafında simüle edilmesini istediğim tek oyunculu fizik odaklı bir oyun üzerinde çalışıyorum. Bunun nedeni, oyunun liderlik tablolarına, kalıcı oyuncu ilerlemesine vb. Sahip olacağı ve her türlü hile yapmayı önlemek istediğimden - temelde saf bir istemci-sunucu mimarisi, istemci “aptal” ve sadece sunucunun görüntülemenizi istediklerini görüntüler.

Ancak sorun, oyunun aynı anda yüzlerce (belki de binlerce) kişi tarafından oynanmasıdır. Yüzlerce durumu aynı anda yapmam ve sürdürmem gerekiyorsa büyük olasılıkla sunucu işlem gücünü öldüreceği için bu beni ilgilendiriyor.

Tüm fizik simülasyonlarını müşteri tarafına taşımakta sorun yaşamazdım, ancak o zaman bir müşteri simülasyonunun sonucu geçerliyse doğrulamanın bir yoluna ihtiyacım olacaktı. Ancak, nasıl olduğunu anlayamıyorum.

İstemcinin hala adil olup olmadığını doğrulamak için simülasyon sunucusunu yan yana çalıştırmayı düşündüm, ancak sunucunun mümkün olduğunca daha az zorlanma olmasını istiyorum.

Fizik Glenn Fiedler'in GDC 2011 demosu kadar karmaşık hale gelecek , belki daha da basit olacak. Bununla birlikte, her zaman çok daha fazla çarpışan katı cisimler tek bir sahnede olacak ve hepsi aynı anda görünecek.

Web'deki çoğu kaynak - yine de büyük bir alan olan Glenn Fiedlers sitesi - küçük ölçekli ağ fiziği hakkında konuştuğundan (örneğin Halo gibi 30 oyunculu bir FPS) bu özel duruma cevap vermekte zorlanıyorum.

Konuyla ilgili herhangi bir tavsiye, web sitesi, makale veya benzeri çok takdir edilecektir.

Cevaplamak istediğim soruların bir özeti:

  • Bir istemci-sunucu modeli ne kadar uygulanabilir? Sunucu işlem gücü kaygım yasal ve topraklı mı?
  • İstemci tarafından sunucuda çalıştırılan bir fizik simülasyonunu güvenilir bir şekilde doğrulamak mümkün müdür? Öyleyse nasıl?

Daha fazla insanın düşüncelerini paylaşmasını umarak bu soruyu biraz daha açık bırakacağım. Alread yapanlara teşekkür ederim!
Lennard Fonteijn

Farklı istemciler bağımsız olduğu sürece, yatay ölçeklendirme konusunda sorun yaşamamanız gerekir. EC2 gibi bir şey kullanın, kapasiteyi gerektiği gibi çevrimiçi hale getirin.
ipeet

1
Birisi tek kişilik bir oyunda hile yaparsa sorun nerede? Bırakın, liderlik fikrini daha iyi bırakın ve eğlenceli bir tek oyunculu oyun yapmaya odaklanın
Maik Semder

2
"Sunucudaki istemci tarafından çalıştırılan fizik simülasyonunu güvenilir bir şekilde doğrulamak mümkün mü?" Evet, doğrulamak mümkündür, ancak aşağıdaki yorumlarınızı okuyunuz: En yüksek puanlara RL parası vermeyi planlıyorsanız ve bir dart oyununa benzer, yani ilk atış fiziği ele geçtikten sonra. Buradaki problem fiziği doğrulamak için daha az, bu kolay. Sorun, bir bilgisayar programının mükemmel puanlar vermek için atış yapmasına izin veren dolandırıcılara sahip olmanızdır.
Daniel Carlsson

Paylaşılan bir dünyada sunucu onaylı fizik tamamen mümkündür, DCUO buna iyi bir örnektir. Lütfen "server" ın "bir sürü sunucu kutusu" anlamına geldiğini ve "sever" ifadesinin bir yerde oturan tek bir kutu olduğunu yazdığınızı unutmayın. Şu anda aynı fiziksel alanda binlerce bağımsız aktörü simüle edemezsiniz, dolayısıyla onun hakkında tartışma eksikliği; Yapabileceğiniz şey binlerce oyuncuyu etkileşimde bulunmayan bağımsız simülasyon adalarına yaymak.
Patrick Hughes

Yanıtlar:


5

İstemci tarafında diğer kullanıcıların gönderimlerini doğrulayabilir ve bir gönderim geçersiz görünüyorsa istemcinin sunucuya rapor vermesini sağlayabilirsiniz.

Daha sonra harekete geçebilirsiniz (dolandırıcıyı yasaklayın veya yanlış raporu kimin yasakladığını). Bu gönderimin gerçekten geçersiz olup olmadığını kontrol etmek için özel bir müşteri veya herhangi bir şey kullanabilirsiniz.


3
Bu aslında oldukça akıllı! Bunu düşünmezdim, belli ki en az 2 veya 3 müşteri, simülasyonunu başka birini çalıştıran müşterinin simülasyonunu aldatması durumunda simülasyonu çalıştırmak zorunda kalacaktı - bu durumda, tüm müşteriler garip bir şey rapor ederse sunucu her zaman son simülasyonu yapabilir .
Lennard Fonteijn

1

Oyununuz tek oyunculu, diğer oyuncularla olan tek 'etkileşim' liderdir. Her gönderim için sunucunuzda bir simülasyonu kontrol etmek için bir örnek oluşturabilirsiniz, fiziğin 30'dan fazla istemciyle aynı olduğundan emin olmak için tüm numaralara ihtiyacınız yoktur, bu yüzden zaten sahip olduğunuzdan daha fazla kaynağa ihtiyacınız olduğunu düşünmüyorum fizik zaten çalışıyor :).

Her sonucun kontrol edilmesi biraz aşırıya kaçacak, birisi lider skoruna her puan gönderdiğinde simülasyonu sunucuya sıkıştırılmış olarak gönderebilir, sonra sadece kendi sunucunuzdaki en yüksek% 5 puanları kontrol edebilir, hatta belki de en üst% 1 veya hatta daha akıllı sadece yeni yüksek puanları kontrol edin ve herkesin # 1'den daha iyi olmadığını varsayalım ki muhtemelen aldatılmamış bir simülasyona sahiptir.

Simülasyonunuzun nasıl olduğunu, kurulduğunu ve etkileşimde bulunmadığını (kontrol etmesi kolay) veya oyuncuların sim çalışırken sim ile etkileşime girip giremeyeceğini bilmiyorum, ancak fiziklerinizi farklı yüzen bir şekilde yaptığınızdan emin olun. nokta gösterimleri işleri karıştırmaz ve geçerli bir çalışma görünümünü geçersiz kılar.


Oyunun kendisinin özelliklerine girmek istemiyorum, ancak oyunumu dart oyunuyla karşılaştırabilirsiniz: Fırlatmayı hedefledikten ve yaptıktan sonra fizik devraldı ve bu konuda değiştirebileceğiniz hiçbir şey yok artık. Bu bilgi cevabınızı değiştirir mi?
Lennard Fonteijn

Hayır, hiçbir şeyi değiştirmez :). Tekrarları sunucuda saklayın ve sadece şüpheli olanları kontrol edin (örn. Yeni yüksek skorlar)
Roy T.

1

Yapma, sadece sunucuda fizik simülasyonu çok kötü bir fikir olduğunu size temin ederim. Ana sorun sunucu yükü değil, yanıt verebilirliktir. İstemcideki yanıt hızı inanılmaz derecede zayıf olacaktır. Oyuncu bir düğmeye basacak, daha sonra simülasyon sonuçlarını almadan önce sunucuya bir gidiş-dönüş yapmanız gerekecek. Geçmişte bunun varyasyonlarını yaptım (çoğunlukla sadece düğmeye basmak) ve sonuçlar hoş değil ve sadece ondan kurtulma şansı olan çok yavaş oyunlar için (ve hatta bu durumlarda algılanan) yanıt vermemesi büyük bir sorundur).

Bu tür bir senaryonun bir dahaki sefere kendini sunmaya çalışacağım daha iyi bir şema, oyunculara oyuncu tabanınızın çok küçük bir alt kümesini seçmektir, o zaman onlar için sunucu tarafı için kısa bir süre taklit edersiniz ve sonuçlarınızı onlarınkiyle karşılaştırırsınız, onların bilgisi olmadan. Eğer çok fazla sapıyorlarsa (bazı derecelerde sapma beklemeniz gerekir), o zaman onları potansiyel dolandırıcı olarak sınıflandırırsınız ve onaylamak için bir süre daha simüle etmeye devam edersiniz. Elde edeceğiniz şey, yasal bir oyuncunun sunucuya kıyasla ne kadar farklı olduğu, ağ koşullarından vb. Etkilenen bir çeşit eğridir ve hilelerin bu eğrinin dışında olduğunu hemen göreceksiniz. Bu sistem aşağıdaki avantajlara sahiptir:

  • Otomatik
  • Duyarlılıktan fedakarlık etmiyorsun
  • Oyuncu tabanınızın çok küçük bir alt kümesini simüle ettiğinizde, yük yönetilebilir ve hatta ölçeklenebilir olacaktır (belki de yük yüksekse simüle etmek için daha az oyuncu seçersiniz)
  • Düşünebildiğim her oyuna uygulanabilir, çok yeniden kullanılabilir

Yani, Roy gibi, temelde şunu söylüyorsunuz: Müşteri tarafını saklayın, müşteriler bir puan gönderdiğinde "tekrarları" saklayın ve bu tekrarları sadece arada bir doğrulayın (hepsi değil, küçük bir yüzde). Müşterinin kredi ödemesinin yapıldığı puana göre - oyuncu ilerleme kısmı, krediler de gerçek parayla satın alınabilir (!!!) - bu yaklaşımı hala tavsiye ediyor musunuz? Hile aşırı miktarda kredi verirse ve ben arada bir doğrularsam, temelde para kaybederdim. Muhtemelen puanı belli bir eşiğin üstünde olduğunda bir kişiyi işaretleyebilirsiniz, ancak daha iyi bir yol olabilir mi?
Lennard Fonteijn

Fizik motoru belirleyiciyse (olması gerekir) ve sunucu, istemciyle aynı başlangıç ​​durumunu ve girişleri kullanarak benzetim yaparsa (bu mümkün olmalıdır), sonuçlar makul kayan nokta hata sınırları içinde (önemsiz) olmalıdır. Rastgele efektler olsa bile ve RNG durumunu geçmek mümkün olmasa da, rastgele sayıları geçebilir ve bunları kontrol etmek için kullanabilirsiniz (ve rastgele ruloları yumuşatmak büyük bir oyun farkı yaratıyorsa dağıtımlarını kontrol edebilirsiniz) .
ipeet

Hile kredileri artık yüksek puanlar listesinin zirvesine çıkmak için değil, para kazanmak için her tekrarı kontrol etmeniz daha iyi olur. Para varsa çok daha fazla güvenlik istersiniz, orada size yardım edemem.
Roy T.

@RoyT. Muhtemelen bunu, kredi dayalı para ödemesem bile, yine de yapacağım (sanırım biri yanlış anladı mı?). Ben sıfır tolerans politikası var niyetinde, bu yüzden sadece doğrulama için tekrar dosya toplu. Gerçekten şüpheli ise, harekete geçiyorum.
Lennard Fonteijn

1

Daniel'in belirttiği gibi, buradaki büyük sorun oyuncu için eylemi gerçekleştirecek programlar olacak; eğer oyuncu normalde nöroşirürji için hassas bir şekilde çözülmüş robotik bir kol olsaydı oyun içi fizik çarpmalarına gerek kalmazdı.


Biraz belirsiz olabilirdim. Bir oyunu tamamladıktan sonra oyunlarım size sanal kredi verecek. Oynatılacak yeni içeriğin kilidini açmak için bu kredileri kullanabilirsiniz. İçeriğin daha hızlı kilidini açmak için kredi satın almak için gerçek parayı da kullanabilirsiniz (Pay2Win olmadığını unutmayın, bundan nefret ediyorum). Krediye dayalı gerçek para ödemeye niyetim yok. Bununla birlikte, dart sadece bir oyuncunun katı cisimlerin durumu üzerinde ne kadar etkisi olduğunu açıklayan bir metafordu, size 0 avantaj sağlayacak olan "aimbot" lardan korkmuyorum.
Lennard Fonteijn
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.