next up previous contents
Nächste Seite: Die char25P.dlg Aufwärts: WeiDU Vorherige Seite: Zusätzliche Antwort(en)   Inhalt

Die Bchar.dlg

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 $\sim$IsValidForPartyDialog(``Nalia'') Global(``CHARtalksNalia'',''LOCALS'',0)$\sim$ 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 $\sim$Hübsche Frisur, Nalia.$\sim$

IF $\sim\sim$ THEN DO $\sim$SetGlobal(``CHARtalksNalia'',''LOCALS'',1)$\sim$ EXTERN BNALIA chartalk1

END

Ohne eine Bedingung $\sim\sim$ 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 $\sim\sim$ 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 $\sim\sim$ lassen wir jetzt Nalia ihren Spruch aufsagen.

SAY $\sim$Danke!$\sim$

IF $\sim\sim$ 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:

$\sim$Findest du. Ich war schon lange nicht mehr beim Friseur!$\sim$

== Bchar

$\sim$Doch, du kämmst sie sicherlich jeden Tag$\sim$

== 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

$\sim$Da hast du allerdings recht. Ich finde man sollte ich zumindest morgens mal die Haare kämmen.$\sim$

== Bchar

$\sim$Leider ist das, wenn man auf Reisen ist, manchmal recht schwierig.$\sim$

So langsam wollen wir aber zum Schluss kommen. Also beenden wir mit dem nächsten Beitrag die Kette.

== BNALIA

$\sim$Ja, da stören manchmal so aufdringliche Monster, die einfach keinen Sinn für die Notwendigkeit von Körperpflege haben.$\sim$

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 $\sim\sim$ THEN BEGIN 1end

SAY $\sim$Du sagst es, Männer sind allerdings manchmal auch nicht besser als Monster.$\sim$

IF $\sim\sim$ 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 $\sim$IsValidForPartyDialog(``Nalia'') Global(``CHARtalksNalia'',''LOCALS'',0)$\sim$ THEN BEGIN 1begin

SAY $\sim$Hüsche Frisur, Nalia.$\sim$

IF $\sim\sim$ THEN DO $\sim$SetGlobal(``CHARtalksNalia'',''LOCALS'',1)$\sim$ EXTERN BNALIA chartalk1

END

CHAIN BNALIA chartalk1

$\sim$Findest du. Ich war schon lange nicht mehr beim Friseur!$\sim$

== Bchar

$\sim$Doch, du kämmst sie sicherlich jeden Tag$\sim$

== BNALIA

$\sim$Da hast du allerdings recht. Ich finde man sollte ich zumindest morgens mal die Haare kämmen.$\sim$

== Bchar

$\sim$Leider ist das, wenn man auf Reisen ist, manchmal recht schwierig.$\sim$

== BNALIA

$\sim$Ja, da stören manchmal so aufdringliche Monster, die einfach keinen Sinn für die Notwendigkeit von Körperpflege haben.$\sim$

END Bchar 1end

IF $\sim\sim$ THEN BEGIN 1end

SAY $\sim$Du sagst es, Männer sind allerdings manchmal auch nicht besser als Monster.$\sim$

IF $\sim\sim$ THEN EXIT

END

Ein Dialog mit mehreren Teilnehmern läuft ähnlich ab. Genaueres folgt in späteren Versionen.


next up previous contents
Nächste Seite: Die char25P.dlg Aufwärts: WeiDU Vorherige Seite: Zusätzliche Antwort(en)   Inhalt
maus 2003-02-14