Es hängt davon ab, wie Sie Ihr Mod-System entwerfen möchten. Ich werde zwei davon untersuchen.
SDK
Höchstwahrscheinlich werden Sie verlangen, dass Ihre Modder dieselbe Sprache wie Sie verwenden und Mods über Reflection laden (oder ähnlich, abhängig von der Sprache Ihrer Wahl). Dies wird Sie offensichtlich auf Sprachen beschränken, die späte Bindungen ausführen können - und es gibt viele, die dies ausführen können (sogar C kann späte Bindungen mit einigen cleveren LoadLibrary
Tricks ausführen). Du könntest sogar Meta-Modding machen, wobei ein Mod andere Mods hosten könnte (zB gescriptete Mods).
Das erste Problem bei diesem Ansatz ist das Verbergen des internen Zustands. Wenn ein Modder beispielsweise C # verwendet, um auf private Mitglieder zuzugreifen, kann er dies auch tun (obwohl mehr Aufwand erforderlich ist).
Das zweite Problem ist das Hosting. Die Leute mögen es nicht wirklich, wenn auf ihrem System fremder Code ohne Sandbox ausgeführt wird. Als Worst-Case-Szenario könnten Sie einen Mod schreiben, der eine Seedbox aufbaut. Wenn dies bei einem ISP installiert wird, kann dies zu ernsthaften Reputationsschäden führen.
Scripting
Modder würden eine Sprache wie Lua verwenden, um Mods zu erstellen. Sie würden entweder eine Sprache benötigen, die nativen Code aufrufen könnte (um mit Lua zu kommunizieren); oder Sie müssten Ihre eigene Skriptsprache in der Sprache Ihrer Wahl schreiben.
Das erste Problem hierbei ist, dass die meisten Skriptsprachen interpretiert werden, was für Echtzeitsysteme möglicherweise nicht akzeptabel ist (siehe jedoch LuaJIT). wie Spiele.
Ironischerweise besteht hier immer noch das zweite Problem. Lua als Beispiel war ich extrem enttäuscht , dass ist , hat ‚Beschuss-out‘ -Funktionen im Kern / Standardbibliothek enthalten - so dass es als eine Sandbox - Umgebung (ohne großen Aufwand, Glück und Wartung) völlig nutzlos, es ist schwer zu Stellen Sie dar, wie wütend ich darüber bin, aber ich hoffe wirklich, dass sie einige starke Cocktails tranken, als sie diese Anti-Features enthielten . Sie könnten dies offensichtlich leicht vermeiden, wenn Sie Ihre eigene Sprache rollen würden (siehe: UnrealScript).
Schließlich können die Kosten für die Interaktion mit einer Skript-Engine unerschwinglich sein. Dies ist beispielsweise Lua in Kombination mit C #: C # hat einen erheblichen Overhead beim Aufrufen nativer Funktionen (über P / Invoke), und Lua ist eine recht gesprächige API. Dies kann zu Problemen führen, wenn die Art und Weise, in der Sie das 'Skript-SDK' entwerfen, viel Chatten zwischen Ihrer Primärsprache und Ihrer Skriptsprache erfordert (beachten Sie, dass C dieses Problem nicht wirklich hat). Wiederum können Sie dem ausweichen, indem Sie Ihre eigene Skriptsprache schreiben (und sie im Fall von C # in MSIL kompilieren) und sie auf schnellste Weise in Ihrer [virtuellen] Umgebung ausführen.
Da das Skript im Wesentlichen auf einem anderen System ausgeführt wird als Ihr Primärcode, können Sie den Zugriff auf den internen Status vollständig steuern (es sei denn, sie führen einige ausgefallene Aktionen mit den zuvor genannten Shell-Funktionen aus).
Fazit
Ich habe ein wenig vom Thema abgewichen , aber man kann im Grunde genommen aus dieser Textwand lernen, dass man in der Lage sein sollte, ein modifizierbares Spiel in jeder Sprache zu erstellen (ich würde sagen, dass man das kann ) - aber in einigen Sprachen kann zu mehr Arbeit führen. Bin ich ein bisschen anal in Bezug auf Sicherheit? Ja, Sie sollten es auch sein, wenn es um Benutzercode geht.