FUNKTION:
int Message(string msg, string verb, mixed uid, string desc, int flag)
IMPLEMENTIERT:
/std/player/comm.c
ARGUMENTE:
str : Den zu uebermittelnden Text (bereits umgebrochen).
Wenn als Referenz uebergeben werden hier Fehlermeldungen
abgelegt.
verb : Verb, falls query_verb() nicht das ignorierbare
Verb liefert (optional).
uid : Uid des Senders oder Senderobjekt das ignorierbar sein
soll (optional).
desc : Zusaetzliches beschreibendes Wort fuer die Ignoriere-
Pruefung (optional).
flag : Einige Zusatzinfos (optional).
BESCHREIBUNG:
Diese Funktion benutzt die Lib, um Texte an einen Spieler auszugeben,
die dieser moeglicherweise ignorieren moechte. Wenn man in seinen
Objekten auch etwas an einen Spieler ausgeben will, was dieser
ggf. gar nicht wissen mag, sollte man diese Funktion bemuehen,
statt ein write(E) oder tell_object(E).
Ignoriere-System:
-----------------
Wenn kein Flag gesetzt ist oder wenn im Flag C_MSG_IGNCHK gesetzt
wurde, wird anhand der (optional) angegebenen Strings 'verb' und
'desc' geprueft, ob der Spieler die Meldung erhalten moechte. Hierbei
wird als Sender 'uid' angenommen, was ein Objekt oder ein Uid-String
sein darf.
Die Werte werden direkt an CheckIgnore(L) weitergegeben. Eine
genauere Beschreibung siehe dort:
CheckIgnore(uid, verb, 0, desc) // bei 'uid' ist String
CheckIgnore(0, verb, uid, desc) // bei 'uid' ist Objekt
Wenn einer der o.g. String nicht gesetzt wurde, wird versucht
einen adaequaten String zu finden, und zwar im Einzelnen:
* verb wird durch query_verb(E) bestimmt.
* uid wird, wenn this_player() ein Spieler ist, dessen Uid;
bei Npcs oder leblosen Objekten wird name(RAW) verwendet.
* desc wird nicht benutzt.
Bei NPCs und leblosen Objekten wird danach noch geprueft, ob der
eigentliche Akteur (Interactive, ausloesende Spieler) total oder
mit der Desc ignoriert wird.
Der (negative) Fehlercode von CheckIgnore() wird dann zurueckgegeben.
Wurde msg per Referenz uebergeben, so wird eine entsprechende
Meldung dort abgelegt (siehe Beispiel unten), auch wenn der Kobold
die Meldung 'verschluckte'.
Meldungsbearbeitung:
--------------------
Mit den Flags kann man noch einige zusaetzliche Informationen
ueber die Art der Meldung und dessen Weiterverarbeitung angeben.
Die Makros befinden sich in <living/comm.h> und folgende werden
beachtet:
C_MSG_TELL Die Meldung ist ein 'tell' und wird in der
Farbe "teile-mit" an den Spieler ausgegeben.
C_MSG_ILLU Die Meldung ist eine Illusion und wird in der
Farbe "illusion" ausgegeben. Ausserdem werden
die Meldung selbst und der Akteur gespeichert.
C_MSG_CHAN Die Meldung ist von einer Ebene und wird in der
Farbe "ebenen" ausgegeben.
C_MSG_SOUL Die Meldung entstammt einer Soulaktion (unbenutzt)
C_MSG_IGNCHK s.o.
C_KOB_IGN Der Kobold darf die Meldung unterdruecken.
C_KOB_SAVE Der Kobold darf die Meldung unterdruecken, muss
sie jedoch speichern. Wenn msg per Referenz uebergeben
wurde, steht dort nachher die Begruendung drin.
Achtung, nicht zusammen mit C_KOB_IGN verwenden!
C_FROM_INTER Bislang nichts Spezielles.
RÜCKGABEWERT:
1 bei erfolgreicher Uebermittlung
0 wenn der Kobold aktiv war
-1 die Zielperson ignoriert den Akteur
-2 die Zielperson ignoriert den Befehl
-3 die Zielperson traegt Oropax
-4 die Zielperson ignoriert diesen Befehl des Akteurs
-5 der Akteur ignoriert die Zielperson
-6 der Akteur traegt Oropax
BEISPIEL:
object spieler;
string text = "Jemand ruft: Das Ende ist nah!\n";
foreach (spieler : users()) {
spieler->Message(text, "rufe", 0, 0, C_MSG_IGNCHK | C_KOB_IGN);
}
Jeder Spieler bekommt damit die Meldung wenn er/sie nicht "rufe" oder
den diese Funktion ausloesenden Spieler ignoriert.
'Fortgeschrittenes' Beispiel:
text = "Jemand tippt Dir heimlich auf die Schulte.\n";
i = spieler->Message(&text, 0, ME, 0, C_MSG_IGNCHK | C_KOB_IGN);
if (i < 1) write(text); // Fehlermeldung ausgeben
SIEHE AUCH:
CheckIgnore(L), tell_object(E), query_verb(E)
|