[Modding] Wie erstelle ich tp2-Dateien und sonstige Fragen zu diesem Thema?

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Hier eine Frage:
Code:
EXTEND_BOTTOM ~%Candlekeep_Catacombs_L1%.BCS~ ~morenco/areaskripte/bg2615.baf~
Beim Kompilieren werden jetzt aus der bg2615.baf die Variablen (%xy%) nicht durch ihre Werte ersetzt, sondern direkt als String kompiliert. Normalerweise sollte ja ein EVALUATE_BUFFER dann dafür sorgen. Nur: egal wo ich den in der Zeile einfüge, es gibt eine Fehlermeldung... Oder muss ich hier tatsächlich zuerst das Skript mit EVALUATE_BUFFER kompilieren und im Anschluss die bcs-Datei in die ursprüngliche bcs einfügen?
Code:
COMPILE EVALUATE_BUFFER ~morenco/areaskripte/bg2615.baf~
EXTEND_BOTTOM ~%Candlekeep_Catacombs_L1%.BCS~ ~override/bg2615.bcs~ (mal abgesehen davon, dass der Dateiname schon vorbelegt ist...)

edit: das Skript enthält Syntax in der Form:
Code:
CreateCreature("%Skelwa3_cre%",[3141.2242],9)
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
EXTEND_BOTTOM hat als dritten Parameter eine Patch-List und dort kann man u. a. auch EVALUATE_BUFFER nutzen.
Code:
EXTEND_BOTTOM ~%Candlekeep_Catacombs_L1%.BCS~ ~morenco/areaskripte/bg2615.baf~
    EVALUATE_BUFFER
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Na super... die Version hatte ich schon ausprobiert und eine Fehlermeldung bekommen (Syntax error near EVALUATE). Aber weil Taimon es gesagt hat, habe ich nochmal alles nachgeschaut und durch Zufall gesehen, dass ich ein paar Zeilen später EVALUATE BUFFER stehen hatte (ohne den Unterstrich; daher kam der Syntax error). Ok, immerhin hat es jetzt funktioniert und ich bin wieder schlauer...
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Noch ein Nachtrag zu EVALUATE_BUFFER: das muss vor USING stehen.

[Gelöst]
Und die eigentliche Frage ist: ich hab einen Code geschrieben und verstehe nicht, was falsch daran ist?
Code:
BEGIN @2 DESIGNATED 1 LABEL Mor Charakter // Install the Core Component

Lasse ich das DESIGNATED weg, dann funktionierts:
Code:
BEGIN @2 // DESIGNATED 1 LABEL Mor Charakter // Install the Core Component

Da ich den Syntax allerdings schon erfolgreich verwendet hatte (und von anderen abgeschaut), bin ich verwirrt. Oder ich sehe den Fehler nicht. Ist übrigens für alle Komponenten der tp2 der Fall, liegt nicht an der spezifischen Komponente. Fehlermeldung ist, dass der Parser etwas aus einer langen Liste an Befehlen erwartet hätte. Aber das Element ist so zentral, dass ich denke, dass jemand hier den Fehler bei mir sehen müsste ;)

edit: ich habs dann doch noch gefunden: Das LABEL muss ein Wort sein. Unterstriche rein und gut is.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Und die zweite Frage: kann ich bei ACTION_IF in den Bedingungen ein OR(x) formulieren wie in Skripten? Oder geht das einfach nicht?
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.918

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Kannst du mal einen Beispielsyntax machen, weil ich es nicht hinbekommen habe (hab dann einfach 2 Blöcke draus gemacht).

Ich hatte:
Code:
ACTION_IF MOD_INSTALLED OR(2) ~aa~ ~ab ~bb~ ~bc
und auch
Code:
ACTION_IF OR(2) MOD_INSTALLED ~aa~ ~ab~ MOD_INSTALLED ~bb~ ~bc~

Hat beides nicht funktioniert und Parse-Fehler gegeben.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.918
Code:
ACTION_IF ((FILE_EXISTS ~dlc/sod-dlc.zip~) OR (FILE_EXISTS ~sod-dlc.zip~)) THEN BEGIN
beispiel von mir.

Vielleicht mit Klammern vrsuchen?
EDIT: Ja, ne, Lösung ist natürlich OR als andere Syntax als in d- und baf-Dateien.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Das habe ich gesucht ;)

