Trigger

Trigger
Klassen
Variablen
Stichwoerter:
Einfuehrung
Was ist ein Trigger? Gute Frage.. Damit kann man Aktionen ausloesen, die auf Geschehnisse im Mud reagieren. Am besten erklaert mit Beispielen.
Das Erste, das man mich immer fragt, ist: Wie mach ich meine Anzeige farbig? Die Antwort ist natuerlich 'ganz einfach' :)
Angenommen, man moechte die 'teile mits' (wir reden von der MG-lib hier..) in rot angezeigt bekommen, und zwar alle davon. Erstmal muss man ein Muster aussuchen, das zu den 'teil mit' Texten immer passt. Die Zeile sieht so aus:
* teilt Dir mit:*
Hier ist das '*' ein Jokerzeichen, das im Muster einen beliebigen Text ersetzt. D.h., hier werden alle Zeilen abgefangen, in denen irgendwer Dir irgendwas mitteilt.
Jetzt brauchen wir nur noch die Farbe. Um die ganze Zeile einzufaerben, benutzt man den Befehl #COLOR, und als Argument die Farbe, die man gerne haette. Als kompletter Befehl fuer zMUD sieht das dann so aus:
#TRIGGER {*teilt Dir mit:*} {#COLOR red}
Mit #TRIGGER erzeugt man in der Befehlszeile einen Trigger. Dabei werden das Muster und der Befehl jeweils mit geschweiften Klammern umgeben.
Wer lieber das ganze mit Syntax-Pruefung macht, dem empfehle ich eben den Settings-Editor von zMUD. (Fuer Benutzer von aelteren Versionen, holt Euch die Version 6.15. Die ist es schon wegen eben erwaehnter Syntax-Pruefung wert :) Wenn man im Menue 'View' 'Trigger' auswaehlt, bekommt man zunaechst diesen Dialog zu sehen:

Hier werden alle Trigger angezeigt, die zu keiner Klasse gehoeren, und alle 'Top-level' (?) Klassen.
Wenn man auf dem Pfeil rechts neben dem 'New' Button im Symbolleiste, oder im 'Edit' Menue, 'New|New Trigger' auswaehlt, dann erscheint folgender Dialog:

Da die Version 6.15 auch 'Docking' unterstuetzt, kann man diesen Dialog an den ersten haengen. Ausserdem lasse ich mir die Klassen als Baumansicht anzeigen, neben der Hauptanzeige (Menue 'View|Show Class Panel'), dann sieht mein Settings-Editor so aus:

