blob: 7a6cc2e048d9f2f490e28564f5385e9adb0b8868 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddExtraLook()
2==============
3
Christian Georg Beckerea699e22017-06-16 23:48:17 +02004FUNKTION
5--------
6
7 varargs int AddExtraLook(string look, [int duration, string key, string lookende, object ob]);
Zesstra18626972017-01-31 10:38:27 +01008
9DEFINIERT IN
10------------
Christian Georg Beckerea699e22017-06-16 23:48:17 +020011 /std/living/description.c
Zesstra18626972017-01-31 10:38:27 +010012
13ARGUMENTE
14---------
Christian Georg Beckerea699e22017-06-16 23:48:17 +020015 string look:
Zesstra18626972017-01-31 10:38:27 +010016
Christian Georg Beckerea699e22017-06-16 23:48:17 +020017 - String, der in der Langbeschreibung des Lebewesens zusaetzlich
18 ausgegeben wird.
19 - zu rufender Funktionsname, wenn 'ob' angegeben ist
Zesstra18626972017-01-31 10:38:27 +010020
Christian Georg Beckerea699e22017-06-16 23:48:17 +020021 int duration:
Zesstra18626972017-01-31 10:38:27 +010022
Christian Georg Beckerea699e22017-06-16 23:48:17 +020023 - > 0: Dauer der Gueltigkeit des Extralooks in Sekunden.
Arathorn3696a032021-01-23 15:42:10 +010024 - 0: Unbegrenzt gueltiger Eintrag. Rebootfest. (Kann nur von Blueprints registriert werden.)
Christian Georg Beckerea699e22017-06-16 23:48:17 +020025 - < 0: Bis Ende/Reboot bestehender Eintrag.
26
27 string key:
28 Schluesselwort, unter dem der Eintrag registriert wird und mit dem man
29 diesen auch mittels RemoveExtraLook() entfernen kann. Sollte eindeutig
30 sein!
31 Ist 'key' nicht angeben, wird der Objektname (object_name()) des
32 setzenden Objekts benutzt.
33
34 string lookende:
35
36 - String, der an das Lebewesen (nur bei Spielern) ausgegeben wird,
Arathorn3696a032021-01-23 15:42:10 +010037 wenn der eingetragene Extralook abgelaufen ist.
Christian Georg Beckerea699e22017-06-16 23:48:17 +020038 - zu rufender Funktionsname, wenn 'ob' angegeben ist
39
40 object ob:
41 Ein Objekt, an dem die in 'look' und 'lookende' abgelegten Methoden
42 bei Abfrage oder Ablauf aufgerufen werden.
43 Die Methoden bekommen das Living uebergeben und muessen selbst
44 umgebrochene Strings zurueckgeben.
45
46BESCHREIBUNG
47------------
48 Der Extralook erscheint in der Langbeschreibung des Lebewesens.
49
50 Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet werden.
51 Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler ablegt (wie zB
52 eine Ruestung mit einem Extralook) (1), dann ist diese Methode bevorzugt zu
53 verwenden.
54
55 Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt werden,
56 dabei werden dann 'look' bzw. 'lookende' als Methoden am Objekt gerufen.
57 (1) Ein so fuer AddExtraLook verwendetes Objekt 'ob' muss nicht wie bisher
58 ueblich im Inv des Spieler liegen!
59
60 Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen) werden
61 durch replace_personal() gefiltert und unter Beibehaltung existierender
62 Umbrueche auf 78 Zeichen umgebrochen.
Zesstra18626972017-01-31 10:38:27 +010063
64BEMERKUNGEN
65-----------
Christian Georg Beckerea699e22017-06-16 23:48:17 +020066 - Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
67 Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit
68 aufgerufen wird.
Arathorn3696a032021-01-23 15:42:10 +010069 - Im Fall von permanenten Eintraegen muss das uebergbene Objekt eine
70 Blueprint sein, da Clones irgendwann (spaetestens mit Reboot) zerstoert
71 werden und der Eintrag dann bei Abfrage automatisch geloescht wird.
Christian Georg Beckerea699e22017-06-16 23:48:17 +020072 - Folgerung: Clone-Objekte koennen fuer selbst beschraenkt temporaere
73 Extralooks benutzt werden.
Arathorn3696a032021-01-23 15:42:10 +010074 - Die Endemeldung wird nicht genau mit Ablauf der angegebenen Zeit
75 ausgegeben, sondern beim ersten Abruf der Langbeschreibung *nach*
76 Ablauf der Zeit.
Zesstra18626972017-01-31 10:38:27 +010077
Christian Georg Beckerea699e22017-06-16 23:48:17 +020078RUECKGABEWERTE
79--------------
80 Siehe auch /sys/living/description.h fuer Konstanten.
81
Arathorn3696a032021-01-23 15:42:10 +010082 - XL_OK: falls der Eintrag erfolgreich registriert wurde.
83 - ansonsten:
Christian Georg Beckerea699e22017-06-16 23:48:17 +020084
Arathorn3696a032021-01-23 15:42:10 +010085 - XL_NOKEY: <key> war nicht gueltig und es konnte keiner ermittelt werden.
86 - XL_INVALIDEXTRALOOK: <look> war kein gueltiger String.
87 - XL_KEYDOESNOTEXIST: <duration> war kein Integer.
88 - XL_KEYEXISTS: unter <key> gibt es schon einen Eintrag.
Zesstra18626972017-01-31 10:38:27 +010089
90BEISPIELE
91---------
Zesstra18626972017-01-31 10:38:27 +010092
Christian Georg Beckerea699e22017-06-16 23:48:17 +020093.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010094
Christian Georg Beckerea699e22017-06-16 23:48:17 +020095 // (1) einfacher Eintrag, "fuer die Ewigkeit"
Arathorn3696a032021-01-23 15:42:10 +010096
Christian Georg Beckerea699e22017-06-16 23:48:17 +020097 living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
Zesstra18626972017-01-31 10:38:27 +010098
Christian Georg Beckerea699e22017-06-16 23:48:17 +020099.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100100
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200101 // (2) Eintrag der nach 1h automatisch weg ist.
Arathorn3696a032021-01-23 15:42:10 +0100102
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200103 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
Zesstra18626972017-01-31 10:38:27 +0100104
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200105.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100106
Arathorn3696a032021-01-23 15:42:10 +0100107 // (3) Eintrag mit bestimmtem Schluessel, damit man ihn wieder entfernen
108 // kann.
109
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200110 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
111 "humni_marmeladen_look");
Zesstra18626972017-01-31 10:38:27 +0100112
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200113.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100114
Arathorn3696a032021-01-23 15:42:10 +0100115 // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel.
116
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200117 living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
118 "Du bist endlich wieder trocken. Puuh.");
Zesstra18626972017-01-31 10:38:27 +0100119
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200120.. code-block:: pike
121
Arathorn3696a032021-01-23 15:42:10 +0100122 // (5) Mit Objekt, welches den Extralook dynamisch erzeugt.
123
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200124 living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
125 this_object());
Arathorn3696a032021-01-23 15:42:10 +0100126
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200127 // In diesem Fall muss this_object() natuerlich die Funktion
Arathorn3696a032021-01-23 15:42:10 +0100128 // "get_my_special_extralook()" definieren, die einen String zurueckgibt.
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200129
130.. code-block:: pike
131
132 // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
133 // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
134 // rebootfest.
Arathorn3696a032021-01-23 15:42:10 +0100135
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200136 living->AddExtraLook("get_my_special_extralook", 3600, 0,
137 "extralookende", blueprint(this_object()));
138
Zesstra18626972017-01-31 10:38:27 +0100139
140SIEHE AUCH
141----------
Zesstra18626972017-01-31 10:38:27 +0100142
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200143 Verwandt:
Zesstrad901db42019-11-28 21:22:52 +0100144 :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`, :doc:`../lfun/HasExtraLook`
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200145 Sonstiges:
146 :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
147 Fuer Spielerobjekte:
148 :doc:`../props/P_EXTRA_LOOK`
Zesstra18626972017-01-31 10:38:27 +0100149
Arathorn3696a032021-01-23 15:42:10 +0100150
151Letzte Aenderung: 2021-01-21, Arathorn