blob: 1658030c99588e2e1f625f151ea055c8797e965d [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
Arathorn3696a032021-01-23 15:42:10 +010033 * 0: Unbegrenzt gueltiger Eintrag. Rebootfest. (Kann nur von
34 Blueprints registriert werden.)
Zesstra0c1a85a2018-02-07 23:46:50 +010035
36 * < 0: Bis Ende/Reboot bestehender Eintrag.
37
38 string key:
39 Schluesselwort, unter dem der Eintrag registriert wird und mit
40 dem man diesen auch mittels RemoveExtraLook() entfernen kann.
41 Sollte eindeutig sein! Ist 'key' nicht angeben, wird der
42 Objektname (object_name()) des setzenden Objekts benutzt.
43
44 string lookende:
45
46 * String, der an das Lebewesen (nur bei Spielern) ausgegeben
47 wird, wenn der eingetragene Extralook abgelaufen ist.
48
49 * zu rufender Funktionsname, wenn 'ob' angegeben ist
50
51 object ob:
52 Ein Objekt, an dem die in 'look' und 'lookende' abgelegten
53 Methoden bei Abfrage oder Ablauf aufgerufen werden. Die Methoden
54 bekommen das Living uebergeben und muessen selbst umgebrochene
55 Strings zurueckgeben.
56
57
Zesstra953f9972017-02-18 15:37:36 +010058BESCHREIBUNG
59============
60
MG Mud User88f12472016-06-24 23:31:02 +020061 Der Extralook erscheint in der Langbeschreibung des Lebewesens.
Zesstra953f9972017-02-18 15:37:36 +010062
Zesstra0c1a85a2018-02-07 23:46:50 +010063 Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet
64 werden. Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler
65 ablegt (wie zB eine Ruestung mit einem Extralook) (1), dann ist
66 diese Methode bevorzugt zu verwenden.
Zesstra953f9972017-02-18 15:37:36 +010067
Zesstra0c1a85a2018-02-07 23:46:50 +010068 Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt
69 werden, dabei werden dann 'look' bzw. 'lookende' als Methoden am
70 Objekt gerufen. (1) Ein so fuer AddExtraLook verwendetes Objekt
71 'ob' muss nicht wie bisher ueblich im Inv des Spieler liegen!
Zesstra953f9972017-02-18 15:37:36 +010072
Zesstra0c1a85a2018-02-07 23:46:50 +010073 Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen)
74 werden durch replace_personal() gefiltert und unter Beibehaltung
75 existierender Umbrueche auf 78 Zeichen umgebrochen.
MG Mud User88f12472016-06-24 23:31:02 +020076
Zesstra953f9972017-02-18 15:37:36 +010077
78BEMERKUNGEN
79===========
80
Zesstra0c1a85a2018-02-07 23:46:50 +010081 * Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt,
82 wenn der Extralook der Lebewesen das erste Mal nach Ablauf der
83 Gueltigkeit aufgerufen wird.
84
Arathorn3696a032021-01-23 15:42:10 +010085 * Im Fall von permanenten Eintraegen muss das uebergbene Objekt
86 eine Blueprint sein, da Clones irgendwann (spaetestens mit
87 Reboot) zerstoert werden und der Eintrag dann bei Abfrage
88 automatisch geloescht wird.
Zesstra0c1a85a2018-02-07 23:46:50 +010089
90 * Folgerung: Clone-Objekte koennen fuer selbst beschraenkt
91 temporaere Extralooks benutzt werden.
92
Arathorn3696a032021-01-23 15:42:10 +010093 * Die Endemeldung wird nicht genau mit Ablauf der angegebenen
94 Zeit ausgegeben, sondern beim ersten Abruf der Langbeschreibung
95 *nach* Ablauf der Zeit.
96
Zesstra0c1a85a2018-02-07 23:46:50 +010097
98RUECKGABEWERTE
99==============
100
101 Siehe auch /sys/living/description.h fuer Konstanten.
102
Arathorn3696a032021-01-23 15:42:10 +0100103 * XL_OK: falls der Eintrag erfolgreich registriert wurde.
Zesstra0c1a85a2018-02-07 23:46:50 +0100104
Arathorn3696a032021-01-23 15:42:10 +0100105 * ansonsten:
Zesstra0c1a85a2018-02-07 23:46:50 +0100106
Arathorn3696a032021-01-23 15:42:10 +0100107 * XL_NOKEY: <key> war nicht gueltig und es konnte keiner
108 ermittelt werden.
Zesstra0c1a85a2018-02-07 23:46:50 +0100109
Arathorn3696a032021-01-23 15:42:10 +0100110 * XL_INVALIDEXTRALOOK: <look> war kein gueltiger String.
Zesstra0c1a85a2018-02-07 23:46:50 +0100111
Arathorn3696a032021-01-23 15:42:10 +0100112 * XL_KEYDOESNOTEXIST: <duration> war kein Integer.
Zesstra0c1a85a2018-02-07 23:46:50 +0100113
Arathorn3696a032021-01-23 15:42:10 +0100114 * XL_KEYEXISTS: unter <key> gibt es schon einen Eintrag.
Zesstra953f9972017-02-18 15:37:36 +0100115
116
117BEISPIELE
118=========
119
Zesstra0c1a85a2018-02-07 23:46:50 +0100120 // (1) einfacher Eintrag, "fuer die Ewigkeit"
Arathorn3696a032021-01-23 15:42:10 +0100121
Zesstra953f9972017-02-18 15:37:36 +0100122 living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
123
Zesstra0c1a85a2018-02-07 23:46:50 +0100124 // (2) Eintrag der nach 1h automatisch weg ist.
Arathorn3696a032021-01-23 15:42:10 +0100125
Zesstra953f9972017-02-18 15:37:36 +0100126 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
127
Arathorn3696a032021-01-23 15:42:10 +0100128 // (3) Eintrag mit bestimmtem Schluessel, damit man ihn wieder entfernen
129 // kann.
130
Zesstra953f9972017-02-18 15:37:36 +0100131 living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
132 "humni_marmeladen_look");
133
Arathorn3696a032021-01-23 15:42:10 +0100134 // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel.
135
Zesstra953f9972017-02-18 15:37:36 +0100136 living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
137 "Du bist endlich wieder trocken. Puuh.");
138
Arathorn3696a032021-01-23 15:42:10 +0100139 // (5) Mit Objekt, welches den Extralook dynamisch erzeugt.
140
Zesstra0c1a85a2018-02-07 23:46:50 +0100141 living->AddExtraLook("get_my_special_extralook", 3600, 0, 0,
142 this_object());
Arathorn3696a032021-01-23 15:42:10 +0100143
Zesstra0c1a85a2018-02-07 23:46:50 +0100144 // In diesem Fall muss this_object() natuerlich die Funktion
Arathorn3696a032021-01-23 15:42:10 +0100145 // "get_my_special_extralook()" definieren, die einen String zurueckgibt.
Zesstra953f9972017-02-18 15:37:36 +0100146
Zesstra0c1a85a2018-02-07 23:46:50 +0100147 // (6) Mit Objekt, welches den Extralook dynamisch erzeugt
148 // Hier wird explizit die Blueprint uebergeben, der Extralook ist also
149 // rebootfest.
Arathorn3696a032021-01-23 15:42:10 +0100150
Zesstra953f9972017-02-18 15:37:36 +0100151 living->AddExtraLook("get_my_special_extralook", 3600, 0,
Zesstra0c1a85a2018-02-07 23:46:50 +0100152 "extralookende", blueprint(this_object()));
153
Zesstra953f9972017-02-18 15:37:36 +0100154
155SIEHE AUCH
156==========
157
Zesstra0c1a85a2018-02-07 23:46:50 +0100158 Verwandt:
Zesstra09cd00b2019-11-28 21:23:35 +0100159 RemoveExtraLook(), P_INTERNAL_EXTRA_LOOK, HasExtraLook()
MG Mud User88f12472016-06-24 23:31:02 +0200160
Zesstra0c1a85a2018-02-07 23:46:50 +0100161 Sonstiges:
Zesstra6cadc1b2018-11-15 22:27:32 +0100162 replace_personal(), break_string()
Zesstra0c1a85a2018-02-07 23:46:50 +0100163
164 Fuer Spielerobjekte:
Zesstra6cadc1b2018-11-15 22:27:32 +0100165 P_EXTRA_LOOK
Zesstra0c1a85a2018-02-07 23:46:50 +0100166
Arathorn3696a032021-01-23 15:42:10 +0100167Letzte Aenderung: 2021-01-21, Arathorn