Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 1 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 2 | AddExtraLook() |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 3 | ************** |
| 4 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 5 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 6 | FUNKTION |
| 7 | ======== |
| 8 | |
| 9 | varargs int AddExtraLook(string look, [int duration, string key, |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 10 | string lookende, object ob]); |
| 11 | |
| 12 | |
| 13 | DEFINIERT IN |
| 14 | ============ |
| 15 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 16 | /std/living/description.c |
| 17 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 18 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 19 | ARGUMENTE |
| 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 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 57 | BESCHREIBUNG |
| 58 | ============ |
| 59 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 60 | Der Extralook erscheint in der Langbeschreibung des Lebewesens. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 61 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 62 | 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 66 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 67 | 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! |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 71 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 72 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 75 | |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 76 | |
| 77 | BEMERKUNGEN |
| 78 | =========== |
| 79 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 80 | * 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 | |
| 93 | RUECKGABEWERTE |
| 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. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 110 | |
| 111 | |
| 112 | BEISPIELE |
| 113 | ========= |
| 114 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 115 | // (1) einfacher Eintrag, "fuer die Ewigkeit" |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 116 | living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt."); |
| 117 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 118 | // (2) Eintrag der nach 1h automatisch weg ist. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 119 | living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600); |
| 120 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 121 | // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 122 | living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600, |
| 123 | "humni_marmeladen_look"); |
| 124 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 125 | // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 126 | living->AddExtraLook("@WER1 ist patschnass.", 1200, 0, |
| 127 | "Du bist endlich wieder trocken. Puuh."); |
| 128 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 129 | // (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 |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 134 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 135 | // (6) Mit Objekt, welches den Extralook dynamisch erzeugt |
| 136 | // Hier wird explizit die Blueprint uebergeben, der Extralook ist also |
| 137 | // rebootfest. |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 138 | living->AddExtraLook("get_my_special_extralook", 3600, 0, |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 139 | "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 | } |
Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 169 | |
| 170 | |
| 171 | SIEHE AUCH |
| 172 | ========== |
| 173 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 174 | Verwandt: |
Zesstra | 6cadc1b | 2018-11-15 22:27:32 +0100 | [diff] [blame] | 175 | RemoveExtraLook(), P_INTERNAL_EXTRA_LOOK |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 176 | |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 177 | Sonstiges: |
Zesstra | 6cadc1b | 2018-11-15 22:27:32 +0100 | [diff] [blame] | 178 | replace_personal(), break_string() |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 179 | |
| 180 | Fuer Spielerobjekte: |
Zesstra | 6cadc1b | 2018-11-15 22:27:32 +0100 | [diff] [blame] | 181 | P_EXTRA_LOOK |
Zesstra | 0c1a85a | 2018-02-07 23:46:50 +0100 | [diff] [blame] | 182 | |
| 183 | 5. Juni 2017 Gloinson |