ReceiveWave()
=============

FUNKTION
--------

  public int ReceiveDynWave(struct wave_s wave, string msg_action = comm_guess_action(), object origin = previous_object());

DEFINIERT IN
------------

  /std/living/comm.c

ARGUMENTE
---------

  struct wave_s* wave
    Die auszugebende Nachrichten mit Zusatzinformationen. (s.u.)
  string action
    action wird als <action> an ReceiveMsg() weitergegeben
  object origin
    Absenderobjekt der Nachricht (Default: previous_object())

BESCHREIBUNG
------------

  Sendet die in <wave> angegebene Nachricht an den Empfaenger.

  Im Unterschied zu ReceiveWave() wird ein Variable namens cl in <wave> vorher ausgewertet und kann dynamisch eine neue/geaenderte <wave> liefern, welche dann ausgegeben wird.

  Hierbei ist <wave> also eine von wave_s erbende struct, welche (mindestens) eine Variable <cl> vom Typ closure zusaetzlich besitzt.

RUECKGABEWERT
-------------

  Der Rueckgabe ist der Rueckgabewert von ReceiveMsg().

BEISPIEL
--------

.. code-block:: pike

  // von wave_s abgeleitete struct
  struct dynwave_s (wave_s) {
      closure cl;
  }
  struct dynwave_s wave = (<dynwave_s> msg: "Pass auf! Ein boeser, schwarzer Drache!",
                            type: MT_LISTEN, prefix: "Humni ruft: ");
  wave.cl = function struct wave_s (struct wave_s wave)
    { wave.prefix = ({"Humni","Jof","Zook"})[random(3)] + " ruft: ";
      return wave;
    };
  ReceiveWave(wave, MA_LISTEN);


SIEHE AUCH
----------

  :doc:`ReceiveMsg`, :doc:`ReceiveWave`

Letzte Aenderung: 30.07.2025, Zesstra


