Saya kadang-kadang mengerjakan ide permainan di waktu luang saya. Gameplay dan konten membuatnya untuk diimplementasikan sebagai game multiplayer online yang dibangun dengan teknologi web yang mapan. Anda harus tahu bahwa itu termasuk dalam genre strategi dan simulasi. Itu berarti: Tidak berkeliaran dengan karakter atau serupa tetapi hanya tindakan atom (mengenai komunikasi client-server) seperti "build thing A on location X".
Pada satu titik saya menyadari ada masalah besar: memiliki front end berbasis browser mengandalkan REST API back end membuatnya lebih dari target yang sangat baik untuk bot. Sementara otomatisasi diinginkan untuk bisnis, itu adalah racun bagi permainan yang menyenangkan. Saya mengalaminya secara langsung dalam permainan browser di masa lalu adalah pemain paling sukses adalah bot yang menaklukkan semua orang.
Dari sudut pandang saya saat ini, saya tidak melihat kemungkinan untuk melindungi terhadap bot ketika membangun game online multi-pemain berdasarkan REST API. Pengecualian: Menjadikannya sumber terbuka sehingga semua orang dapat meng-host instansnya sendiri untuk grup privat atau bahkan hanya diri sendiri (agar tidak terganggu oleh sentakan dengan bot).
Apakah ada cara untuk membedakan antara pemain yang jujur yang baru saja mengatur alarm untuk tindakan selanjutnya yang mungkin dan bot secara otomatis mengambil setiap kesempatan pada penampilannya? Selain itu pertunjukan seperti sumbat seperti captcha. Jika tidak, saya akan berpikir tentang tumpukan teknologi lain yang membuatnya setidaknya jauh lebih sulit untuk mengacaukan komunikasi client-server (protokol biner terenkripsi eksklusif dalam klien kode asli).
Sunting : Terima kasih, jawaban Anda menginspirasi tetapi juga membuat saya menyadari bahwa tindakan penanggulangan khusus tidak dapat dilakukan dengan melangkah lebih jauh ke detail permainan. Namun, itu akan terlalu banyak untuk pertanyaan di Stack Exchange. Jadi saya hanya ingin menunjukkan poin yang paling penting:
- Pemain mengeksplorasi, mengembangkan, dan mengelola kapan pun mereka mau. Bisnis mereka masih berjalan dengan baik ketika offline (ini adalah permainan yang damai, tidak ada senjata yang terlibat). Hanya ekspansi dan kemajuan yang membutuhkan aksi pemain. Tindakan tersebut dibatasi oleh:
- waktu adalah salah satu sumber daya utama (seperti dalam pelatihan keterampilan EVE Online). Semua proses dalam game membutuhkannya. Tidak ada gunanya online 24/7. Pemain rata-rata harus sudah sukses dengan menghabiskan tidak lebih dari satu jam setiap hari dalam satu atau dua sesi ( kira-kira , konsepnya masih dalam pengembangan).
sumber
Jawaban:
Jika orang ingin bot, saya pikir Anda tidak bisa menghentikan mereka.
Tentu saja Anda dapat menerapkan banyak tindakan yang membuat pembotolan lebih atau kurang menyakitkan. Tetapi Anda hanya dapat melakukan banyak hal sebelum basis kode Anda berubah menjadi kekacauan raksasa yang harus dipertahankan, rawan kesalahan, dan mengganggu pengguna yang sah. Sementara itu botters akan selalu menemukan cara untuk mengalahkan tindakan balasan Anda:
Anda pada dasarnya akan terjebak dalam perlombaan senjata dengan botters, dan berdasarkan logika di sepanjang garis poin di atas, serta pengalaman saya dengan permainan seperti itu, Anda tidak akan bisa mengimbangi.
Beberapa pengembang game menerapkan langkah-langkah anti-kecurangan yang sangat agresif: Misalnya, Steam akan memindai memori dan sistem file untuk mencari peretasan, dan pelanggar dapat dihukum dengan kehilangan akun senilai ratusan dolar. Namun masih ada bot dan peretasan lainnya untuk permainan Steam, dan beberapa dari mereka bahkan bekerja separuh waktu. Tidak seperti mereka, Anda memiliki API yang terbuka lebar untuk pengguna, dan tidak ada kontrol atas komputer pengguna. Ini adalah perjuangan berat sejak awal.
Masalah yang Anda coba selesaikan pada dasarnya adalah tes Turing: Kecuali itu adalah tes Turing yang sangat mudah, karena Anda tidak dapat menipu dengan memerlukan masalah AI yang sulit seperti bahasa. Tidak peduli berapa banyak heuristik yang Anda buat, itu akan sepele bagi seorang botter untuk menambahkan sedikit keacakan ke tindakan bot untuk membuatnya meniru hampir persis manusia. Bahkan tidak akan terlalu sulit untuk membuat bot menonton Anda bermain sedikit, dan belajar bagaimana tindakan waktu persis seperti Anda. Kemudian ketika Anda melarang bot, tulisan botter kata-kata kasar besar pada forum tentang bagaimana dia hanya pemain yang berdedikasi (dan mungkin dia adalah benar-benar positif palsu) dan penonton inti Anda dari hardcore pemain akan bangkit mengangkat senjata melawan Anda.
Buat game ini terlalu menyenangkan untuk di-bot
Alasan utama seseorang menggunakan bot adalah karena ada bagian dari permainan yang ingin mereka lewati. Jika mereka menikmati permainan dan merasa senang, mereka tidak akan membiarkan bot memainkannya, mereka akan memainkannya sendiri.
Tetapi jika gim ini sangat membosankan, mengapa memainkannya? Agaknya, beberapa bagian permainan membosankan dan wajib untuk sampai ke bagian yang menyenangkan. Misalnya, dalam MMOs semua orang suka naik level, tetapi tidak ada yang mau membunuh 42.324 tikus racun undead yang mengerikan untuk mendapatkan XP. Jadi mereka membiarkan bot menggiling dan jatuh untuk memainkan bagian yang menyenangkan.
Ini bukan kritik terhadap Anda atau game Anda, tetapi jelas setidaknya beberapa pemain merasa membosankan. Anda harus melihat apakah Anda dapat mengurangi bagian-bagian yang membosankan ini, dan melihat ke dalam menambahkan keputusan yang lebih sulit dan bermakna: Bot tidak pandai strategi yang dalam atau berpikir lateral dibandingkan dengan kecerdasan manusia, dan selain itu manusia menikmati membuat keputusan permainan yang sulit.
Dari uraian Anda, saya mendapat kesan bahwa ini adalah permainan peramban yang mirip dengan Travian, di mana ada antrean bangun dengan satu urutan bangunan terbaik dan "pemeliharaan" tertentu (seperti menjaga serangan pertanian tetap berjalan) tugas-tugas yang harus dilakukan. Anda bilang tidak ada konflik, tetapi dalam drama MMO apa pun dan politik kecil tidak bisa dihindari (IMO itu adalah daya tarik utama) jadi saya yakin para pemain Anda menemukan cara untuk bertukar pikiran. Dengan jenis permainan ini, banyak kebosanan berasal dari tugas "pemeliharaan" ini - yang benar-benar ingin dilakukan pemain adalah membuat aliansi dan memainkan permainan diplomasi dengan klan lawan, pemeliharaan kemudian menjadi semacam pajak di mana Anda harus bangun hingga alarm di jam ganjil untuk diizinkan masuk ke bagian diplomatik yang menyenangkan. Jadi hentikan kebosanan:
Sayangnya, pendekatan ini mungkin tidak selalu berhasil. Tidak semua pemain memiliki toleransi yang sama terhadap kebosanan atau konsep kesenangan yang sama. Anda bisa memiliki mekanik terkemuka yang dinikmati 99% pemain Anda, tetapi 1% terasa membosankan. Bagaimana jika 1% kemudian mulai menulis bot, merusak kesenangan untuk 99%? Tetapi pada akhirnya, itu adalah masalah derajat. Anda tidak akan pernah bisa menghapus pembotolan sepenuhnya, tetapi Anda dapat meminimalkan kerusakan.
Botol undercut
Banyak efek yang sangat negatif dari bot berasal dari penulis bot mengkomersilkan karya mereka. Jika ini masalahnya, Anda cukup bersaing dengan bot. Banyak game online real-time yang sudah memiliki fitur premium yang memungkinkan skipping waktu dan otomatisasi (seperti antrian build yang diperluas). Jumlah ini untuk bot resmi yang disetujui pengembang. Jika Anda memilikinya, dan memberi harga dengan tepat, pemain akan membeli premi Anda alih-alih membeli bot. Kabar baiknya adalah, Anda bertanggung jawab atas API, sehingga Anda selalu memiliki keuntungan yang kuat dalam mengembangkan otomatisasi kualitas untuk gim Anda sendiri, jadi kali ini ini merupakan pertarungan yang sulit bagi para pembotolan.
Ini tidak akan menghilangkan pembotolan amatir, atau orang-orang yang merasa bahwa premi Anda tidak bernilai baik untuk uang, jadi sekali lagi efektivitas pendekatan ini tergantung pada situasinya.
Cari mereka secara manual
Seperti yang saya katakan di atas, apa yang Anda lakukan pada dasarnya adalah tes Turing. Karena interaksi dengan manusia terkenal dianggap sebagai tantangan tes Turing yang sulit, Anda dapat mencoba memanfaatkannya.
Periksa pemain tingkat atas secara manual dan lihat apakah Anda menemukan sesuatu yang mencurigakan. Anda bahkan mungkin bisa lolos dengan sesekali menyelidiki mereka dengan cara yang hanya terbatas pada imajinasi Anda, untuk melihat apakah Anda dapat menipu bot untuk melakukan sesuatu yang tidak akan dilakukan.
Walaupun sulit untuk menulis algoritma yang akan mendeteksi bot secara andal, tidak sulit bagi manusia untuk belajar cara menemukannya. Saya pikir banyak game browser menggunakan strategi ini, dan itu bisa sangat efektif. Kerugiannya adalah bahwa Anda harus melakukan banyak pekerjaan yang membosankan sepanjang waktu, atau Anda perlu membayar master game untuk melakukan patroli bot biasa.
sumber
Pertahanan terbaik dan satu-satunya yang efektif terhadap bot adalah mendesain gim Anda sedemikian rupa sehingga para pemain tidak merasa perlu mengotomatisasi sejak awal. Ketika pemain Anda mengotomatiskan tugas-tugas sederhana yang sebenarnya tidak memerlukan keterampilan, itu adalah pertanda bahwa antarmuka pengguna Anda kurang dan mereka mengganti fitur UI yang tidak ada.
Apakah gim Anda menyertakan tugas berulang di mana pemain melakukan aksi yang sama berulang-ulang untuk mengerjakan sesuatu?
Jadikan aspek-aspek ini dari gim Anda kurang berulang dan lebih menarik untuk dimainkan dan dimainkan ulang.
Apakah permainan Anda mengharuskan pemain untuk melakukan tindakan pada saat-saat yang tidak nyaman bagi mereka, seperti di tengah malam atau ketika mereka sedang bekerja?
Izinkan mereka untuk mengantre pesanan (seperti "build X1, lalu X2, lalu X3, mulai masing-masing segera setelah sumber daya tersedia") atau jadwalkan tindakan pada waktu tertentu di muka (build X pada 3:22 AM).
Apakah game Anda mengharuskan pemain untuk bertindak atas peristiwa dalam rentang waktu yang sangat singkat?
Izinkan mereka untuk mengkonfigurasi permainan dengan cara yang memicu tindakan ini secara otomatis
Pantau komunitas Anda. Ketika Anda memperhatikan bahwa mereka mengotomatiskan hal lain, mencuri ide dan menambahkan opsi untuk mengotomatiskannya ke permainan inti.
sumber
Jangan membuat game Anda begitu rentan terhadap upaya johnny-on-the-spot
Pertama, pastikan bahwa pemain yang hanya memainkan permainan Anda selama dua puluh menit atau satu jam sehari dalam sekali duduk tidak merugikan besar bagi pemain yang membiarkannya terbuka di tempat kerja dan bermain 16 jam sehari.
Ini mungkin memerlukan perubahan dalam mekanika permainan Anda - misalnya jatah gerakan yang mengisi saat Anda tidak bermain dan memungkinkan pemain untuk melakukan banyak gerakan cepat ketika mereka bisa bermain, daripada mekanisme yang membutuhkan pemeliharaan konstan.
Ini akan melemahkan pembuat bot karena mereka dapat mengikuti permainan, dan mereka tidak memiliki kebutuhan mendesak untuk membuat robot yang melakukan tindakan untuk mereka.
Membutuhkan info server untuk setiap tindakan, dan membuat respons server lebih lambat
Ketika seorang pemain memainkan game, mereka meminta halaman yang menampilkan UI yang berinteraksi dengan mereka untuk bergerak. Anda bisa menyisipkan elemen, seperti elemen formulir yang tidak terlihat, yang memverifikasi mereka benar-benar meminta halaman terlebih dahulu. Nomor acak yang disimpan server Anda bersama dengan ID pengguna dan halaman apa yang terakhir mereka minta. Ketika suatu tindakan masuk, server memverifikasi bahwa pengguna ini telah mengembalikan nomor acak yang sama, dan sedang melakukan suatu tindakan pada halaman yang terakhir kali mereka lihat. Ini tidak hanya berarti bot harus melakukan dua panggilan API untuk setiap tindakan, tetapi pengguna biasa tidak dapat membuka banyak halaman dan melakukan tindakan cepat berurutan (jika ini merupakan masalah dengan desain Anda).
Dua panggilan API memberi Anda cara untuk memperlambat bot nanti. Pada akhirnya Anda akan melihat pola yang mencurigakan, dan Anda akan dapat menemukannya. Ketika server Anda mendeteksi pola yang mencurigakan, ia dapat menunda respons API dalam panggilan pertama satu detik - yang akan mengganggu pengguna, tetapi akan sangat memperlambat bot. Lebih lanjut, jika permintaan kedua kembali "terlalu cepat" (apa pun artinya untuk game Anda) maka Anda dapat menolaknya, atau memuat kembali halaman dengan beberapa kesalahan dalam game atau alasan untuk meminta pengiriman kembali. "Kamu tidak bisa membangun secepat itu. Luangkan waktu kamu." misalnya.
Dengarkan pengguna Anda dan Anda akan menemukan apa yang mereka sukai, dan apa yang mengganggu mereka.
Buat gerakan dan tindakan membutuhkan pemikiran
JIKA game ini adalah tombol klik sederhana, maka Anda tidak bisa berbuat banyak tentang bot. Pertimbangkan untuk mendesain ulang gim Anda sehingga gim itu sendiri melakukan tes seperti captcha.
Tidak tahu apa-apa tentang permainan, saya tidak bisa menyarankan banyak Jika melibatkan memilih tempat meletakkan bangunan, desain antarmuka sehingga pengguna dapat memilih di mana saja, meskipun ada penempatan yang jelas yang tidak akan berfungsi. Atau mungkin pengguna harus mencocokkan orientasi dengan benar agar penempatan berhasil. Jika melibatkan memilih tindakan, sertakan daftar tindakan yang lebih panjang, beberapa di antaranya tidak masuk akal dalam situasi tertentu.
Sertakan pemeriksaan bot acak yang sangat sederhana
Tambahkan dialog sesekali, "Apakah Anda yakin?" misalnya. Ubah pertanyaan dan susun kata dengan sering dan gunakan itu sebagai pemeriksaan langsung untuk bot.
Ubah API
Ubah API sesering mungkin, memaksa mereka untuk benar-benar melewatkan halaman web untuk variabel yang benar dan bagaimana mereka dikembalikan ke server web. Jika Anda mengembangkan antarmuka menggunakan templat, ganti templat dengan kode yang menggunakan hash atau generator variabel acak untuk setiap nama variabel. Kemudian mulailah menggunakan javascript untuk menyandikan respons, dan ubahlah penyandian itu sesering mungkin. Anda mungkin dapat menulis perangkat lunak yang melakukan semua ini untuk Anda, dan apakah semuanya acak sepanjang waktu, atau cukup lakukan templat statis yang sesekali Anda ubah.
sumber
Anda tidak bisa menghentikan mereka. Tetapi Anda dapat membuat hidup mereka sengsara, karena mereka harus menghabiskan banyak waktu untuk menulis bot mereka, dan memperbarui mereka. Anda harus menggunakan apa pun yang harus Anda verifikasi jika pengguna valid.
sumber
Secara umum, membedakan antara bot dan manusia sepenuhnya secara otomatis adalah sulit, beberapa bentuk proses pengambilan keputusan yang dibantu manusia berfungsi paling baik.
Apa yang akan saya lakukan: mendefinisikan beberapa heuristik yang mengisyaratkan pengguna mungkin bot - melakukan banyak tindakan, melakukan hal-hal 24/7, ... Lalu jika heuristik ini melewati batas tertentu, lakukan pemeriksaan invasif.
Anda dapat secara manual memindai aktivitas pemain dan melihat apakah tampaknya OK. Atau Anda melakukan captcha saat berikutnya pengguna online. Atau (bahkan lebih kuat) kirimkan kepadanya pesan obrolan di mana Anda menjelaskan bahwa Anda mencurigai dia adalah bot dan ingin dia merespons dengan sesuatu yang mirip manusia untuk membuktikan bahwa dia bukan bot (bagaimana harimu? Apa film favoritmu? ... - Anda dapat memiliki banyak dari mereka). Jika dia tidak merespons sama sekali, dia mungkin seorang bot. Jika dia merespons, Anda secara manual memeriksa jawaban untuk persamaan manusia dan larangan robot. Jika heuristik Anda masuk akal, hanya sebagian kecil pengguna yang akan ditanyai dan jumlah respons yang akan dipindai akan sedikit. Dan jika Anda menyimpan serangkaian pertanyaan pribadi dan berubah, tidak mungkin robot dapat dipersiapkan, kecuali seseorang menemukan SkyNet.
sumber
Merangkul botter. Anda telah membangun API yang tenang, sempurna untuk seorang pembuat kode untuk bereksperimen dengan otomatisasi permainan Anda. Rancang gameplay Anda sehingga bot tidak mendapatkan keuntungan lebih dari pemain manusia karena sedang otomatis - menghilangkan keuntungan dari kecepatan eksekusi dll yang dimiliki mesin; desain game Anda sehingga bot memberikan pendapatan yang sama dengan pemain manusia, jika mungkin - atau setidaknya menyediakan lingkungan yang lebih kaya untuk menarik lebih banyak pemain manusia.
Pertanyaannya adalah, mengapa orang membuat bot untuk gim Anda, dan apakah mereka akan membayar uang untuk hak istimewa?
sumber
Saya belum tentu setuju dengan jawaban lembut-ilmu tapi ada yang hal-hal teknis yang dapat Anda lakukan untuk mendeteksi botters dan beberapa hal yang hanya membuat hidup lebih sulit bagi mereka.
Nilai peringkat akun berdasarkan seberapa besar Anda mencurigai mereka menggunakan bot. Ini akan memberi makan ke beberapa teknik lain dan melindungi pengguna yang sah dari murka Anda.
Memutar kunci cookie sesi. Ini memastikan bot menjaga cookie-nya tetapi juga membuat botter lebih sulit membagikan cookie antara browser dan bot (yang sangat berguna saat mengembangkan dan menguji).
Nilai-batas tindakan tertentu. Berolahraga paling cepat Anda benar-benar bisa melakukan sesuatu, dan memantau seberapa cepat bot ini melakukannya. Mungkin juga layak menyimpan log yang sedang berjalan dan mengetahui standar deviasi. Bahkan jika seseorang hanya melakukan sesuatu setiap 10 detik, jika mereka melakukannya tepat setiap 10 detik mereka mungkin bot. Ubah peringkat mereka dan keluarkan.
Buat login lebih sulit di akun yang Anda curigai mungkin bot. CAPTCHA dan pertanyaan serta hal-hal lain yang tak terhindarkan membuat segalanya menjadi lebih sulit bagi calon perampok untuk secara otomatis menuliskan sesuatu.
Pantau pergerakan mouse / halaman. Ini cukup sederhana dengan javascript akhir-akhir ini, tetapi bot tidak akan memiliki gerakan mouse secara organik. Jika Anda tidak mendapatkan apa pun di antara "klik", itu mungkin seluler atau bot. Menyelidiki. Meskipun begitu, ini banyak data untuk dicatat ... Jadi, Anda mungkin ingin memesan ini untuk akun yang telah memicu langkah sebelumnya.
Buat alat untuk menautkan akun berdasarkan perilaku, IP, urutan tindakan, irama tindakan. Jika Anda akan melarang orang, pastikan Anda memiliki alat untuk memverifikasi kesalahan mereka secara manual.
Putar skema URL, variabel CSRF, dll dan sering-seringlah melakukannya. Ini adalah langkah besar dan mungkin membutuhkan lebih banyak pekerjaan di muka daripada yang layak, tetapi paling tidak, setiap akun yang tiba-tiba berhenti bekerja (atau terus memalu URL lama dan mengirim nama variabel lama - log it!) perlu tingkat indeks bot mereka meningkat.
sumber
Sudahkah Anda mempertimbangkan menjadikan bot sebagai bagian integral dari permainan? Sulit bagi bot untuk merusak gim untuk orang lain jika semua orang didorong untuk membuatnya. Tambahkan dukungan untuk skrip dan tiba-tiba dinamika permainan berubah dari strategi manajemen sumber daya manual ke strategi desain bot.
sumber
Buat server bot saja yang terpisah. Buat papan peringkat dan rayakan pemenangnya. Lihatlah data yang dihasilkannya. Larang pengguna dari severs normal yang profil perilakunya mirip bot.
sumber
Apa pun yang Anda lakukan, ingat untuk TIDAK membuatnya lebih menjengkelkan bagi pemain sungguhan! Banyak tanggapan yang saya lihat (hasil halaman yang lebih lambat, tidak memungkinkan banyak halaman terbuka untuk memfasilitasi input yang lebih cepat, dll) juga akan mencegah pemain yang sah melakukan sesuatu dengan cepat, yang hanya akan membuat mereka frustrasi.
imho pendekatan termudah mungkin untuk menerapkan rekayasa sosial untuk masalah: 1) menambahkan klausa NO-BOT eksplisit untuk KL Anda, dan menambahkan bahwa mendeteksi aktivitas bot akan menghapus pemain dari daftar skor tinggi (atau memiliki label "penipu" "terlampir, jadi orang tidak frustrasi dengan mereka; jika Anda pergi ke rute itu, izinkan orang untuk menyembunyikan catatan penipu).
2) memeriksa perilaku bot-like (mis. Ping yang diatur waktunya secara teratur ke server, atau waktu yang hampir sempurna selama berjam-jam berturut-turut), dan jika demikian, masukkan akun ke "mode bot" - tampilkan captcha sesekali dan yang lainnya . jika ini diabaikan tetapi pemain tetap aktif memainkan game, tandai pemain sebagai "bot" dan singkirkan dia dari peringkat. jika mereka dialamatkan, tandai dia sebagai "pemain kekuatan" dan lepaskan dia dari daftar bot.
dengan cara ini sebagian besar pemain tidak pernah terpengaruh, gamer hardcore terpengaruh untuk waktu yang singkat, dan bot tidak "merusak permainan" untuk orang lain.
sumber