Itu tergantung pada bagaimana Anda ingin merancang sistem mod Anda. Saya akan menjelajahi dua dari mereka.
SDK
Kemungkinan besar Anda akan mengharuskan modder Anda menggunakan bahasa yang sama seperti Anda, dan memuat mod melalui refleksi (atau serupa, tergantung pada bahasa pilihan Anda). Ini jelas akan membatasi Anda untuk bahasa yang dapat melakukan pengikatan yang terlambat - dan ada banyak yang dapat melakukannya (bahkan C dapat melakukan pengikatan yang terlambat dengan beberapa LoadLibrary
tipu daya yang pintar ). Anda bahkan dapat melakukan beberapa meta-modding, di mana sebuah mod dapat meng-host mod lainnya (mis. Scripted mods).
Masalah pertama dengan pendekatan ini adalah menyembunyikan kondisi internal. Mengambil C # sebagai contoh, seorang modder dapat menggunakan refleksi untuk mengakses anggota pribadi, C juga dapat melakukan ini (walaupun diperlukan lebih banyak usaha).
Masalah kedua adalah hosting. Orang tidak begitu suka kode asing yang berjalan di sistem mereka tanpa ada kotak pasir di tempatnya. Sebagai skenario terburuk, Anda bisa menulis mod yang mengatur seedbox; jika ini dipasang di ISP, itu dapat membahayakan reputasi mereka.
Scripting
Para modder akan menggunakan bahasa seperti Lua untuk membuat mod. Anda akan memerlukan bahasa yang dapat memanggil kode asli (untuk berinteraksi dengan Lua); atau Anda harus menulis bahasa skrip Anda sendiri dalam bahasa pilihan Anda.
Masalah pertama di sini adalah bahwa sebagian besar bahasa scripting ditafsirkan, yang mungkin tidak dapat diterima untuk sistem waktu nyata (meskipun, lihat LuaJIT); seperti game.
Ironisnya masalah kedua masih ada di sini; mengambil Lua sebagai contoh saya sangat kecewa karena memiliki fungsi 'penembakan' yang termasuk dalam perpustakaan inti / default - menjadikannya sama sekali tidak berguna sebagai lingkungan berpasir (tanpa banyak usaha, keberuntungan dan pemeliharaan), sulit untuk menggambarkan betapa marahnya saya tentang hal ini, tetapi saya benar-benar berharap mereka minum koktail yang kuat ketika mereka menyertakan fitur-fitur ini . Anda dapat dengan mudah menghindari ini jika Anda menggulung bahasa Anda sendiri (lihat: UnrealScript).
Akhirnya biaya berinteraksi dengan mesin scripting mungkin menjadi penghalang - sekali lagi mengambil Lua sebagai contoh, dikombinasikan dengan C #: C # memiliki overhead yang substansial ketika menjalankan fungsi asli (melalui P / Invoke) dan Lua adalah API yang cukup 'akrab'. Ini dapat menyebabkan masalah jika cara Anda mendesain 'skrip SDK' membutuhkan banyak obrolan antara bahasa utama Anda dan bahasa skriping Anda (perhatikan bahwa C tidak benar-benar memiliki masalah ini). Sekali lagi Anda bisa mengelak dengan menulis bahasa skrip Anda sendiri (dan dalam kasus C # mengompilasinya ke MSIL) dan menjalankannya dengan cara tercepat di bawah lingkungan [virtual] Anda.
Karena skrip pada dasarnya berjalan pada sistem yang sama sekali berbeda dengan kode primer Anda, Anda dapat mengontrol akses ke kondisi internal sepenuhnya (kecuali jika mereka melakukan beberapa hal mewah dengan fungsi shell yang disebutkan sebelumnya).
Kesimpulan
Saya sedikit membelok ke luar topik, namun, yang pada dasarnya dapat Anda kumpulkan dari dinding teks itu adalah bahwa Anda harus dapat membuat game yang bisa dimodifikasi dalam bahasa apa pun (saya berani mengatakan bahwa Anda bisa ) - tetapi dalam beberapa bahasa dapat menyebabkan lebih banyak pekerjaan. Apakah saya agak anal tentang keamanan? Ya, Anda juga harus memperhatikan kode pengguna.