Crystals-DSA-Foren

Normale Version: Einen Lehrmeister erschaffen?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hat irgendwer eine Idee wie man einen NPC erstellt der  bestimmte  Zaubern und SF anbietet zum erlernen?

Die Sachen mit den Dialogen kann ja zum Glück erspart bleiben, dank dem Magister Buch im Magierturm.

Wenn man das Magister Buch oben im Turm anklickt, öffnet es sich ja automatisch mit Zaubern die man erlernen kann



Könnte man eine Kopie davon machen, andere erlernbare Zauber diesen Buch hinzufügen und dieses Buch dann an einen bestimmten Platz aufstellen?
Ja, das geht alles. Habe ich schon gemacht. Das ist aber schon ein paar Jahre her, weiß ich leider nicht mehr auswendig. Soll es jetzt ein neuer NPC/Lehrmeister sein oder lieber ein Zauberbuch?
Mir direkt, wäre ein Zauberbuch lieber.
Das Magiebuch ist ein NPC, er hat nur einen anderen Skin. Schau dir mal den Eintrag mit der Id locr01_magierturm_skillbook_01 bis in der _Instance_NPC an. Das ist das Magielehrbuch aus dem Magierturm.
(05.12.2023, 19:48)Lord Demon schrieb: [ -> ]Das Magiebuch ist ein NPC, er hat nur einen anderen Skin. Schau dir mal den Eintrag mit der Id locr01_magierturm_skillbook_01 bis in der _Instance_NPC an. Das ist das Magielehrbuch aus dem Magierturm.

Ja, habe mir den Eintrag gerade mal durchgelesen.

Gibt dort eine Spalte namens "TeachableSkills" für die Talente/Sprüche die der NPC den Helden dann erlernen kann


Eine einfache Duplikation dieses NPC's wird aber wohl nicht ausreichen? Da werden wohl noch zusätzliche Einträge für Scripts oder ähnliches nötig sein?



Im Thema Scripts/Dialoge und ähnliches habe ich echt keine Ahnung von.



Aber der eigentliche Punkt ist, hier für gerade so wenig Aufwand wie möglich zu stecken. Es soll nur seinen Zweck erfüllen. Es kann von mir aus auch ein Gegenstand sein, den man sich ins Inventar steckt. Dafür muss jetzt kein großes Fass aufgemacht werden. Die leichteste Methode und gut ist.

Code:
Wäre dir Mega dankbar dafür
(05.12.2023, 23:44)MiracleXXL schrieb: [ -> ]Eine einfache Duplikation dieses NPC's wird aber wohl nicht ausreichen? Da werden wohl noch zusätzliche Einträge für Scripts oder ähnliches nötig sein?

Den Datensatz einfach zu duplizieren würde bedeuten, dass du das Buch zweimal am gleichen Ort hast. Da sind natürlich noch ein paar Anpassungen notwendig wie z. B. der Ort, an dem das Buch liegen soll.

(05.12.2023, 23:44)MiracleXXL schrieb: [ -> ]Im Thema Scripts/Dialoge und ähnliches habe ich echt keine Ahnung von.

Ich habe vor ein paar Jahren mal hier ein Tutorial zum Einstieg ins Drakensang Modding geschrieben. Vielleicht hast du ja Lust da mal reinzuschauen.

(05.12.2023, 23:44)MiracleXXL schrieb: [ -> ]Aber der eigentliche Punkt ist, hier für gerade so wenig Aufwand wie möglich zu stecken. Es soll nur seinen Zweck erfüllen. Es kann von mir aus auch ein Gegenstand sein, den man sich ins Inventar steckt. Dafür muss jetzt kein großes Fass aufgemacht werden. Die leichteste Methode und gut ist.

Drakensang Modding ist immer zeitaufwendig und langwierig. Das lässt sich leider nicht vermeiden. Mit wenig Aufwand wirst du nicht weit kommen.

(05.12.2023, 23:44)MiracleXXL schrieb: [ -> ]
Code:
Wäre dir Mega dankbar dafür

Soll heißen, ich soll dir ein entsprechendes Buch anlegen? Dann brauche ich aber ein paar Infos mehr. Vielleicht komme ich am Wochenende dazu.
Das einzige was ich möchte, ist doch nur, dass man das Buch anklicken kann und sich dann ein Fenster öffnet, wo man bestimmte Zauber und SF Fähigkeiten erlernen kann. Wie bei einen normalen Lehrmeister halt. Es soll auch keine Text Dialoge enthalten oder so.





