RemoveExtraLook()
*****************


FUNKTION
========

   int RemoveExtraLook(string key);


DEFINIERT IN
============

   /std/living/description.c


ARGUMENTE
=========

   * string key: Schluessel, unter dem der Extralook registriert wurde
     ODER Objektname des registrierenden Objektes


BESCHREIBUNG
============

   Der Extralook erscheint in der Langbeschreibung des Lebewesens.

   Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt
   werden. Dazu wird entweder der selbst festgelegte Schluessel oder
   der implizite Schluessel *object_name()* des setzenden Objekts
   benoetigt.


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

   Beim Entfernen mit dieser Funktion wird die "Endemeldung" des
   entfernten Eintrages nicht ausgegeben.


RUECKGABEWERTE
==============

   Siehe auch /sys/living/description.h fuer Konstanten.

   * 1, falls der Eintrag erfolgreich entfernt wurde.

   * < 0 sonst.

     * -1: keinen (gueltigen) <key> uebergeben.

     * -2: kein Eintrag fuer <key> gefunden.


BEISPIELE
=========

   // (1) Loeschen ueber expliziten Key
   living->AddExtraLook(
     "@WER1 wird von einer Horde Daemonen verfolgt.",
     1800, "ennox_daemonenhordenverfolgerlook");

   // Nun kann der Eintrag auch wieder entfernt werden:
   living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");

   // (2) Loeschen ueber impliziten Objektnamen-Schluessel
   living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
   // das ist nur aus dem gleichen Objekt heraus moeglich:
   living->RemoveExtraLook(0);

   // (3) Loeschen ueber impliziten Objektnamen-Schluessel
   string implizite_id = object_name(this_object());
   living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
   // diese ID kann man natuerlich durch die Gegend schicken
   living->RemoveExtraLook(implizite_id);


SIEHE AUCH
==========

   Verwandt:
      AddExtraLook(), P_INTERNAL_EXTRA_LOOK, HasExtraLook()

   Sonstiges:
      replace_personal(), break_string()

   Fuer Spielerobjekte:
      P_EXTRA_LOOK

15. Jun 2017 Gloinson
