Alat, pola, atau praktik terbaik apa yang akan Anda rekomendasikan untuk menerapkan mekanisme pencarian yang diberikan di bawah persyaratan yang tercantum?
Saya berbicara tentang arsitektur perangkat lunak (seberapa umum Anda seharusnya) dan pilihan untuk pengkabelan objek, berlangganan acara, dan representasi kondisi. Menyebutkan alat / pustaka yang telah berhasil Anda gunakan dipersilakan. Sunting: Jika Anda menggunakan skrip, pengaturan apa yang Anda rekomendasikan?
Persyaratan:
- 2Do mm sederhana (rpg)
- semua data game, termasuk pencarian, disimpan dalam basis data relasional
- setiap peristiwa dalam game dapat memicu pencarian baru untuk pemain atau memajukan pencarian yang ada
- sebuah quest dapat memiliki sejumlah kondisi yang harus dipenuhi sebelum pencarian tersedia untuk pemain
- sebuah quest dapat terdiri dari sejumlah sub-quests / langkah sewenang-wenang dengan kondisi arbitrer
pencarian akan berkisar dari yang sederhana:
berbicara dengan A - membunuh 5 B - berbicara dengan A - meningkatkan kesehatan secara permanen
cukup terlibat:
gunakan item di area X - pergi ke area Y - bot akan menelurkan - membunuh bot tanpa mengambil lebih dari 10% kerusakan - item bot drop - mengambil item - membuka portal - mengirim item ke J di belakang portal - menerima emas dan pengalaman - memungkinkan untuk melewati portal sekali lagi - kunci portal untuk pemain ini
contoh tingkat adalah suatu kemungkinan (pemain dapat menyelesaikan pencarian tertentu dalam tim atau isolasi yang akan menelurkan lokasi tingkat hanya untuk para peserta)
- Quests sebaiknya dikelola menggunakan editor dunia tanpa pengetahuan scripting atau pemrograman ( Edit: tidak mengadvokasi terhadap scripting secara umum)
- Saya menganggap C ++ sebagai bahasa implementasi
Saya berpikir bahwa jika saya bisa menggabungkan rantai peristiwa dan kondisi apa pun, kita dapat memodelkan pencarian yang lebih kompleks dan mungkin lebih menarik. Saya bereksperimen dengan memutar mesin ECA (Acara-Kondisi-Tindakan) saya sendiri tetapi itu mungkin berlebihan. Sangat sulit untuk memodelkan kondisi umum tanpa menggunakan skrip apa pun.
Jawaban:
Pertama peringatan, lalu beberapa saran.
Terakhir kali saya perlu menerapkan sistem seperti ini saya tidak menggunakan mesin yang awalnya ditujukan untuk aplikasi seperti MMO. Sistem pencarian yang dikirimkan bersama diarahkan untuk upaya pemain tunggal, dan tidak dapat digunakan.
Saya akhirnya harus menuliskan skrip pada semua objek yang terlibat dengan pencarian kurang lebih dengan tangan, seperti ini (pseudocode):
Ini benar-benar mimpi buruk. Tidak ada cara untuk mengetahui bagaimana pencarian bekerja tanpa memulung seluruh permainan. Jangan lakukan ini.
Saya akan merekomendasikan membuat sistem di mana seluruh pencarian (baris) diwakili sebagai mesin negara yang terbatas, dengan acara untuk memeriksa transisi dan skrip untuk bereaksi terhadap transisi tersebut. Itu membuatnya mudah untuk melacak di mana Anda berada dalam pencarian yang diberikan (garis) dan menjaga semua keadaan pencarian dikemas dengan rapi.
Jika mau, Anda dapat membuat perpustakaan skrip / templat skrip di editor dunia Anda untuk kejadian umum (pemain berbicara kepada NPC, pemain membunuh gerombolan, dll.)
Saya tidak akan terlalu khawatir tentang kinerja skrip, selama Anda tidak terlalu sering memecat skrip acara Anda. Sebagai aturan praktis, skrip harus menjalankan setidaknya urutan besarnya kurang dari logika permainan "inti" (animasi, fisika dll). Mereka harus bereaksi terhadap peristiwa, alih-alih menembak secara berkala untuk memeriksa apakah suatu kondisi telah terpenuhi.
sumber
Sistem kami pada dasarnya melibatkan menjalankan ekspresi (bahasa scripting mini khusus tetapi tcl / lua / python akan bekerja dengan baik, atau membuat sesuatu sendiri) setiap frame server untuk setiap langkah misi. Ini untuk "misi pribadi" yang terkait dengan pemain tertentu. Setiap subtep kemudian merupakan bagian dari FSM (mesin negara terbatas) untuk misi itu sendiri (yang mungkin hanya merupakan pengganti dari misi lain). Ada juga "misi peta" yang memiliki FSM tunggal dan terikat pada peta, bukan pemain (pikirkan pencarian publik WAR), tetapi subtepsnya pada dasarnya sama.
Apa yang sebenarnya dilihat oleh ekspresi ini adalah acara yang disiarkan oleh sistem seperti "NPC meninggal" atau "interaksi selesai". Ini berarti Anda dapat memisahkan bagian-bagian yang berbeda, sistem gameplay hanya mengirimkan acara yang diperlukan, yang mana skrip misi hanya mendengarkan acara dan tidak khawatir dari mana mereka berasal. Jika Anda juga menambahkan bahwa Anda dapat membuat misi FSM berinteraksi dengan negara dunia (hanya tunjukkan kontak ini ketika dalam keadaan misi X) Anda bisa mendapatkan banyak daya dari sistem.
sumber