Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 1 | ReceiveSay() |
| 2 | ============ |
| 3 | |
| 4 | FUNKTION |
| 5 | -------- |
| 6 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 7 | public void ReceiveSay(string msg, string prefix = previous_object().Name(WER, 1) + " sagt: ", |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 8 | struct msg_s sense_blocked = |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 9 | ({(<wave_s> |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 10 | msg: "@WER1 bewegt die Lippen, Du hoerst jedoch nichts.", |
| 11 | type: MT_LOOK)})) |
| 12 | |
| 13 | DEFINIERT IN |
| 14 | ------------ |
| 15 | |
| 16 | /std/living/comm.c |
| 17 | /std/room/comm.c |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 18 | |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 19 | ARGUMENTE |
| 20 | --------- |
| 21 | |
| 22 | string msg |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 23 | Die auszugebende Meldung. |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 24 | string prefix |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 25 | prefix wird als prefix an :doc:`ReceiveMsg` weitergegeben. Wird kein Wert uebergeben, wird ``previous_object().Name(WER, 1) + " sagt: "`` verwendet. |
| 26 | struct wave_s \*alt |
| 27 | Ersatzmeldungen, falls das Lebewesen die Meldung aufgrund eines blockierten Sinns nicht wahrnehmen kann. Details siehe unten. |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 28 | |
| 29 | BESCHREIBUNG |
| 30 | ------------ |
| 31 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 32 | Sendet msg per :doc:`ReceiveMsg` mit den ueblichen Argumenten von "sage" an den Empfaenger, d.h.: ``MT_LISTEN``, ``MA_SAY``, ``Name(WER, 1) + " sagt: "``. |
| 33 | 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. |
| 34 | |
| 35 | <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. |
| 36 | |
| 37 | 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. |
| 38 | 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! |
| 39 | Auch hier findet fuer wave_s.msg eine Ersetzung mittels :doc:`../sefun/replace_personal` statt, fuer wave_s.prefix nicht. |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 40 | |
| 41 | RUECKGABEWERT |
| 42 | ------------- |
| 43 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 44 | in Lebewesen |
| 45 | ^^^^^^^^^^^^ |
| 46 | Der Rueckgabe ist der Rueckgabewert von ReceiveMsg() fuer die zuletzt versuchte Meldung. |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 47 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 48 | Wenn dies einen Erfolg (MSG_DELIVERED, MSG_BUFFERED) darstellt, wurde irgendeine Meldung erfolgreich zugestellt. |
| 49 | Falls es MSG_SENSE_BLOCK ist, sind alle versuchten Sinne blockiert und keine Nachricht wurde zugestellt. |
| 50 | Ist es ein anderer Fehler ist, wurde keine Nachricht zugestellt (und ggf. nicht alle aus <alt> versucht). |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 51 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 52 | in Containern/Raeumen |
| 53 | ^^^^^^^^^^^^^^^^^^^^^ |
| 54 | |
| 55 | Die Funktion hat keinen Rueckgabewert. Der Grund hierfuer ist, dass dieser ein ggf. tief verschachteltes Mapping waere, was keiner mehr prueft. |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 56 | |
| 57 | BEISPIEL |
| 58 | -------- |
| 59 | |
| 60 | .. code-block:: pike |
| 61 | |
| 62 | SetProp(P_NAME, "Questgeber"); |
| 63 | SetProp(P_GENDER, MALE); |
| 64 | this_player().ReceiveSay( |
| 65 | "Das hast Du prima gemacht, @WER2!", |
| 66 | Name(WER, 1) + " lobt Dich: ", |
| 67 | ({ |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 68 | (<wave_s> |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 69 | msg: "@WER1 nickt Dir laechelnd zu.", |
| 70 | type: MT_LOOK), |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 71 | (<wave_s> |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 72 | msg: "Jemand klopft Dir lobend auf die Schulter.", |
| 73 | type: MT_FEEL)})); |
| 74 | |
| 75 | SIEHE AUCH |
| 76 | ---------- |
| 77 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 78 | :doc:`ReceiveMsg`, :doc:`../sefun/replace_personal`, :doc:`Name` |
Bugfix | b1d9b4d | 2021-09-14 20:07:04 +0200 | [diff] [blame] | 79 | |
Zesstra | 77b3257 | 2022-09-21 23:27:23 +0200 | [diff] [blame^] | 80 | Letzte Aenderung: 21.09.2022, Zesstra |