blob: 1fc29c2121579a5525be100522da2b5f5a79a105 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002AddExtraLook()
Zesstra953f9972017-02-18 15:37:36 +01003**************
4
Zesstra953f9972017-02-18 15:37:36 +01005
Zesstra0c1a85a2018-02-07 23:46:50 +01006FUNKTION
7========
8
9 varargs int AddExtraLook(string look, [int duration, string key,
Zesstra953f9972017-02-18 15:37:36 +010010 string lookende, object ob]);
11
12
13DEFINIERT IN
14============
15
MG Mud User88f12472016-06-24 23:31:02 +020016 /std/living/description.c
17
Zesstra953f9972017-02-18 15:37:36 +010018
Zesstra0c1a85a2018-02-07 23:46:50 +010019ARGUMENTE
20=========
21
22 string look:
23
24 * String, der in der Langbeschreibung des Lebewesens
25 zusaetzlich ausgegeben wird.
26
27 * zu rufender Funktionsname, wenn 'ob' angegeben ist
28
29 int duration:
30
31 * > 0: Dauer der Gueltigkeit des Extralooks in Sekunden.
32
33 * 0: Unbegrenzt gueltiger Eintrag. Rebootfest.
34
35 * < 0: Bis Ende/Reboot bestehender Eintrag.
36
37 string key:
38 Schluesselwort, unter dem der Eintrag registriert wird und mit
39 dem man diesen auch mittels RemoveExtraLook() entfernen kann.
40 Sollte eindeutig sein! Ist 'key' nicht angeben, wird der
41 Objektname (object_name()) des setzenden Objekts benutzt.
42
43 string lookende:
44
45 * String, der an das Lebewesen (nur bei Spielern) ausgegeben
46 wird, wenn der eingetragene Extralook abgelaufen ist.
47
48 * zu rufender Funktionsname, wenn 'ob' angegeben ist
49
50 object ob:
51 Ein Objekt, an dem die in 'look' und 'lookende' abgelegten
52 Methoden bei Abfrage oder Ablauf aufgerufen werden. Die Methoden
53 bekommen das Living uebergeben und muessen selbst umgebrochene
54 Strings zurueckgeben.
55
56
Zesstra953f9972017-02-18 15:37:36 +010057BESCHREIBUNG
58============
59
MG Mud User88f12472016-06-24 23:31:02 +020060 Der Extralook erscheint in der Langbeschreibung des Lebewesens.
Zesstra953f9972017-02-18 15:37:36 +010061
Zesstra0c1a85a2018-02-07 23:46:50 +010062 Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet
63 werden. Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler
64 ablegt (wie zB eine Ruestung mit einem Extralook) (1), dann ist
65 diese Methode bevorzugt zu verwenden.
Zesstra953f9972017-02-18 15:37:36 +010066
Zesstra0c1a85a2018-02-07 23:46:50 +010067 Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt
68 werden, dabei werden dann 'look' bzw. 'lookende' als Methoden am
69 Objekt gerufen. (1) Ein so fuer AddExtraLook verwendetes Objekt
70 'ob' muss nicht wie bisher ueblich im Inv des Spieler liegen!
Zesstra953f9972017-02-18 15:37:36 +010071
Zesstra0c1a85a2018-02-07 23:46:50 +010072 Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen)
73 werden durch replace_personal() gefiltert und unter Beibehaltung
74 existierender Umbrueche auf 78 Zeichen umgebrochen.
MG Mud User88f12472016-06-24 23:31:02 +020075
Zesstra953f9972017-02-18 15:37:36 +010076
77BEMERKUNGEN
78===========
79
Zesstra0c1a85a2018-02-07 23:46:50 +010080 * Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt,
81 wenn der Extralook der Lebewesen das erste Mal nach Ablauf der
82 Gueltigkeit aufgerufen wird.
83
84 * Das uebergbene Objekt sollte fuer permanente Eintraege eine
85 Blueprint sein, da Clones irgendwann (spaetestens mit Reboot)
86 zerstoert werden und der Eintrag dann bei Abfrage automatisch
87 geloescht wird.
88
89 * Folgerung: Clone-Objekte koennen fuer selbst beschraenkt
90 temporaere Extralooks benutzt werden.
91
92
93RUECKGABEWERTE
94==============
95
96 Siehe auch /sys/living/description.h fuer Konstanten.
97
98 * 1, falls der Eintrag erfolgreich registriert wurde.
99
100 * < 0 sonst.
101
102 * -1: <key> war nicht gueltig und es konnte keiner ermittelt
103 werden.
104
105 * -2: <look> war kein gueltiger String.
106
107 * -3: <duration> war kein Integer.
108
109 * -4: unter <key> gibt es schon einen Eintrag.
Zesstra953f9972017-02-18 15:37:36 +0100110
111
112BEISPIELE
113=========
114
Zesstra0c1a85a2018-02-07 23:46:50 +0100115 // (1) einfacher Eintrag, "fuer die Ewigkeit"
Zesstra953f9972017-02-18 15:37:36 +0100116 living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
117
Zesstra0c1a85a2018-02-07 23:46:50 +0100118 // (2) Eintrag der nach 1h automatisch weg ist.
Zesstra953f9972017-02-18 15:37:36 +0100119 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
120
Zesstra0c1a85a2018-02-07 23:46:50 +0100121 // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
Zesstra953f9972017-02-18 15:37:36 +0100122 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
123 "humni_marmeladen_look");
124
Zesstra0c1a85a2018-02-07 23:46:50 +0100125 // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
Zesstra953f9972017-02-18 15:37:36 +0100126 living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
127 "Du bist endlich wieder trocken. Puuh.");
128
Zesstra0c1a85a2018-02-07 23:46:50 +0100129 // (5) Mit Objekt, welches den Extralook dynamisch erzeugt
130 living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
131 this_object());
132 // In diesem Fall muss this_object() natuerlich die Funktion
133 // "get_my_special_extralook()" definieren, die einen String zurueckgibt
Zesstra953f9972017-02-18 15:37:36 +0100134
Zesstra0c1a85a2018-02-07 23:46:50 +0100135 // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
136 // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
137 // rebootfest.
Zesstra953f9972017-02-18 15:37:36 +0100138 living->AddExtraLook("get_my_special_extralook", 3600, 0,
Zesstra0c1a85a2018-02-07 23:46:50 +0100139 "extralookende", blueprint(this_object()));
140
141 // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
142 // und keine festgelegte Existenzdauer hat, sondern sich aufgrund
143 // eigener Konditionen entsorgt
144 void set_extra_look(object living) {
145 object dyntemplook = clone_object("/path/to/some/object");
146 if(living->AddExtraLook("get_my_special_extralook", 0,
147 object_name(dyntemplook),
148 0, dyntemplook) == XL_OK)
149 dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living);
150 else
151 dyntemplook->remove();
152 }
153
154 // entsprechendes Objekt:
155 varargs int remove(int silent) {
156 object ob = QueryProp(P_INTERNAL_EXTRA_LOOK);
157 // wenn der Spieler da ist, entfernen wir den Look regulaer
158 if(objectp(ob))
159 ob->RemoveExtraLook(object_name(this_object()));
160 return ::remove(silent);
161 }
162
163 void reset() {
164 if(!random(10))
165 remove();
166 else
167 ::reset();
168 }
Zesstra953f9972017-02-18 15:37:36 +0100169
170
171SIEHE AUCH
172==========
173
Zesstra0c1a85a2018-02-07 23:46:50 +0100174 Verwandt:
Zesstra09cd00b2019-11-28 21:23:35 +0100175 RemoveExtraLook(), P_INTERNAL_EXTRA_LOOK, HasExtraLook()
MG Mud User88f12472016-06-24 23:31:02 +0200176
Zesstra0c1a85a2018-02-07 23:46:50 +0100177 Sonstiges:
Zesstra6cadc1b2018-11-15 22:27:32 +0100178 replace_personal(), break_string()
Zesstra0c1a85a2018-02-07 23:46:50 +0100179
180 Fuer Spielerobjekte:
Zesstra6cadc1b2018-11-15 22:27:32 +0100181 P_EXTRA_LOOK
Zesstra0c1a85a2018-02-07 23:46:50 +0100182
1835. Juni 2017 Gloinson