Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/clean_up

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  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


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.