Im Prinzip sagt es der Titel schon. Ich nutze DecDat und Ninja.
Die einfache Frage zuerst: Wie ändere ich die Kosten eines Talents?
Spoiler:(zum lesen bitte Text markieren)
Genauer geht es um das Talent "Schleifen & Schärfen", was man in der LHiver 2.04 DE bei Brian lernen kann. Ich dachte, das ganze müsste man hier anpassen:
Spoiler:(zum lesen bitte Text markieren)
Originalwert "1":
Code:
instance dia_brian_train_grind(c_info)
{
if (Hlp_StrCmp(NINJA_MODNAME, "LHE204_DE"))
{
npc = 22899;
nr = 801;
condition = dia_brian_train_grind_condition;
information = dia_brian_train_grind_info;
permanent = true;
description = b_buildlearnstring("Schleifen & Schärfen von Klingen", b_getlearncosttalent(other, npc_talent_grind, 5));
};
};
func int b_teachgrind(var c_npc slf, var c_npc oth, var int talent)
{
if (Hlp_StrCmp(NINJA_MODNAME, "LHE204_DE"))
{
var int kosten;
kosten = b_getlearncosttalent(oth, talent, 5);
};
};
Wenn ich das aber benutze, funktioniert das Lernen nicht mehr, also sobald man das auswählt passiert nichts und man landet im gleichen Dialog, wo man wieder versuchen könnte das Talent zu erlernen.
Weiß jemand wo die beiden Werte zu finden sind, die realen LP Kosten und der angezeigte Wert?
Wenn ich mit Hilfe der "Ninja_create_patch.bat" und GothicVDFS eine Mod erstelle, werden leider alle Buchstaben "ä" falsch angezeigt, die ich kompiliert habe. Alle anderen "ä" werden korrekt dargestellt. Ich guck mal, ob ich einen Screenshot machen kann.
Im originalen Script wird aber in Notepad++ aber auch kein "ä" anzeigt wie ich gerade sehe, sondern nur xE4: [Bild: unbenannt8vd2s.jpg]
Das entspricht nach googlen dem Hexcode eben für "ä".
Ich kann in Notepad++ aber nicht diesen Code kopieren und einfach einfügen
Mit einem korrupten Speicherstand ist nicht zu spaßen. Sicherheitshalber würde ich die beiden Slots über und unter dem korrupten besser auch frei lassen. Man weiß ja nie. - Matteo [Bild: downloadvpk5n.gif]
Geändert von Nobbi Habogs (27.08.2022 um 04:01 Uhr)
You have chosen the wrong place to change the cost, that's why you break the dialogs and dialog conditions, which is unacceptable. The cost of training skills is spelled out in the B_GETLEARNCOSTTALENT function, so you need to change it. In terms of security, it is better to completely copy the original function from the mod and make a hook of this function.
But to be honest i dont know what a hook is and what it does. I dont even know 99,5% of the syntax at all, i keeping it very simple to finish what i try to (just balance weapon values). Anyway, thank you very much, now i know that the costs are saved in "b_getlearncosttalent"
Mit einem korrupten Speicherstand ist nicht zu spaßen. Sicherheitshalber würde ich die beiden Slots über und unter dem korrupten besser auch frei lassen. Man weiß ja nie. - Matteo [Bild: downloadvpk5n.gif]
func int b_getlearncosttalent(var c_npc oth, var int talent, var int skill)
{
if (Hlp_StrCmp(NINJA_MODNAME, "LHE204_DE"))
{
if(talent == npc_talent_grind)
{
//kosten = 1; //original value
kosten = 5;
};
};
};
?
Mit einem korrupten Speicherstand ist nicht zu spaßen. Sicherheitshalber würde ich die beiden Slots über und unter dem korrupten besser auch frei lassen. Man weiß ja nie. - Matteo [Bild: downloadvpk5n.gif]
Mit einem korrupten Speicherstand ist nicht zu spaßen. Sicherheitshalber würde ich die beiden Slots über und unter dem korrupten besser auch frei lassen. Man weiß ja nie. - Matteo [Bild: downloadvpk5n.gif]
Geändert von Nobbi Habogs (26.08.2022 um 11:40 Uhr)
Daedalus ist aber nicht Javascript und dementsprechend ist dieser Tipp leider schwachfug.
Grundsätzlich kann man in den Scripten ganz einfach Umlaute verwenden (leider nicht nur in Strings). Du musst darauf achten, dass die Dateien mit der richtigen Codepage/Kodierung geöffnet bzw. gespeichert werden. In Notepad++ wird das unter dem Reiter "Kodierung" (da wo auch Datei, Bearbeiten, Suchen, ... steht) ausgewählt. Momentan ist dort vermutlich UTF-8 ausgewählt. Dort ANSI auszuwählen sollte reichen. Falls das nicht funktioniert (ANSI ist eigentlich inkorrekt), versuch es mit Weitere -> Westeuropäisch -> ISO 8859-1.
Daedalus ist aber nicht Javascript und dementsprechend ist dieser Tipp leider schwachfug.
Grundsätzlich kann man in den Scripten ganz einfach Umlaute verwenden (leider nicht nur in Strings). Du musst darauf achten, dass die Dateien mit der richtigen Codepage/Kodierung geöffnet bzw. gespeichert werden. In Notepad++ wird das unter dem Reiter "Kodierung" (da wo auch Datei, Bearbeiten, Suchen, ... steht) ausgewählt. Momentan ist dort vermutlich UTF-8 ausgewählt. Dort ANSI auszuwählen sollte reichen. Falls das nicht funktioniert (ANSI ist eigentlich inkorrekt), versuch es mit Weitere -> Westeuropäisch -> ISO 8859-1.
It is not necessary to change the encoding of files in UTF-8.
Also for Germany, you need to use Windows-1252
That is, as you noted, the user needs to edit and create files in ANSI, and then just select the necessary encoding (Windows-1252).
I don't understand what you mean - how can you say you don't need to change away from utf-8 and then immediately recommend changing away from utf-8?
ISO 8859-1/latin-1 and Windows-1252 are basically the same.
Hätte erst fragen sollen mit was er das bearbeitet.
Ich arbeite sonst auch mit Notepad++ und C++.
Es ist schon erstaunlich, dass selbst diese Seite hier aus einem ESC-Code
sofort einen anderen bastelt und die Windows Zeichentabelle wieder einen anderen Code erzeugt.
ANSI sollte gehen, allerdings ändern sich dann alle Umlaute, wenn Du zuvor falsch gespeicherte Daten in ANSI abspeicherst und Du mußt anschließend nochmal korrigieren und erneut speichern.
Darf ich kurz fragen, was diese Datei “Ninja_create_patch.bat” ist, die du im Einleitungspost erwähnst? Handelt es sich dabei um das Batchskript “init.bat” aus dem Ninja-Wiki? Wenn nicht, wäre ich damit vorsichtig.
Zitat von N1kX
In terms of security, it is better to completely copy the original function from the mod and make a hook of this function.
Aus Gründen von Security wahrscheinlich nicht; eher zur Vermeidung von ärgerlicher Parserfehler beim Start. Vielleicht ein Übersetzungsfehler. Die Herangehensweise ist aber auch nicht unbedingt empfehlenswert, denn so überschreibt man effektiv sämtliche Änderung von unterliegenden Mods. Neuartige Lernpunktesysteme, Questtrigger oder andere Anpassungen gehen verloren.
Besser ist es, die Funktion mit dem Hook nicht zu ersetzen, sondern Änderungen vor und nach dem Aufruf der Originalfunktion einzuschleusen. Das bedarf etwas Kreativität und sicherlich auch etwas Erfahrung mit den Skripten. Möglich ist es.
Der Ansatz aus Beitrag überschreibt die gesammte Ursprungsfunktion und macht so deren Nutzen zunichte. Damit sollte so einiges kaputt gehen. Daher müsstest du dich entweder etwas näher ins Skripten einarbeiten oder diese Idee rauslassen.
Hallo, habe das Problem gerade mehr oder weniger durch Zufall gelöst
Eben durch Konvertierung und Umstellung von UTF-8 auf ANSI und erneutem kompilieren, wie einige hier es auch beschrieben haben.
Ich TuS hatte ich auch mal gefragt und dort wurde auch die Kodierung als Fehlerqueller vermutet, deswegen hab ich eben rumprobiert, bevor ich hier reingeguckt habe. Hätte ich auch vorher drauf kommen können Aber naja, einfach so rumprobieren bringt bei mir halt wirklich meist einfach nix, dafür hab ich viel zu wenig Ahnung und Erfahrung, als das ich da ein richtiges Gespür dafür habe, damit auch etwas dabei rauskommt.
Zuerst habe ich die Originale LHiver Mod Datei (als *.d) in Notepad++ geöffnet. Habe ich sowieso teilweise gemacht zwecks Zusammenhänge und schnellerem Finden per STRG+F (CTRL+F). Dann sprang ich zu einer Stelle mit Umlaut und habe "Konvertiere zu ANSI" gewählt, plötzlich wurde alles korrekt angezeigt. Ich hab auch gegengeprüft, wenn ich den ANSI-Text nun versuche in UTF-8 anzugucken, sieht es genauso aus wie bei der originalen Mod.
Demzufolge muss man beim Coden in gewünschten Editor/Notepad umbedingt ANSI wählen!
Ob der Compiler jetzt wirklich ANSI benutzt weiß ich nicht, aber aufjedenfall ist wohl der Großteil der Zeichentabelle, vorallem inklusive der Umlaute, damit kompatibel.
Vielen Dank mal wieder an alle
Zitat von mud-freak
Darf ich kurz fragen, was diese Datei “Ninja_create_patch.bat” ist, die du im Einleitungspost erwähnst? Handelt es sich dabei um das Batchskript “init.bat” aus dem Ninja-Wiki? Wenn nicht, wäre ich damit vorsichtig.
Ja, das ist die init.bat. Vermutlich habe ich die batch-file nicht heruntergeladen, sondern den Inhalt kopiert. Den Namen hat man mir vielleicht aber auch so unter Anleitung gesagt, dass ich die so nennen soll (vermutlich Lehona), weil ich wirklich gar keine Ahnung vom Programmieren hatte, damit ich das besser verstehe wofür die Datei ist.
Zitat von mud-freak
Besser ist es, die Funktion mit dem Hook nicht zu ersetzen, sondern Änderungen vor und nach dem Aufruf der Originalfunktion einzuschleusen. Das bedarf etwas Kreativität und sicherlich auch etwas Erfahrung mit den Skripten. Möglich ist es.
Dir ist klar, dass das bei mir ein eindeutiges "skip" ist, oder?
Ich hab mit meiner Mod gerade eine Sandburg aus Förmchen gebaut, ich kann selbstständig keinen Wintergarten bauen
Mit einem korrupten Speicherstand ist nicht zu spaßen. Sicherheitshalber würde ich die beiden Slots über und unter dem korrupten besser auch frei lassen. Man weiß ja nie. - Matteo [Bild: downloadvpk5n.gif]
Geändert von Nobbi Habogs (27.08.2022 um 03:52 Uhr)