ขึ้นอยู่กับว่าคุณต้องการออกแบบระบบ mod ของคุณอย่างไร ฉันจะสำรวจพวกเขาสองคน
SDK
เป็นไปได้ว่าคุณจะต้องให้ mod Mod ใช้ภาษาเดียวกับที่คุณทำและโหลด mods ผ่านการสะท้อน (หรือคล้ายกันขึ้นอยู่กับภาษาที่คุณเลือก) สิ่งนี้จะ จำกัด คุณไว้เฉพาะภาษาที่สามารถผูกมัดช้าและมีหลายอย่างที่สามารถทำได้ (แม้แต่ C สามารถผูกสายช้ากับLoadLibrary
เล่ห์เหลี่ยมที่ฉลาด) คุณสามารถทำ meta-modding บางตัวซึ่ง mod สามารถโฮสต์ mods อื่น ๆ (เช่น mods ที่เขียนด้วยสคริปต์)
ปัญหาแรกของวิธีนี้คือการซ่อนสถานะภายใน ยกตัวอย่าง C # ที่ modder สามารถใช้การไตร่ตรองเพื่อเข้าถึงสมาชิกส่วนตัว C สามารถทำได้เช่นกัน (แม้ว่าจะต้องใช้ความพยายามมากขึ้น)
ปัญหาที่สองคือการโฮสต์ ผู้คนไม่ชอบโค้ดต่างประเทศที่ทำงานบนระบบของพวกเขาโดยไม่มี Sandbox อยู่ ในสถานการณ์ที่เลวร้ายที่สุดคุณสามารถเขียน mod ที่ตั้งค่า seedbox ได้ ถ้าสิ่งนี้ถูกติดตั้งที่ ISP มันอาจทำอันตรายร้ายแรงต่อชื่อเสียงของพวกเขาได้
การเขียนสคริปต์
Modders จะใช้ภาษาเช่น Lua เพื่อสร้าง mods คุณอาจต้องการภาษาที่สามารถเรียกใช้เนทีฟ (เพื่อติดต่อกับ Lua) หรือคุณจะต้องเขียนภาษาสคริปต์ของคุณเองในภาษาที่คุณเลือก
ปัญหาแรกที่นี่คือภาษาสคริปต์ส่วนใหญ่ตีความซึ่งอาจไม่เป็นที่ยอมรับสำหรับระบบเรียลไทม์ (แม้ว่าดู LuaJIT) เช่นเกม
แดกดันปัญหาที่สองยังคงมีอยู่ที่นี่; การ Lua เป็นตัวอย่างผมผิดหวังมากที่เป็นมี 'ปลอกกระสุนออก' ฟังก์ชั่นรวมอยู่ในห้องสมุด core / เริ่มต้น - ทำให้ไร้ประโยชน์โดยสิ้นเชิงเป็นสภาพแวดล้อม sandboxed (โดยไม่ต้องเป็นจำนวนมากของความพยายามโชคและการบำรุงรักษา) มันยากที่จะ วาดภาพวิธีโกรธผมเกี่ยวกับเรื่องนี้ แต่ผมหวังว่าพวกเขากำลังดื่มค็อกเทลบางอย่างเมื่อพวกเขารวมถึงคุณสมบัติการต่อต้านการเหล่านี้ เห็นได้ชัดว่าคุณสามารถหลีกเลี่ยงปัญหานี้ได้อย่างง่ายดายหากคุณใช้ภาษาของคุณเอง (ดู: UnrealScript)
ในที่สุดค่าใช้จ่ายในการมีปฏิสัมพันธ์กับเอ็นจิ้นการเขียนสคริปต์อาจเป็นสิ่งต้องห้าม - นำตัวอย่าง Lua มารวมกับ C #: C # มีค่าใช้จ่ายจำนวนมากเมื่อเรียกใช้ฟังก์ชั่นดั้งเดิม (ผ่าน P / Invoke) และ Lua เป็น API แบบ 'ช่างพูด' สิ่งนี้อาจนำไปสู่ปัญหาได้หากวิธีที่คุณออกแบบ 'สคริปต์ SDK' ต้องการการสนทนาระหว่างภาษาหลักของคุณกับภาษาสคริปต์ของคุณ (โปรดทราบว่า C ไม่มีปัญหานี้จริงๆ) คุณสามารถหลบสิ่งนี้ได้โดยการเขียนภาษาสคริปต์ของคุณเอง (และในกรณีของการคอมไพล์ภาษา C # เป็น MSIL) และดำเนินการด้วยวิธีที่เร็วที่สุดภายใต้สภาพแวดล้อม [เสมือน] ของคุณ
เนื่องจากสคริปต์ทำงานบนระบบที่แตกต่างอย่างสิ้นเชิงกับรหัสหลักของคุณคุณจึงสามารถควบคุมการเข้าถึงสถานะภายในได้อย่างสมบูรณ์
ข้อสรุป
ฉันเปลี่ยนทิศทางไปเล็กน้อย แต่สิ่งที่คุณสามารถรวบรวมได้จากผนังข้อความนั้นก็คือคุณควรจะสามารถสร้างเกมที่ปรับเปลี่ยนได้ในทุกภาษา (ฉันอยากจะบอกว่าคุณทำได้ ) - แต่ในบางภาษา อาจนำไปสู่การทำงานมากขึ้น ฉันเป็นเรื่องเกี่ยวกับความปลอดภัยหรือไม่? ใช่คุณควรจะเกินไปเมื่อมันมาถึงรหัสผู้ใช้