
AddExtraLook()
**************

AddExtraLook() varargs int AddExtraLook(string look, [int duration,
string key,

   string lookende, object ob]);


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

   /std/living/description.c


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

   Der Extralook erscheint in der Langbeschreibung des Lebewesens.
   Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
   bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
   werden muesste.



   Alle Parameter bis auf <look> sind optional.


ARGUMENTE
=========

   - string look:
     String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
     wird.
     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
   - int duration:
     > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend
          wird er automatisch geloescht.
     0:   Dieser Eintrag bleibt unbegrenzt gueltig.
     < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
   - string key:
     Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
     auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
     moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der
     Objektname (object_name()) benutzt.
   - string lookende:
     String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
     eingetragene Extralook abgelaufen ist.
     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
   - object ob:
     Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
     Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
     der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
     abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
     Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
     wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
     etc. sorgen!
     WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
     ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier
     einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)


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

   > 0, falls der Eintrag erfolgreich registriert wurde.
   < 0 sonst.
     -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
     -2: <look> war kein gueltiger String.
     -3: <duration> war kein Integer.
     -4: unter <key> gibt es schon einen Eintrag.


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

   Die Strings <look> und <lookende> werden vor Ausgabe durch
   replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
   usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
   dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
   Funktionen selber umbrechen, etc.
   Nach replace_personal() werden die Strings noch von break_string() auf 78
   Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
   Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
   Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
   wird.


BEISPIELE
=========

   # einfacher Eintrag, "fuer die Ewigkeit"
   living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");

   # Eintrag der nach 1h automatisch weg ist.
   living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);



   # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
   living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
                        "humni_marmeladen_look");



   # Mit "Ende"-Meldung, aber kein eigener Schluessel.
   living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
                        "Du bist endlich wieder trocken. Puuh.");



   # Mit Objekt, was den Extralook dynamisch erzeugt
   living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
     In diesem Fall muss this_object() natuerlich die Funktion
     "get_my_special_extralook()" definieren, die einen String zurueckgibt.

   # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
   living->AddExtraLook("get_my_special_extralook", 3600, 0,
                        "extralookende", this_object());


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

   RemoveExtraLook(),
   replace_personal(), break_string()
   P_INTERNAL_EXTRA_LOOK

14.05.2007, Zesstra
