blob: 4ceea019fd3ec777a2a8253ce2aa685ef0371193 [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.
24 - 0: Unbegrenzt gueltiger Eintrag. Rebootfest.
25 - < 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,
37 wenn der eingetragene Extralook abgelaufen ist.
38 - 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.
69 - Das uebergbene Objekt sollte fuer permanente Eintraege eine Blueprint
70 sein, da Clones irgendwann (spaetestens mit Reboot) zerstoert werden
71 und der Eintrag dann bei Abfrage automatisch geloescht wird.
72 - Folgerung: Clone-Objekte koennen fuer selbst beschraenkt temporaere
73 Extralooks benutzt werden.
Zesstra18626972017-01-31 10:38:27 +010074
Christian Georg Beckerea699e22017-06-16 23:48:17 +020075RUECKGABEWERTE
76--------------
77 Siehe auch /sys/living/description.h fuer Konstanten.
78
79 - 1, falls der Eintrag erfolgreich registriert wurde.
80 - < 0 sonst.
81
82 - -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
83 - -2: <look> war kein gueltiger String.
84 - -3: <duration> war kein Integer.
85 - -4: unter <key> gibt es schon einen Eintrag.
Zesstra18626972017-01-31 10:38:27 +010086
87BEISPIELE
88---------
Zesstra18626972017-01-31 10:38:27 +010089
Christian Georg Beckerea699e22017-06-16 23:48:17 +020090.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010091
Christian Georg Beckerea699e22017-06-16 23:48:17 +020092 // (1) einfacher Eintrag, "fuer die Ewigkeit"
93 living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
Zesstra18626972017-01-31 10:38:27 +010094
Christian Georg Beckerea699e22017-06-16 23:48:17 +020095.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010096
Christian Georg Beckerea699e22017-06-16 23:48:17 +020097 // (2) Eintrag der nach 1h automatisch weg ist.
98 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
Zesstra18626972017-01-31 10:38:27 +010099
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200100.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100101
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200102 // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
103 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
104 "humni_marmeladen_look");
Zesstra18626972017-01-31 10:38:27 +0100105
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200106.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +0100107
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200108 // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
109 living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
110 "Du bist endlich wieder trocken. Puuh.");
Zesstra18626972017-01-31 10:38:27 +0100111
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200112.. code-block:: pike
113
114 // (5) Mit Objekt, welches den Extralook dynamisch erzeugt
115 living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
116 this_object());
117 // In diesem Fall muss this_object() natuerlich die Funktion
118 // "get_my_special_extralook()" definieren, die einen String zurueckgibt
119
120.. code-block:: pike
121
122 // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
123 // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
124 // rebootfest.
125 living->AddExtraLook("get_my_special_extralook", 3600, 0,
126 "extralookende", blueprint(this_object()));
127
128.. code-block:: pike
129
130 // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
131 // und keine festgelegte Existenzdauer hat, sondern sich aufgrund
132 // eigener Konditionen entsorgt
133 void set_extra_look(object living) {
134 object dyntemplook = clone_object("/path/to/some/object");
135 if(living->AddExtraLook("get_my_special_extralook", 0,
136 object_name(dyntemplook),
137 0, dyntemplook) == XL_OK)
138 dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living);
139 else
140 dyntemplook->remove();
141 }
142
143 // entsprechendes Objekt:
144 varargs int remove(int silent) {
145 object ob = QueryProp(P_INTERNAL_EXTRA_LOOK);
146 // wenn der Spieler da ist, entfernen wir den Look regulaer
147 if(objectp(ob))
148 ob->RemoveExtraLook(object_name(this_object()));
149 return ::remove(silent);
150 }
151
152 void reset() {
153 if(!random(10))
154 remove();
155 else
156 ::reset();
157 }
Zesstra18626972017-01-31 10:38:27 +0100158
159SIEHE AUCH
160----------
Zesstra18626972017-01-31 10:38:27 +0100161
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200162 Verwandt:
Zesstrad901db42019-11-28 21:22:52 +0100163 :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`, :doc:`../lfun/HasExtraLook`
Christian Georg Beckerea699e22017-06-16 23:48:17 +0200164 Sonstiges:
165 :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
166 Fuer Spielerobjekte:
167 :doc:`../props/P_EXTRA_LOOK`
Zesstra18626972017-01-31 10:38:27 +0100168
Christian Georg Beckerea699e22017-06-16 23:48:17 +02001695. Juni 2017 Gloinson