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;