Dokumentation zu: ET_COMM(WL)

HR Image


EVENT-TYP
        ET_COMM -- Kommunikations-Ereignis

BEDEUTUNG
	Jegliche Kommunikations zwischen Spielern und zwischen Spielern
	und NPCs laeuft ueber diese Ereignisse. Von welchen Verben sie
	ausgeloest werden koennen, ist weiter unten zu sehen.

	Auf das Ereignis kann dann reagiert werden. In Ausnahmefaellen
	(bitte mit Erzmagier absprechen) kann es auch modifiziert oder
	ganz abgebrochen werden. Letzteres ist die schlechteste Loesung,
	besser ist ein Modifizieren in der Art, dass nur der Erzeuger
	eine entsprechende Meldung erhaelt.

	Moeglichkeiten der Ereignisbeeinflussung:
	 o Adverbien einfuegen bzw fest vorgeben
	 o Lautaeusserungen verhindern
	   - Meldung komplett nur an Spieler
	   - Meldung an Spieler und andere Anwesende
	 o Sprachtexte modifizieren
	 o Reaktionen auf Gespraeche allgemein


DEFAULT HANDLER
        /global/handler/comm.c

EVENT DEFINES
        /sys/events.h
        /sys/living/comm.h

EVENT DATEN
        Das Event-Mapping enthaelt folgende Daten:

        Key              | Inhalt
        -----------------+--------------------------------------------------
        Eintraege, die nicht veraendert werden duerfen:
        E_SENDER         | (object) Event-Erzeuger. Normalfall: das Lebewesen.
        E_DESTINATIONS   | (array) Objekte, an die das Event gesandt wird.
                         | Im Normalfall das aeusserste Environment, ggf.
                         | auch des Ziels.
        E_COMMAND        | (string) Das eingegebene Kommando von this_player(),
                         | das das Ereignis ausloeste.
        E_COMM_VERB      | (string) Das Kommunikations-Verb in Normalform.
                         | Dieses sollte fuer Auswahl bestimmter Verben benutzt
                         | werden (siehe Bemerkung unten).
        E_COMM_FLAGS     | (int) Einige Angaben ueber das Ereignis (s.u.).
        E_ACTOR          | Das eigentlich aktive Lebewesen, welches das
                         | Verb ausfuehren moechte.
        E_COMM_VICTIM    | (object) Das 'Opfer' des Verbs (bei Interaktion
                         | direkt mit einem anderen Lebewesen) oder die Zahl
	                 | 1 (bei Verb mit 'alle') oder Null.
        E_COMM_VICSTR    | (string) Der String mit dem der Spieler das
                         | Opfer des Verbs identifiziert hat (zB: "fio").
                         | Wird fuer Fehlermeldungen gebraucht.
        E_COMM_H_INTERN  | Hier wird bei Emotes und Illusionen das Kommando
                         | abgelegt. E_COMM_TEXT ist dabei leer!
	E_COMM_CHANNAME  | Name der Zielebene bei Ebenenkommunikation
	E_COMM_CHANVICS  | (array) Uids der Leute, die der Zielebene lauschen

        Eintraege, die veraendert werden duerfen:
        E_COMM_TEXT      | (array of strings) Die einzelnen Elemente duerfen
                         | evtl. veraendert werden. Hierbei ist jedoch grosse
                         | Sorgfalt walten zu lassen. Die Elemente selbst sind
                         | unten beschrieben.

        Nach oder waehrend der Abarbeitung EVENTUELL enthalten:
        E_HANDLED        | (int) Wenn gesetzt, wurde das Event ausgefuehrt.
        E_HANDLER        | (object) Der ausfuehrende Handler. Im Normalfall
	                 | der Defaulthandler.
        E_CANCELLED      | (mixed) Wenn gesetzt, wurde das Event abgebrochen.
                         | Wenn ein String gesetzt wurde, so wird versucht
                         | diesen an den Akteur als Begruendung auszugeben.
        E_CANCELLER      | (object) Das abbrechende Object.

SYNTAX EVENT-LAUSCHER
        Siehe allgemeine Syntaxen in event_listeners(WL).
	Globales Lauschen ist nicht erlaubt.

	Wichtig: Ebenso ist das Abhoeren von (auch einzelnen) Spielern
	*strengstens* verboten! Dies schliesst Erzeugen von Logfiles der
	Kommunikation oder Ausgeben derselben an einem selbst oder andere
	mit ein.

SYNTAX EVENT-SENDER
        Siehe allgemeine Syntaxen in event_senders(WL).
	Normalerweise darf nur das Lebewesen diese Ereignisse erzeugen.

SYNTAX EVENT-ABBRECHER
        Meldungen und Aktionen duerfen wie ueblich nur in REACT_CANCEL
        vorgenommen werden. Zur Vereinfachung kann ein einfacher Text auch
        direkt beim Abbrechen angegeben werden (cancel_event("Begruendung\n"))
        welcher an mehr oder weniger passender Stelle dann an den Akteur
        ausgegeben wird.
        Notify_fail()s sind nicht erlaubt. Tells usw nur im REACT_CANCEL.
	Siehe auch Flussdiagramm in events(WL) und cancel_event(S).

