ich habe mal eine Frage die vielleicht nicht allen so gut schmeckt aber so wie ich finde doch berechtigt ist.
Ist es möglich bestimmte Patches zu blockieren?
Grund dafür ist z.b. das ich bereits
Fackel per Tastendruck in meiner Mod integriert habe, außerdem auch ein Sprintsystem. usw..
Einige bis jetzt veröffentlichte Patches würden auch die immersion meiner Modifikation kaputt machen.
Fragen zu Returning 2.0 oder alternativem Balacing?
Fast alle Antworten gibt es entweder im Startpost oder als bereits gestellte Frage in diesem Thread
Ja, eine Mod kann Patches als inkompatibel markieren, die dann nicht geladen werden. Wichtig ist hier der Punkt "inkompatibel". Dabei geht es ausschließlich um technische Inkompatibilitäten. Darunter fallen Abstürze oder wenn Features schon in einer Mod enthalten sind (wie bei dir mit den Fackeln und dem Sprinten).
Für alles was über technische Inkompatibilitäten hinausgeht, soll diese Einstellung nicht missbraucht werden, denn sonst verliert sie ihre Effektivität: Eine Mod "verbietet" bspw. einen Patch, weil der Ersteller dessen Geschmack nicht teilt oder der Patch (seiner Meinung nach) nicht in die Atmosphäre oder ins Balancing passt. Spieler haben häufig andere Vorlieben, was Geschmack, Atmosphäre und Balancing angeht (das wurde in diesem Thread und an anderen Stellen zuhauf diskutiert) und werden diese Option irgendwann umgehen. Die Inkompatibilitätsliste würde dann schnell ihren Zweck verlieren. Verantwortungsbewusste Mod-Ersteller, die aufgrund von technischen Inkompatibilitäten auf diese Liste angewiesen sind, müssten sich dann mit Gejaule von Spielern herumschlagen, bei denen dann plötzlich Abstürze auftreten, die eigentlich hätten verhindert werden können.
Für deine Situation bietet sich an, den BessereFackeln-Patch und Sprint-Patch auf diese Liste zu setzen. Auf andere Patches, die möglicherweise die Immersion kaputt machen, solltest du stattdessen lieber in der Mod-Beschreibung hinweisen und diese bitte nicht der Inkompatibilitätenliste hinzufügen.
Hier der Link zu Informationen zu dieser Einstellung, bzw. ein etwas älterer Forenthread. Es versteht sich von selbst, dass dieser Ini-Eintrag nicht groß im Modifikationen-Forum thematisiert werden sollte, damit er wie oben erwähnt nicht von Vornherein von Spieler entfernt wird und seinen Zweck verliert.
Ja, eine Mod kann Patches als inkompatibel markieren, die dann nicht geladen werden. Wichtig ist hier der Punkt "inkompatibel". Dabei geht es ausschließlich um technische Inkompatibilitäten. Darunter fallen Abstürze oder wenn Features schon in einer Mod enthalten sind (wie bei dir mit den Fackeln und dem Sprinten).
Für alles was über technische Inkompatibilitäten hinausgeht, soll diese Einstellung nicht missbraucht werden, denn sonst verliert sie ihre Effektivität: Eine Mod "verbietet" bspw. einen Patch, weil der Ersteller dessen Geschmack nicht teilt oder der Patch (seiner Meinung nach) nicht in die Atmosphäre oder ins Balancing passt. Spieler haben häufig andere Vorlieben, was Geschmack, Atmosphäre und Balancing angeht (das wurde in diesem Thread und an anderen Stellen zuhauf diskutiert) und werden diese Option irgendwann umgehen. Die Inkompatibilitätsliste würde dann schnell ihren Zweck verlieren. Verantwortungsbewusste Mod-Ersteller, die aufgrund von technischen Inkompatibilitäten auf diese Liste angewiesen sind, müssten sich dann mit Gejaule von Spielern herumschlagen, bei denen dann plötzlich Abstürze auftreten, die eigentlich hätten verhindert werden können.
Für deine Situation bietet sich an, den BessereFackeln-Patch und Sprint-Patch auf diese Liste zu setzen. Auf andere Patches, die möglicherweise die Immersion kaputt machen, solltest du stattdessen lieber in der Mod-Beschreibung hinweisen und diese bitte nicht der Inkompatibilitätenliste hinzufügen.
Hier der Link zu Informationen zu dieser Einstellung, bzw. ein etwas älterer Forenthread. Es versteht sich von selbst, dass dieser Ini-Eintrag nicht groß im Modifikationen-Forum thematisiert werden sollte, damit er wie oben erwähnt nicht von Vornherein von Spieler entfernt wird und seinen Zweck verliert.
Danke mud-freak für deine rasche Antwort.
Schön das du soetwas implementier hast. Immerhin ist meine Mod seit 2008 in Entwicklung und demzufolge habe ich bereits vieles im Spiel implementier was es zzt auch als Patch gibt. Ich werde mir dann mal deine Link genauer angucken, bei Fragen melde ich mich dann wieder. Vielen Dank
mal ne kurze Frage: besteht Ninija eigentlich nur aus der ninja.dll? ich habe mehrere Kopien von G2 auf der Platte und Ninja auf einer davon installiert. wenn ich es noch bei einer weiteren Kopie nutzen möchte, genügt es dann einfach die ninja.dll in das andere G2\System-Verzeichnis zu kopieren?
Jein. Ninja selbst besteht nur aus der Ninja.dll. Ob du noch mehr Dateien brauchst, hängt aber davon ab, ob du das SystemPack, Union oder keins der beiden nutzt.
Am sichersten ist es, Ninja einfach mit dem Setup zu installieren. Dann wird alles automatisch geregelt und es wird auch bei möglichen zukünftigen Versionen von Ninja alles richtig laufen.
Jein. Ninja selbst besteht nur aus der Ninja.dll. Ob du noch mehr Dateien brauchst, hängt aber davon ab, ob du das SystemPack, Union oder keins der beiden nutzt.
Am sichersten ist es, Ninja einfach mit dem Setup zu installieren. Dann wird alles automatisch geregelt und es wird auch bei möglichen zukünftigen Versionen von Ninja alles richtig laufen.
ok, danke für die Auskunft. ich benutze btw. bei der einen Installation SP 1.8, bei der anderen SP 1.7
Nachtrag:
ich habe dann doch mal die dll (und den gewünschten Patch) in die andere G2 Installation kopiert, einfach weil es mich interessiert hat und das hat in der Tat nicht funktioniert, Ninja muss also installiert werden.
Fragen zu Returning 2.0 oder alternativem Balacing?
Fast alle Antworten gibt es entweder im Startpost oder als bereits gestellte Frage in diesem Thread
In sehr seltenen Fällen kommt es beim Aufbau von hinzugefügten Menüs zu Problemen, siehe Bild. Ein Neustart reicht und alles ist wieder ok.
Ich habe aber die Vermutung, das es an Ninja selber liegt, ich benutze fast 1:1 den Code auf der Wiki.
In sehr seltenen Fällen kommt es beim Aufbau von hinzugefügten Menüs zu Problemen, siehe Bild. Ein Neustart reicht und alles ist wieder ok.
Ich habe aber die Vermutung, das es an Ninja selber liegt, ich benutze fast 1:1 den Code auf der Wiki.
Nein, an Ninja liegt das nicht. Du hast da etwas falsch verstanden.
Das Skript aus der Dokumentation erlaubt das dynamische Einfügen von neuen Einträgen in existierende Menüs. Das ist notwendig, um die Änderungen einer Mod nicht zu überschreiben.
Neue Menüs sollten als normale Skript-Instanzen "ausgeschrieben" werden. Das ist der Grund, warum es bei dir zu Problemen kommt.
Wenn ich das richtig verstehe, brauche ich sozusagen nur den Eintrag, für die Anwahl des Rennen Menüs, im Gothic Options Menü, in NinjaInit bewerkstelligen und den Rest in der MENU_OPT_CONTROLS_SPRINT.D selber?
Ja, allerdings in der Menu-Initialisierungsfunktion.
Um trotzdem mehrere Sprachen zu unterstützen, legst du entsprechende Menü-Instanzen in verschiedenen Sprachen an und erstellst in der Menü-Initialisierungsfunktion den Eintrag der zum Menü der entsprechenden Sprache führt.
I have unusual question. I see that current version of ninja requires ninja.dll file placed in system folder. Well, last time I used ninja was more than a year ago, but I could swear it didnt have this requirement and whole thing worked only .vdf file loaded. Am I right?
I have unusual question. I see that current version of ninja requires ninja.dll file placed in system folder. Well, last time I used ninja was more than a year ago, but I could swear it didnt have this requirement and whole thing worked only .vdf file loaded. Am I right?
Correct. But back then such a patch required the SystemPack instead (so in terms of requirements, there is not much of a difference). Now Ninja is removed from the patches:
Zitat von Ninja documentation
Since version 2.0, Ninja is implemented as Dynamic Link Library (DLL) that is loaded at start of Gothic. Patches and Ninja are thereby independent from each other. This increases compatibility.
Edit:
Also keine Ahnung ob das so beabsichtigt ist ^^
Ich habe jetzt einfach einen leeren Umbruch in die MENU.SRC gepackt, so das es jetzt 7 Zeilen sind statt 6 und auf einmal klappt es. Anscheinend ließt er immer nur bis zur vorletzten Zeile.
Spoiler:(zum lesen bitte Text markieren)
So ich bin deinem Ratschlag gefolgt und habe das jetzt umgesetzt.
Leider ergibt sich für mich ein unlösbares Problem.
Und zwar immer die letzte, in der MENU.SRC, definierte Instanz will einfach nicht funktionieren. Alle Sprachen davor funktionieren einwandfrei. Wechsel ich also die Sprache und tuhe diese jeweils als letzte in die Liste, haben sie jeweils den Bug. Das völlig kuriose ist jedoch, wenn ich sie Doppelt Iniziere dann klappt es auf einmal.
var int Ninja_Sprint_Lang; Ninja_Sprint_Lang = Ninja_Sprint_GuessLocalization();
// 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, "MENU_OPTIONS")) {
// New menu instances
var string itm1Str2;
itm1Str2 = "MENUITEM_EN_NINJA_SPRINT_OPT";
if (Ninja_Sprint_Lang == 1) {
itm1Str2 = "MENUITEM_DE_NINJA_SPRINT_OPT";
} else if (Ninja_Sprint_Lang == 2) {
itm1Str2 = "MENUITEM_PO_NINJA_SPRINT_OPT";
} else if (Ninja_Sprint_Lang == 3){
itm1Str2 = "MENUITEM_RU_NINJA_SPRINT_OPT";
};
// Get bottom most menu item and new menu items
var int itmL; itmL = MEM_ArrayPop(items); // Typically "BACK"
var int itm1; itm1 = MEM_GetMenuItemByString(itm1Str2);
// If the new ones do not exist yet, create them the first time
if (!itm1) {
itm1 = Ninja_Sprint_CreateMenuItem(itm1Str2);
// Also adjust vertical positions of the menu items
var zCMenuItem itm;
itm = _^(itmL);
var int y; y = itm.m_parPosY;
itm.m_parPosY = y+300; // Move bottom item down
itm = _^(itm1);
itm.m_parPosY = y-260; // Move new item 1 up
};
// (Re-)insert the menu items in the correct order
MEM_ArrayInsert(items, itm1);
MEM_ArrayInsert(items, itmL);
};
// Modify each menu by its name
if (Hlp_StrCmp(menu.name, "MENU_OPT_CONTROLS")) {
// Language
var string itm1Str; var string itm2Str;
itm1Str = "MENUITEM_EN_NINJA_SPRINT_KEY";
itm2Str = "MENUITEM_EN_NINJA_SPRINT_INP";
if (Ninja_Sprint_Lang == 1) {
itm1Str = "MENUITEM_DE_NINJA_SPRINT_KEY";
itm2Str = "MENUITEM_DE_NINJA_SPRINT_INP";
} else if (Ninja_Sprint_Lang == 2) {
itm1Str = "MENUITEM_PO_NINJA_SPRINT_KEY";
itm2Str = "MENUITEM_PO_NINJA_SPRINT_INP";
} else if (Ninja_Sprint_Lang == 3) {
itm1Str = "MENUITEM_RU_NINJA_SPRINT_KEY";
itm2Str = "MENUITEM_RU_NINJA_SPRINT_INP";
};
// Get new items
var int itm1; itm1 = MEM_GetMenuItemByString(itm1Str);
var int itm2; itm2 = MEM_GetMenuItemByString(itm2Str);
// If the new ones do not exist yet, create them the first time
if (!itm1) {
var zCMenuItem itm;
itm1 = Ninja_Sprint_CreateMenuItem(itm1Str);
itm2 = Ninja_Sprint_CreateMenuItem(itm2Str);
// Copy properties of first key binding entry (left column)
var int itmF_left; itmF_left = MEM_ArrayRead(items, 1);
Ninja_Sprint_CopyMenuItemProperties(itm1, itmF_left);
itm = _^(itmF_left);
var int ypos_l; ypos_l = itm.m_parPosY;
// Retrieve right column entry and copy its properties too
var string rightname; rightname = itm.m_parOnSelAction_S;
rightname = STR_SubStr(rightname, 4, STR_Len(rightname)-4);
var int itmF_right; itmF_right = MEM_GetMenuItemByString(rightname);
if (itmF_right) {
Ninja_Sprint_CopyMenuItemProperties(itm2, itmF_right);
} else { // If not found, copy from left column
Ninja_Sprint_CopyMenuItemProperties(itm2, itmF_left);
itm = _^(itm2);
itm.m_parPosX += 2700; // Default x position
};
itm = _^(itmF_right);
var int ypos_r; ypos_r = itm.m_parPosY;
// Find "BACK" menu item by its action (to add the new ones above)
const int index = 0;
repeat(index, MEM_ArraySize(items));
itm = _^(MEM_ArrayRead(items, index));
if (itm.m_parOnSelAction == /*SEL_ACTION_BACK*/ 1)
&& (itm.m_parItemFlags & /*IT_SELECTABLE*/ 4) {
break;
};
end;
var int y; y = itm.m_parPosY; // Obtain vertical position
// Adjust height of new entries (just above the "BACK" option)
itm = _^(itm1);
itm.m_parPosY = y;
itm = _^(itm2);
itm.m_parPosY = y + (ypos_r - ypos_l); // Maintain possible difference
// Get maximum height of new entries
var int ystep; ystep = Ninja_Sprint_MenuItemGetHeight(itm1);
var int ystep_r; ystep_r = Ninja_Sprint_MenuItemGetHeight(itm2);
if (ystep_r > ystep) {
ystep = ystep_r;
};
// Shift vertical positions of all following menu items below
repeat(i, MEM_ArraySize(items) - index); var int i;
itm = _^(MEM_ArrayRead(items, i + index));
itm.m_parPosY += ystep;
end;
};
// Add new entries at the correct position
Ninja_Sprint_ArrayInsertAtPos(items, index, itm1);
Ninja_Sprint_ArrayInsertAtPos(items, index+1, itm2);
};
Geändert von neocromicon (01.11.2020 um 20:20 Uhr)
Ja, das ist normales Verhalten mit SRC-Dateien. Es werden nur Zeilen gelesen, die mit einem Zeilenumbruch enden. Dass das unter normalen Umständen kaum jemandem auffällt, sollte daran liegen, dass meist einfach die vorhandenen SRC-Dateien aus dem Modkit modifiziert werden, die bereits mit einem Zeilenumbruch enden.
Ja, das ist normales Verhalten mit SRC-Dateien. Es werden nur Zeilen gelesen, die mit einem Zeilenumbruch enden. Dass das unter normalen Umständen kaum jemandem auffällt, sollte daran liegen, dass meist einfach die vorhandenen SRC-Dateien aus dem Modkit modifiziert werden, die bereits mit einem Zeilenumbruch enden.
Das wurde irgendwann mit Union klar, warum wohl dieses unvollständige, schlecht-konzipierte ParserExtender-Plugin ins Leben gerufen wurde, das jetzt fortlaufend Inkompatibilitäten hervorruft und nur nervt.
Can you explain what is wrong with the architecture of this plugin?
hier ein request falls der in ordnung geht. wäre es möglich einen ninja-mod zu machen der die fps anzeige einschaltet ohne marvin jedesmal nutzen zu müssen, weil marvin mit aktiven marvin zu spielen vorallem bei mods zu problemen führen soll.? (falls ja eine spine version wäre super)
🎵... Kampfkraft und Wendigkeit sind die Vorraussetzung für jeden Kämpfer ...🎶