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);
+}