Diese Datei regelt das Rauswerfen von Mitgliedern einer Gruppe. Wenn man im Spielbildschirm die Gruppe ändert und diesen Charakter entfernt, wird dieser Dialog gestartet.
Die Datei beginnt also mit
BEGIN charP
IF Global(``CHARKickedOut'',''GLOBAL'',0) Global(``CHARJoinedParty'',''GLOBAL'',1) THEN BEGIN 1
Die Variable soll sicherstellen, dass der Charakter nicht aus der Gruppe entfernt wurde. Sie ist unbedingt notwendig! Die Funktion kann nicht von der Variablen CHARJoinedParty übernommen werden. Zumindest war dies bei mir einmal eine Fehlerquelle. Ich sehe keinen Grund für diese neue Variable, Wes Weimer auch nicht, aber es ging nicht ohne (empirisches Wissen vs. Logik). Mit CHARJoinedParty stellen wir sicher, dass ich der Charakter auch in der Gruppe befindet.
SAY Ich soll Euch verlassen?
IF THEN REPLY Nein, ich kann nur meine Maus nicht bedienen. DO JoinParty() EXIT
Nach dem ``Entfernen'' über den Spielbildschirm gilt ein Charakter als entfernt. Will man das Verhindern muss man ihn praktisch wieder aufnehmen. Dazu die Aktion JoinParty().
IF THEN REPLY Ja, weg mit Euch. DO SetGlobal(``CHARKickedOut'',''GLOBAL'',1) SetGlobal(``CHARJoinedParty'',''GLOBAL'',0) EXIT
END
Nachdem der Charakter aus der Gruppe etngültig entfernt wurde, müssen wir die beiden Variablen auf den richtigen Wert setzen.
Jetzt müssen wir dem Charakter die Möglichkeit geben wieder aufgenommen zu werden:
IF Global(``CHARKickedOut'',''GLOBAL'',1) Global(``CHARJoinedParty'',''GLOBAL'',0) THEN BEGIN 2
Wir stellen mit Hilfe der beiden Variablen fest, dass der Charakter aus der Party geworfen wurde.
SAY Was denn, soll ich mitreisen oder nicht? Wisst Ihr überhaupt, was Ihr wollt?
IF THEN REPLY Reist mit uns! DO SetGlobal(``CHARKickedOut'',''GLOBAL'',0) SetGlobal(``CHARJoinedParty'',''GLOBAL'',1) JoinParty() EXIT
IF THEN REPLY Bleibt wo Ihr seid! EXIT
END
Das ganze jetzt noch mal zusammen:
BEGIN charP
IF Global(``CHARKickedOut'',''GLOBAL'',0) THEN BEGIN 1
SAY Ich soll Euch verlassen?
IF THEN REPLY Nein, ich kann nur meine Maus nicht bedienen. DO JoinParty() EXIT
IF THEN REPLY Ja, weg mit Euch. DO SetGlobal(``CHARKickedOut'',''GLOBAL'',1) SetGlobal(``CHARJoinedParty'',''GLOBAL'',0) EXIT
END
IF Global(``CHARKickedOut'',''GLOBAL'',1) Global(``CHARJoinedParty'',''GLOBAL'',0) THEN BEGIN 2
SAY Was denn, soll ich mitreisen oder nicht? Wisst Ihr überhaupt, was Ihr wollt?
IF THEN REPLY Reist mit uns! DO SetGlobal(``CHARKickedOut'',''GLOBAL'',0) SetGlobal(``CHARJoinedParty'',''GLOBAL'',1) JoinParty() EXIT
IF THEN REPLY Bleibt wo Ihr seid! EXIT
END
Theoretisch kann ein Char auch irgendwohin geschickt werden. Dazu kann man in Dialog 1 noch folgende Antwort hinzunehmen.
IF THEN REPLY Geht in den Tempelbezirk. DO SetGlobal(``CHARKickedOut'',''GLOBAL'',1) SetGlobal(``CHARJoinedParty'',''GLOBAL'',0) MoveGlobal(``AR0900'',''CHAR",[2029.3136]) EXIT
Hierzu haben wir die Aktion MoveGlobal verwendet. AR0900 gibt das Gebiet an (den Tempelbezirk), in das CHAR an den Ort [x,y] gehen soll. x und it y sind die Koordinaten auf der Karte. Man sollte vor den Benutzung der Koordinaten sicherstellen, dass dort auch ein freier Platz ist (auf dem hier benutzten steht schon MEIN NPC!). CHAR ist die DeathVariable (DV) des Charakters, diese ist der spielinterne ``Name'' des Charakters. Er muss nicht identisch mit dem normalen Namen des Charakters sein, da der normale Name manchmal ja länger als 8 Zeichen sein soll. Dadurch können zwei unterschiedlich Charaktere denselben Namen haben, ihre DV muss aber unterschiedlich sein. Wie weiter unten (siehe 3.2.7) beschrieben gibt es auch andere Aktionen für den Gebietswechsel. Ach ja, noch für die Korrekten. Die im Spiel enthaltenen NPCs können aus der Unterwelt nicht in ein anderes Gebiet gehen. Wenn man also das nachemfpinden will, muss für die obere Antwort die Bedingung rein, dass es sich nicht um eine Unterweltkarte handeln darf. Eine einzige Bedinung dafür gibt es nicht. Man muss JEDE Unterweltkarte überprüfen. Die Daten holt man sich aus den *P.dlg-Dateien der Original-NPCs.