Saya sedang mengembangkan permainan kartu sederhana, di mana akan ada sistem perjodohan yang akan menempatkan Anda melawan pemain manusia lainnya. Ini akan menjadi satu-satunya mode permainan yang tersedia, 1vs1 melawan manusia lain, tidak ada AI.
Saya ingin mencegah kecurangan sebanyak mungkin. Saya sudah membaca banyak pertanyaan serupa di sini dan saya sudah tahu bahwa saya tidak dapat mempercayai klien dan saya harus membuat semua verifikasi sisi server. Saya berniat untuk memiliki server (tetap memerlukan satu untuk perjodohan) dan saya berniat untuk membuat beberapa sisi server verifikasi tetapi jika saya ingin memeriksa semua sisi server ini membuat server saya dapat melacak keadaan semua game saat ini dan periksa setiap tindakan, dan saya tidak punya uang / infrastruktur untuk mendukung server itu.
Ide saya adalah membuat klien memeriksa dan memverifikasi beberapa tindakan yang dilakukan oleh lawan mereka * dan jika mereka menemukan beberapa tindakan ilegal memberitahukan kemungkinan kecurangan ke server dan membuat server memverifikasinya. Ini masih akan meminta server saya untuk melacak semua game saat ini, tetapi itu akan menghemat sumber daya hanya memeriksa beberapa hal yang tidak dapat diperiksa di sisi klien (seperti pesanan kartu di geladak) dan hanya memeriksa hal-hal lain ketika mereka sebenarnya salah.
* (hanya mereka yang dapat mereka periksa tanpa membiarkan diri mereka selingkuh! misalnya: mereka tidak dapat memeriksa apakah kartu yang dimainkan ada di tangan karena mereka perlu mengetahui semua kartu yang ada di tangan)
Kesimpulannya, pertanyaan saya adalah : apakah ini pendekatan yang layak? Apakah saya benar-benar menghemat sumber daya melakukan ini atau kompleksitas tambahan di server dan klien untuk bertukar pesan ini tidak layak? apakah Anda tahu ada game yang berhasil atau tidak berhasil mencoba pendekatan serupa?
Terima kasih semua sudah membaca dan menjawab
sumber
Jawaban:
Bergantung pada kerumitan gim Anda, memverifikasi apakah suatu tindakan legal atau tidak mungkin perlu mundur sebagian besar gim. Contoh: Pemain A mengatakan bahwa Pemain B tidak dapat memainkan kartu itu sekarang karena ia tidak memiliki ResourceX. PlayerB mengatakan dia punya banyak ResourceX. Siapa yang benar? Untuk mengetahuinya, Anda akan mensimulasikan seluruh permainan lagi dari awal hingga akhir untuk menghitung ResourceX yang dimiliki PlayerB sekarang. Jadi hanya memverifikasi tindakan para pemain ketika seseorang berteriak "busuk" mungkin sebenarnya bukan optimasi.
Tetapi apakah upaya itu benar-benar sepadan?
Saya pikir Anda mungkin memiliki kasus optimasi prematur di sini. Meskipun saya tidak tahu persis apa yang Anda lakukan, permainan kartu biasanya tidak mahal secara komputasi di sisi server.
Permainan kartu biasanya dirancang untuk dimainkan tanpa dukungan komputer, sehingga mekanisme permainan mereka biasanya cukup sederhana untuk dilakukan oleh manusia *. Juga, pemain manusia biasanya mengambil beberapa detik untuk bergerak, yang terasa seperti keabadian untuk server. Itu berarti server Anda hanya memiliki tugas yang ringan untuk dilakukan setiap beberapa detik per game. Saya tidak tahu berapa banyak pemain simultan yang Anda harapkan, tetapi selama Anda masih dalam skala proyek hobi non-komersial, saya ragu bahwa bahkan server termurah yang dapat Anda temukan tidak akan mampu mengatasinya. Tentu saja, Anda tahu cara memprogram dengan efisien.
*) selama Anda mengecualikan pemain dari pengambilan keputusan. Sebagian besar gim dibangun berdasarkan premis bahwa strategi menang yang ideal secara teoritis dapat dihitung, tetapi melakukannya sangat kompleks sehingga para pemain dan seringkali bahkan komputer tidak dapat melakukannya, sehingga mereka perlu menggunakan intuisi. Tapi Anda bilang Anda tidak ingin AI dan hanya ingin pemain-vs-pemain, jadi ini di luar ruang lingkup pertanyaan ini. Tapi itu juga membuat orang berpikir tentang aspek kecurangan lainnya: Apakah Anda mempertimbangkan seorang pemain menggunakan program untuk membantu mereka dalam pengambilan keputusan? Seperti yang memberi tahu mereka kemungkinan yang tepat bahwa lawan memiliki kartu tertentu di tangan?
sumber
"Aku ingin mencegah selingkuh sebanyak mungkin." - Jadi katakan kita semua. :)
Mungkin pendekatan yang lebih masuk akal adalah tidak membuang-buang waktu untuk melakukan sesuatu di atas dan di luar langkah-langkah anti-kecurangan yang masuk akal dan umumnya efektif.
Yaitu: menguji ganda bug yang memungkinkan pemain melakukan tindakan ilegal, dan hanya mengirim data terenkripsi (melalui https atau enkripsi khusus), dan mengenkripsi aplikasi itu sendiri untuk membuat peretasan lebih sulit. Itu dia.
Pemain kemungkinan besar akan melakukan cheat melalui bug di game daripada yang lainnya.
Anda mungkin lebih baik, lebih bijaksana dalam pengembangan, untuk menunggu apakah pemain Anda benar-benar cukup peduli untuk menipu. Jika aplikasi tidak berada dalam "grafik 500 teratas" figuratif dan menipu tidak sesederhana itu (yaitu bug) pemain tidak akan cukup peduli untuk membuang waktu mereka mencoba menipu melalui tindakan lain, seperti memodifikasi aliran IP atau meretas aplikasi.
Kecuali tentu saja Anda berurusan dengan uang nyata dan hadiah aktual di sini.
Jika aplikasi Anda berhasil dan menipu tidak menjadi masalah, saat itulah Anda harus mengatasinya. Tetapi pada titik ini akan menjadi permainan kucing & tikus, dan penipu akan selalu menang.
Pada dasarnya yang saya katakan adalah bahwa 100% dari pemain Anda tidak akan menyontek jika itu tidak mungkin melalui bug yang dapat direproduksi dan / atau aplikasi Anda tidak terlalu populer. Jika aplikasi Anda menjadi sangat populer, kurang dari 1% pemain Anda akan menipu dengan cara yang bahkan tidak dapat Anda bayangkan.
Jadi sejauh kecurangan terjadi, Anda harus melindungi diri Anda dari penipuan yang jelas (bug, mengenkripsi aplikasi dan aliran IP) dan hanya bereaksi terhadap cheat yang sebenarnya Anda pelajari, dan mengatasinya secara langsung. Yang benar-benar Anda inginkan adalah mencatat semua tindakan pemain, minta mereka memverifikasi di server dan jika Anda menemukan tindakan ilegal yang agak sering terjadi, cari tahu sebabnya. Bisa jadi bug, bisa jadi exploit, bisa berupa hack teknis.
Ukuran anti-kecurangan yang paling penting adalah mengetahui bahwa pemain benar-benar melakukan cheat, dan bagaimana caranya.
sumber
Saya pikir Anda mengalami beberapa masalah lain di sini. Bagaimana jika pemain berpura-pura menjadi klien normal (dengan mensimulasikan lalu lintas jaringan Anda) dan menggunakan untuk merusak permainan Anda dengan validiasi yang salah?
Alih-alih mencoba membangun sistem bullet proof client, yang akan mengarahkan Anda ke perbaikan / pelarangan bug / exploit yang berkelanjutan, saya akan mencoba menyederhanakan sistem server. Saya tidak cukup tahu tentang mekanik gim Anda, tetapi mungkin Anda dapat merebus informasi di server hingga minimum.
Secara umum Anda harus mengasumsikan bahwa klien yang Anda ajak bicara dapat menyebarkan kode dan mekanisme permainan apa pun yang rasanya ingin digunakan. Dan ini membuat validasi sisi klien hampir tidak mungkin
sumber
Ini sedikit tergantung pada apa yang Anda anggap curang. Apakah menggunakan alat untuk membuat / menghitung gerakan? Apakah itu untuk mengubah setumpuk kartu selama bermain? Hal pertama akan sulit diatasi. Untuk yang kedua Anda dapat berpikir tentang meminta setiap pengguna memasukkan kartu itu dan membuat kode hash yang ditampilkan di kedua sisi. Pada akhirnya server dapat menghitung hash dengan kartu yang dimainkan dan kartu tersisa. Jika hash tidak cocok maka pengguna telah menipu. Jika aturan tidak diikuti maka Anda dapat memeriksa ini di server Anda juga. Anda dapat melakukan ini atas permintaan pengguna untuk menghemat sumber daya. Tidak ada informasi tentang kartu yang tersedia. Untuk membuat generasi hash sedikit lebih unik / kompleks, Anda dapat memasukkan nama pengguna dalam hash.
sumber