P_INTERNAL_EXTRA_LOOK-Dokumentation und Konstanten
* Dokumentation ueberarbeitet und praezisiert
* magic numbers fuer Rueckgabewerte und Schluessel durch
Konstanten in Header/im Code ersetzt
Change-Id: I3d38867f24510ef4fc97d7f3cdf350e169a63ccd
diff --git a/doc/sphinx/lfun/AddExtraLook.rst b/doc/sphinx/lfun/AddExtraLook.rst
index 30b255a..2e90879 100644
--- a/doc/sphinx/lfun/AddExtraLook.rst
+++ b/doc/sphinx/lfun/AddExtraLook.rst
@@ -1,131 +1,169 @@
AddExtraLook()
==============
-AddExtraLook()
-varargs int AddExtraLook(string look, [int duration, string key,
- string lookende, object ob]);
---------------------------------------------------------------------------------------------------------------------------------------
-::
+FUNKTION
+--------
+
+ varargs int AddExtraLook(string look, [int duration, string key, string lookende, object ob]);
DEFINIERT IN
------------
-::
-
- /std/living/description.c
-
-BESCHREIBUNG
-------------
-::
-
- Der Extralook erscheint in der Langbeschreibung des Lebewesens.
- Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
- bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
- werden muesste.
-
-
-
- Alle Parameter bis auf <look> sind optional.
+ /std/living/description.c
ARGUMENTE
---------
-::
+ string look:
- - string look:
- String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
- wird.
- Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
- - int duration:
- > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend
- wird er automatisch geloescht.
- 0: Dieser Eintrag bleibt unbegrenzt gueltig.
- < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
- - string key:
- Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
- auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
- moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der
- Objektname (object_name()) benutzt.
- - string lookende:
- String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
- eingetragene Extralook abgelaufen ist.
- Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
- - object ob:
- Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
- Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
- der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
- abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
- Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
- wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
- etc. sorgen!
- WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
- ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier
- einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
+ - String, der in der Langbeschreibung des Lebewesens zusaetzlich
+ ausgegeben wird.
+ - zu rufender Funktionsname, wenn 'ob' angegeben ist
-RUECKGABEWERTE
---------------
-::
+ int duration:
- > 0, 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.
+ - > 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.
- Die Strings <look> und <lookende> werden vor Ausgabe durch
- replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
- usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
- dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
- Funktionen selber umbrechen, etc.
- Nach replace_personal() werden die Strings noch von break_string() auf 78
- Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
- Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
- Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
- wird.
+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
---------
-::
- # einfacher Eintrag, "fuer die Ewigkeit"
- living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
+.. code-block:: pike
- # Eintrag der nach 1h automatisch weg ist.
- living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
+ // (1) einfacher Eintrag, "fuer die Ewigkeit"
+ living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
-
+.. code-block:: pike
- # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
- living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
- "humni_marmeladen_look");
+ // (2) Eintrag der nach 1h automatisch weg ist.
+ living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
-
+.. code-block:: pike
- # Mit "Ende"-Meldung, aber kein eigener Schluessel.
- living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
- "Du bist endlich wieder trocken. Puuh.");
+ // (3) Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann
+ living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
+ "humni_marmeladen_look");
-
+.. code-block:: pike
- # Mit Objekt, was 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.
+ // (4) Mit "Ende"-Meldung, aber kein eigener Schluessel
+ living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
+ "Du bist endlich wieder trocken. Puuh.");
- # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
- living->AddExtraLook("get_my_special_extralook", 3600, 0,
- "extralookende", this_object());
+.. code-block:: pike
+
+ // (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
+
+.. code-block:: pike
+
+ // (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()));
+
+.. code-block:: pike
+
+ // 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
----------
-::
- RemoveExtraLook(),
- replace_personal(), break_string()
- P_INTERNAL_EXTRA_LOOK
+ Verwandt:
+ :doc:`RemoveExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`
+ Sonstiges:
+ :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
+ Fuer Spielerobjekte:
+ :doc:`../props/P_EXTRA_LOOK`
-14.05.2007, Zesstra
-
+5. Juni 2017 Gloinson
diff --git a/doc/sphinx/lfun/RemoveExtraLook.rst b/doc/sphinx/lfun/RemoveExtraLook.rst
index 3a81693..ed2c04b 100644
--- a/doc/sphinx/lfun/RemoveExtraLook.rst
+++ b/doc/sphinx/lfun/RemoveExtraLook.rst
@@ -1,66 +1,81 @@
RemoveExtraLook()
=================
-RemoveExtraLook()
+FUNKTION
+--------
int RemoveExtraLook(string key);
-----------------------------------------------------
-::
DEFINIERT IN
------------
-::
-
- /std/living/description.c
-
-BESCHREIBUNG
-------------
-::
-
- Der Extralook erscheint in der Langbeschreibung des Lebewesens.
- Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt werden.
+ /std/living/description.c
ARGUMENTE
---------
-::
+ - string key:
+ Schluessel, unter dem der Extralook registriert wurde ODER
+ Objektname des registrierenden Objektes
- - string key:
- Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
- AddExtraLook() registriert wurde.
+BESCHREIBUNG
+------------
+ Der Extralook erscheint in der Langbeschreibung des Lebewesens.
-RUECKGABEWERTE
---------------
-::
-
- > 0, falls der Eintrag erfolgreich entfernt wurde.
- < 0 sonst.
- -1: keinen (gueltigen) <key> uebergeben.
- -2: kein Eintrag fuer <key> gefunden.
+ Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt
+ werden. Dazu wird entweder der selbst festgelegte Schluessel oder
+ der implizite Schluessel `object_name()` des setzenden Objekts
+ benoetigt.
BEMERKUNGEN
-----------
-::
+ Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
+ Eintrages nicht ausgegeben.
- Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
- Eintrages nicht ausgegeben.
+RUECKGABEWERTE
+--------------
+ Siehe auch /sys/living/description.h fuer Konstanten.
+
+ - 1, falls der Eintrag erfolgreich entfernt wurde.
+ - < 0 sonst.
+
+ - -1: keinen (gueltigen) <key> uebergeben.
+ - -2: kein Eintrag fuer <key> gefunden.
BEISPIELE
---------
-::
- // Extralook registrieren.
- living->AddExtraLook(
- "@WER1 wird von einer Horde Daemonen verfolgt.",
- 1800,
- // Ohne das gehts nicht, sonst gibt es keine ID, die man zum Loeschen
- // verwenden koennte.
- "ennox_daemonenhordenverfolgerlook");
- // Nun kann der Eintrag auch wieder entfernt werden:
- living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+.. code-block:: pike
+
+ // (1) Loeschen ueber expliziten Key
+ living->AddExtraLook(
+ "@WER1 wird von einer Horde Daemonen verfolgt.",
+ 1800, "ennox_daemonenhordenverfolgerlook");
+
+ // Nun kann der Eintrag auch wieder entfernt werden:
+ living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+
+.. code-block:: pike
+
+ // (2) Loeschen ueber impliziten Objektnamen-Schluessel
+ living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+ // das ist nur aus dem gleichen Objekt heraus moeglich:
+ living->RemoveExtraLook(0);
+
+.. code-block:: pike
+
+ // (3) Loeschen ueber impliziten Objektnamen-Schluessel
+ string implizite_id = object_name(this_object());
+ living->AddExtraLook("Eine Sonnenblume ragt aus dem Ohr.")
+ // diese ID kann man natuerlich durch die Gegend schicken
+ living->RemoveExtraLook(implizite_id);
SIEHE AUCH
----------
- :doc:`AddExtraLook`
- :doc:`../props/P_INTERNAL_EXTRA_LOOK`
- :doc:`../props/P_EXTRA_LOOK`
+ Verwandt:
+ :doc:`AddExtraLook`, :doc:`../props/P_INTERNAL_EXTRA_LOOK`
+ Sonstiges:
+ :doc:`../sefun/replace_personal`, :doc:`../sefun/break_string`
+ Fuer Spielerobjekte:
+ :doc:`../props/P_EXTRA_LOOK`
+
+15. Jun 2017 Gloinson
diff --git a/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst b/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
index bff5353..dd95176 100644
--- a/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
+++ b/doc/sphinx/props/P_INTERNAL_EXTRA_LOOK.rst
@@ -15,44 +15,55 @@
BESCHREIBUNG
------------
- Diese Property enthaelt ein Mapping, in dem alle einzelnen
- Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
- AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
- QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
- Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
- Eintraegen und deren Daten.
- Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein
- Mapping, welches folgende Keys enthalten kann:
-
- "xllook":
- String, der im Extralook des Living angezeigt wird.
- "xlduration":
- Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
- ist. 0 == "Unendlich", negative Zahlen besagen, dass der Eintrag nur
- bis Reboot/Ende gueltig sein soll und abs(xlduration) ist der Zeitpunkt
- des Eintrages dieses Extralooks.
- "xlende":
- String, der nach Ablaufen an das Living ausgegeben wird.
- "xlfun":
- Funktion, die gerufen wird und den String zurueckliefern muss, der
- ausgegeben werden soll.
- "xlendefun":
- Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist und den
- String zurueckliefern muss, der dann ans Living ausgegeben wird.
- "xlobjectname":
- Objekt, in dem die o.a. Funktionen gerufen werden.
+ Diese Property enthaelt ein Mapping, in dem alle einzelnen
+ Extra-Look-Eintraege des Livings enthalten sind. Dabei weden die Daten von
+ AddExtraLook() und RemoveExtraLook() verwaltet. Fragt man diese Prop mit
+ QueryProp() ab, erhaelt man die Ausgabe der gueltigen Extralooks des
+ Livings. Bei Abfrage per Query() erhaelt man ein Mapping mit allen
+ Eintraegen und deren Daten.
- .. warning::
+ Der Key ist jeweils die ID des Extralooks, der Value ist erneut ein
+ Mapping, welches folgende Keys enthalten kann:
+
+ - "xllook":
+ String, der im Extralook des Living angezeigt wird.
+ - "xlduration":
+ Zeitstempel (int), der angibt, wie lang der Eintrag gueltig
+ ist.
+
+ - 0 ewig gueltig
+ - <0 gueltig bis Ende/Reboot
+ - >0 Gueltig in Sekunden
+
+ - "xlende":
+ String, der nach Ablaufen an das Living ausgegeben wird.
+ - "xlfun":
+ Funktion, die gerufen wird und den String zurueckliefern muss, der
+ ausgegeben werden soll.
+ - "xlendefun":
+ Funktion, die gerufen wird, wenn der Eintrag abgelaufen ist und den
+ String zurueckliefern muss, der dann ans Living ausgegeben wird.
+ - "xlobjectname":
+ Objekt, in dem die o.a. Funktionen gerufen werden.
+
+BEMERKUNGEN:
+------------
+
+ .. warning::
- DIESE PROPERTY BITTE **NIEMALS** PER HAND MIT Set()/SetProp() AENDERN!
- Die Daten in dieser Prop werden vom Living selber verwaltet. Extralooks
- koennen mittel AddExtraLook() eingetragen und mit RemoveExtraLook() entfernt
- werden.
+ Keine echte Property. Die Methode _query_internal_extralook() in /std/living/description.c stellt die Daten zusammen.
+
+ .. warning::
+
+ ACHTUNG: Bitte nur die bereitgestellten Methoden zur Manipulation benutzen! Setzen als Property hat keinen Effekt.
SIEHE AUCH
----------
- - :doc:`../lfun/long`
- - /std/living/description.c, /std/player/base.c
- - :doc:`../lfun/AddExtraLook`, :doc:`../lfun/RemoveExtraLook`
+ Verwandt:
+ :doc:`../lfun/AddExtraLook`, :doc:`../lfun/RemoveExtraLook`
+ :doc:`../lfun/long`
+ Fuer Spielerobjekte:
+ :doc:`../props/P_EXTRA_LOOK`
+15. Juni 2017 Gloinson
diff --git a/std/living/description.c b/std/living/description.c
index b6f63c2..af3bd94 100644
--- a/std/living/description.c
+++ b/std/living/description.c
@@ -24,6 +24,13 @@
#include <class.h>
#include <sys_debug.h>
+#define XL_DURATION "xlduration"
+#define XL_LOOKSTR "xllook"
+#define XL_FUN "xlfun"
+#define XL_ENDMSG "xlende"
+#define XL_ENDFUN "xlendefun"
+#define XL_OBJNAME "xlobjectname"
+
public string _query_internal_extralook() {
mixed xl;
int zeit;
@@ -34,7 +41,7 @@
return(0);
foreach(string key, mapping xld: xl) {
- if (intp(zeit=xld["xlduration"])) {
+ if (intp(zeit=xld[XL_DURATION])) {
//hat offenbar nen Ablaufdatum
if ( (zeit > 0 && zeit < time()) ||
(zeit < 0 && abs(zeit) < object_time(ME)) ) {
@@ -45,12 +52,12 @@
m_delete(xl,key);
// ggf. Meldung ausgeben
if (interactive(ME)) {
- if (sizeof(xld["xlende"])) {
- tell_object(ME,xld["xlende"]);
+ if (sizeof(xld[XL_ENDMSG])) {
+ tell_object(ME,xld[XL_ENDMSG]);
}
//kein einfacher String, aber Objekt+Funktion gegeben?
- else if (sizeof(xld["xlendefun"]) && sizeof(xld["xlobjectname"]) &&
- (!catch(res=call_other(xld["xlobjectname"],xld["xlendefun"],ME)
+ else if (sizeof(xld[XL_ENDFUN]) && sizeof(xld[XL_OBJNAME]) &&
+ (!catch(res=call_other(xld[XL_OBJNAME],xld[XL_ENDFUN],ME)
;publish))) {
if (stringp(res) && sizeof(res))
tell_object(ME,res);
@@ -61,11 +68,11 @@
}
// Der Eintrag ist offenbar noch gueltig, Meldung anhaengen, bzw. via
// Funktionsaufruf beschaffen.
- if (sizeof(xld["xllook"]))
- look+=xld["xllook"];
- else if (sizeof(xld["xlfun"]) && sizeof(xld["xlobjectname"])) {
+ if (sizeof(xld[XL_LOOKSTR]))
+ look+=xld[XL_LOOKSTR];
+ else if (sizeof(xld[XL_FUN]) && sizeof(xld[XL_OBJNAME])) {
closure cl;
- if (catch(cl=symbol_function(xld["xlfun"],xld["xlobjectname"]);publish)
+ if (catch(cl=symbol_function(xld[XL_FUN],xld[XL_OBJNAME]);publish)
|| !cl) {
// wenn Fehler beim Laden/Closure erstellen, dann Eintrag loeschen
// -> Annahme, dass dieser Fehler permanent sein wird, z.B. Eintrag
@@ -90,6 +97,7 @@
return(0);
}
+
public varargs int AddExtraLook(string look, int duration, string key,
string lookende, object ob) {
mapping xl;
@@ -98,22 +106,22 @@
// Automatisch erzeugen, wenn moeglich
if (!objectp(previous_object()) ||
!stringp(key=object_name(previous_object())) || !sizeof(key))
- return(-1);
+ return XL_NOKEY;
}
if (!stringp(look) || !sizeof(look))
- return(-2);
+ return XL_INVALIDEXTRALOOK;
if (!intp(duration))
- return(-3);
+ return XL_INVALIDDURATION;;
xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck
if (!mappingp(xl)) {
- Set(P_INTERNAL_EXTRA_LOOK, xl=([]) );
+ Set(P_INTERNAL_EXTRA_LOOK, xl=([]));
}
// kein Automatisches Ueberschreiben.
if (member(xl,key))
- return(-4);
+ return XL_KEYEXISTS;
// neg. Werte: "bis Ende/reboot", abs(duration) == Eintragzeit
// 0: "fuer ewig", >0: Zeitdauer in Sekunden
@@ -135,30 +143,30 @@
"permanente Extralooks durch Clone (%s) nicht registrierbar.\n",
duration, object_name(ob)));
- xl[key]=(["xlobjectname":object_name(ob),
- "xlfun": look,
+ xl[key]=([XL_OBJNAME:object_name(ob),
+ XL_FUN: look,
]);
// ggf. Name der Funktion speichern, die bei Ablauf aufgerufen wird.
if (stringp(lookende) && sizeof(lookende))
- xl[key]["xlendefun"]=lookende;
+ xl[key][XL_ENDFUN]=lookende;
}
else {
// Einfacher Eintrag, nur den bearbeiteten String merken. ;-)
- xl[key]=(["xllook": break_string(replace_personal(look,({ME}),1),78,
+ xl[key]=([XL_LOOKSTR: break_string(replace_personal(look,({ME}),1),78,
"",BS_LEAVE_MY_LFS),
]);
// ggf. Meldung speichern, die bei Ablauf ausgegeben werden soll.
if (stringp(lookende) && sizeof(lookende)) {
- xl[key]["xlende"]=break_string(replace_personal(lookende,({ME}),1),78,
+ xl[key][XL_ENDMSG]=break_string(replace_personal(lookende,({ME}),1),78,
"",BS_LEAVE_MY_LFS);
}
}
// Endezeit vermerken.
if (duration != 0)
- xl[key]["xlduration"]=duration;
+ xl[key][XL_DURATION]=duration;
// Kein Set noetig, weil Query das Mapping ja als Referenz lieferte.
- return(1);
+ return XL_OK;
}
public int RemoveExtraLook(string key) {
@@ -167,17 +175,17 @@
// Automatisch erzeugen, wenn moeglich
if (!objectp(previous_object()) ||
!stringp(key=object_name(previous_object())) || !sizeof(key))
- return(-1);
+ return XL_NOKEY;
}
xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck
if (!mappingp(xl))
- return (-2);
+ return XL_KEYDOESNOTEXIST;
if (!member(xl,key))
- return(-2);
+ return XL_KEYDOESNOTEXIST;
m_delete(xl,key);
// Kein Set noetig, weil Query das Mapping ja als Referenz lieferte.
- return(1);
+ return XL_OK;
}
void create()
diff --git a/sys/living/description.h b/sys/living/description.h
index def9d28..9d804f0 100644
--- a/sys/living/description.h
+++ b/sys/living/description.h
@@ -31,6 +31,14 @@
#define P_AVATAR_URI "p_lib_avataruri"
+// Extrallook - Returnkonstanten
+#define XL_OK 1
+#define XL_NOKEY -1
+#define XL_INVALIDEXTRALOOK -2
+#define XL_KEYDOESNOTEXIST -2
+#define XL_INVALIDDURATION -3
+#define XL_KEYEXISTS -4
+
#endif // __LIVING_DESCRIPTION_H__