Merge branch 'master' of ssh://mgg/mudlib-public
diff --git a/std/player/protocols/gmcp.c b/std/player/protocols/gmcp.c
index 6c39608..3a84e86 100644
--- a/std/player/protocols/gmcp.c
+++ b/std/player/protocols/gmcp.c
@@ -280,7 +280,18 @@
 // Gerufen, wenn Daten zu senden sind.
 protected void GMCPmod_Core_v1_send(mapping data)
 {
-  // Zur Zeit nix, spaeter mal Core.Goodbye.
+  // Wenn Core registriert wird, wird diese Funktion gerufen und <data> als 0
+  // uebergeben. Wir nutzen das zur Erkennung, dass GMCP aktiviert wurde und
+  // senden die URI fuer das Client-UI-Package.
+  // Bemerkung: ja...  Warum zur Hoelle macht Mudlet das so? Es sollte ein
+  // Modul UI definiert werden, was vom Client angefordert wird, anstatt dass
+  // wir auf Verdacht da etwas aus einem nicht-angeforderten Modul rauspusten,
+  // sobald GMCP aktiviert wird.
+  // *grrrrr*
+  if (!data)
+    GMCP_send("Client.GUI 1","http://mg.mud.de/download/testgui.mpackage");
+
+  // Zur Zeit passiert hier weiter nix, spaeter mal Core.Goodbye senden.
 }
 
 
diff --git a/std/virtual/v_compiler.c b/std/virtual/v_compiler.c
index 80eb370..6c16c47 100644
--- a/std/virtual/v_compiler.c
+++ b/std/virtual/v_compiler.c
@@ -60,6 +60,7 @@
 // obsolet. 
 int NoParaObjects() { return 0; }
 
+// Standardmaessig nur .c abschneiden und den EPMASTER anstossen.
 string Validate(string file)
 {
   if(!file) return 0;
@@ -108,13 +109,21 @@
 mixed CustomizeObject()
 {
   string file;
-
+  // Wenn !clonep ist es schon ein per VC umbenanntes File und wir koennen den
+  // BLUE_NAME von PO nehmen.
   if(!clonep(previous_object()))
     return Validate(explode(BLUE_NAME(previous_object()), "/")[<1]);
-  if(stringp(last_loaded_file)) file = last_loaded_file;
-  else file = Validate(explode(BLUE_NAME(previous_object()), "/")[<1]);
+  // Sonst muessen wir gucken, welche File wir zuletzt erzeugt haben - der
+  // Clone dafuer ist erzeugt (der ruft uns gerade), aber es ist noch nicht
+  // vom Driver umbenannt in den endgueltigen Namen. Wenn wir kein
+  // last_loaded_file haben, naja...
+  if(stringp(last_loaded_file))
+    file = last_loaded_file;
+  else
+    file = Validate(explode(BLUE_NAME(previous_object()), "/")[<1]);
   if(!file) return 0;
   last_loaded_file = 0;
+  // Das sollte nun das File sein, was wir gerade erzeugen.
   return file;
 }