Modding API
Die Modding API wird aus grundlegend 4 Programmen bestehen:
CreateModLib.exe
Die CreateModLib.exe erstellt eine versionsunabhängige ModLib.dll. Für jede Version muss eine neue ModLib.dll erstellt werden. Nachdem man das Programm CreateModLib.exe ausgewählt hat, muss man zunächst das Spiel auswählen.
Sollte das Spiel nicht automatisch gefunden werden, wird das Programm danach fragen, ob Du den Pfad zur TheForest.exe per Hand eingeben möchtest. Danach erscheint ein Datei öffnen Dialog, indem Du nur noch die richtige TheForest.exe auswählen müsst.
Als nächstes siehst Du dann den Parsing Bildschirm.
Sollte ein Problem auftauchen, klicke bitte auf "Show Log" und kopiere den Inhalt auf pastebin.com und teile mir den Link mit. Ich bedanke mich für jede Unterstützung.
Modding
DevTools\CreateModProject.exe
Wenn Du dir ein fertiges ModProjekt erstellen lassen möchtest, kannst du die CreateModProject.exe verwenden. Im Formular gibst du den Modnamen ein und den Ort, an dem das Projekt erstellt werden soll.
Sollte alles in Ordnung sein, sollte ein Hinweisfenster erscheinen, welches darauf hinweit, dass das Projekt erfolgreich erstellt wurde.
Nun kannst du die erstellte .csproj Datei in deiner IDE öffnen.
Konfigurationsdateien
Jeder Mod muss eine Konfiguration beinhalten. Die Daten müssen in der Resource "ModInfo.xml" in der DLL vorhanden sein. Solltest Du die CreateMod.exe verwendet haben, ist dafür bereits alles vorbereitet.
Folgend einige möglichen Konfigurationen:
Chaining
Für jede Methode kann ein Attribut [ModAPI.Priority(int32)] gesetzt werden. Desto höher die Prioriät, desto früher in der Chain wird diese Methode aufgerufen. Es gibt keinen Maximalwert. Die Priorität sollte nur hochgesetzt werden, wenn dadurch z.B. Inkompatibilitäten mit anderen Mods umgangen werden können.
Jedes Chain Element wird einzeln in einem try-catch ausgeführt. Sollte ein Mod ein Fehler werfen, wird mit dem nächsten Mod in der Chain fortgesetzt.
z.B. sieht folgender Code:
am Ende so aus:
Die Modding API wird aus grundlegend 4 Programmen bestehen:
- ModLoader.exe
Die ModLoader.exe stellt den Injector dar. Er lädt alle Daten des Mods in die aktuellen DLL Dateien. Natürlich backupped er die originalen Dateien und so ist es möglich, verschiedene Modkombinationen auszuprobieren. - CreateModLib.exe
Die CreateModLib.exe bewerktstelligt die Versionsunabhängigkeit der Modding API. Sie erstellt für jede neue Spielversion eine passende Modding Library. Hierzu zählen auch die Modding Library Tools. Dort sind Funktionen wie etwa Logging und bearbeitbarer Konfigurationen enthalten. Später wird es hier auch möglich sein, neue Rezepte in das Survival Book einzutragen oder andere tolle Funktionen. - DevTools/CreateModProject.exe
Die CreateModProject.exe erstellt auf Basis der aktuellen Mod Library ein Mod Projekt. Dieses Projekt kann in MonoDevelop oder anderen Programmen, welche .csproj Dateien öffnen können, geöffnet werden. - DevTools/CreateMod.exe
Die CreateMod.exe erstellt aus einer kompilierten DLL Datei (inklusive ModInfo.xml Resource) eine fertige .mod Datei. Die kann vom ModLoader in die DLL Datei injected werden.
CreateModLib.exe
Die CreateModLib.exe erstellt eine versionsunabhängige ModLib.dll. Für jede Version muss eine neue ModLib.dll erstellt werden. Nachdem man das Programm CreateModLib.exe ausgewählt hat, muss man zunächst das Spiel auswählen.
Sollte das Spiel nicht automatisch gefunden werden, wird das Programm danach fragen, ob Du den Pfad zur TheForest.exe per Hand eingeben möchtest. Danach erscheint ein Datei öffnen Dialog, indem Du nur noch die richtige TheForest.exe auswählen müsst.
Als nächstes siehst Du dann den Parsing Bildschirm.
Sollte ein Problem auftauchen, klicke bitte auf "Show Log" und kopiere den Inhalt auf pastebin.com und teile mir den Link mit. Ich bedanke mich für jede Unterstützung.
Modding
DevTools\CreateModProject.exe
Wenn Du dir ein fertiges ModProjekt erstellen lassen möchtest, kannst du die CreateModProject.exe verwenden. Im Formular gibst du den Modnamen ein und den Ort, an dem das Projekt erstellt werden soll.
Sollte alles in Ordnung sein, sollte ein Hinweisfenster erscheinen, welches darauf hinweit, dass das Projekt erfolgreich erstellt wurde.
Nun kannst du die erstellte .csproj Datei in deiner IDE öffnen.
Konfigurationsdateien
Jeder Mod muss eine Konfiguration beinhalten. Die Daten müssen in der Resource "ModInfo.xml" in der DLL vorhanden sein. Solltest Du die CreateMod.exe verwendet haben, ist dafür bereits alles vorbereitet.
Folgend einige möglichen Konfigurationen:
Quellcode
- <mod>
- <!-- Gibt den Namen an. Multilingual-Support mit ISO-3166-2 Ländercodes -->
- <name>
- <EN>MyMod</EN>
- <DE>MeinMod</DE>
- </name>
- <!-- Versionsnummer unterstützt jedes numerische Format inkl. a-z -->
- <version>0.1.20</version>
- <!-- Ein Mod, der für diesen Mod vorrausgesetzt wird. Min und max sind optionale Versionsangaben -->
- <requiredMod name="Mod2" min="0.1.0" max="0.1.9" />
- <!-- Die Angabe, für welche Spielversion der Mod funktioniert. max und min sind jeweils optional. -->
- <gameVersion min="0.05" max="0.05" />
- <!-- Ein Untermod, der einzeln aktivierbar ist mit dem Namen NoClip.
- Die Kategorie wird im Code durch das Attribut [InjectCategory(id="NoClip")] festgelegt. -->
- <category name="NoClip">
- <!-- Auch hier multilingualer Support per ISO-3166-2 Ländercodes -->
- <EN>NoClip</EN>
- <DE>NoClip</DE>
- <!-- Kategoriespezifische Inkompatibilität.
- Min und Max sind optionale Versionsangaben -->
- <incompatible name="OtherNoClipMod" min="0.1.0" max="0.1.9" />
- </category>
- <!-- Modübergreifende Inkompatibilitäten -->
- <incompatible name="OtherSuperMod" min="0.1.0" max="0.1.9" />
- <!-- Absolut inkompatibel zu jeder Mod.
- Nur aktivieren, wenn heftige Veränderungen am Code vorgenommen worden. -->
- <incompatible with-all />
- </mod>
Chaining
Für jede Methode kann ein Attribut [ModAPI.Priority(int32)] gesetzt werden. Desto höher die Prioriät, desto früher in der Chain wird diese Methode aufgerufen. Es gibt keinen Maximalwert. Die Priorität sollte nur hochgesetzt werden, wenn dadurch z.B. Inkompatibilitäten mit anderen Mods umgangen werden können.
Jedes Chain Element wird einzeln in einem try-catch ausgeführt. Sollte ein Mod ein Fehler werfen, wird mit dem nächsten Mod in der Chain fortgesetzt.
z.B. sieht folgender Code:
am Ende so aus:
Quellcode
- public void TimeLapse() {
- try
- {
- TimeLapse_0();
- }
- catch (Exception e)
- {
- TimeLapse_1();
- }
- }
- public void TimeLapse_0() {
- // Prio:10
- try
- {
- TimeLapse_1();
- }
- catch (Exception e)
- {
- TimeLapse_2();
- }
- }
- public void TimeLapse_1() {
- // Prio:10
- try
- {
- TimeLapse_2();
- }
- catch (Exception e)
- {
- TimeLapse_Original();
- }
- }
- public void TimeLapse_2() {
- // Prio:5
- try
- {
- TimeLapse_Original();
- }
- catch (Exception e) {}
- }
- public void TimeLapse_Original()
- {
- }
Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Souldrinker“ ()