Kleineres Code-Cleanup beim Wandern

Code modernisiert und kommentiert.

Change-Id: Iec99755c94784cbe324a2ce23714df95e368f176
diff --git a/secure/merlin.c b/secure/merlin.c
index 533f3bf..b11cbe9 100644
--- a/secure/merlin.c
+++ b/secure/merlin.c
@@ -50,7 +50,7 @@
 int goto(mixed dest);
 
 nosave string *whitespaces=({",",".","?",";",":","-","!","\n","\t"});
-nosave object prev_room;
+nosave string prev_room;
 nosave int delay,maxusers,busy;
 nosave string flag;
 
@@ -1021,12 +1021,6 @@
 
 void wandern()
 {
-  mapping ex,rooms;
-  mixed ziel;
-  object *raeume,*laeden,env,ob;
-  string *ind,fn;
-  int i;
-
   while (remove_call_out("wandern")>=0);
   call_out("wandern",45+random(100));
   if (busy) return;
@@ -1035,40 +1029,42 @@
     delay=0;
     return;
   }
-  if (!(env=environment()))
+  if (!environment())
   {
     move("/gilden/abenteurer",0);
-        env=environment();
   }
   //ueber Inv iterieren, ob da ein nicht-idelnder Spieler mit genug XP
-  //rumhaengt.
-  raeume=all_inventory(env);
-  for(i=sizeof(raeume); i-- ; ) {
-    if (interactive(raeume[i]) && query_idle(raeume[i])<180 &&
-        raeume[i]->QueryProp(P_XP)>999999)
+  //rumhaengt. In diesem Raum bleiben, wenn ja.
+  foreach(object ob: all_inventory(environment()))
+  {
+    if (interactive(ob) && query_idle(ob)<180
+        && ob->QueryProp(P_XP)>999999)
       return;
   }
-  ex=(mapping)env->QueryProp(P_EXITS);
+  // Ausgaenge durchsuchen
+  mapping ex=(mapping)environment()->QueryProp(P_EXITS);
   if (!mappingp(ex))
     return;
-  ind=m_indices(ex);rooms=([]);laeden=({});
-  for (i=sizeof(ind)-1;i>=0;i--)
+  mapping rooms = m_allocate(sizeof(ex));
+  foreach(string cmd, string|closure dest, string msg : ex)
   {
-    if (!stringp(ziel=ex[ind[i]]))
+    object ob;
+    // nur normale Ausgaenge benutzen
+    if (!stringp(dest)
+        || dest = object_name(environment()))
       continue;
-    if (!ob=find_object(ziel))
-      continue;
-    rooms+=([ob]);
+    rooms += ([dest]);
   }
-  rooms-=([env]);
+  if (!sizeof(rooms))
+    return;
+
+  // Und nicht zuruecklatschen, wenn moeglich.
   if (prev_room && sizeof(m_indices(rooms))>1)
     rooms-=([prev_room]);
-  prev_room=env;
-  raeume=m_indices(rooms);
-  if (!i=sizeof(raeume))
-    return;
-  ob=raeume[random(i)];
-  move(ob,0);
+  prev_room=object_name(environment());
+
+  string *raeume=m_indices(rooms);
+  move(raeume[sizeof(raeume)],0);
 }
 
 string int_short()
@@ -1187,19 +1183,13 @@
 
 int gehen(string str)
 {
-  string verb;
-  int i;
-  mapping exits;
-  string *ex;
-
   if (busy) {
     write("Merlin mault: Ich bin beschaeftigt.\n");
     return 0;
   }
 
-  verb=query_verb();
   str=(string)this_interactive()->_unparsed_args();
-  switch (verb)
+  switch (query_verb())
   {
     case "gilde":
       this_player()->move("/gilden/abenteurer",M_GO,"in die Gilde");
@@ -1210,13 +1200,12 @@
   }
   if (!IS_WIZARD(this_interactive()))
     return 0;
-  if (verb!="merlin")
+  if (query_verb()!="merlin")
     return 0;
   delay=1;
-  exits=(mapping)environment()->QueryProp(P_EXITS);
+  mapping exits=(mapping)environment()->QueryProp(P_EXITS);
   if (!str||str=="")
   {
-    ex=m_indices(exits);
     printf(environment()->int_short(ME,ME));
     show_exits();
     return 1;