Bir oyuncu görünmez olduğunda hareketi nasıl doğru tahmin edebilirim?


20

Çok oyunculu bir oyunum var ve müşteri tarafı tahmini yapıyorum, ancak bazı oyuncular iksir içip görünmez olabilir ...

Sorun şu ki, görünmez olduklarında, müşterinin orada olduğunu bilmek için kullanabileceği hiçbir şeyi paylaşmıyorum, bu yüzden bir oyuncu görünmez bir oyuncu tarafından işgal edilen bir karoya adım atmaya çalıştığında başarılı olduğunu tahmin ediyor ve sonra sunucu tarafından gönderilen çirkin konum düzeltmesi.

Bir çözüm, müşterinin anlayabilmesi için bir şey paylaşmak olacaktır, ancak daha sonra bilgisayar korsanları bunu görünmez oyuncuların nerede olduğunu bulmak için kullanabilir, hile.

Btw zaten düzenli hareket tahminini çözdüm, mükemmel çalışıyor.


4
Sadece tüm oyuncular hakkında bilgi gönderin. Hile yapanlar hile yapacak. Dürüst oyuncuların deneyimini sakatlamayın ve bunun yerine hileler için işaretleme sistemi oluşturmayı düşünmeyin.
user1306322

2
@ user1306322 Dolandırıcıları daha kolay hale getirerek dürüst oyuncuları da sakat edeceksiniz. Bir işaretleme sistemi iyi bir fikirdir, ancak görünmezlik oyunun büyük bir parçasıysa, önleyici bir şey gerekli olabilir.
ThatOneGuy

@ user1895420 Bu tür şeyleri düz metin olarak göndermemek genellikle yeterince iyidir, böylece ortalama bir oyuncu bu verileri kolayca elde edemez. Sadece teknoloji meraklısı bir kişi bunu yapabilirse, o kadar iyi bir önleyici tedbirdir.
user1306322

1
Ya da belki de görünmezlik mekaniğini biraz değiştirmek daha iyi bir fikirdir, bu yüzden çok yakın bir şekilde çalışmaz, bu yüzden oyunun verilerini kullanarak hile yapanlar bile gerçekten herhangi bir avantaj elde edemezler.
user1306322

Sadece görünmez bir oyuncunun pozisyonunu (görünür bir oyuncu yakınındayken görünmez tutmak için bir bayrakla) göndermeye ne dersiniz? Bu, aşırı hareket sorununu önlemek için size birkaç kare vermeli, ancak dolandırıcılara tepki vermek için yeterli zaman vermemelidir. İki görünmez oyuncu için, çarpışmayı görmezden gelirdim. Tüm oyuncunun pozisyonlarını içeren merkezi bir sunucunuz varsa, pozisyonu ne zaman yayınlayıp ne zaman yayınlayamayacağını da koordine edebilirsiniz.
jdm

Yanıtlar:


30

Bu bir animasyon problemi olarak düşünülebilir. Görünmez bir nesneye geçme girişimi nedeniyle bir konum düzeltmesi sunucudan geri gelirse, yalnızca düzeltmeyi değil düzeltmenin neden gerekli olduğunu belirten bir bayrak gönderin. Geriye doğru fırlayan bir oyuncu yerine, "woah" türünde geriye dönük bir animasyon yapabilir, bu daha inandırıcı bir şekilde yeni bir şeye koşmuş gibi görünmesini sağlayabilir.

Bu yaklaşımı kullanan oyunlarda, görünmezliği (en azından anlık olarak) karşılaşılan herhangi bir şeyden kaldırmak nadir değildir. Diğer şeylerin yanı sıra, görünmez oyuncuların kalabalıktan kaçınmaları veya diğer karakterlere çok yaklaşmaları için teşvik edilir, böylece görünmez bir oyuncu ile çarpışma ilk etapta gerçekleşir. Bu nedenle, bu tür bir çarpışma için animasyonunuz zayıf olsa bile (ya da var olmasa da) görünmez karakterin görünebilirliğe girmesi ve yeni olanları herkese açıkça telgraf etmesi biraz gizli.

Görünmezliğin yakın mesafeden çalışmasına izin verilmeyerek animasyon ihtiyacı giderilebilir. Bu, görünmez oyunculara diğer karakterlere yaklaşmamak için daha fazla teşvik verir. Bu, gizli tabanlı oyunlar ve yapay zeka için yaygın bir yaklaşımdır ("görünmez" kelimesini "hedeflenemez" ile değiştirin) ve World of Tanks gibi PvP oyunlarında görülebilir. Görünmez hiçbir şey çarpışmaya yetecek kadar yakın değilse (görünmezlik sınırları dahilinde) görünmez karakterlerle çarpışma tepkisi hakkında endişelenmenize gerek yoktur.

Dracor'un görünmez nesnelerle çarpışmaları görmezden gelmenin çözümü de iyi bir çözümdür. Bu yine bazı animasyonlar (görünmez oyuncuların istemcisi için) gerektirir, böylece nesneler sadece oyuncunun ekranındaki avatarını kırpmaz. Başka bir şey yoksa, görünmeyen nesnelerin her zaman görünmez olanları itmesine neden olabilirsiniz, böylece görünmeyen oynatıcı otomatik olarak sunucuda onunla çarpışırsa yoldan çıkar.