Ist schließlich nicht mein 1. Tag mit dem Modding. Habe schon vor paar Woche mich schon mit beschäftigt. Auch schon viele eigene Gegenstände, Truhen, NPC's, Monster eingefügt. Nur habe ich 0 Ahnung was die Scripts angeht


Das Buch habe ich nicht nur "dupliziert". Natürlich habe ich es abgeändert. Mit anderer ID und jenes andere auch. Es steht, wenn man es genauer wissen will, auf dem Boot am Anfang. 



SQL Anweisung von "Neues Magierbuch" in der gamea1.db4 Datenbank

Ich kann dir kurz erklären, wie das Magiebuch im Spiel umgesetzt ist.

Das Buch selbst ist ein NPC. Da du schon ein Duplikat angelegt hast, ist die sicherlich aufgefallen, dass beim Zeigen auf das Buch keine Sprechblase erscheint, wie es bei NPCs sonst üblich ist, sondern nur der Standardpfeil. Das bedeutet, dass mit diesem Buch-NPC kein Dialog verknüpft ist. Beim Originalbuch im Magierturm erscheint das Zahnrad als Maussymbol. (Musste ich mir erst anschauen, ist schon ein paar Jahre her, dass ich das letzte Mal AFdZ gespielt habe.) Das Zahnradsymbol hat mir jedenfalls gesagt, dass hier ein Objekt verwendet wird, um das Trainerfenster aufzurufen. Ein Suche in der Tabelle _Instance_StateObject bringt einen Buchständer im Magierturm als Resultat. man klickt also gar nicht das Buch, sondern den Buchständer an. 

Der Buchständer enthält in der Spalte ScriptPreset ein Script, das in der Tabelle DSA_Preset hinterlegt ist. Das Preset wiederum ruft ein ActionScript auf und das ActionScript dann das Statement mit einer ShowTrainerUI Anweisung, die dann wieder den Buch-NPC verlinkt. Das Statement des Originalbuchs ist ziemlich komplex, da es noch mehrere Conditions enthält um es zu ermöglichen den Bestand an Zaubern und Talenten im Skillbook zu verändern. So komplex wie hier, wird das Statement bei dir wahrscheinlich nicht sein müssen.
Hab jetzt einfach mal ein Duplikat von diesen Buchständer angelegt.

Das Script ist genauer gesagt


locr01_preset_magierturm_skillbook.xml



In der Tabelle DSA_Preset sind 2 Einträge hinterlegt, nicht 1. Einmal eine CanAction Anweisung und eine OnAction Anweisung



[Bild: etuzzhhd_png.htm]



locr01_on_use_magierturm_skillbook.xml




Zeigt mir folgendes an unter _Scripts_ActionScripts 




[Bild: 3yne9rek_png.htm]




Danach habe ich leider von dir nur noch Bahnhof verstanden.

Genauer gesagt ab den Wort "Statement"




Was muss jetzt angelegt werden und was kann so bleiben wie es ist?
Tur mir leid, dass du ab Statement nichts mehr verstanden hast, aber da wir in dem Gebietswechselthread schon über ActionScripts und Statements geredet haben, bin ich davon ausgegangen, du weißt wovon ich rede.

(07.12.2023, 01:21)MiracleXXL schrieb: [ -> ]Was muss jetzt angelegt werden und was kann so bleiben wie es ist?


Neu anlegen musst du das Preset, die damit zusammenhängenden Actionscripts und die die daon aufgerufenen Statements. Von dem vorhandenen kannst du leider gar nichts übernehmen, da sich alles auf das Buch im Magierturm bezieht.

Das ist jetzt die Kurzfassung, die Langfassung kommt später.
Hier jetzt die Langfassung.

Schauen wir uns mal das Preset genauer an. In der Spalte PresetScriptName finden wir die Einträge locr01_can_use_magierturm_skillbook.xml und locr01_on_use_magierturm_skillbook.xml. Das erste Script ist in der Tabelle _Scripts_ConditionScripts hinterlegt, das zweite in der Tabelle _ScriptsActionscripts. Werfen wir zunächst einen Blick auf das Script locr01_on_use_magierturm_skillbook.xml. Dieses ruft ein Statement mit der StatementGUID X'00BFCCAF6A2C274CA38CF257AF297A82' und der StatementBlockGUID X'405E761D16646046939817F6BC6E4396' in der Tabelle _Scripts_Statements auf. Nächster Anlaufpunkt ist also die Tabelle _Scripts_Statements. Dieses Statement enthält nur eine Anweisung, es ruft ein weiteres Script mit dem Namen SetScript_locr01_on_use_magierturm_skillbook.xml_1 auf. Wenn wir jetzt dieses Script in der Tabelle _Scripts_ActionScripts nachschlagen finden wir den Verweis auf ein Statement mit der StatementGUID X'EC7A4753D98255459D552B6287FB44BB' und der StatementBlockGUID X'35F9D65579E16F49A8CAB171FFA28891'. Also gehen wir wieder zurück in die Tabelle _Scripts_Statements und suchen und die dazugehörigen Einträge raus.

