blob: 676ae4c0e7eef7df6c70bd6a6cd3f0b222581657 [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.
Bugfix2d8ca422022-09-21 17:13:48 +020043
Christian Georg Beckerea699e22017-06-16 23:48:17 +020044BESCHREIBUNG
45------------
46 Der Extralook erscheint in der Langbeschreibung des Lebewesens.
47
48 Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet werden.
49 Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler ablegt (wie zB
Bugfix2d8ca422022-09-21 17:13:48 +020050 eine Ruestung mit einem Extralook), dann ist diese Methode bevorzugt zu
Christian Georg Beckerea699e22017-06-16 23:48:17 +020051 verwenden.
52
53 Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt werden,
54 dabei werden dann 'look' bzw. 'lookende' als Methoden am Objekt gerufen.
Bugfix2d8ca422022-09-21 17:13:48 +020055 Die Methoden bekommen das Living uebergeben und muessen selbst
56 umgebrochene Strings zurueckgeben.
57 Ein so fuer AddExtraLook verwendetes Objekt 'ob' muss nicht wie bisher
Christian Georg Beckerea699e22017-06-16 23:48:17 +020058 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-----------
Arathorn3696a032021-01-23 15:42:10 +010066 - Die Endemeldung wird nicht genau mit Ablauf der angegebenen Zeit
67 ausgegeben, sondern beim ersten Abruf der Langbeschreibung *nach*
68 Ablauf der Zeit.
Bugfix2d8ca422022-09-21 17:13:48 +020069 - 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.
72 Folgerung: Clones koennen fuer kurzlebige Extralooks benutzt werden,
73 deren Ablaufzeit an ein Objekt gebunden ist.
74
Zesstra18626972017-01-31 10:38:27 +010075
Christian Georg Beckerea699e22017-06-16 23:48:17 +020076RUECKGABEWERTE
77--------------
78 Siehe auch /sys/living/description.h fuer Konstanten.
79
Arathorn3696a032021-01-23 15:42:10 +010080 - XL_OK: falls der Eintrag erfolgreich registriert wurde.
81 - ansonsten:
Christian Georg Beckerea699e22017-06-16 23:48:17 +020082
Arathorn3696a032021-01-23 15:42:10 +010083 - XL_NOKEY: <key> war nicht gueltig und es konnte keiner ermittelt werden.
84 - XL_INVALIDEXTRALOOK: <look> war kein gueltiger String.
85 - XL_KEYDOESNOTEXIST: <duration> war kein Integer.
86 - XL_KEYEXISTS: unter <key> gibt es schon einen Eintrag.
Zesstra18626972017-01-31 10:38:27 +010087
88BEISPIELE
89---------
Zesstra18626972017-01-31 10:38:27 +010090
Christian Georg Beckerea699e22017-06-16 23:48:17 +020091.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010092
Christian Georg Beckerea699e22017-06-16 23:48:17 +020093 // (1) einfacher Eintrag, "fuer die Ewigkeit"
Arathorn3696a032021-01-23 15:42:10 +010094
Christian Georg Beckerea699e22017-06-16 23:48:17 +020095 living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
Zesstra18626972017-01-31 10:38:27 +010096
Christian Georg Beckerea699e22017-06-16 23:48:17 +020097.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010098
Christian Georg Beckerea699e22017-06-16 23:48:17 +020099 // (2) Eintrag der nach 1h automatisch weg ist.
Arathorn3696a032021-01-23 15:42:10 +0100100
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200101 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
Zesstra18626972017-01-31 10:38:27 +0100102
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200103.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100104
Arathorn3696a032021-01-23 15:42:10 +0100105 // (3) Eintrag mit bestimmtem Schluessel, damit man ihn wieder entfernen
106 // kann.
107
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200108 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
109 "humni_marmeladen_look");
Zesstra18626972017-01-31 10:38:27 +0100110
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200111.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100112
Arathorn3696a032021-01-23 15:42:10 +0100113 // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel.
114
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200115 living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
116 "Du bist endlich wieder trocken. Puuh.");
Zesstra18626972017-01-31 10:38:27 +0100117
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200118.. code-block:: pike
119
Arathorn3696a032021-01-23 15:42:10 +0100120 // (5) Mit Objekt, welches den Extralook dynamisch erzeugt.
121
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200122 living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
123 this_object());
Arathorn3696a032021-01-23 15:42:10 +0100124
Bugfix2d8ca422022-09-21 17:13:48 +0200125 public string get_my_special_extralook(object lv)
126 {
127 return
128 lv.Name() + " hat schon " + data[getuuid(lv)] + " mal gewonnen!\n");
129 }
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200130
131.. code-block:: pike
132
133 // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
134 // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
135 // rebootfest.
Arathorn3696a032021-01-23 15:42:10 +0100136
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200137 living->AddExtraLook("get_my_special_extralook", 3600, 0,
138 "extralookende", blueprint(this_object()));
139
Zesstra18626972017-01-31 10:38:27 +0100140
141SIEHE AUCH
142----------
Zesstra18626972017-01-31 10:38:27 +0100143
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200144 Verwandt:
Zesstrad901db42019-11-28 21:22:52 +0100145 :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`, :doc:`../lfun/HasExtraLook`
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200146 Sonstiges:
147 :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
148 Fuer Spielerobjekte:
149 :doc:`../props/P_EXTRA_LOOK`
Zesstra18626972017-01-31 10:38:27 +0100150
Arathorn3696a032021-01-23 15:42:10 +0100151
Bugfix2d8ca422022-09-21 17:13:48 +0200152Letzte Aenderung: 21.09.2022, Bugfix