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
