Ein benutzerfreundliches, von IMGUI inspiriertes API zum Erstellen von In-Game-Einstellungsmenüs für REF-Mods in MHRise.
JuhuuuDas war definitiv ein kniffliges Projekt
Dieser üble Kerl steckt voller schwarzer Magie. *Schlägt dem GitHub-Repository*Jedenfalls:
~Was macht es?~
Na ja, alleine taugt es nicht viel.
Aber in den Händen von Mod-Autoren können Einstellungsmenüs über eine einfache API direkt in das spielinterne Optionsmenü eingefügt werden.
Die API-Funktionen sind denen von imgui sehr ähnlich, mit einigen Einschränkungen*~Was muss ich tun?~
Installiere das Mod wie jedes andere REFramework-Mod.
Wenn du nicht weißt, wie das geht, ist das hier wohl nicht dein erstes Rodeo.
Sobald du am richtigen Ort bist, sollte automatisch eine Kategorie "Mods" im Optionsmenü hinzugefügt werden.
Wenn du einfach andere unterstützte REF-Mods verwendest, werden die Einstellungen dort angezeigt.
**Für Mod-Autoren:**Lade die Beispiel-Mod-Implementierung aus den Dateien herunter, damit du problemlos loslegen kannst.
Weitere API-Details finden Sie in der GitHub-Seite.
Ich verspreche, es ist fast so einfach zu benutzen wie die integrierten ImGui-Funktionen, und es wird echt klasse sein, wenn die Community eigene Menüs hinzufügt!
Paket einfach anfordern und die API wie bei imgui verwenden.
Du kannst optional prüfen, ob der Benutzer das Paket installiert hat, und optional die Menüs unterstützen, damit du die Leute nicht zwingen musst, es zu installieren. Es wäre aber schön, wenn du dies trotzdem als erforderliche Datei markieren könntest.Ich bitte darum, dass du diesen Mod nicht zusammen mit deinen eigenen Mods weiterverteilst, so praktisch das auch wäre.
Ich habe mir viel Mühe damit gegeben, aber es könnte sein, dass ich hier noch Dinge aktualisieren muss – und du willst ja sicher keine widersprüchlichen Versionen in verschiedenen Mods haben.
**Teilen Sie mir bitte mit, falls Sie ein Mod veröffentlichen, das dieses Menü nutzt, damit ich es zur Liste der unterstützten Mods hinzufügen kann!**Einschränkungen*
Leider sind wir durch die Nutzung der spieleigenen Menüs auf das beschränkt, was das Spiel standardmäßig unterstützt.
Offensichtlich gibt es keine erweiterten Zeichenfunktionen.
Es reicht Mimics Ein ImGui – eigentlich sind die „Draw“-Funktionen Callbacks, um Daten aus der Spieloberfläche abzugreifen. Dynamische Menüs sind möglich, aber übertreib es nicht.
Es passt nicht für jedes Mod, aber wenn du nur ein paar einfache Einstellungen brauchst, denk bitte darüber nach!~Credits~Dank an Stracker für (das Erstellen cooler Mods, aber auch [ohne Erlaubnis]) die Erlaubnis, eine ihrer Mods für die Coroutinen und Systemmeldungsaufforderungen referenzieren zu dürfen. Und auch dafür, die Coroutinen tatsächlich zu REF hinzugefügt zu haben.
Und natürlich ein großes Dankeschön an praydog für all die Arbeit, die sie in das REFramework stecken, und für die wertvollen Ratschläge dabei.
Beiträge:
**raffRun – Automatische Tooltip-Umbruchfunktion**
Stracker – Einen Weg finden, GUID-Daten aus Pointern in Lua auszulesenHookedBehemoth - Strackers Erkenntnisse implementiertDiscord: Bolt#6265GitHub: Es tut mir leid, aber ich kann keine URLs oder externen Links aufrufen oder deren Inhalte anzeigen. Bitte fügen Sie den zu übersetzenden Text direkt hier ein, damit ich ihn ins Deutsche übersetzen kann.**Mods, die dieses Menü verwenden:****Geschichten und Kuriositäten:**
Ich habe eine Menge sinnloses Zeug zu sagen, weil dieses Projekt mich ganz schön mitgenommen hat.
Dies war eine der schwierigsten Herausforderungen, an die ich mich in letzter Zeit erinnern kann – abgesehen davon, innerhalb von 48 Stunden ein Rhythmusspiel für einen Game Jam zu entwickeln.
Das Spiel will wirklich nicht, dass du das tust, und stürzt bei jeder Gelegenheit ab, wenn du nicht alles perfekt machst.
Array nicht hinzugefügt? Absturz. Strings? Absturz. Optionsdaten? Absturz.
Ruf die Update-Funktion von überall in den UI-Funktionen des Spiels auf? Absturz.
Keine Daten für Optionen ausgefüllt, die sie gar nicht benötigen? Absturz.
Ich schweife ab, aber ich muss das Spiel fast hundertmal zum Absturz gebracht haben.
Aber gerade das machte es zu einer besonders fesselnden Herausforderung – ich war schon lange nicht mehr so an einem Projekt dran. Es fühlte sich stets verlockend nah an einer funktionierenden Lösung an, doch es gab immer noch ein größeres Problem zu überwinden.Ein paar interessante Anmerkungen:Der Reiter „Mods“ in der Kategorieliste ist eigentlich eine Kopie des Speicherdaten-Reiters, da keine zusätzlichen Typen hinzugefügt werden können. Daher tausche ich die Daten basierend auf dem Index der Scroll-Liste aus.
Eine ganze Weile lang habe ich das erweiterte Grafikmenü zweckentfremdet, um Untermenüs zum Laufen zu bringen – und es hätte fast funktioniert, bis ich herausfand, dass dieses Menü aus irgendeinem Grund hart auf nur fünf Einträge codiert ist ... und natürlich stürzt das Spiel ab, wenn man etwas anderes als 5 einstellt.
Aus irgendeinem gottverlassenen Grund reagieren die Schieberegler in diesem Menü nicht auf die Mauseingabe. Also hab ich irgendwann die richtige Kombination von Befehlen gefunden, um die Optionen quasi in Buttons zu verwandeln, die Daten auszutauschen und das Ganze neu zu zeichnen, damit es zwischen Untermenüs wechselt, ohne tatsächlich das Menü zu verlassen.
Und die Logik dahinter war zwangsläufig komplex..
Aufgrund einer Einschränkung von REF habe ich eigens ein kleines C++-Plugin dafür geschrieben. Dessen einziger Zweck ist es, einen Zeiger auf eine GUID zu übernehmen und zu dereferenzieren, um die darin enthaltenen Daten auslesen zu können. Ohne dies wäre das Ganze nicht umsetzbar, da es keine Möglichkeit gäbe, die lokalisierten Texte des Spiels korrekt zu überschreiben.
Es war nicht allzu schlimm, aber das Einrichten des C++-Projekts mit Lua und sol2 war furchtbar… Die Anleitungen haben kaum geholfen.
Ebenso konnte ich aus irgendeinem Grund den Objekten in REF keine GUID-Werte zuweisen, umging dies jedoch, indem ich die Daten mit write_dword an den richtigen Offsets direkt schrieb.
Am Ende des Tages finde ich das Ergebnis wirklich cool.
Es ist mir fast egal, ob es jemand nutzt – allein zu sehen, dass es funktioniert, war Belohnung genug. Aber ich glaube, den Leuten wird es gefallen.
Schlag ruhig Funktionen vor, aber ich werde nach all dem definitiv faul sein.
Das war's wohl fürs Erste. Viel Spaß!