Görünmez-görünmez çarpışmalar biraz daha karmaşıktır. Onlarda çarpışmaları devre dışı bırakmak avantajlı olabilir, çünkü kimse görünmez iki nesnenin birlikte kırpılıp kırpılmadığını göremez ("görünmez" ile varsayarsak, her iki nesnenin de aynı istemci tarafından görülmediğini varsayarız). Nesnelerden biri görünür hale gelirse, görünmez görünmez çarpışma yanıtına geri döner (görünmez nesneyi dışarı itin).

Görünmezliğin kimin görebileceğinin karmaşık kümeleri varsa, bu daha da zorlaşır. İhtiyacınız varsa yukarıdaki birinci veya ikinci çözüm muhtemelen en iyisidir. Bunun gibi her sorunun teknik bir çözüme ihtiyacı yoktur; birçoğunun sadece tasarım çözümlerine ihtiyacı vardır (örneğin, bu özelliğin tasarımcılarınıza izin vermemesi).


5
Team Fortress 2 oyunu bu ilk yaklaşımı kullanıyor ... Görünmez bir casus başka bir oyuncuya dokunursa, diğer oyuncu casusu görebilir (ya da arkadan en azından biraz engel hissedebilir).
Xantix

4

Eğer müşteriye görünmez oyuncunun nerede olduğunu söylemek istemiyorsanız, burada sadece iki seçenek görüyorum: 1) Görünmez oyuncular için birim çarpışmasını görmezden geliyorsunuz - basit bir çözüm ve oyuncular tarafından görünmez oyuncuları bulamazlar çarpışma testleri de. 2) Tahmini yola karar verdikten sonra, sunucuya tahmini yolu gönderir ve yolun kendisini sunucu tarafında düzeltirsiniz, ardından yeni yolu geri gönderirsiniz.


görünmez oyuncular için çarpışmayı görmezden gelmenin problemi, görünmez bir oyuncunun başka biriyle çarpışırken görünmez olmayı bırakmasıdır. Ayrıca, doğru gelmiyor.
Oyunumda gerçekten yolum

Sonra geriye kalan, tahmini hareketi (tek bir vektör veya bir vektör dizisi) göndermek ve bir sunucu tarafı kontrolü yapmaktır. Ya da sadece aşağıda belirtildiği gibi düzeltmeyi canlandırın.
Daniel Rusznyak

1
Izgara tabanlı bir haritanız varsa ve her kareyi tek tek kontrol ediyorsanız, sunucu tarafındaki görünmez karakterlerin konumunu SHA-1 veya SHA-2 gibi tek yönlü bir kodlamayla kodlamayı da deneyebilirsiniz. , kontrol edilen koordinatları aynı algoritma ile kodlayarak kendi yolunuzu kontrol edin. Performans açısından etkili olduğunu söyleyemem, ancak gerçekten müşteri tarafında yapmak istiyorsanız, bu çözüm sınırlı sayıda konumla da işe yarayabilir ve kodlamak için çok fazla ızgara noktası nedeniyle saldırı gerçekten zahmetli olabilir ve bellekteki verilerle eşleştirin.
Daniel Rusznyak

Çalıştığını görebiliyorum. En küçük haritamın 1500 farklı konumu var. Saldırganın tüm konumları önceden hesaplamasını önlemek için HMAC'yi birkaç saniyede bir anahtarla değiştirmeli miyim?
affiszervmention

5
Hayır, karşılaşabileceğiniz herhangi bir program bilgisayar korsanlarına karşı "güvenli" olmaz. Eğer müşteri oyuncunun belirli bir pozisyonla çarpışıp çarpışmayacağını belirleyebilirse, birisi oyununuzu hackleyebilir. Döner anahtarlı HMACing, istemcinin saniyede 1500 HMAC yapmasını engellemez. Do not Kriptografi kendin yap çalışırlar. Orijinal hedefe ulaşmak istiyorsanız, görünmez oyuncu pozisyonunu sadece oyuncunun 1 veya 2 kutucuğundaysa müşteriye gönderin. O zaman sadece birisinin hemen yanınızda olup olmadığını bilmek için hackleyebilirsiniz (bu yararlı değildir çünkü bunu kontrol etmek için hareket edebilirsiniz).

2

Bir şeyi yanlış anlamadığım sürece çözüm basittir. Tüm görünmez oyunculara müşteri bilgilerini göndermeyin, sadece öngörülen aralıkta hareket sınırları içinde çarpışmaya maruz kalabilecekleri menzil içinde olanlar. Başka bir deyişle, müşteri geleceğe sadece 200 ms tahmin etmek zorundaysa, sadece max_player_velocity units/sec * 1/5 secbirimlerdeki görünmez oyuncular hakkında bilgi gönderin .


Sanırım bu işe yarayabilir, ama oyunum kiremit tabanlı (söylemeyi unuttum).
affiszervmention

Bu yüzden sadece bitişik fayanslarda veya 2 adım ötede ya da her neyse görünmez oyuncuları ortaya çıkarın.
R ..

o zaman çarpışacaklarından emin değiller ve görünmez oyuncular keşfedilmemek için
hacklenen
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.