Haruskah deteksi tabrakan dilakukan di sisi server atau secara kooperatif antara klien / server?


24

Saya sedang mengerjakan game online yang akan memiliki proses deteksi tabrakan yang sangat berat. Model pemain akan bertabrakan dengan pemain lain, massa, struktur, medan, dan benda padat yang hanya ada di sisi server (tidak disimpan dalam file data klien).

Untuk tujuan keamanan, haruskah saya melakukan semua sisi server deteksi tabrakan? Atau haruskah saya meminta klien melakukan deteksi dan meminta server untuk menindaklanjutinya? Saya merasa seperti itu akan terlalu banyak untuk dilakukan sendiri oleh server (Saya merancang mesin untuk ratusan pemain pada satu server).

Adakah yang tahu bagaimana mainstream MMO melakukannya? Saya tahu bahwa hampir semua MMO saat ini rentan terhadap peretasan fisika dan biasanya menanganinya dengan mendeteksi peretasan dan melarang orang. Saya lebih suka retas tidak bekerja sama sekali, setidaknya untuk komponen fisika.

Jawaban:


21

Sepertinya jawaban yang jelas adalah melakukan sebagian besar deteksi sisi klien Anda (untuk kelancaran), dan kemudian Anda melakukan interpolasi dengan apa yang dikatakan server jika klien Anda terlalu jauh. Server akan mencentang pada frekuensi yang lebih jarang daripada klien (seperti, katakanlah, 10 hz), dan mungkin perlu memiliki beberapa dasar "dapatkah pemain ini mencapai di mana dia mengatakan dia saat ini dari kode lokasi terakhir yang diketahui", yang menyiratkan beberapa jenis solusi nav mesh-type dan pathfinding.

Itu mungkin sangat lambat tergantung pada apa kebutuhan Anda. Anda mungkin membuat keputusan desain, misalnya, untuk tidak peduli tentang tabrakan pemain-pemain di server. Sebagian besar game, sejauh yang saya tahu, bahkan tidak peduli tentang hal itu pada klien. Itu benar-benar tergantung pada apa kebutuhan Anda.

Tetapi aturan praktisnya adalah bahwa Anda tidak boleh mempercayai klien. Jika berdampak pada gameplay, Anda setidaknya harus memverifikasinya di server.


24

Jadi, beberapa jawaban di sini.

  • Tabrakan sisi klien sangat ideal dari sudut pandang kinerja dan dari sudut pandang pemain. Anda tidak ingin tabrakan menjadi lamban, Anda ingin pemain berlari ke objek yang solid dan berhenti. Jika Anda melakukannya di sisi server, Anda akan melihat para pemain rubberbanding di semua tempat atau memberikan lag yang mencolok kepada para pemain saat mereka mencoba bergerak. Mojo buruk, dalam kedua kasus.

  • Tabrakan sisi server sangat ideal dari sudut pandang keamanan. Semakin dekat klien Anda dengan "terminal bisu", permainan Anda semakin tidak dapat dieksploitasi. Ada alasan mengapa tidak seorang pun yang memainkan MUD berbasis teks harus khawatir tentang wallhack atau speedhacks - itu karena klien tidak melakukan apa pun yang layak disebut.

  • Melakukan keduanya adalah "ideal" di hampir setiap kasus. Biarkan klien melakukan hal mereka, lalu klik dua kali di server untuk memastikan orang tidak curang. Kerugian adalah kompleksitas, sinkronisasi (apa sebenarnya lakukan Anda jika dua tidak setuju), dan semata-mata penggunaan CPU server.

  • Apa yang saya rekomendasikan adalah melakukannya hampir seluruhnya dari sisi klien. Klien berwibawa tentang posisinya, seperti dalam sistem sisi-klien penuh, dan melakukan semua pemrosesan sendiri. Selain itu, Anda secara acak meminta server memeriksa berbagai pemain sesekali. Jaga agar server memuat rendah, tetapi ini akan mengejutkan root curang cepat.

Atau, lakukan sisi klien untuk saat ini, tambahkan verifikasi sisi server di beberapa titik di masa depan jika permainan Anda menjadi cukup populer sehingga orang-orang curang di dalamnya. Yang, jujur ​​saja, mungkin tidak, jadi tidak ada gunanya menghabiskan waktu coder di sana.


3

World of Warcraft tidak melakukan deteksi tabrakan antara pemain / massa. Mungkin ada atau tidak ada alasan teknis di balik keputusan ini, tetapi sungguh, ini harus lebih dari keputusan desain game daripada keputusan teknis:

Bayangkan bagaimana bisa dieksploitasi dalam situasi pemain-vs-pemain. Atau betapa sulitnya menggunakan bank / rumah lelang / kotak surat jika pemain lain (sering menganggur) memblokir gerakan Anda!

Adapun deteksi tabrakan berbasis klien vs server - sungguh, kecuali gerakan sangat lambat, itu harus terutama sisi klien, sehingga terlihat benar untuk setiap klien. Respons tabrakan yang lamban / tertunda, dan / atau bertabrakan dengan benda 'tak terlihat' akan sangat tidak menyenangkan.


1
Meskipun pertanyaannya bukan tentang apakah pemain vs tabrakan / pemain tabrakan adalah desain game yang buruk, saya sarankan melihat game-game seperti Darkfall Online di mana semuanya solid. Ini menambah dimensi baru pada gameplay dan memungkinkan Anda untuk melakukan hal-hal yang sangat menarik dengan game. Saya tidak akan khawatir tentang pemain yang memblokir hal-hal seperti bank dalam permainan saya karena akan selalu ada celah kecil di mana pemain dapat melihat melalui untuk membuka objek.
BarakatX2

Anda bisa membuat pemain diblokir oleh apa pun yang bisa diserang dan apa pun yang mereka tidak bisa serang, mereka bisa langsung lewati. Sebagai contoh, pemain tidak akan bisa berjalan melalui massa karena mereka dapat menyerang massa. Mereka juga tidak akan bisa berjalan melalui pemain sementara mereka ditandai untuk PVT karena mereka ditandai PVP. Seorang pemain yang tidak ditandai PVP dapat berjalan melalui pemain mana pun, bahkan mereka yang tidak ditandai PVP, karena mereka tidak dapat menyerang para pemain tersebut.
Azaral

2

Jika Anda khawatir tentang peretasan dan itu memiliki dampak besar dalam permainan, maka jawabannya adalah YA.

Dalam permainan berbasis browser saya yang merupakan jenis permainan "membangun kota", saya tidak peduli tentang peretasan karena mesin klien tidak akan gagal ketika saya tata letak keadaan gim yang disimpan.

Namun itu bisa berpotensi menyalahgunakan gameplay karena pemain perlu menghabiskan koin game (atau uang tunai premium) untuk memperluas area yang dapat dimainkan untuk membangun lebih banyak rumah / bangunan. Jadi, saya akan menerapkan pemeriksaan sederhana jumlah ubin yang ditempati oleh gedung yang baru ditambahkan, berapa banyak ubin gratis yang tersedia.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.