ReceiveMsg & Co: P_TRANSPARENT auswerten.

ReceiveMsg & Co muessen bei empfangenen Nachrichten je nach Absender
bzw. Zustand des Transporters (Abgelegt, Unsichtbar, nicht-transparent)
die Nachricht rausfiltern, wenn sie von Aussen kommt.
Insb. sind Transporter immer *nicht* transparent, wenn sie gerade
unterwegs, aber noch im Raum sind.

Change-Id: I7587abec526d222f2b125e3867bdff11429a32b4
diff --git a/std/transport.c b/std/transport.c
index 235debc..5b9c04f 100644
--- a/std/transport.c
+++ b/std/transport.c
@@ -705,3 +705,38 @@
   }
 }
 
+// **** Kommunikationsdinge *****
+// ReceiveMsg & Co muessen bei empfangenen Nachrichten je nach Zustand des
+// Transporters (Abgelegt, Unsichtbar, generell nicht-transparent etc.) die
+// Nachricht wegwerfen und *nicht* an ihr Inventar weiterleiten.
+
+public void ReceiveMsg(string msg, int msg_type, string msg_action,
+                               string msg_prefix, object origin)
+{
+  // Wenn die Meldung aus einem der Environments kommt und der Transporter
+  // gerade nicht transparent ist (entweder generell oder weil er gerade
+  // unterwegs/unsichtbar ist), wird die Meldung nicht ans Inventar
+  // weitergeleitet.
+  // Bemerkung: origin in all_environment() klingt zwar gut, aber dann werden
+  // Nachrichten von anderen Objekte im Raum *ueber* den raum nicht erfasst.
+  // D.h. in diesem Fall wird wirklich previous_object() geprueft.
+  if (previous_object() == environment() && !QueryProp(P_TRANSPARENT))
+    return;
+  ::ReceiveMsg(msg, msg_type, msg_action, msg_prefix, origin);
+}
+
+// Wrapper fuer ReceiveMsg()
+public void ReceiveMultiSense(struct wave_s *msgs, string action=0,
+    int commontypes=0)
+{
+  // Wenn die Meldung aus einem der Environments kommt und der Transporter
+  // gerade nicht transparent ist (entweder generell oder weil er gerade
+  // unterwegs/unsichtbar ist), wird die Meldung nicht ans Inventar
+  // weitergeleitet.
+  // Bemerkung: origin in all_environment() klingt zwar gut, aber dann werden
+  // Nachrichten von anderen Objekte im Raum *ueber* den raum nicht erfasst.
+  // D.h. in diesem Fall wird wirklich previous_object() geprueft.
+  if (previous_object() == environment() && !QueryProp(P_TRANSPARENT))
+    return;
+  ::ReceiveMultiSense(msgs, action, commontypes);
+}