BESCHREIBUNG
	Wird von einem Spieler oder Npc ein Kommunikationsverb benutzt,
	so wird je nach Verb ein Ereignis erzeugt. Dieses enthaelt in
	E_COMM_TEXT die auszugebenden Texte, die modifiziert werden
	koennten. Folgende Verben gibt es:

	  "sage", "rufe", "mrufe", "erzaehle", "fluestere", "antworte",
	  "frage", "emote", "gemote" und "illusion".

	(Ausnahme sind hier "emote", "gemote" und "illusion", welche 
	nicht veraendert (nur abgebrochen) werden koennen.)

	Soll jedoch das 'Opfer' veraendert werden, so sollte dieses aufgrund
	der Abhaengigkeit der Texte vom Opfer nicht ueber E_COMM_VICTIM
	geschehen. Vielmehr muss ein neuen Ereignis erzeugt und das alte
	dann abgebrochen werden. Eine solche Vorgehensweise ist jedoch
	unbedingt mit einem Erzmagier abzusprechen.

	Wird das Ereignis (ohne Ersatz) abgebrochen, so hat der Abbrecher
	eine Begruendung im notify_fail(E) zu hinterlegen.

	Die auszugebenden Texte in E_COMM_TEXT sind:
	   C_TEXT_ADVERB     |   Das verwendete Adverb
	   C_TEXT_SELF       |   Inhalt der Kommunikation an Akteur/Aktrice
	   C_TEXT_OTHER      |   Inhalt der Kommunikation an andere
	   C_PRE_SELF        |   Text vor Kommunikationsinhalt fuer Akteur
	   C_PRE_VICT        |   Text vor Kommunikationsinhalt fuer Opfer
	   C_PRE_OTHER       |   Text vor Kommunikationsinhalt fuer andere

	In den C_PRE_* sind noch die Schluesselworte fuer die Namen usw
	enthalten, die erst bei der Ausgabe des Ereignisses ersetzt werden:
	   @@Name@@          |   wird durch den Namen des Akteurs ersetzt
	   @@wen@@           |   wird durch den Namen des Opfers ersetzt
	   @@wem@@           |   wird durch den Namen des Opfers ersetzt
           @@Wer@@           |   wird durch den Namen des Opfers ersetzt
	   @@Dir@@           |   wird durch 'Dir' bzw 'Dich' oder bei 'alle'
	   @@Dich@@          |    durch Opfernamenliste ersetzt
	   @@adverb@@        |   wird durch das Adverb ersetzt

	Weiterhin kann man ueber E_COMM_FLAGS einiges ueber das Verb
	erfahren. Im Einzelnen:

	   * Eigenschaften des Verbs (eher uninteressant):
	     C_LEADING_VIC   |   Opferreferenz mit '>' erlaubt
	     C_VIC_NEEDED    |   Opferreferenz benoetigt
	     C_VIC_ALLOWED   |   Opferreferenz erlaubt
	     C_DOTTED_ADV    |   Adjektiv mit ":: " erlaubt
	     C_ADV_ALLOWED   |   Adjektiv erlaubt
	     C_SVIC_ALLOWED  |   Spezialopfer zB "." erlaubt
	     C_REMOTE_VIC    |   Opfer in der Ferne erlaubt
             C_ALLOW_HIDDEN  |   Unsichtbares/netztotes Opfer erlaubt
	     C_ALLOW_ALL     |   'alle' als Opfer erlaubt
	     C_ALLOW_INTER   |   Intermudopfer erlaubt
	     C_NO_OTHER_TXT  |   Keinen Text an andere anhaengen
	     C_KOB_IGN       |   Kobold kann Ausgabe verhindern
	     C_KOB_SAVE      |   Kobold kann verhindern, muss dann mitloggen
	     C_SHOUT         |   Other-Text geht an alle Spieler

	   * Konkrete Eigenschaften fuer diese Anwendung des Verbs
	     C_ME_GHOST      |   Akteur ist Geist
	     C_ME_WIZ        |   Akteur ist Magier
	     C_ALL           |   Opfer ist 'alle'
	     C_IS_REMOTE     |   Ereignis ist nicht raumbasiert
	     C_IS_INTER      |   Intermudopfer
	     C_FROM_INTER    |   Das Ereignis stammt aus dem Intermud
             C_VIC_HIDDEN    |   Opfer ist unsichtbar (vorsicht!)
             C_VIC_NDEAD     |   Opfer ist netztot

	   * Spezielle Flags fuer die Ausgabe via Message()
	     C_MSG_TELL      |   ist Tell-Meldung
	     C_MSG_ILLU      |   ist Illusions-Meldung
	     C_MSG_IGNCHK    |   siehe Message(L)
	     C_MSG_SOUL      |   (nie in diesem E-Typ) ist Soulmeldung
	     C_MSG_CHAN      |   ist Ebenenmeldung

	Wenn C_SHOUT gesetzt ist, bekommen alle eingeloggten Spieler die
	'andere'-Meldung. Bei ihnen wird jedoch dazu kein Ereignis erzeugt!

	Wenn C_NO_OTHER_TXT gesetzt ist, so bekommen andere nur den
	C_PRE_OTHER ohne dass daran der C_TEXT_OTHER angehaengt wird. Dies
	wird zB fuers (heimliche) Fluestern benutzt.

BEISPIEL
	Moechte man erreichen, dass alle Verben eines Spielers immer und
	aussschliesslich mit dem Adverb 'traurig' verwendet werden koennen:

        void create() {
            ...
            listen_event(ET_COMM, EPRIO_MODIFY, #'receive_comm_verb
            ...
        }

        void receive_comm_verb(mapping data, string type, int prio) {
	  if (data[E_ACTOR] != environment()) return;
	  data[E_COMM_TEXT][C_TEXT_ADVERB] = "traurig";
        }

SIEHE AUCH
        events(WL), event_types(WL), event_prioritaeten(WL), send_event(S),
        listen_event(S), Message(L), CheckIgnore(L)


Start » Magierhandbuch » Docu » Konzepte » ET_COMM Letzte Generierung: 16.04.2009, 21:44
Email an: mud@wl.mud.de
Valid HTML 4.01!