command()
FUNKTION:
     int command(string str)
     int command(string str, object ob)

BESCHREIBUNG:
     Fuehrt str wie ein Kommando welches direkt vom Nutzer abgegeben wurde
     aus. Alle Effekte des Kommandos wirken sich auf this_object() oder,
     falls angegeben, auf das Objekt <obj> aus.

     Der Rueckgabewert ist >=1 fuer Erfolg und 0 fuer Misserfolg.
     Rueckgabewert ist im Erfolgsfall die Hoehe der EvalCost in Ticks.

     Wenn command() auf ein anderes Objekt angewendet wird, koennen auf
     diesem Wege keine "static" deklarierten Funktionen aufgerufen werden,
     um etwas Schutz vor unerlaubten Aufrufen zu geben.

     Kommandi werden gestapelt, das heisst, nach der Ausfuehrung von <str>
     werden die alten Werte fuer this_player(), query_verb() etc. wieder
     hergestellt (ein Kommando kann dazu fuehren, dass ein Kommando
     ausgefuehrt wird).

BEMERKUNGEN:
     Die meisten in Lebewesen definierten Kommandofunktionen sind vor
     aeusserem Aufrufen durch "static" oAe geschuetzt. Zum Ausfuehren dieser
     Kommandos muss command_me(L) eingesetzt werden, um diesen Schutz zu
     umgehen.

BEISPIELE:
     Siehe command_me(L) fuer einen Vergleich.
	 
     // #1 Ein NPC nimmt und zuendet eine herumliegende /std/lightsource an
     object f = present("\nlichtquelle", environment());
     if(f && command("nimm lichtquelle"))
       if(command("zuende lichtquelle an"))
         tell_room(environment(), Name(WER)+" freut sich.\n");
       else
         tell_room(environment(), Name(WER)+" schaut bedroeppelt.\n");
     
     // #2 Ein NPC traegt seine Sachen
     clone_object("/ruestung/sommerkleid")->move(this_object(), 2);
     command("trage kleid")
     // aequivalent und besser ist hier:
     AddItem("/ruestung/sommerkleid", REFRESH_REMOVE|CLONE_WEAR);

SIEHE AUCH
     command_stack(E), notify_fail(E), enable_commands(E), get_eval_cost(E)
     command_me(L)

6 Sep 2012 Gloinson
