Kami mengalami masalah ini dengan beberapa CCG online yang saya kerjakan. Solusi terbaik yang pernah saya lihat:
1) Pemain HARUS terhubung ke server, tidak untuk satu sama lain secara langsung, dan Anda TIDAK PERNAH harus menyampaikan alamat IP lawan di data yang Anda streaming ke pemain. Ini mencegah serangan denial-of-service di mana pemain memaksa lawan mereka offline untuk menang.
2) Koneksi terputus = Anda kalah, lawan menang. Kita harus berasumsi bahwa jika Anda menjatuhkan, itu adalah penurunan untuk menghindari kerugian tertentu.
3) Putus mencoba untuk menyambung kembali untuk jangka waktu tertentu, sehingga sedikit cegukan bersih tidak memaksa Anda untuk kehilangan bukan karena kesalahan Anda sendiri. Idealnya, waktu yang cukup lama untuk memungkinkan seseorang untuk menyambung kembali jika mereka secara tidak sengaja menendang kabel, tetapi cukup singkat sehingga lawan tidak frustrasi dan tertidur sambil menunggu. Saya pikir kami menemukan sekitar 45 hingga 60 detik terasa benar.
4) Mengizinkan pemain untuk melaporkan lawan mereka. Ini adalah langkah penting untuk mencegah siapa pun menemukan cara menjengkelkan di sekitar kebijakan Anda. Seperti, mungkin menjadi sangat kasar secara verbal sehingga lawan turun hanya untuk keluar dari sana, atau terus-menerus memutuskan dan menghubungkan kembali untuk meregangkan panjang permainan, atau menghalangi tembok untuk menghindari kerugian, atau apa pun. Anda tidak bisa menghentikan SEMUA perilaku buruk, tetapi Anda bisa memasukkan mekanisme dalam game untuk melaporkannya, dan kemudian membiarkan departemen dukungan pelanggan Anda menangani sisanya.
Saya harus mengatasi masalah ini sekali dalam permainan balap online di mana pemain yang kalah sering mematikan konsol mereka untuk menghindari kerugian yang muncul pada catatan mereka. Namun itu berlaku sangat baik untuk situasi PvP apa pun.
Solusi saya berjalan seperti ini:
Di awal pertandingan, setelah semua pemain bergabung dan bermain akan dimulai, hitung apa hasilnya jika pemain kita kalah dalam pertandingan. Dalam permainan balap kami, 'hilang' berarti 'datang di tempat terakhir' dan hasil yang biasa adalah 'minus N poin dari peringkat pemain'.
Simpan hasilnya ke lokasi yang aman (Savegame, leaderboard, area data online, dll).
Bersamaan dengan hasilnya, simpan bendera 'GameStarted'. Ini hanya menandakan bahwa permainan telah dimulai. Kami akan membutuhkannya nanti.
Saat permainan selesai, hitung hasil aktual dan terapkan pada skor / statistik pemain. Batalkan flag 'GameStarted'. Ini adalah proses penyelesaian game yang normal.
Namun, jika pemain memutus, menarik kabelnya atau mati, akhirnya mereka akan kembali ke menu permainan. Dalam kode menu, kami melakukan pemeriksaan untuk bendera 'GameStarted'. Jika diatur, kami yakin bahwa kami telah mendeteksi pemutusan dalam game dari sebelumnya. Kami kemudian dapat menerapkan hasil yang disimpan ke skor / statistik pemain. Itu akan sama seperti jika pemain kalah. Ini juga merupakan ide yang baik untuk memasang peringatan memberitahukan pemain tentang apa yang terjadi. Kemudian, begitu dia melihat bahwa ada konsekuensi untuk memutuskan sambungan tengah pertandingan, Anda akan melihat bahwa perilaku mulai berubah.
sumber
Saya pikir satu-satunya cara untuk melakukan ini adalah masalah struktur permainan Anda. Ada dua cara untuk membuat kecurangan menjadi kurang diinginkan: hukuman atau hadiah. Jadi jika Anda tidak ingin hukuman yang merugikan pikirkan cara untuk memberi penghargaan kepada pemain yang tidak jatuh.
Alih-alih hadiah dari PvP menjadi jarahan dari tubuh yang ditaklukkan (yang membuat menjatuhkan hal yang sangat buruk) membuat menang memberikan beberapa hadiah seperti exp., Emas, atau yang lainnya sama sekali (Poin? Peringkat?). Jika salah satu pemain ditendang maka pemain yang tersisa menerima hadiah dan pemain yang ditendang tidak mendapatkan apa-apa selain tidak kehilangan apa pun. Kecuali itu adalah sistem peringkat dalam hal pemain meninggalkan mungkin kehilangan beberapa poin peringkat.
sumber
Lineage II melakukannya seperti ini:
Secara pribadi, saya akan melakukannya dengan cara yang sama, hanya memungkinkan para pemain untuk menentukan terlebih dahulu tindakan yang diambil oleh karakter mereka (tinggal dan bertempur, lari ke zona aman terdekat menghindari aggro, gunakan gulir pelarian reguler, gunakan gulir diberkati dari melarikan diri, ...) dan biarkan karakter tetap ada di dunia game bahkan jika pemain tidak login.
sumber
Orang yang terputus akan mati begitu dia ditikam cukup, dan yang lain akan dikreditkan untuk pembunuhan itu. Apa pun yang lebih lunak akan dieksploitasi.
Umumnya ada timer 1 hingga 5 menit sebelum tubuh Anda meninggalkan dunia.
sumber
Tidak ada cara untuk menentukan apa yang menyebabkan pemutusan (apakah daya padam? Apakah saya marah melemparkan mesin ke dinding?), Jadi Anda hanya dapat berasumsi bahwa pengguna mencoba (atau akan mencoba) untuk menipu dan membuatnya rentan selama X menit.
sumber
Cara ini ditangani oleh EVE Online adalah sebagai berikut:
Kapal mulai menggunakan warp 15 detik setelah terputus. Jika lungsin diaduk maka kapal tidak akan melengkung. (Kapal karakter Anda akan mulai "lari" setelah 15 detik, kecuali jika "terperangkap" oleh pemain lain)
Pengatur waktu PVT (waktu hingga pemain "kabur" saat terlibat dalam pertarungan PvP) diatur ke 3 menit. (Ini untuk melawan sejumlah timer lainnya).
Pengatur waktu NPC tetap pada 1 menit, tetapi pengiriman lenyap setelah 15 detik kecuali jika warp diacak oleh NPC.
Ketika sebuah kapal target dikunci oleh pemain, ia harus beralih ke timer pvp (untuk mengatasinya menggunakan timer 1 menit jika itu terputus dalam keadaan di mana ia tidak dapat ditargetkan sampai timer diatur).
sumber
Jika Anda memiliki cara memodelkan pola pemain yang biasa dalam pertempuran, Anda bisa mengirim mereka ke mode AI sampai mereka terhubung kembali atau pertempuran berakhir mana yang lebih dulu. Tapi jangan berikan mereka hadiah (exp, item, dll.) Untuk pertempuran kecuali jika mereka kembali dalam jumlah waktu X.
sumber
Saya akan menerapkan semacam histeresis. Anda bisa menggunakan wortel dan tongkat. Tetapi memilih yang akan digunakan dapat didasarkan pada rekam jejak (Anda juga bisa melakukan analisis koneksi dan "kemampuan menang" saat ini dan menggunakannya.). Semoga Anda melakukannya sendiri. Model sederhana:
Anda bisa menyalahgunakannya ya. Tetapi melakukan hal itu mungkin membutuhkan lebih banyak upaya daripada sekadar menggigit peluru. (Jika butuh 2 DC menjadi buruk misalnya Anda secara teknis bisa menghilangkan setengah dari kerugian Anda. Tapi itu mengurangi beberapa penyalahgunaan dan dalam kasus pemain kurang pintar semua penyalahgunaan).
Memang menggunakan ini berarti scoreboards tidak akan berjumlah 100%. Karena Anda bisa DC sambil baik dan tidak mencatat kerugian. Tapi pemain bagus lainnya bisa mencatat kemenangan. Juga tidak menjumlahkan 100% berarti 2 pemain dapat bekerja sama mematikan pemain DC untuk menumpuk kemenangan.
Jadi bukan sangat mudah, tetapi menambahkan analisis Bayesian tentang koneksi gamestate + mungkin bisa mendeteksi keasyikan dan membuat skema ini antipeluru. (Anda dapat mengalahkan analisis Bayesian tetapi manusia tidak pandai melakukan hal ini dan matematika tidak terjangkau bagi kebanyakan orang, belum lagi investasi waktu untuk "memulai" perjuangan untuk melewati DC yang baik-baik saja).
sumber