environment
***********


BEMERKUNGEN
===========

   Blueprints, wie zum Beispiel Raeume haben oft kein environment().
   Man sollte daher ueberpruefen, ob ein environment() existiert, wenn
   man darin oder darauf eine Funktion aufrufen will.


BEISPIELE
=========

      // In der Variable "raum" steht der Raum, in dem sich der Spieler
      // derzeit aufhaelt - das kann auch 0 sein!

      raum = environment(this_player());

      // Dieses Objekt hat noch kein environment, da es eben erst geclont
      // wurde. Ergo steht in env eine 0.
      obj = clone_object("/std/thing");
      env = environment(obj);

      // alle Methoden die auf Environment arbeiten, sollten das vorher
      // pruefen - insbesondere tell_room()
      if(this_player() && environment(this_player()) &&
         objectp(o=present("schild",environment(this_player()))) {

       write("Du klebst Deine Plakette auf "+o->name(WEN)+".\n");
       tell_room(environment(this_player()), break_string(
             this_player()->Name(WER)+" pappt einen Aufkleber auf "
             +o->name(WEN)+".",78), ({this_player()}));
      }

      // wenn Dinge sehr offensichtlich in Leuten kaputtgehen wird es
      // komplexer (man kann das natuerlich noch weiter schachteln oder
      // ueber all_environment() versuchen zu loesen
      if(environment()) {
       object ee;
       ee=environment(environment());
       if(living(environment()))
       {
         tell_object(environment(),Name(WER)+" zerfaellt.\n");
         if(ee)
           tell_room(ee, environment()->Name(WESSEN)
                +" "+name(RAW)+" zerfaellt.\n", ({environment()}));
       }
       else if(ee && living(ee))
       {
         if(environment()->QueryProp(P_TRANSPARENT))
           tell_object(ee, Name(WER)+" zerfaellt in Deine"
               + (environment()->QueryProp(P_PLURAL) ? "n" :
                   (environment()->QueryProp(P_GENDER)==FEMALE?"r":"m"))
               + environment()->name(RAW)+".\n");
       }
       else
         tell_room(environment(),Name(WER)+" zerfaellt.\n");
      }