Ich hatte im ersten Anlauf auch mit einer normalen IF-Anweisung gearbeitet und erst beim Installationsversuch gemerkt, dass das in der tp2 nicht geht. War heute morgen wieder einiges an der Lernkurve :D Aber es hat nach einer Stunde geklappt (jede Menge Syntax-Fehler und Schreib-Fehler in den baf- und d-Dateien).
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
So, ich habe ein Problem, wie ich die Installation einer Mod abprüfen kann in der tp2. Und zwar eines Kits.

Im Moment habe ich:
MOD_IS_INSTALLED ~ArtisansKitpack.tp2~ ~18~

Aber der Autor ändert die Reihenfolge praktisch mit jedem Release, wobei das Kit konstant dasselbe bleibt. Ich könnte das Kit in der KIT.IDS suchen lassen. Es heißt praktisch immer (bisher): C0WSHAM; und wird so vermutlich auch bleiben.

Mit UNLESS geht das denke ich nicht, weil ich ja vorher im Trigger prüfen will. ACTION_IF EXISTS geht aber glaube ich nur auf Dateien? Ich geh mal in anderen Mods suchen...
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.918
Reihenfolge ist egal, sofern die DESIGNATED-Zahl dieselbe bleibt? Hat die Komponente ein LABEL, das sollte auch gleich bleiben?
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Hm, MOD_IS_INSTALLED triggert auf die Einträge in der Weidu.log dachte ich? Und ja, DESIGNATED ändert sich (zumindest in den bei mir installierten Versionen).

Aber ich habe glaube ich die Lösung: es werden zusätzliche Zauber installiert, da müsste ich auf die Dateien triggern können. Mit FILE_EXISTS_IN_GAME. Und für das Kit sind die Spells auch einzigartig, die werden nicht in anderen Kits auch verwendet.
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Vielleicht allgemein gut zu wissen: wenn man in der tp2 einer CRE ein Kit zuweisen will, dann ist der Slot in der Anzeige von NI 244. Aber man muss wohl die 246 nehmen. Das Feld ist 4 Hexwerte groß und fängt wohl nur bei 244 (bis 247), das Kit gehört aber bei 246 eingetragen.
Ob das für alle Kits gilt, weiß ich dann auch nicht. Folgender Syntax hat auf jeden Fall funktioniert und wird auch in Kit-Mods verwendet.
Code:
WRITE_SHORT 0x246 (IDS_OF_SYMBOL (~kit~ ~C0WSHAM~))
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.378
Und noch eine Frage: Ist %MOD_FOLDER% eine Variable, die immer verstanden wird, oder muss ich das irgendwo definieren? Ich vermute, es bezeichnet den Ordner, der so heißt, wie die Setup-xxx.exe (weidu).
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
wenn man in der tp2 einer CRE ein Kit zuweisen will, dann ist der Slot in der Anzeige von NI 244. Aber man muss wohl die 246 nehmen. Das Feld ist 4 Hexwerte groß und fängt wohl nur bei 244 (bis 247), das Kit gehört aber bei 246 eingetragen.
Intern sind es zwei 16-Bit Werte, die zusammen in einem 32-Bit Wert abgelegt werden.
Dieser ist in der CRE-Datei allerdings im "Big Endian"-Format gespeichert. Das höherwertige Wort steht also als erstes in der Datei. (Keine Ahnung warum, vermutlich aus historischen Gründen.)
Deswegen funktioniert ein WRITE_LONG 0x244 nicht, denn das würde die Daten in "Little Endian"-Form ablegen. (Zumindest auf den klassischen x86/x64-PCs.)

Der Vollständigkeit halber würde ich noch zusätzlich ein WRITE_SHORT 0x244 0 hinzufügen.
Falls aus irgendeinem Grund dort was anderes als 0 steht, passt sonst der 32-Bit Wert nicht mehr.

Ist %MOD_FOLDER% eine Variable, die immer verstanden wird, oder muss ich das irgendwo definieren?
Die Variable wird von WeiDU gesetzt. In der Readme steht:
The MOD_FOLDER variable is set to the directory containing the TP2 file, if there is one, otherwise it is set to the root directory of directoryName.
Das directoryName bezieht sich auf die BACKUP directoryName
 
Oben