Dafür einen Thread zu machen finde ich nicht verkehrt.
Bei einem exitierenden Dlg musst Du die Statenummer wissen, genau. Spezialfälle hier sind in der BGT die Dlgs der NPCs in BG1, die auch in BGII auftauchen, weil diese in der BGT hinten an die BGII-Dialoge angehängt werden. Sprich: Imoens Dlg aus BG1 ist irgendwo an ihren Dlg von BGII angehängt. Das sind dann zwar auch feste Nummern, aber eben andere Zahlen als für BG:EE oder EET (in der EET patcht man mit der Mod auch den BG1-Dialog. Der wird dann danach von der EET_End zusammengeführt, da muss man sich als Modder nicht um verschobene Statenummern kümmern).
Also, Du weißt die Statenummer. Dann kannst Du mit EXTEND_BOTTOM eine weitere Antwortoption einfügen. Die Syntax dazu ist folgende und kommt in eine d-Datei:
Code:
EXTEND_BOTTOM ~BRAGE~ 9
+ ~Global("C#q13Brage_AskedQuestions","GLOBAL",0) GlobalLT("C#Q13_BragesSwordQuest","GLOBAL",3)~ + @6 + brage_01
+ ~Global("C#q13Brage_AskedQuestions","GLOBAL",0) GlobalLT("C#Q13_BragesSwordQuest","GLOBAL",3)~ + @7 + brage_08
END
Die Höflichkeitsregel ist hier, dass man dies auch wirklich nur über EXTEND_BOTTOM macht. Der Grund ist, dass andere Mods eventuell bestimmte Antwortoptionen mit zusätzlichen Transaktionen oder auch Triggern versehen möchten. Fügt eine Mod vorher eine Antwortoption über EXTEND_TOP ein, verschieben sich die Nummern der Reply Options und die nachfolgende Mod patcht die falsche Antwortoption. (In I4E verwende ich eine Syntax von Argent, die das verhindert. Die wird aber nicht von allen anderen Mods verwendet.)
Sagen wir mal, Du möchtest nicht nur eine Antwortoption einfügen, sondern ein Charakter / NPC soll voher noch einen Satz sagen. Dann ginge das auch über EXTEND_BOTTOM, ist aber recht aufwändig. Hier eignet sich INTERJECT, das den Originalgesprächsfluss unterbricht und umleitet (im Gegensatz zu INTERJECT_COPY_TRANS). INTERJECT sollte daher nur verwendet werden, wenn 1. der Gespächsfluss definitiv gestört werden soll, oder 2. es mit einem COPY_TRANS des ursprünglichen Dialog-States endet, um den Abstecher als Kreis zu schließen und den Originaldialog wieder aufzunehmen (je nachdem, wie der NPC Einwurf mit Antwortoptionen aussehen soll).
Die Syntax hiervon wäre z.B. so. Dies ist ein geschlossener Einwirf mit Rückführung zum Originaldialog. Es ist Greys freudiges "Wau" wenn Oubleck Greywolf erwähnt, der HC kann darauf antworten, Oublek sagt noch was, dann geht der Originaldialog normal weiter, was über das COPY_TRANS gewährleistet wird:
Code:
INTERJECT ~%tutu_var%OUBLEK~ 0 C#GreyOublek0
== C#GreyJ IF ~OR(2) InParty("C#Grey") Global("C#GreyJoined","GLOBAL",2) //Abfrage die auch 7. Partymember-Modus berücksichtigt
InMyArea("C#Grey") !StateCheck("C#Grey",CD_STATE_NOTVALID)~ THEN @60
END
++ @61 EXTERN ~%tutu_var%OUBLEK~ grey_ict
++ @62 EXTERN ~%tutu_var%OUBLEK~ grey_ict
++ @63 EXTERN ~%tutu_var%OUBLEK~ grey_ict
APPEND ~%tutu_var%OUBLEK~
IF ~~ THEN grey_ict
SAY @64
COPY_TRANS ~%tutu_var%OUBLEK~ 0
END
END //APPEND
COPY_TRANS muss ich ja nur nutzen, wenn da noch andere sich dranhängen könnten (also bei populären Einmischstellen...)?
COPY_TRANS kopiert alle (bis zur Installation Deiner Mod) vorhandenen Antwortoptionen des Originalstates an die Stelle, wo Du es gesetzt hast. Wenn über EXTEND_BOTTOM eine neue Antwortoption einfügst, kommt es darauf an, was Du möchtest. Machst Du dadurch einen Parallelweg auf? Dann reicht es, wenn Du nach der Antwort wieder zurück zum Originalgespächsverlauf gehst - aber an einer späteren Stelle. Oder ist Deine Antwortoption ein Abstecher, zum Beispiel eine zusätzliche Erklärung, und der Spieler soll danach nochmal die Fragen stellen können, die an dem State hingen, an den Du die weitere Antwortoption gesetzt hast? Dann lässt Du Deinen "Abstecher" mit COPY_TRANS enden und der Spieler sieht alle vorher vorhandenen Antwortoptionen nochmal, nachdem er Deine Frageoption mit Antwort durchgespielt hat.
Das mit den Einmischdialogen ist so eine Sache. Jeder Einmischdialog (mit COPY_TRANS, also auch I_C_T) verschiebt die nachfolgenden Reply Options zu dem sich einmischenden NPC. Das ist das Problem, warum I4E so früh wie möglich installiert werden muss. Denn sobald ein NPC sich an einer Stelle einmischt, an der man nach der verschwundenen Imoen fragen kann, findet I4E diese Stelle nicht mehr. I4E patcht dann zwar immer noch die Originalstelle (z.B. in Tolgerias' Dialog) - aber die dort vorhandenen Antwortoptionen werden dem Spieler nicht mehr angezeigt, sondern nur die nach dem NPC-Einwurf. Das ist auch der Grund, warum Brage's Sword vor BG1NPC installiert werden muss weil sonst die Antwortoption, ihn der Garnison abzuliefern, verloren geht.
Daher gibt es eine zweite Högflichkeitsregel: keinen Einmischdialog in einen Dlgstate machen, der Antwortoptionen enthält. Weil sonst jede Mod nach Deiner keine Antwortoptionen mehr an diesen State anhängen kann bzw. mit Triggern oder Aktionen versehen, da die in Deiner Mod kopierten ausgeführt werden, und nicht mehr die im Originalste.
Ja - diese Regel wird fröhlich von BG1NPC und auch meinen NPC-Mods gebrochen - das Beispiel oben mit der INTERJECT für Grey ist genau eine solche Stelle.
Ich denke aber, dass man die wirklich wichtigen Stellen, wo man Questcharakteren Fragen stellen kann z.B. Thalantyr in seinem "immer wahren" Dialogstate nachdem er zu Beginn rumgemuffelt hat, oder Cromwell wenn er Sachen schmieden soll - ganz gut erkennen kann und diese States dann auf alle für Einmischdialog auslässt.