Flee()

FUNKTION:
        public varargs void Flee( object oldenv, int force )

DEFINIERT IN:
        /sys/living/combat.h
        /std/living/combat.c

ARGUMENTE:
        oldenv
          Ein Raum oder 0.
          Wird ein Raum angegeben, dann muss sich der Fluechtende in diesem
          Raum befinden, damit er versucht, zu fluechten, es sei denn, das
          optionale Flag "force" ist gesetzt.
        force
          1, wenn der spieler unabhaengig von seiner Vorsicht fluechten soll.
          0 sonst.

BESCHREIBUNG:
        Flee() wird im heart_beat() oder von CheckWimpyAndFlee() aufgerufen,
        um den Spieler fluechten zu lassen. Man kann die Funktion im Spieler
        auch "von Hand" aufrufen, beispielsweise in einem Spell. Man sollte
        dann force auf 1 setzen, damit der Spieler unabhaengig von seiner
        Vorsicht fluechtet.
        Hierbei kann die Flucht dazu fuehren, dass man die Teamreihe wechselt,
        aber auch, dass man den Raum verlaesst.
        
RUeCKGABEWERT:
        keiner

BEMERKUNGEN:

BEISPIELE:
        this_player()->Flee(0, 1);
        // Der Spieler soll fluechten, egal, ob seine Lebenspunkte geringer
        // als seine Vorsicht sind und unabhaengig von seiner Position.
        
        this_player()->Flee( find_object("/gilden/abenteurer") );
        // Der Spieler soll fluechten, wenn er sich in der Abenteurergilde
        // befindet (oder wenn diese nicht existiert)
        
        this_player()->Flee( "/gilden/abenteurer" );
        // Der Spieler wird nicht fluechten, da der Vergleich von Dateiname
        // und dem Raum 0 ergibt.

        this_player()->Flee( find_object("/gilden/abenteurer"), 1);
        // Der Spieler soll auf jeden Fall fluechten, egal ob er sich in der
        // Abenteurergilde befindet oder nicht. Grund: Gesetztes force-Flag.
        
        
        
SIEHE AUCH:
        CheckWimpyAndFlee(), Defend(), heart_beat(), 

----------------------------------------------------------------------------
Last modified: Wed Nov 12 14:44:42 2003 by Bambi
