| 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 |