Plot und Script

Schreiten wir jetzt zur Beseitigung der bemängelten Fehler. Hierbei muss man versuchen, sich in die Lage des Spielers zu versetzen, der möglicherweise anders agiert, als es der Entwickler vorgesehen hat.


Küchentür deaktivieren

Damit der Spieler nicht zu den Spinnen gelangen kann, bevor er überhaupt den Auftrag erhalten hat, diese zu töten, müssen wir die Tür zunächst für ihn deaktivieren.

Hierfür stellen wir im Object Inspector ihre Eigenschaft interactive von true auf false.
Steht man unmittelbar vor der Tür, kann man diese nun doch mittels Doppelklick öffnen. Deshalb stellen wir die Eigenschaft Initial state auf closed_locked und öffnen die Tür erst später mittels Script wieder.

Questeinträge ins Journal

Wir erstellen nun einen Plot für unsere Aufgabe, die Spinnen in der Küche zu töten.

File -> New -> Plot. Es wird wieder eine Ordnerstrukur angelegt (Lehrjahre/Plot/Ar100)
Ich erstelle mir jetzt einen Plot, der als übergeordneter Quest im Journal gezeigt wird  lhj100pt_gasthaus. Hier trage ich als NamenGasthaus „Zur Rast“ ein und lege unter Entry Type Plot Group fest. Weitere Eintragungen erfolgen hier nicht und ich kann nach dem Speichern diesen Plot schließen.

JournalbuchNun lege ich mit File -> New -> Plot einen weiteren Plot an. Der Plot erhält den Resourcennamen lhj100pt_spinnen.
Im Object Inspector gebe ich als Namen „Spinnen in der Küche töten“ ein. Dieser Name wird auch im Journal erscheinen.
Als Parent Plot gebe ich meinen eben erstellten lhj100pt_gasthaus Plot ein. Damit wird der Auftrag „Spinnen in der Küche töten“ beim Eintrag in das Journal dem Hauptplot untergeordnet.

FLAG erstellen

Nun erstelle ich den Inhalt meines Plots lhj100pt_spinnen, durch den die Unterhaltung mit Edwina gesteuert wird:

Rechtsklick auf die weiße Fläche und Auswahl „Insert Main Flag“ oder oben in der Leiste auf den gleichnamigen Befehl. Ich markiere die erscheinende Flag0 und überschreibe sie mit QUEST_ANNEHMEN.
In den Journal Text unten trage ich den Text ein, der bei Annahme des Quests im Journalbuch erscheinen soll: „Du sollst für Edwina die Spinnen in der Küche töten, damit sie dir etwas zu essen kochen kann.“
Dann lege ich entsprechend weitere Flageinträge über Insert Main Flag an:

  • SPINNEN_GEKILLT,
  • BELOHNUNG_ERHALTEN und
  • ERNEUTES_REDEN_MIT_EDWINA

Für die ersten beiden Flags erfolgen wiederum entsprechende Journaleinträge
„Du hast die Spinnen alle getötet. Kehre zu Edwina zurück, um die Belohnung zu erhalten.“
„Du hast etwas Erfahrung gewonnen und von Edwina ein altes Heldenamulett erhalten.“

Für BELOHNUNG_ERHALTEN wird außerdem der Eintrag unter Final auf True gesetzt, da hiermit die Quest abgeschlossen ist.

Für den Eintrag SPINNEN_GEKILLT wird unter Plot Assist durch Klick auf ADD der Tag auf lhj100cr_wirtsfrau und der Status auf YES gesetzt – Edwina erhält hierdurch nach Tötung der Spinnen wieder einen Doppelpfeil über dem Kopf zum Anzeigen, wo die Quest abgegeben werden kann.
Unter BELOHNUNG_ERHALTEN wird der Status wieder auf NO gesetzt.

PlotMan kann soviel Flags setzen wie man zum Steuern einer Unterhaltung und der hierdurch benötigten Auswirkungen benötigt.

Unterhaltung steuern

