blob: 7a6cc2e048d9f2f490e28564f5385e9adb0b8868 [file] [log] [blame]
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.
Die Methoden bekommen das Living uebergeben und muessen selbst
umgebrochene Strings zurueckgeben.
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) (1), 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.
(1) 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 Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit
aufgerufen wird.
- 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: Clone-Objekte koennen fuer selbst beschraenkt temporaere
Extralooks benutzt werden.
- Die Endemeldung wird nicht genau mit Ablauf der angegebenen Zeit
ausgegeben, sondern beim ersten Abruf der Langbeschreibung *nach*
Ablauf der Zeit.
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());
// In diesem Fall muss this_object() natuerlich die Funktion
// "get_my_special_extralook()" definieren, die einen String zurueckgibt.
.. 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: 2021-01-21, Arathorn