10.12.2023, 11:05
(Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2023, 11:05 von Lord Demon.)
Statements führen ganz allgemein ausgedrückt eine Aktion aus. Das kann z. B. Ein Item übergeben, eine Animation abspielen, einen NPC erscheinen lassen oder auch AP vergeben sein.
Werfen wir zunächst einen Blick auf den Aufbau der Tabelle _Scripts_Statements. Die Tabelle hat vier Spalten. Wir beginnen mit der letzten Spalte, der StatementBlockGUID. Jese Statement besteht aus midestens zwei Zeilen in der Tabelle. Welche Zeilen zu einem Statement gehören, erkennt man an der StatementBlockGUID. Wenn du dir mein Beispiel anschaust siehst du, dass beide Zeilen eine identische StatementBlockGUID haben, nämlich
X'A8F10C0A8F518210F906CB19E8EE5936'.
Grundsätzlich ist die StatementBlockGUID frei wählbar, du musst nur darauf achten, dass sie noch nicht verwendet wird.
Die StatementGUID ist ein eindeutiger BLOB, d. h. Jeder Wert darf nur einmal vorkommen. Auch hier musst du bei neuen Statements darauf achten, dass der BLOB noch nicht vorhanden ist, sonst wird ein bestehender Eintrag überschrieben.
Kommen wir jetzt zur Spalte StatementType. Bei der ersten Zeile findest du den Wert Action, bei der zweiten den Wert Begin. Da ein Statement immer aus mehreren Zeilen besteht, muss das Spiel/die Engine wissen, mit welcher Zeile das Statement beginnt. Deshalb steht hier der Wert Begin. Bei Zeilen die tatsächliche Aktionen enthalten, steht hier der Wert Action.
Bleibt noch die Spalte StatementContent. Steht in StatementType der Wert Action, dann enthält StatementContent die tatsächlich durchzuführende Aktion. In diesem Fall eben das Öffnen des Lehrmeister Fensters. In der Zeile mit Begin steht immer ein seltsamer Wert wie
15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6,
der auf den ersten Blick keinen Sinn zu ergeben scheint. Nennen wir diesen Wert einfach mal Identifikator. Bei diesem Wert handelt es sich um nichts Anderes als eine andere
Schreibweise des BLOBs aus der ersten Zeile des Statements. D. h. Die Zeile mit Begin ruft die Zeile mit Action auf.
Wie kommt jetzt die andere Schreibweise des BLOBs zustande?
Der BLOB der ersten Zeile meines Statements lautet E05EC315879CD4C6FC928AC26F29E1F6. (Das X und die einfachen Anführungszeichen lasse ich der Verständlichkeit halber jetzt weg). Der Wert in der zweiten Zeile lautet 15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6.
Wenn wir diese beidenWerte mal untereinander notieren, sieht man, dass diese beiden recht ähnlich sind.
E05EC315879CD4C6FC928AC26F29E1F6
15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6
Teilen wir den BLOB mit Bindenstrichen ebenfalls in fünf Gruppen, erhält man
E05EC315-879C-D4C6-FC92-8AC26F29E1F6
Wie du siehst sind die beiden letzten Gruppen identisch mit den beiden letzten Gruppen des Identifikators. Nur werden statt Großbuchstaben Kleinbuchstaben verwendet. Wir haben also FC92-8AC26F29E1F6 und fc92-8ac26f29e1f6.
Auch die ersten drei Gruppen sind im Prinzip identisch, nur werden beim Identifikator diese Gruppen in umgekehrter Reihenfolge notiert. Aus E05EC315 wird 15c35ee0,
aus 879C wird 9c87 und aus D4C6 wirdc 6d4. Jogs Drakensang BLOB-Tool ist hier eine große Hilfe. Kannst du dir auf seiner Seite herunterladen.
Das ActionScript wird benötigt um das Statement aufzurufen. Dazu musst du die StatementGUID in der Zeile mit Begin bei StatementRef eintragen und die StatementBlockGUID in StatementBlock.
Um eigene BLOBs und die entsprechenden Identifikatoren zu erzeuge, habe ich mir eine BLOB Generator programmiert. Hänge ich einfach mal an, vielleicht kannst du ihn ja gebrauchen.
blob-gen.exe (Größe: 308,08 KB / Downloads: 3)
Werfen wir zunächst einen Blick auf den Aufbau der Tabelle _Scripts_Statements. Die Tabelle hat vier Spalten. Wir beginnen mit der letzten Spalte, der StatementBlockGUID. Jese Statement besteht aus midestens zwei Zeilen in der Tabelle. Welche Zeilen zu einem Statement gehören, erkennt man an der StatementBlockGUID. Wenn du dir mein Beispiel anschaust siehst du, dass beide Zeilen eine identische StatementBlockGUID haben, nämlich
X'A8F10C0A8F518210F906CB19E8EE5936'.
Grundsätzlich ist die StatementBlockGUID frei wählbar, du musst nur darauf achten, dass sie noch nicht verwendet wird.
Die StatementGUID ist ein eindeutiger BLOB, d. h. Jeder Wert darf nur einmal vorkommen. Auch hier musst du bei neuen Statements darauf achten, dass der BLOB noch nicht vorhanden ist, sonst wird ein bestehender Eintrag überschrieben.
Kommen wir jetzt zur Spalte StatementType. Bei der ersten Zeile findest du den Wert Action, bei der zweiten den Wert Begin. Da ein Statement immer aus mehreren Zeilen besteht, muss das Spiel/die Engine wissen, mit welcher Zeile das Statement beginnt. Deshalb steht hier der Wert Begin. Bei Zeilen die tatsächliche Aktionen enthalten, steht hier der Wert Action.
Bleibt noch die Spalte StatementContent. Steht in StatementType der Wert Action, dann enthält StatementContent die tatsächlich durchzuführende Aktion. In diesem Fall eben das Öffnen des Lehrmeister Fensters. In der Zeile mit Begin steht immer ein seltsamer Wert wie
15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6,
der auf den ersten Blick keinen Sinn zu ergeben scheint. Nennen wir diesen Wert einfach mal Identifikator. Bei diesem Wert handelt es sich um nichts Anderes als eine andere
Schreibweise des BLOBs aus der ersten Zeile des Statements. D. h. Die Zeile mit Begin ruft die Zeile mit Action auf.
Wie kommt jetzt die andere Schreibweise des BLOBs zustande?
Der BLOB der ersten Zeile meines Statements lautet E05EC315879CD4C6FC928AC26F29E1F6. (Das X und die einfachen Anführungszeichen lasse ich der Verständlichkeit halber jetzt weg). Der Wert in der zweiten Zeile lautet 15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6.
Wenn wir diese beidenWerte mal untereinander notieren, sieht man, dass diese beiden recht ähnlich sind.
E05EC315879CD4C6FC928AC26F29E1F6
15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6
Teilen wir den BLOB mit Bindenstrichen ebenfalls in fünf Gruppen, erhält man
E05EC315-879C-D4C6-FC92-8AC26F29E1F6
Wie du siehst sind die beiden letzten Gruppen identisch mit den beiden letzten Gruppen des Identifikators. Nur werden statt Großbuchstaben Kleinbuchstaben verwendet. Wir haben also FC92-8AC26F29E1F6 und fc92-8ac26f29e1f6.
Auch die ersten drei Gruppen sind im Prinzip identisch, nur werden beim Identifikator diese Gruppen in umgekehrter Reihenfolge notiert. Aus E05EC315 wird 15c35ee0,
aus 879C wird 9c87 und aus D4C6 wirdc 6d4. Jogs Drakensang BLOB-Tool ist hier eine große Hilfe. Kannst du dir auf seiner Seite herunterladen.
Das ActionScript wird benötigt um das Statement aufzurufen. Dazu musst du die StatementGUID in der Zeile mit Begin bei StatementRef eintragen und die StatementBlockGUID in StatementBlock.
Um eigene BLOBs und die entsprechenden Identifikatoren zu erzeuge, habe ich mir eine BLOB Generator programmiert. Hänge ich einfach mal an, vielleicht kannst du ihn ja gebrauchen.
blob-gen.exe (Größe: 308,08 KB / Downloads: 3)