clean_up()

FUNKTION

int clean_up(int ref);

DEFINIERT IN

  • /std/room.c
  • man kann die Funktion jedoch auch in beliebigen Objekten selbst definieren.

ARGUMENTE

ref
Ein Referenzzaehler (s.u.)

BESCHREIBUNG

Wenn ein Objekt seit langer Zeit nicht mehr benutzt wurde (d.h. es wurde keine lfun von aussen in ihm gerufen), ruft der Driver diese Funktion auf. Es kann es sich hier selbst zerstoeren, um Speicher freizugeben (und ggf. spaeter mit aktuellem Sourcecode neu erzeugt werden, was auch eine Art einfacher Updatemechanismus ist).

Der Referenzzaehler <ref> gibt an, wie oft das Objekt als Vorlage fuer Clones oder erbende Programme dient. Folgende Faelle sind damit unterscheidbar:

ref==0:
Das Objekt ist ein Clone (oder eine Blueprint mit ersetztem Programm)
ref==1:
Das Objekt ist eine Blueprint (kein Clone), von welcher zur Zeit keine Clones oder erbenden Programme existieren.
ref > 1:
Das Objekt dient als Vorlage / Blueprint fuer Clones oder erbende Programme.

Das Objekt im clean_up zu zerstoeren, ist in der Regel ist daher nur sinnvoll, wenn ref kleiner oder gleich 1 ist.

Sollte man einem Objekt ein clean_up geben, was als Clone im Umlauf ist und dieses im Falle von ref==0 zerstoeren, bedeutet dies letztendlich, dass sich ungenutzte Clones aufraeumen.

In einem Spezialfall kann ref auch < 0 sein: wenn clean_up nicht vom Driver gerufen wird, sondern (manuell) von irgendwo aus der Mudlib, ist die Konvention, einen Wert < 0 zu uebergeben.

Standardmaessig definieren nur Raeume clean_up(). Hierbei gilt die Besonderheit, dass Raeume sich erst beim zweiten Aufruf von clean_up() wegraeumen, wenn in ihnen Objekte liegen, die der Raum nicht selbst mittels AddItem() erzeugt hat. D.h. laesst jemand etwas im Raum rumliegen, erhoeht sich effektiv die Cleanup-Zeit auf das doppelte. Und hat irgendjemand sich auf einen Hook des Raums registriert, raeumt der Raum sich nicht im clean_up() auf.

Soll ein Raum sich niemals per clean_up() selber aufraeumen, kann die Property P_NEVER_CLEAN gesetzt werden. Aber bitte seid hiermit sehr sparsam und benutzt das nur in Raeumen, die es wirklich benoetigen. Fast alle Raeume kommen super klar, wenn sie bei Bedarf neu erzeugt werden.

RUeCKGABEWERT

Der Rueckgabewert hat nur dann eine Bedeutung, wenn sich das Objekt nicht selbst zerstoert hat.

Wird 0 zurueckgegeben, so wird clean_up() nicht erneut gerufen. Ein Rueckgabewert ungleich 0 zeigt hingegen an, dass das Objekt sich moeglicherweise beim naechsten Aufruf von clean_up() zerstoeren koennte, d.h. der Driver wird es nach Ablauf der Cleanup-Zeit erneut versuchen.

BEMERKUNGEN

Die Cleanup-Zeit, die ein Objekt nicht benutzt werden darf, bevor clean_up() aufgerufen wird, betraegt momentan 18h (64800 Sekunden).

SIEHE AUCH

lfuns:
reset()
Properties:
P_NEVER_CLEAN

18.02.2019, Zesstra