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

FUNKTION
--------

  public int ReceiveWave(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.

  <wave> ist meist eine struct wave_s. Diese fasst msg, msg_type und prefix fuer ReceiveMsg in eine Datenstruktur zusammen. Sie 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> kann jedoch auch eine von wave_s erbende struct sein, welche zusaetzliche Eintraege besitzt (die hier nicht benutzt werden). Damit kann man die Meldung mit anderen dazu gehoerenden Daten zusammenfassen.


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

  Der Rueckgabe ist der Rueckgabewert von ReceiveMsg().

BEISPIEL
--------

.. code-block:: pike

  // Einfache Nachricht
  this_player().ReceiveWave((<wave_s> msg: "Pass auf! Ein boeser, schwarzer Drache!",
                                      type: MT_LISTEN, prefix: "Humni ruft: ") );
  // von wave_s abgeleitete struct, welche einen einfach Zauberspruch beschreibt
  struct spell_s (wave_s) {
      int dam;
      string* dam_type;
      mapping si_spell;
  }
  struct spell_s sp = (<spell_s> msg: "Der Zauberer schleudert Dir einen Blitz entgegen.",
                       type: MT_LOOK|MT_FEEL, dam: 42, dam_type: DT_LIGHTNING,
                       sinfo: ([...]));
  en.ReceiveWave(sp, MA_COMBAT);
  en.Defend(sp.dam, sp.dam_type, sp.si_spell);


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

  :doc:`ReceiveMsg`, :doc:`ReceiveDynWave`

Letzte Aenderung: 30.07.2025, Zesstra

