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. (Kann nur von Blueprints registriert werden.)
  • < 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.

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), 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. Die Methoden bekommen das Living uebergeben und muessen selbst umgebrochene Strings zurueckgeben. 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 Endemeldung wird nicht genau mit Ablauf der angegebenen Zeit ausgegeben, sondern beim ersten Abruf der Langbeschreibung nach Ablauf der Zeit.
  • Im Fall von permanenten Eintraegen muss das uebergbene Objekt eine Blueprint sein, da Clones irgendwann (spaetestens mit Reboot) zerstoert werden und der Eintrag dann bei Abfrage automatisch geloescht wird. Folgerung: Clones koennen fuer kurzlebige Extralooks benutzt werden, deren Ablaufzeit an ein Objekt gebunden ist.

RUECKGABEWERTE

Siehe auch /sys/living/description.h fuer Konstanten.

  • XL_OK: falls der Eintrag erfolgreich registriert wurde.
  • ansonsten:
    • XL_NOKEY: <key> war nicht gueltig und es konnte keiner ermittelt werden.
    • XL_INVALIDEXTRALOOK: <look> war kein gueltiger String.
    • XL_KEYDOESNOTEXIST: <duration> war kein Integer.
    • XL_KEYEXISTS: 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 bestimmtem 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());

public string get_my_special_extralook(object lv)
{
  return
    lv.Name() + " hat schon " + data[getuuid(lv)] + " mal gewonnen!\n");
}
// (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()));

SIEHE AUCH

Letzte Aenderung: 21.09.2022, Bugfix