Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Results 1 to 12 of 12
  1. View Forum Posts #1 Reply With Quote
    Schwertmeister neocromicon's Avatar
    Join Date
    Jan 2019
    Posts
    717
     
    neocromicon is online now

    [Patch] PatchMenu - Ein eigenes Menü für Patches

    Info Spieler
    Dieser Patch bietet anderen Patches ein eigenes Menü um die Übersichtlichkeit zu erhöhen. Alleine bietet er keine weiteren Funktionen.

    Info Entwickler
    Spoiler:(zum lesen bitte Text markieren)

    platzhalter

    Download[Bild: flagDE.png] [Bild: flagEN.png]
    PatchMenu_1.0.zip
    Auch über Spine erhältlich
    Auch auf Nexus zu haben

    Voraussetzungen
    Version 1.08k_mod (Gothic 1)
    Reportversion 2.6.0.0 (Gothic 2 DNDR)
    Ninja 2.4.09 oder höher

    Installation
    Einfach die PatchMenu.vdf aus dem ZIP Archiv, in den Ordner [Gothic]\Data\\ kopieren. Zur Deinstallation die Datei einfach entfernen.

    Versionsgeschichte
    Spoiler:(zum lesen bitte Text markieren)

    1.0
    • - Release

    Last edited by neocromicon; 13.11.2021 at 19:00.

  2. View Forum Posts #2 Reply With Quote
    Ritter Draxes's Avatar
    Join Date
    Aug 2007
    Location
    Mainz
    Posts
    1,855
     
    Draxes is offline
    #HYPE (Ich benötige den ersten Kommentar)

  3. View Forum Posts #3 Reply With Quote
    Ritter Kirides's Avatar
    Join Date
    Jul 2009
    Location
    Norddeutschland
    Posts
    1,561
     
    Kirides is online now
    Ich hatte vor einiger Zeit mal sowas gebaut

    Die Anwendung ist recht einfach:
    Ein Patch erstellt einen Menüeintrag, welcher sein entsprechendes Menü aufruft und trägt diesen Eintrag im "Patch Menu" ein

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    func int MyPatch_Ninja_GetPatchNum() {
        if (!NINJA_PATCHES) {
            return 0;
        };
        var zCArray arr; arr = _^(NINJA_PATCHES);
        return arr.numInArray;
    };
    
    func int MyPatch_Ninja_GetPatchObj(var int index) {
        if (index >= MyPatch_Ninja_GetPatchNum()) {
            MEM_Error("Ninja_GetPatchObj: Index out of bounds!");
            return 0;
        };
        return MEM_ArrayRead(NINJA_PATCHES, index);
    };
    
    func string MyPatch_Ninja_GetPatchName(var int index) {
        var int patch; patch = MyPatch_Ninja_GetPatchObj(index);
        if (patch) {
            return STR_FromChar(patch+4);
        } else {
            return "";
        };
    };
    
    func int MyPatch_PatchMenu_AddPatch(var string openMenuItem) {
        const int once = 1;
        const int supported = 0;
        if (once) {
            repeat(i, MyPatch_Ninja_GetPatchNum()); var int i;
                if (Hlp_StrCmp(MyPatch_Ninja_GetPatchName(i), "PATCHMENU")) {
                    // The patch "PATCHNAME" is installed!
                    supported = 1;
                    break;
                };
            end;
            once = 0;
        };
    
        if (!supported) { return 0; };
    
        MEM_PushStringParam(openMenuItem);
        MEM_CallByString("PatchMenu_AddPatch");
        var int success; success = MEM_PopIntResult();
        return success;
    };
    
    /*
    * Menu initialization function called by Ninja every time a menu is opened
    * Source: https://github.com/szapp/Ninja/wiki/Inject-Changes
    */
    func void Ninja_MyPatch_Menu(var int menuPtr) { // Adjust name
        MEM_InitAll();
    
        // Get menu and menu item list, corresponds to C_MENU_DEF.items[]
        var zCMenu menu; menu = _^(menuPtr);
        var int items; items = _@(menu.m_listItems_array);
    	
        if (Hlp_StrCmp(menu.name, "PATCHMENU_PATCHES")) {
            MyPatch_PatchMenu_AddPatch("MYPATCH_MENU_OPEN");
        };
        // ...
    };


    Hier ist die "PatchMenu.vdf" drin, die kümmert sich darum, das das PatchMenu existiert.
    Jeder Patch muss dann für sich, sich selbst zum PatchMenu hinzufügen.
    Theoretisch könnte man das umbauen, sodass das PatchMenu eigenständig nach sowas wie "PATCHNAME_MENU_OPEN" sucht, und wenn das exisitiert selbst hinzufügen. Aber das wollte ich dann nicht, weil das "zu magisch" gewesen wäre

    PatchMenu.zip

    Im Endeffekt schaut das ganze so aus:
    Ein Patch prüft ob das "PatchMenu" installiert ist und fügt sich anschließend der Patch Liste hinzu.

    So ein "Patch Menüeintrag" sieht dann z.B. so aus:
    "MYPATCH_MENU_OPEN" ist dabei der Eintrag der über "PatchMenu_AddPatch" hinzugefügt wird.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    INSTANCE MYPATCH_MENU(C_MENU_DEF) // <-- The actual Menu for your Patch
    {
        backpic		= PATCHMENU_BACK_PIC;
    
        items[0]	= "MYPATCH_MENU_HEADING";
    
        items[1]	= "MENUITEM_OPT_BACK";
    
        defaultOutGame	= 0;	// PERFORMANCE-SETTINGS
        defaultInGame	= 0;	// PERFORMANCE-SETTINGS
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MYPATCH_MENU_HEADING(C_MENU_ITEM_DEF) // <-- Heading for your patches Menu
    {
        text[0]		=	"EXAMPLE PATCH";
        type		=	MENU_ITEM_TEXT;
        // Position und Dimension
        posx		=	0;		posy		=	0;
        dimx		=	8192;
    
        flags		= flags & ~IT_SELECTABLE;
        flags		= flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MYPATCH_MENU_OPEN(C_MENU_ITEM) // <-- Entry added to PatchMenu
    {
        backpic		= PATCHMENU_ITEM_BACK_PIC;
    
        fontName	= PATCHMENU_PATCH_FONT;
        text[0]		= "Beispiel Patch";
        text[1]		= "Beispiel Patch einstellen";
    
        alphaMode		=	"BLEND";
        alpha			=	254;
        type			=	MENU_ITEM_TEXT;
        // Position und Dimension
        posx = PATCHMENU_PATCHES_COL3;  posy = 1200 + 350 * 0; // 1200 -> XPos, 350 Font Height, will be overriden by PatchMenu
        dimx = 2048; // maximum supported width, will be overriden by PatchMenu
        dimy = 350;  // Font Height, will be overriden by PatchMenu
    
        flags			=	IT_CHROMAKEYED|IT_TRANSPARENT|IT_SELECTABLE|IT_TXT_CENTER;
    	
        openDelayTime	=	0;
        openDuration	=	-1;	
    	
        sizeStartScale  = 	1;
    	
        userFloat[0]    =	100;	
        userFloat[1]	=	200;
    	
        onChgSetOption  			=	"";
        onChgSetOptionSection 		= "INTERNAL";
        hideIfOptionSectionSet		= "";
        hideIfOptionSet				= "";
        hideOnValue					= -1;
    	
        frameSizeX		= 0;
        frameSizeY		= 0;
    
            // Aktionen
        onSelAction[0]	= SEL_ACTION_STARTMENU;
        onSelAction_S[0]= "MYPATCH_MENU";
    
    };
    Last edited by Kirides; 13.11.2021 at 17:31.

  4. View Forum Posts #4 Reply With Quote
    Abenteurer
    Join Date
    Sep 2013
    Posts
    95
     
    BeLiaRN1 is offline
    Gute Idee, könnte man auch die Patch Einstellung unter den Menüpunkt Einstellungen packen und nicht im Hauptmenü?

  5. View Forum Posts #5 Reply With Quote
    Ehrengarde mud-freak's Avatar
    Join Date
    Dec 2005
    Posts
    2,050
     
    mud-freak is offline
    Das Einklinken ins bereits existierende Plugin-Menu hat nicht funktioniert?

    Ich finde es, wie beschrieben, hinfällig alles doppelt zu erstellen und dass Plugins und Patches in zwei verschiedenen Welten leben, ständig die selben Ideen fast identisch nachbauen, und der Eindruck erweckt wird “was ist besser, als Patch oder als Plugin??”. Warum hier ein eigenes Menü.

    Elegant wäre wirklich, wenn ein Patch sich in das Plugin Menü einklinken, wenn es dieses findet, und ansonsten trotzdem funktioniert - nur halt ohne Menu, nur über die Ini erreichbar. Optional, ohne diese Abhängigkeit.

    Die, meiner Meinung nach, tatsächlich schlechteste Variante ist es, wie hier, neue Abhängigkeiten zu erstellen, sodass keiner deiner Patches mehr ohne diesen mehr läuft. Das geht in gewisser Hinsicht genau entgegen der Idee, dass Patches unabhängig und ohne weitere Vorraussetzungen laufen.

    Deshalb gibt es auch keine extra Ikarus-LeGo Patches. Wenn mal ein Bug auftritt oder ein Update nötig wird, werden die Leute verrückt, wenn man ständig irgendwelche sekundären Ressourcen aktualisieren muss, die man evtl. nicht mal will oder weiß was sie machen. Und wenn sich jemand von der Moddingszene zurückzieht, laufen alle Patches mit ein solcher Abhängigkeit den Bach runter, wenn die Software nicht länger unterstützt, gepflegt und aktualisiert wird.

    Ich hatte mir erhofft, jemand würde sich mit dem Plugin Untermenü etwas auseinandersetzen, damit ich das nicht auch noch machen muss (oder zumindest die Forumsuche betätigen, um auf den oben verlinkte Diskussion zu stoßen).

  6. View Forum Posts #6 Reply With Quote
    Ritter Kirides's Avatar
    Join Date
    Jul 2009
    Location
    Norddeutschland
    Posts
    1,561
     
    Kirides is online now
    Quote Originally Posted by mud-freak View Post
    Das Einklinken ins bereits existierende Plugin-Menu hat nicht funktioniert?

    Ich finde es, wie beschrieben, hinfällig alles doppelt zu erstellen und dass Plugins und Patches in zwei verschiedenen Welten leben, ständig die selben Ideen fast identisch nachbauen, und der Eindruck erweckt wird “was ist besser, als Patch oder als Plugin??”. Warum hier ein eigenes Menü.
    Das war der Grund warum ich "mein" PatchMenu nirgends eingebaut habe und auch nicht selbst "offiziell" veröffentliche. Das Beispiel weiter oben ist nur das, ein Beispiel wie so ein PatchMenu aussehen kann und funktionieren kann.

    Quote Originally Posted by mud-freak View Post
    Elegant wäre wirklich, wenn ein Patch sich in das Plugin Menü einklinken, wenn es dieses findet, und ansonsten trotzdem funktioniert - nur halt ohne Menu, nur über die Ini erreichbar. Optional, ohne diese Abhängigkeit.
    ...
    Ich hatte mir erhofft, jemand würde sich mit dem Plugin Untermenü etwas auseinandersetzen, damit ich das nicht auch noch machen muss (oder zumindest die Forumsuche betätigen, um auf den oben verlinkte Diskussion zu stoßen).
    Damit habe ich mich ehrlich gesagt noch überhaupt nicht auseinander gesetzt. Das Menü habe ich auch noch nie gesehen.

    Spiele einfach ohne Union Plugins.
    Das liegt aber nicht daran, dass diese "schlecht" sind - im Gegenteil, mit Union kann man echt super schön aufwändiges Zeug sicher umsetzen für G1 und G2.

    Der Grund warum ich mich damit bisher nicht weiter befasst habe, ist ganz einfach:
    Es gibt immer noch eine menge Spieler die Union einfach nicht benutzen wollen und bei z.B. Systempack 1.7 bleiben wollen.

  7. View Forum Posts #7 Reply With Quote
    Lehrling
    Join Date
    Oct 2021
    Location
    Brandenburg
    Posts
    40
     
    Butter12 is offline
    Quote Originally Posted by Kirides View Post
    Es gibt immer noch eine menge Spieler die Union einfach nicht benutzen wollen und bei z.B. Systempack 1.7 bleiben wollen.
    Weil du gerade die version 1.7 erwähnst, gibt es einen Unterschied oder vielleicht etwas warum man darauf bleiben sollte oder ist das 1.8/1.9 auch gut?
    Ich frage nur, weil ich keine Ahnung von den ganzen Einträgen und somit Fixes davon habe.

  8. View Forum Posts #8 Reply With Quote
    Schwertmeister neocromicon's Avatar
    Join Date
    Jan 2019
    Posts
    717
     
    neocromicon is online now
    Eins vorne weg, selbst wenn ich mal wirklich nicht mehr das Forum öffnen sollte, so bin ich über zig Kanäle erreichbar und würde bei Änderungen sofort einen Fix raushauen.
    Wenn ich etwas Scripte/Programmiere, fühle ich mich dessen auch verpflichtet das es läuft solange ich auf Erden wandere.

    Ich habe das ganze so transparent und einfach wie möglich gestaltet. Der User bekommt sogar einen bit.ly Download Link, auf Spine wird einem auch direkt gesagt was man herunterladen muss, Nexus das selbe Spiel. Ich habe auch ein paar vorrab Test's gemacht ob die Leute verstehen was zu tun ist und keiner hatte damit Probleme, auch nicht Gothic Spieler.

    Wenn ich da andere Mods in anderen Spielen sehe, mit ihren 10+ Abhängigkeiten, ist das hier wirklich "lächerlich".

    Genau deshalb habe ich nicht das Union Menü gewählt, aus dem Grund den Kirides schon schreibt. Ich bin sehr aktiv in der Gothic Com außerhalb von WoG und es gibt unglaublich viele Union Gegner, die Union aus seinen schlechten Tagen noch kennen und daher bis heute nicht anrühren. Deshalb will ich diesen Leuten aber nicht den Komfort, den ich ihn gebe, verwehren. Eine Ini verwirrt die Leute wesentlich mehr als irgend ein Zusatz Patch damit sie es schön haben. Ich habe es oft genug auf Twitch und in verschiedenen Discords gesehen.

    Wie oft kam die frage, wie stelle ich bei Autosave den die Minuten ein usw. x100 ? "Ja da steht was mit Gothic.ini, aber ich habe doch kein Plan was ich da machen soll" oder "Ne hab angst da was Falsch zu machen, mach du mal bitte neo". Es ist wie es ist, heutzutage sitzen nun mal größtenteils keine versierten User mehr vorm PC. Sich aber etwas zusätzlich zu Installieren, wenn es gut erklärt ist, das schaffen so gut wie alle, sie kennen es schließlich von anderen Spielen wie Skyrim usw. und wer es nicht schafft kann mich jederzeit anschreiben.

  9. View Forum Posts #9 Reply With Quote
    Lehrling
    Join Date
    Oct 2021
    Location
    Brandenburg
    Posts
    40
     
    Butter12 is offline
    Quote Originally Posted by neocromicon View Post
    ...
    Und es ist auch gut, dass du nicht Union gewählt hast. Denn nach 13 Versuchen das Teil zum Laufen zu bringen, kann ich wohl zu Recht sagen, es ist absolut grauenvoll (Kenne Union erst seit Version 1.0i).

    Danke also für deine Patches! A+
    Einen Durchlauf ohne jene, kann ich mir gar nicht mehr vorstellen!

  10. View Forum Posts #10 Reply With Quote
    Waldläufer TopLayer's Avatar
    Join Date
    Nov 2020
    Posts
    186
     
    TopLayer is offline
    Quote Originally Posted by Butter12 View Post
    Denn nach 13 Versuchen das Teil zum Laufen zu bringen, kann ich wohl zu Recht sagen, es ist absolut grauenvoll (Kenne Union erst seit Version 1.0i).
    From what I understood from your posts in the Union thread, it follows that you can run Union and Ninja separately, but you cannot run them together. Then the question arises: why are you blaming Union and not Ninja or some third source of evil?

  11. View Forum Posts #11 Reply With Quote
    Ehrengarde mud-freak's Avatar
    Join Date
    Dec 2005
    Posts
    2,050
     
    mud-freak is offline
    Es hätte Spaß gemacht, erst die Diskussion von hier (ff.) weiterzuführen. Ich bin mir sicher wir hätten zusammen eine gute Lösung gefunden. Die Ansätze von dort und auch die, die Kirides hier geteilt hat, hätten zu einer schönen Implementierung führen können. Schade.

  12. View Forum Posts #12 Reply With Quote
    Schwertmeister neocromicon's Avatar
    Join Date
    Jan 2019
    Posts
    717
     
    neocromicon is online now
    Ich bin sicher nicht davor abgeneigt das ganze besser lösbar zu machen, es ist ja nicht so das mir die ganze Sache beim erstellen keine Bauchschmerzen bereitet hatte, ich sah aber erstmal mit meinen Fähigkeiten keine andere Lösung für das Problem

    Daher habe ich ein bisschen gegrübelt, das einzige was mir jetzt so eingefallen ist wäre, das Ninja von Haus aus ein Menü mitbringt was man benutzen kann wenn der User kein Union benutzt. Man könnte dann eine if {} else Abfrage einbauen und so entweder bei Benutzung des Systempacks sich in das Ninja Menü einklinken oder halt in das Union Menü, so müsste der User erstmal nix weiteres Installieren. Ja dabei bliebe natürlich das Problem der "Zwei Universen", am ende des Tages interessiert das aber nur den Entwickler, aber nicht den User. Dem ist es am ende doch egal, Hauptsache es geht einfach

    Es gibt aber sicher noch wesentlich besseres, ohne das Ninja selbst da eingreifen muss, aber da fällt mir beim besten willen nix ein.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide