Neue Wrapper fuer ReceiveMsg(): ReceiveWave()
ReceiveWave() fasst die Argumente msg, msg_type, msg_action und
msg_prefix von ReceiveMsg() in eine Datenstruktur wave_s zusammen.
Change-Id: Ia285e9b8081ecd3db9b6d8842044b826861e12ef
diff --git a/std/living/comm.c b/std/living/comm.c
index 61c5b70..812ea6f 100644
--- a/std/living/comm.c
+++ b/std/living/comm.c
@@ -138,8 +138,42 @@
return MT_LOOK;
}
+// ReceiveMsg() wird in <player/comm.c> und <npc/comm.c> implementiert und ist
+// hier nicht erforderlich (Cross-Defintion von LPC sei Dank).
+//public varargs int ReceiveMsg(string msg, int msg_type, string msg_action,
+// string msg_prefix, object origin)
+//{}
+
+
// Wrapper fuer ReceiveMsg()
+// Bekommt ein wave_s oder davon geerbte Struct uebergeben, welche daher
+// mindestens Nachricht, Typ und Prefix enthaelt. Ist ansonsten
+// funktionsgleich zu ReceiveMsg().
+public int ReceiveWave(struct wave_s wave, string msg_action, object origin)
+{
+ if (!wave) return MSG_FAILED;
+ return ReceiveMsg(wave.msg, wave.type, msg_action, wave.prefix,
+ origin);
+}
+
+// Bekommt ein wave_s oder davon geerbte Struct uebergeben, welche daher
+// mindestens Nachricht, Typ und Prefix enthaelt. Wird ein wave_dyn_s
+// uebergeben und ist das <cl>-Element eine Closure, wird diese ausgewertet
+// und kann Nachricht, Typ und Prefix veraendern. Ansonsten ist diese Funktion
+// funktionsgleich zu ReceiveWave().
+public int ReceiveDynWave(struct wave_s wave, string msg_action, object origin)
+{
+ if (!wave) return MSG_FAILED;
+ // Falls ein wave_dyn_s uebergeben wurde, ist ein Element cl enthalten und
+ // -> gibt das zurueck. ( . funktioniert nicht, weil der Compiler von einem
+ // wave_s ausgeht.
+ if (closurep(wave->cl))
+ wave = funcall(wave->cl, wave);
+ return ReceiveMsg(wave.msg, wave.type, msg_action, wave.prefix,
+ origin);
+}
+
public int ReceiveNotify(string msg, string action)
{
// Da MT_NOTIFICATION immer zugestellt wird, ist keine Fehlerbehandlung