blob: 386aa7ed90ce05e873ed46629c1bcffe80323bd9 [file] [log] [blame]
ReceiveSay()
============
FUNKTION
--------
public void ReceiveSay(string msg, string prefix = previous_object().Name(WER, 1) + " sagt: ",
struct msg_s sense_blocked =
({(<wave_s>
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.
<msg> 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 <alt> 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 <alt> 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 <alt> 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: ",
({
(<wave_s>
msg: "@WER1 nickt Dir laechelnd zu.",
type: MT_LOOK),
(<wave_s>
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