Dieses Statement ist relativ komplex aufgebaut. Es enthält nicht einfach nur eine Anweisung, die ausgeführt werden soll, sondern auch noch eine Reihe von Bedingungen, die erfüllt sein müssen, damit die jeweilige Anweisung auch ausgeführt wird. Wie du vielleicht schon festgestellt hast ist in der Tabelle _Instance_NPC nicht nur ein Buch-NPC sondern es sind vier aufgelistet, jeweils mit unterschiedlichen Zaubern/Talenten. Die Bedingungen in dem Statement fragen ab, ob bestimmte Questen schon abgeschlossen sind. Welches Skillbook geöffnet wird ist also davon abhängig wie weit du im Spiel schon fortgeschritten bist. Je weiter du bist, desto mehr Zauber können gelernt werden.

Diese Komplexität wird du wahrscheinlich gar nicht benötigen, deshalb gehe ich jetzt nicht weiter auf Conditions ein.

Was braucht du also um ein eigenes Skillbook zu erstellen? Den NPC und das StateObject hast du schon. Jetzt brauchst du noch eine neues Preset, dann das ActionScript, das das Preset aufruft und ein Statement das das Fenster mit den Zaubern/Talenten öffnet. Das sollte eigentlich reichen, aber eine 100%ige Garantie kann ich dir, ohne es selbst getestet zu haben nicht geben.


Edit: Möglicherweise reicht es auch aus nur das ActionScript und das Statement anzulegen und auf das Preset zu verzichten. Das ActionSCript wird dann direkt in die Zelle ScriptOverride mit vorangestelltem on:Use: eingetragen. Ist noch einfacher und sollte eigentlich funktionieren.
(07.12.2023, 10:46)Lord Demon schrieb: [ -> ]Hier jetzt die Langfassung.

Schauen wir uns mal das Preset genauer an. In der Spalte PresetScriptName finden wir die Einträge locr01_can_use_magierturm_skillbook.xml und locr01_on_use_magierturm_skillbook.xml. Das erste Script ist in der Tabelle _Scripts_ConditionScripts hinterlegt, das zweite in der Tabelle _ScriptsActionscripts. 


Also damit ich das jetzt richtig verstehe.


Das 1. Script also locr01_can_use_magierturm_skillbook.xml ist in der Tabelle _Scripts_ConditionScripts

Das 2. Script also locr01_on_use_magierturm_skillbook.xml ist in der Tabelle _ScriptsActionscripts


So hattest du es mir jedenfalls oben geschrieben



Leider finde ich locr01_on_use_magierturm_skillbook.xml nicht in der Tabelle _ScriptsActionscripts



Das locr01_can_use_magierturm_skillbook.xml Script habe ich gefunden in der Tabelle _Scripts_ConditionScripts
Das Script muss vorhanden sein. Wäre es nicht da würdest jedesmal beim Aufruf eine Fehlermeldung bekommen. Ist aber auch nicht so wichtig, das Entscheidende steht ohnehin in dem Statement.
(07.12.2023, 19:38)Lord Demon schrieb: [ -> ]Das Script muss vorhanden sein. Wäre es nicht da würdest jedesmal beim Aufruf eine Fehlermeldung bekommen. Ist aber auch nicht so wichtig, das Entscheidende steht ohnehin in dem Statement.

Wo genau befindet sich das "Statement"? Die Frage hattest du mir immer noch nicht beantwortet. Das einzige was ich zu deiner Erklärung finde sind in Tabellen, Zeilennamen die "StatementRef" oder "StatementBlock" heißen und die alle einen individuellen Wert(BLOB) besitzen.
(07.12.2023, 23:37)MiracleXXL schrieb: [ -> ]Wo genau befindet sich das "Statement"? Die Frage hattest du mir immer noch nicht beantwortet. Das einzige was ich zu deiner Erklärung finde sind in Tabellen, Zeilennamen die "StatementRef" oder "StatementBlock" heißen und die alle einen individuellen Wert(BLOB) besitzen.