Nun füge ich meine Plotflags der Conversation hinzu. Ich rufe die Convo auf und klicke auf den 1. Satz von Edwina. Im unteren Bereich des Fenster rufe ich den Reiter Plot and Scripting auf.
Da die Frage nach dem Tod der Spinnen als Voraussetzung (Condition) hat, dass die Quest überhaupt angenommen wurde, wird hier unter Condition die Einstellung vorgenommen. Plotflags setzen Ich rufe unter Plot meinen Plot lhj100pt_spinnen auf. Beim 1. Mal muss auf das Feld (…) geklickt werden und der Plot herausgesucht werden, danach ist er immer in der Liste vorhanden. Die Flag lautet QUEST_ANNEHMEN und soll TRUE sein.
In dem Satz, mit dem die Quest angenommen wird (z.B. „Hm, ein altes Heldenamulett. Das könnte ich gut gebrauchen.“), wird QUEST_ANNEHMEN unter ACTION auf SET gestellt und damit true. Damit kann nun die Frage nach dem Tod der Spinnen gestellt werden.

Die Aussage „Ja ihr könnt eure Küche wieder betreten“ darf dagegen nur gesagt werden, wenn SPINNEN_GEKILLT TRUE ist.(Condition)
Und wenn Edwina uns die Belohnung übergibt wird BELOHNUNG_ERHALTEN mit SET auf TRUE gesetzt.(Action)

Scripten

Da ich für die Tür die Eigenschaft interactive auf false gesetzt hatte, muss ich ihr natürlich nun auch mitteilen, dass sie bei Annahme der Quest wieder auf true schalten soll, damit ich überhaupt in die Küche komme. Dies erledige ich per Script.

Mit File –> New –> Script lege ich ein Plotscript lhj100_pltscript_spinnen innerhalb meiner Ordner Lehrjahre\Skripte an.
Ich kann nun re unter Templates das Custom plot events.txt aufrufen und durch Doppelklick in mein Plotscript einfügen. Das Grundgerüst wird dann durch meine Angaben ergänzt.

Unter den Zeilen, die mit #include beginnen, binde ich meinen Plot ein
#include „plt_lhj100pt_spinnen“ (dabei unbedingt plt_ vor den eigentlichen Plotnamen setzen)

Unter switch(nflag) beginnt dann das Durchlaufen der verschiedenen Bedingungen mittels case (bedeutet etwa „wenn der Fall 1 eintritt tu dies, bei Fall 2 jenes etc)

Hier setze ich nun den Fall ein, dass die Quest angenommen wird und teile der Engine im weiteren Text mit, dass die Eigenschaft Interactive der Tür wieder auf True gesetzt wird und sie auch wieder aufgeschlossen ist.

case QUEST_ANNEHMEN: //hier steht nun meine Flag
{
object oDoor =GetObjectByTag("lhj100ip_tuer"); //ich erstelle hier ein Object namens oDoor (könnte auch meineTuer heißen), dem ich die von mir erstellte spezifische Tür zuordne.
SetObjectInteractive(oDoor, TRUE); //Die Eigenschaft Interactive des Objectes oDoor wird nun auf wahr gestellt
SetPlaceableState(oDoor,0); //Der Zustand des Placeables oDoor wird auf unlocked gestellt (geht aus der Reihenfolge im Pulldownmenü des Object Inspectors hervor)
}

Anmerk: die Stellen hinter // sind meine Anmerkungen, nicht in den Code eingeben oder nur mit // davor!
Mit einer weiteren Zeile „SetPlotGiver(oConversationOwner,0);“ setze ich das Ausrufezeichen über Edwina (der Besitzerin der Conversation) zurück.

PlotscriptDieses Script binde ich jetzt in meinen Plot lhj100pt_spinnen unter Script ein:

Ploteigenschaften
Nun habe ich die meisten beanstandeten Punkte erfüllt.

An den Stellen, an denen die Konversation durch das Töten der Spinnen (SPINNEN_GEKILLT) gesteuert wird, fallen jedoch die Aktionen aus – weder erhält Edwina ein Zeichen über dem Kopf, noch mein Held eine Belohnung, nicht einmal mitteilen kann ich ihr die freudige Nachricht.
Dies gilt es im nächsten Schritt zu beseitigen.
Oben


Weiterlesen…