ReceiveSay() ============ FUNKTION -------- public void ReceiveSay(string msg, string prefix = previous_object().Name(WER, 1) + " sagt: ", struct msg_s sense_blocked = ({( msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.", type: MT_LOOK)})) DEFINIERT IN ------------ /std/living/comm.c /std/room/comm.c ARGUMENTE --------- string msg Die auszugebende Meldung. string prefix prefix wird als prefix an :doc:`ReceiveMsg` weitergegeben. Wird kein Wert uebergeben, wird ``previous_object().Name(WER, 1) + " sagt: "`` verwendet. struct wave_s \*alt Ersatzmeldungen, falls das Lebewesen die Meldung aufgrund eines blockierten Sinns nicht wahrnehmen kann. Details siehe unten. BESCHREIBUNG ------------ Sendet msg per :doc:`ReceiveMsg` mit den ueblichen Argumenten von "sage" an den Empfaenger, d.h.: ``MT_LISTEN``, ``MA_SAY``, ``Name(WER, 1) + " sagt: "``. Hierzu muss das aufrufende Objekt :doc:`Name` definiert haben und dort etwas sinnvolles zurueckgeben. Falls ein anderer Praefix gewaehlt wurde, wird dieser statt ``Name(WER, 1) " sagt: "`` verwendet. wird vor der Ausgabe an :doc:`../sefun/replace_personal` uebergeben, als erstes Objekt wird das aufrufende Objekt uebergeben, als zweites this_player(), sofern vorhanden. msg wird automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden dabei beibehalten. Falls der Empfaenger eine Nachricht aufgrund eines blockierten Sinns nicht empfangen kann (und **nur** dann), wird versucht, alternative Nachrichten aus dem Array zuzustellen. Dieses Array enthaelt structs vom Typ wave_s. Das Array wird von vorne nach hinten abgearbeitet, bis eine Nachricht erfolgreich zugestellt werden konnte, das Ende erreicht ist oder eine Nachricht *aus anderen Gruenden* als einem blockierten Sinn abgelehnt wurde. Der Grund fuer letzteres ist, dass andere Fehler von ReceiveMsg() (fast) immer auch bei allen (weiteren) Alternativen auftreten werden. wave_s ist in /secure/simul_efun/comm.c definiert und enthaelt die Eintraege string msg, int type, string prefix. In ist der Default fuer wave_s.prefix 0! Auch hier findet fuer wave_s.msg eine Ersetzung mittels :doc:`../sefun/replace_personal` statt, fuer wave_s.prefix nicht. RUECKGABEWERT ------------- in Lebewesen ^^^^^^^^^^^^ Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die zuletzt versuchte Meldung. Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt, wurde irgendeine Meldung erfolgreich zugestellt. Falls es MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine Nachricht wurde zugestellt. Ist es ein anderer Fehler ist, wurde keine Nachricht zugestellt (und ggf. nicht alle aus versucht). in Containern/Raeumen ^^^^^^^^^^^^^^^^^^^^^ Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr prueft. BEISPIEL -------- .. code-block:: pike SetProp(P_NAME, "Questgeber"); SetProp(P_GENDER, MALE); this_player().ReceiveSay( "Das hast Du prima gemacht, @WER2!", Name(WER, 1) + " lobt Dich: ", ({ ( msg: "@WER1 nickt Dir laechelnd zu.", type: MT_LOOK), ( msg: "Jemand klopft Dir lobend auf die Schulter.", type: MT_FEEL)})); SIEHE AUCH ---------- :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`, :doc:`Name` Letzte Aenderung: 21.09.2022, Zesstra