| AddExtraLook() |
| ============== |
| |
| FUNKTION |
| -------- |
| |
| varargs int AddExtraLook(string look, [int duration, string key, string lookende, object ob]); |
| |
| DEFINIERT IN |
| ------------ |
| /std/living/description.c |
| |
| ARGUMENTE |
| --------- |
| string look: |
| |
| - String, der in der Langbeschreibung des Lebewesens zusaetzlich |
| ausgegeben wird. |
| - zu rufender Funktionsname, wenn 'ob' angegeben ist |
| |
| int duration: |
| |
| - > 0: Dauer der Gueltigkeit des Extralooks in Sekunden. |
| - 0: Unbegrenzt gueltiger Eintrag. Rebootfest. (Kann nur von Blueprints registriert werden.) |
| - < 0: Bis Ende/Reboot bestehender Eintrag. |
| |
| string key: |
| Schluesselwort, unter dem der Eintrag registriert wird und mit dem man |
| diesen auch mittels RemoveExtraLook() entfernen kann. Sollte eindeutig |
| sein! |
| Ist 'key' nicht angeben, wird der Objektname (object_name()) des |
| setzenden Objekts benutzt. |
| |
| string lookende: |
| |
| - String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, |
| wenn der eingetragene Extralook abgelaufen ist. |
| - zu rufender Funktionsname, wenn 'ob' angegeben ist |
| |
| object ob: |
| Ein Objekt, an dem die in 'look' und 'lookende' abgelegten Methoden |
| bei Abfrage oder Ablauf aufgerufen werden. |
| |
| BESCHREIBUNG |
| ------------ |
| Der Extralook erscheint in der Langbeschreibung des Lebewesens. |
| |
| Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet werden. |
| Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler ablegt (wie zB |
| eine Ruestung mit einem Extralook), dann ist diese Methode bevorzugt zu |
| verwenden. |
| |
| Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt werden, |
| dabei werden dann 'look' bzw. 'lookende' als Methoden am Objekt gerufen. |
| Die Methoden bekommen das Living uebergeben und muessen selbst |
| umgebrochene Strings zurueckgeben. |
| Ein so fuer AddExtraLook verwendetes Objekt 'ob' muss nicht wie bisher |
| ueblich im Inv des Spieler liegen! |
| |
| Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen) werden |
| durch replace_personal() gefiltert und unter Beibehaltung existierender |
| Umbrueche auf 78 Zeichen umgebrochen. |
| |
| BEMERKUNGEN |
| ----------- |
| - Die Endemeldung wird nicht genau mit Ablauf der angegebenen Zeit |
| ausgegeben, sondern beim ersten Abruf der Langbeschreibung *nach* |
| Ablauf der Zeit. |
| - Im Fall von permanenten Eintraegen muss das uebergbene Objekt eine |
| Blueprint sein, da Clones irgendwann (spaetestens mit Reboot) zerstoert |
| werden und der Eintrag dann bei Abfrage automatisch geloescht wird. |
| Folgerung: Clones koennen fuer kurzlebige Extralooks benutzt werden, |
| deren Ablaufzeit an ein Objekt gebunden ist. |
| |
| |
| RUECKGABEWERTE |
| -------------- |
| Siehe auch /sys/living/description.h fuer Konstanten. |
| |
| - XL_OK: falls der Eintrag erfolgreich registriert wurde. |
| - ansonsten: |
| |
| - XL_NOKEY: <key> war nicht gueltig und es konnte keiner ermittelt werden. |
| - XL_INVALIDEXTRALOOK: <look> war kein gueltiger String. |
| - XL_KEYDOESNOTEXIST: <duration> war kein Integer. |
| - XL_KEYEXISTS: unter <key> gibt es schon einen Eintrag. |
| |
| BEISPIELE |
| --------- |
| |
| .. code-block:: pike |
| |
| // (1) einfacher Eintrag, "fuer die Ewigkeit" |
| |
| living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt."); |
| |
| .. code-block:: pike |
| |
| // (2) Eintrag der nach 1h automatisch weg ist. |
| |
| living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600); |
| |
| .. code-block:: pike |
| |
| // (3) Eintrag mit bestimmtem Schluessel, damit man ihn wieder entfernen |
| // kann. |
| |
| living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600, |
| "humni_marmeladen_look"); |
| |
| .. code-block:: pike |
| |
| // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel. |
| |
| living->AddExtraLook("@WER1 ist patschnass.", 1200, 0, |
| "Du bist endlich wieder trocken. Puuh."); |
| |
| .. code-block:: pike |
| |
| // (5) Mit Objekt, welches den Extralook dynamisch erzeugt. |
| |
| living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, |
| this_object()); |
| |
| public string get_my_special_extralook(object lv) |
| { |
| return |
| lv.Name() + " hat schon " + data[getuuid(lv)] + " mal gewonnen!\n"); |
| } |
| |
| .. code-block:: pike |
| |
| // (6) Mit Objekt, welches den Extralook dynamisch erzeugt |
| // Hier wird explizit die Blueprint uebergeben, der Extralook ist also |
| // rebootfest. |
| |
| living->AddExtraLook("get_my_special_extralook", 3600, 0, |
| "extralookende", blueprint(this_object())); |
| |
| |
| SIEHE AUCH |
| ---------- |
| |
| Verwandt: |
| :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`, :doc:`../lfun/HasExtraLook` |
| Sonstiges: |
| :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string` |
| Fuer Spielerobjekte: |
| :doc:`../props/P_EXTRA_LOOK` |
| |
| |
| Letzte Aenderung: 21.09.2022, Bugfix |