Doch, habe ich oben schon beantwortet.

Zitat:Werfen wir zunächst einen Blick auf das Script locr01_on_use_magierturm_skillbook.xml. Dieses ruft ein Statement mit der StatementGUID X'00BFCCAF6A2C274CA38CF257AF297A82' und der StatementBlockGUID X'405E761D16646046939817F6BC6E4396' in der Tabelle _Scripts_Statements auf.

Da stehen ganz deutlich die BLOBs des entsprechenden Statements.
locr01_on_use_magierturm_skillbook.xml wird mir nur unter _DSA_Preset angezeigt


locr01_on_use_magierturm_skillbook.xml befindet sich in keiner anderen Tabelle ansonsten


In deiner gesagten Tabelle befindet sich nur ein ähnliches Script namens SetScript_locr01_on_use_magierturm_skillbook.xml_1
Hier ein paar Screenshots aus meiner statica1.

[attachment=6728][attachment=6729][attachment=6730]
Also das ganze wird mir hier jetzt doch zu viel. Hatte am Anfang nur gedacht, dass man das Script nur duplizieren braucht. Aber anscheinend müssen da noch zich andere Einträge gemacht werden, weils wohl sonst in Konflikt mit schon vorhandenen Statements kommt, also bei einer einfachen Duplikation des Scripts. Das ist alles hoch kompliziert. Lassen wir das Thema sein. Es geht ja auch nur um ein Lehrmeister
Ob das jetzt hochkompliziert ist, darüber kan man streiten. Ich würde es eher als komplexes Beispiel für ein Statement bezeichnen. Aber es ist sicherlich anspruchsvoller als ein paar Monster irgendwo hinzusetzen.

Letztendlich geht es darum zu verstehen, was hier passiert und für die eigenen Bedürfnisse anzupassen. Was wird also für ein Buch als Lehrmeister benötigt?

  1. Eine Kopie des Buch-NPCs in der _Instance_NPC
  2. Eine Kopie des Buchständers in der _Instance_StateObject
  3. Ein ActionSript, das das Statement zum Öffnen des Lernfensters aufruft
  4. Ein Statement, das das Lernfenster öffnet.

Buch und Buchständer hast du ja schon dupliziert. Beim Buchständer musst du jetzt noch folgende Änderungen vornehmen:

  1. Inhalt des Feldes ScriptPreset löschen
  2. In das Feld ScriptOverride das neue Script eintragen

Ich habe das Script einfach mal show_skillbook.xml genannt. In das Feld ScriptOverride trägst du jetzt on:Use:show_skillbook.xml ein.

Code:
INSERT INTO "_Scripts_ActionScripts" VALUES('show_skillbook.xml',X'E05EC315879CD4C6FC928AC26F29E1F7',X'A8F10C0A8F518210F906CB19E8EE5936');

Die beiden BLOB-Werte in dem ActionScript beziehen sich auf das aufzurufende Statement.

Code:
INSERT INTO "_Scripts_Statements" VALUES(X'E05EC315879CD4C6FC928AC26F29E1F6','Action','ShowTrainerUI trainer="hier-Name-des-NPC-eintragen" actionSelection="script,quest,dialog" seCategory="all,ui"; ',X'A8F10C0A8F518210F906CB19E8EE5936');

INSERT INTO "_Scripts_Statements" VALUES(X'E05EC315879CD4C6FC928AC26F29E1F7','Begin','15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6',X'A8F10C0A8F518210F906CB19E8EE5936');

Du musst jetzt nur noch das Statement anpassen, in dem du den Names deines Buch-NPCs einträgst.

Ich finde, das sieht jetzt gar nicht mehr so kompliziert aus, oder? :)
Also ich bin bei den BLOBs da nicht mehr durchgestiegen. Weil nämlich in der _Scripts_ActionScripts Tabelle die 2 BLOBs unter StatementRef und StatementBlock stehen. Aber in der Tabelle _Scripts_Statements stehen nur StatementGUID und StatementBlockGUID. Das ist mein eigentliches Problem.


Könntest du mir vielleicht eine genauere Erklärung darüber geben wie die BLOBs von deinen Anweisungen zusammenhängen? Und was dieser Zahlencode dort bedeutet 15c35ee0-9c87-c6d4-fc92-8ac26f29e1f6'
Seiten: 1 2 3