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

