Diese Datei ist für die Interaktion des NPC mit anderen Gruppenmitliedern (auch dem HC) und ist nicht unbedingt erforderlich. Nicht-NPCs fangen mit dieser Datei nichts an. Diese Dialoge werden über das Skript (siehe 4.5) mit dem Befehl Interact(``DV des Gruppenmitgliedes'') gestartet.
Zuerst werde ich ein Gespräch zwischen unserem Charakter und einem anderen Mitglied der Gruppe (also zwei Personen) behandeln. Als Beispiel werde ich einen Dialog mit Nalia führen.
Der Anfang ist schon bekannt:
BEGIN Bchar
Dann schauen wir, ob der Charakter, mit dem unser NPC sprechen soll, überhaupt in der Gruppe ist und dieser Dialog nicht schon stattgefunden hat.
IF IsValidForPartyDialog(``Nalia'') Global(``CHARtalksNalia'',''LOCALS'',0) THEN BEGIN 1begin
IsValidForPartyDialog fragt nach, ob der Charakter in der Klammer Mitglied der Gruppe ist. Der abgefragte Name ist die DV. 1begin ist der Name des Dialogs. Die Variable, die nachher auf 1 gesetzt wird, soll sicherstellen, dass der Dialog nur einmal gesprochen wird. Wenn man den Dialog gezielt starten will kann man hier noch alternativ eine weitere Variable abfragen, die dann durch das Skript gesetzt wird (siehe 4.5).
SAY Hübsche Frisur, Nalia.
IF THEN DO SetGlobal(``CHARtalksNalia'',''LOCALS'',1) EXTERN BNALIA chartalk1
END
Ohne eine Bedingung geht es weiter. Wir setzen die Variable, dass der Dialog stattgefunden hat. Danach sage wir mit EXTERN, dass es in einer anderen Datei mit dem Dialog chartalk1 weitergeht. Diese Datei soll BNALIA sein, Nalia's Bchar.dlg. Wie die Bchar.dlg eines Charakters heisst, kann man mit NearInfinity (NI) feststellen. Dazu öffnet man die interne Datei interdia.2DA. Dort steht hinter der DV der Name der Bchar-Datei (und wenn man TdB installiert hat, noch der Name der Bchar25-Datei).
Als nächstes müsste man nun in die BNALIA.DLG Nalia's Antwort einbringen. Dies geschieht mit folgendem Syntax:
APPEND BNALIA
IF THEN BEGIN chartalk1
APPEND Datei fügt der Datei Datei.dlg den nachfolgenden Syntax hinzu. Dabei muss darauf geachtet werden, dass APPEND wie eine neue *.dlg Datei (BEGIN Datei) wirkt und deshalb an das Ende der *.d-Datei gesetzt werden sollte. Ohne eine Bedinung lassen wir jetzt Nalia ihren Spruch aufsagen.
SAY Danke!
IF THEN EXIT
END
END
Das erste END gehört zu dem BEGIN, das zweite beendet den Einschub APPEND.
Nun wollen wir wahrscheinlich auch mal längere Dialoge machen. Das wäre mit dem obigen Modell sehr lästig, deshalb gibt es eine elegantere Methode. Wir verwenden denselben Einstieg in den Dialog (bis ...chartalk1 END). Danach benutzen wir eine Dialogkette (CHAIN).
CHAIN BNALIA chartalk1
Dieser Syntax sagt, dass es in der Kette mit der Datei BNALIA weitergeht und der Dialog chartalk1 ist. Dann folgt Nalia's Text:
Findest du. Ich war schon lange nicht mehr beim Friseur!
== Bchar
Doch, du kämmst sie sicherlich jeden Tag
== zeigt an, dass es mit dem Text in der nächsten Datei (Bchar) weitergeht, dann kommt der Text von char. Und so geht es in einem fort.
== BNALIA
Da hast du allerdings recht. Ich finde man sollte ich zumindest morgens mal die Haare kämmen.
== Bchar
Leider ist das, wenn man auf Reisen ist, manchmal recht schwierig.
So langsam wollen wir aber zum Schluss kommen. Also beenden wir mit dem nächsten Beitrag die Kette.
== BNALIA
Ja, da stören manchmal so aufdringliche Monster, die einfach keinen Sinn für die Notwendigkeit von Körperpflege haben.
END Bchar 1end
END beendet die Kette. Danach wird darauf verwiesen, wo es weitergeht (nämlich in der Datei Bchar mit dem Dialog 1end. Eine Kette kann nicht direkt beendet werden, sie muss in einen Dialog zurückgeführt werden. Genauso braucht es einen Anfangsdialog, der in die Kette führt. Einen Zweizeiler kann man also nicht mit einer Kette ausdrücken. Das Ende des Dialogs haben wir dann wieder in der Datei Bchar:
IF THEN BEGIN 1end
SAY Du sagst es, Männer sind allerdings manchmal auch nicht besser als Monster.
IF THEN EXIT
END
Das Ende würde man auch in den APPEND-Block schreiben, wenn Nalia das ``letzte Wort'' haben soll. Zum Schluss noch mal alles in einem Guss:
BEGIN Bchar
IF IsValidForPartyDialog(``Nalia'') Global(``CHARtalksNalia'',''LOCALS'',0) THEN BEGIN 1begin
SAY Hüsche Frisur, Nalia.
IF THEN DO SetGlobal(``CHARtalksNalia'',''LOCALS'',1) EXTERN BNALIA chartalk1
END
CHAIN BNALIA chartalk1
Findest du. Ich war schon lange nicht mehr beim Friseur!
== Bchar
Doch, du kämmst sie sicherlich jeden Tag
== BNALIA
Da hast du allerdings recht. Ich finde man sollte ich zumindest morgens mal die Haare kämmen.
== Bchar
Leider ist das, wenn man auf Reisen ist, manchmal recht schwierig.
== BNALIA
Ja, da stören manchmal so aufdringliche Monster, die einfach keinen Sinn für die Notwendigkeit von Körperpflege haben.
END Bchar 1end
IF THEN BEGIN 1end
SAY Du sagst es, Männer sind allerdings manchmal auch nicht besser als Monster.
IF THEN EXIT
END
Ein Dialog mit mehreren Teilnehmern läuft ähnlich ab. Genaueres folgt in späteren Versionen.