Optionen
Genug der Einstellereien, zurueck zu den Triggern. :)
Bei 'Pattern' traegt man also das Muster ein, und bei 'Value' den Befehl zum Ausfuehren. Wenn der Befehl von zMUD erkannt wird, dann wird es fett hervorgehoben.
Zu jedem Trigger kann man auch einige Einstellungen vornehmen. Schauen wir mal die Options durch. (Ich spar mir hier ein Bildchen, schaut es Euch selber an. :)
1. Normalerweise achten die Trigger in zMUD nicht auf Gross- und Kleinschreibung, also reagiert unser '* teilt Dir mit: *' Trigger ebenso auf ein Text, der ' TEilT dIR mIT:' enthaelt :), dieses Verhalten kann man mit der 'Case Sensitive' Option aendern.
2. Ein ANSI Trigger ist einer, der im Muster auch ANSI-Steuerzeichen enthalten darf.
3. Die Trigger, die man normal erzeugt, werden gespeichert. Man kann auch Trigger als 'temporaer' markieren (Temporary), dann werden sie gleich nach der ersten Ausfuehrung geloescht.
4. Falls man einen Text vom Mud erkennen will, der die zMUD-Spezialzeichen enthaelt, kann man den Trigger als 'Verbatim' markieren, dann wird z.B. das '*' als solches erkannt und nicht durch beliebigen Text ersetzt.
5. Wenn der Trigger einen Befehl an das Mud erzeugt, oder Text ausgibt, wird dieser auch noch untersucht, ob nicht ein anderer Trigger drauf reagieren sollte. Dieses Verhalten kann man mit der 'Trigger on Trigger' Option abschalten.
6. Ein normaler Trigger wie wir ihn eben gebaut haben, nennt sich ein 'Pattern' (Muster) Trigger. Es gibt ausserdem noch die Moeglichkeit, Aktionen auszuloesen, wenn eine Variable einen bestimmten Wert enthaelt. (z.B. wenn die Lebenspunkte unter 30 fallen oder so.) Dafuer braucht man einen 'Expression' Trigger, der nicht auf das Mud reagiert, sondern die Variablen ueberwacht. Man kann noch die eigenen Eingaben ueberwachen, mit einen 'Command Input' Trigger, waere z.B. nuetzlich wenn man ein Wort staendig falsch eintippt. Letztens gibt es noch die 'Alarm' Trigger, die auf die Zeit reagieren, entweder die echte Zeit, z.B. um einem zu sagen, dass man abends um 23 Uhr das Mudden aufhoeren sollte :), oder die relative Zeit, z.B. fuehre Befehl X alle 5 Minuten aus.
7. Ein normaler Trigger wird erst mit dem Mud abgeglichen, wenn eine ganze Zeile angekommen ist, es gibt aber auch die Moeglichkeit, einen Trigger zu schreiben, der reagiert, wenn der Mud-Prompt erscheint.
Wie man sieht, kann man auch den Trigger testen, indem man eine Zeile aus dem Mud kopiert und in die 'Testing' Tab einfuegt.
Muster
Ihr habt nicht echt gedacht, ich wiederhole hier jetzt die ganze Liste aus der zMUD-Hilfe Datei? Gut. Ich machs naemlich nicht :) Aber ich sag euch, wie man sie findet. Waehle in zMUD 'Reference' aus dem Help Menue. Die Seite ist sowieso nuetzlich, rechts oben ist ein Link 'Expressions' (auch eine nette Seite), und unten auf dieser Seite ist ein Link 'pattern matching' - Bingo. Ok, moeglicherweise gehts auch direkt aus dem Index, aber dem war nicht immer so :)
Wenn ihr regexp kennt, sind die Zeichen aehnlich. (Wem das nichts sagt, ist nicht so wild)
Okok, vielleicht wiederhole ich hier doch einige der wichtigsten:
| * |
Beliebige Zeichenkette oder Leerraum |
| ? |
Beliebige Einzelzeichen |
| %d |
Beliebige Nummernfolge |
| %w |
Beliebiges Wort |
Beispiel mit etwas mehr Aktion
Du hast jetzt (%d) Lebenspunkte und (%d) Magiepunkte.
Dieser Trigger ist auch sehr beliebt, denn er uebernimmt die aktuellen Lebens- und Magiepunkte. Das ist natuerlich nur hilfreich, wenn man dann auch was damit machen kann. Hierfuer ist wichtig zu wissen, dass die Teile der Trigger, die man benutzen will, in Klammern stehen muessen, wie oben '(%d)'. Wir kriegen also 2 Werte, LP und MP. Diese Werte werden in Sondervariablen gehalten, die erste ist immer '%1', die zweite '%2' usw. Wenn wir die Werte fuer andere Zwecke behalten wollen, mussen wir unsere eigene Variablen definieren. Das geht in zMUD ganz einfach, z.B., um 2 Variablen 'LP' und 'MP' zu erzeugen und die Werte da reinzuspeichern, gibt man als Befehl an:
LP=%1
MP=%2
Was koennen wir jetzt damit tun? Die Werte in der Statuszeile anzeigenlassen, z.B. dafuer gibt es eine eigenen Befehl #STATUS.
#STATUS Lebenspunkte @LP, Magiepunkte @MP
Um Werte wieder aus den Variablen zu lesen, braucht man das '@' Symbol, um die Variablen vom normalen Text zu unterscheiden.
Wir koennen auch einen zweiten Trigger machen, der diese Variablen ueberwacht, und bei niedrigem Wert irgendwas unternimmt.
#TRIGGER (@LP<30) {benutze heilsalbe} {} 533
Wie man sich denken kann, wird hier der Befehl 'benutze heilsalbe' abgesetzt, sobald die Lebenspunkte unter 30 sind. (Natuerlich, wenn sie von 40 auf -10 gehen in einem Schlag, nutzt das recht wenig..)
Jetzt solltet ihr einigermasen wissen, was man mit Triggern anstellen kann in zMUD. Schau mal jetzt nach, wie man mit Klassen noch einiges erreichen kann.
Docking: Wenn ein Programm Docking unterstuetzt, dann lassen sich die Fenster aneinander 'andocken', das Resultat ist, dass die zwei Fenster sich jetzt wie eines behandeln lassen. Im zMUD kann man die Fenster in beliebigen Kombinationen docken.
Klasse: Analog zu 'Ordner' im Windows-Explorer. Klassen koennen eine Sammlung von Triggern, Aliasse und anderen Befehle enthalten und koennen nach Wuensch aktiviert und deaktiviert werden.