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


