| |
| AddExtraLook() |
| ************** |
| |
| |
| FUNKTION |
| ======== |
| |
| varargs int AddExtraLook(string look, [int duration, string key, |
| string lookende, object ob]); |
| |
| |
| DEFINIERT IN |
| ============ |
| |
| /std/living/description.c |
| |
| |
| ARGUMENTE |
| ========= |
| |
| string look: |
| |
| * String, der in der Langbeschreibung des Lebewesens |
| zusaetzlich ausgegeben wird. |
| |
| * zu rufender Funktionsname, wenn 'ob' angegeben ist |
| |
| int duration: |
| |
| * > 0: Dauer der Gueltigkeit des Extralooks in Sekunden. |
| |
| * 0: Unbegrenzt gueltiger Eintrag. Rebootfest. |
| |
| * < 0: Bis Ende/Reboot bestehender Eintrag. |
| |
| string key: |
| Schluesselwort, unter dem der Eintrag registriert wird und mit |
| dem man diesen auch mittels RemoveExtraLook() entfernen kann. |
| Sollte eindeutig sein! Ist 'key' nicht angeben, wird der |
| Objektname (object_name()) des setzenden Objekts benutzt. |
| |
| string lookende: |
| |
| * String, der an das Lebewesen (nur bei Spielern) ausgegeben |
| wird, wenn der eingetragene Extralook abgelaufen ist. |
| |
| * zu rufender Funktionsname, wenn 'ob' angegeben ist |
| |
| object ob: |
| Ein Objekt, an dem die in 'look' und 'lookende' abgelegten |
| Methoden bei Abfrage oder Ablauf aufgerufen werden. Die Methoden |
| bekommen das Living uebergeben und muessen selbst umgebrochene |
| Strings zurueckgeben. |
| |
| |
| BESCHREIBUNG |
| ============ |
| |
| Der Extralook erscheint in der Langbeschreibung des Lebewesens. |
| |
| Texte dafuer koennen mit dieser Funktion hinzugefuegt und verwaltet |
| werden. Wenn ihr nicht ohnehin unbedingt ein Objekt IM Spieler |
| ablegt (wie zB eine Ruestung mit einem Extralook) (1), dann ist |
| diese Methode bevorzugt zu verwenden. |
| |
| Ueber die Angabe eines 'ob' koennen Looks auch dynamisch erstellt |
| werden, dabei werden dann 'look' bzw. 'lookende' als Methoden am |
| Objekt gerufen. (1) Ein so fuer AddExtraLook verwendetes Objekt |
| 'ob' muss nicht wie bisher ueblich im Inv des Spieler liegen! |
| |
| Direkt angegebene Texte (also nicht von einem Objekt 'ob' bezogen) |
| werden durch replace_personal() gefiltert und unter Beibehaltung |
| existierender Umbrueche auf 78 Zeichen umgebrochen. |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| * Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, |
| wenn der Extralook der Lebewesen das erste Mal nach Ablauf der |
| Gueltigkeit aufgerufen wird. |
| |
| * Das uebergbene Objekt sollte fuer permanente Eintraege eine |
| Blueprint sein, da Clones irgendwann (spaetestens mit Reboot) |
| zerstoert werden und der Eintrag dann bei Abfrage automatisch |
| geloescht wird. |
| |
| * Folgerung: Clone-Objekte koennen fuer selbst beschraenkt |
| temporaere Extralooks benutzt werden. |
| |
| |
| RUECKGABEWERTE |
| ============== |
| |
| Siehe auch /sys/living/description.h fuer Konstanten. |
| |
| * 1, falls der Eintrag erfolgreich registriert wurde. |
| |
| * < 0 sonst. |
| |
| * -1: <key> war nicht gueltig und es konnte keiner ermittelt |
| werden. |
| |
| * -2: <look> war kein gueltiger String. |
| |
| * -3: <duration> war kein Integer. |
| |
| * -4: unter <key> gibt es schon einen Eintrag. |
| |
| |
| BEISPIELE |
| ========= |
| |
| // (1) einfacher Eintrag, "fuer die Ewigkeit" |
| living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt."); |
| |
| // (2) Eintrag der nach 1h automatisch weg ist. |
| living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600); |
| |
| // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann |
| living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600, |
| "humni_marmeladen_look"); |
| |
| // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel |
| living->AddExtraLook("@WER1 ist patschnass.", 1200, 0, |
| "Du bist endlich wieder trocken. Puuh."); |
| |
| // (5) Mit Objekt, welches den Extralook dynamisch erzeugt |
| living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, |
| this_object()); |
| // In diesem Fall muss this_object() natuerlich die Funktion |
| // "get_my_special_extralook()" definieren, die einen String zurueckgibt |
| |
| // (6) Mit Objekt, welches den Extralook dynamisch erzeugt |
| // Hier wird explizit die Blueprint uebergeben, der Extralook ist also |
| // rebootfest. |
| living->AddExtraLook("get_my_special_extralook", 3600, 0, |
| "extralookende", blueprint(this_object())); |
| |
| // Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt |
| // und keine festgelegte Existenzdauer hat, sondern sich aufgrund |
| // eigener Konditionen entsorgt |
| void set_extra_look(object living) { |
| object dyntemplook = clone_object("/path/to/some/object"); |
| if(living->AddExtraLook("get_my_special_extralook", 0, |
| object_name(dyntemplook), |
| 0, dyntemplook) == XL_OK) |
| dyntemplook->SetProp(P_INTERNAL_EXTRA_LOOK, living); |
| else |
| dyntemplook->remove(); |
| } |
| |
| // entsprechendes Objekt: |
| varargs int remove(int silent) { |
| object ob = QueryProp(P_INTERNAL_EXTRA_LOOK); |
| // wenn der Spieler da ist, entfernen wir den Look regulaer |
| if(objectp(ob)) |
| ob->RemoveExtraLook(object_name(this_object())); |
| return ::remove(silent); |
| } |
| |
| void reset() { |
| if(!random(10)) |
| remove(); |
| else |
| ::reset(); |
| } |
| |
| |
| SIEHE AUCH |
| ========== |
| |
| Verwandt: |
| RemoveExtraLook(), P_INTERNAL_EXTRA_LOOK, HasExtraLook() |
| |
| Sonstiges: |
| replace_personal(), break_string() |
| |
| Fuer Spielerobjekte: |
| P_EXTRA_LOOK |
| |
| 5. Juni 2017 Gloinson |