| ReceiveMultisense() |
| =================== |
| |
| FUNKTION |
| -------- |
| |
| public void ReceiveMultisense(struct wave_s* msgs, string action = 0, int commontypes = 0) |
| |
| DEFINIERT IN |
| ------------ |
| |
| /std/living/comm.c |
| /std/room/comm.c |
| |
| ARGUMENTE |
| --------- |
| |
| struct wave_s* msgs |
| Die auszugebenden Nachrichten mit Zusatzinformationen. (s.u.) |
| string action |
| action wird als <action> an ReceiveMsg() weitergegeben. |
| int commontypes |
| Muss einen oder mehrere veroderte messagetypes aus |
| :doc:`ReceiveMsg` enthalten. Diese werden bei jedem Aufruf von |
| :doc:`ReceiveMsg` mit dem jeweiligen Messagetyp aus <msgs> verodert. |
| |
| BESCHREIBUNG |
| ------------ |
| |
| Versucht, eine der in <msgs> angegebenen Nachrichten an den Empfaenger zuzustellen. |
| |
| Das Array <msgs> wird der Reihe nach abgearbeitet, bis eine Nachricht zugestellt werden konnte, das Ende von <msgs> erreicht wurde 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. |
| |
| <msgs> ist ein Array von struct wave_s. Diese ist in /secure/simul_efun/comm.c definiert (und steht allen Programmen automatisch zur Verfuegung). Sie hat die Eintraege string msg, int type, string prefix. |
| wave_s.msg wird vor der Ausgabe von :doc:`../sefun/replace_personal` verarbeitet. Als erstes Objekt wird das aufrufende Objekt uebergeben, als zweites this_player(), sofern vorhanden. wave_s.msg wird automatisch auf 78 Zeichen umgebrochen, vorhandene Zeilenumbrueche werden dabei beibehalten. Fuer wave_s.prefix findet keine Ersetzung statt. |
| |
| 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 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 |
| |
| this_player().ReceiveMultisense( |
| ({ |
| (<wave_s> |
| msg: "Ein Drache landet neben Dir.", |
| type: MT_LOOK), |
| (<wave_s> |
| message: "Du hoerst ein Rumpeln, als waere gerade etwas Grosses " |
| "neben Dir eingeschlagen.", |
| type: MT_LISTEN), |
| (<wave_s> |
| msg: "Du spuerst einen heftigen Luftzug.", |
| type: MT_FEEL)}) |
| MA_MOVE_IN); |
| |
| SIEHE AUCH |
| ---------- |
| |
| :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal` |
| |
| Letzte Aenderung: 21.09.2022, Zesstra |