Nó phụ thuộc vào cách bạn muốn thiết kế hệ thống mod của bạn. Tôi sẽ khám phá hai trong số họ.
SDK
Nhiều khả năng bạn sẽ yêu cầu các modder của bạn sử dụng cùng ngôn ngữ với bạn và tải lên các mod thông qua sự phản chiếu (hoặc tương tự, tùy thuộc vào ngôn ngữ bạn chọn). Điều này rõ ràng sẽ giới hạn bạn với các ngôn ngữ có thể thực hiện ràng buộc muộn - và có rất nhiều ngôn ngữ có thể làm điều này (thậm chí C có thể thực hiện ràng buộc muộn với một số LoadLibrary
mánh khóe thông minh ). Bạn thậm chí có thể thực hiện một số mod-meta, trong đó một mod có thể lưu trữ các mod khác (ví dụ: mod theo kịch bản).
Vấn đề đầu tiên với phương pháp này là ẩn trạng thái nội bộ. Lấy C # làm ví dụ một người kiểm duyệt có thể chỉ cần sử dụng sự phản chiếu để truy cập các thành viên tư nhân, C cũng có thể làm điều này (mặc dù cần nhiều nỗ lực hơn).
Vấn đề thứ hai là lưu trữ. Mọi người không thực sự thích mã nước ngoài chạy trên hệ thống của họ mà không có hộp cát tại chỗ. Trong trường hợp xấu nhất, bạn có thể viết một mod thiết lập seedbox; nếu điều này được cài đặt tại một ISP, nó có thể gây tổn hại nghiêm trọng đến uy tín của họ.
Viết kịch bản
Các modder sẽ sử dụng một ngôn ngữ như Lua để tạo mod. Bạn sẽ yêu cầu một ngôn ngữ có thể gọi mã gốc (để giao tiếp với Lua); hoặc bạn sẽ phải viết ngôn ngữ kịch bản của riêng bạn bằng ngôn ngữ bạn chọn.
Vấn đề đầu tiên ở đây là hầu hết các ngôn ngữ kịch bản được diễn giải, có thể không được chấp nhận đối với các hệ thống thời gian thực (mặc dù, xem LuaJIT); chẳng hạn như các trò chơi.
Trớ trêu thay vấn đề thứ hai vẫn tồn tại ở đây; Lấy Lua làm ví dụ, tôi đã rất thất vọng vì có các chức năng 'loại bỏ' trong thư viện lõi / mặc định - làm cho nó hoàn toàn vô dụng như một môi trường hộp cát (không có nhiều nỗ lực, may mắn và bảo trì), thật khó để miêu tả sự tức giận của tôi về điều này, nhưng tôi thực sự hy vọng họ đã uống một số loại cocktail mạnh khi chúng bao gồm các tính năng chống . Rõ ràng bạn có thể dễ dàng tránh điều này nếu bạn cuộn ngôn ngữ của mình (xem: UnrealScript).
Cuối cùng, chi phí tương tác với một công cụ viết kịch bản có thể bị cấm - một lần nữa lấy Lua làm ví dụ, kết hợp với C #: C # có chi phí đáng kể khi gọi các hàm gốc (thông qua P / Invoke) và Lua là một API khá 'trò chuyện'. Điều này có thể dẫn đến các vấn đề nếu cách bạn thiết kế 'SDK tập lệnh' đòi hỏi nhiều cuộc trò chuyện giữa ngôn ngữ chính và ngôn ngữ kịch bản của bạn (lưu ý rằng C không thực sự có vấn đề này). Một lần nữa, bạn có thể tránh điều này bằng cách viết ngôn ngữ kịch bản lệnh của riêng bạn (và trong trường hợp C # biên dịch nó thành MSIL) và thực hiện nó theo cách nhanh nhất trong môi trường [ảo] của bạn.
Vì về cơ bản, tập lệnh chạy trên một hệ thống hoàn toàn khác với mã chính của bạn, bạn có thể kiểm soát hoàn toàn quyền truy cập vào trạng thái nội bộ (trừ khi chúng thực hiện một số nội dung ưa thích với các hàm shell được đề cập trước đó).
Phần kết luận
Tôi đã xoay xở một chút ngoài chủ đề, tuy nhiên, điều cơ bản bạn có thể thu được từ bức tường văn bản đó là bạn sẽ có thể tạo ra một trò chơi có thể sửa đổi bằng bất kỳ ngôn ngữ nào (tôi muốn nói rằng bạn có thể ) - nhưng bằng một số ngôn ngữ có thể dẫn đến nhiều công việc hơn Tôi có một chút hậu môn về an ninh? Vâng, bạn cũng nên như vậy khi nói đến mã người dùng.