blob: 0e3918401fd670a5ad7086f47f85e6547abd0360 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001clean_up()
2==========
3
4FUNKTION
5--------
Zesstra18626972017-01-31 10:38:27 +01006
Zesstra0db67bd2019-02-18 21:19:46 +01007 int clean_up(int ref);
Zesstra18626972017-01-31 10:38:27 +01008
9DEFINIERT IN
10------------
Zesstra18626972017-01-31 10:38:27 +010011
Zesstra0db67bd2019-02-18 21:19:46 +010012 * /std/room.c
13 * man kann die Funktion jedoch auch in beliebigen Objekten selbst
Zesstra18626972017-01-31 10:38:27 +010014 definieren.
15
16ARGUMENTE
17---------
Zesstra18626972017-01-31 10:38:27 +010018
Zesstra0db67bd2019-02-18 21:19:46 +010019 ref
Zesstra7a05cf62019-02-18 21:59:20 +010020 Ein Referenzzaehler (s.u.)
Zesstra18626972017-01-31 10:38:27 +010021
22BESCHREIBUNG
23------------
Zesstra18626972017-01-31 10:38:27 +010024
Zesstra7a05cf62019-02-18 21:59:20 +010025 Wenn ein Objekt seit langer Zeit nicht mehr benutzt wurde (d.h. es wurde
26 keine lfun *von aussen* in ihm gerufen), ruft der Driver diese Funktion
27 auf. Es kann es sich hier selbst zerstoeren, um Speicher freizugeben (und
28 ggf. spaeter mit aktuellem Sourcecode neu erzeugt werden, was auch eine
29 Art einfacher Updatemechanismus ist).
30
31 Der Referenzzaehler <ref> gibt an, wie oft das Objekt als Vorlage fuer
32 Clones oder erbende Programme dient. Folgende Faelle sind damit
33 unterscheidbar:
34
35 ref==0:
36 Das Objekt ist ein Clone (oder eine Blueprint mit ersetztem Programm)
37 ref==1:
38 Das Objekt ist eine Blueprint (kein Clone), von welcher zur Zeit keine
39 Clones oder erbenden Programme existieren.
40 ref > 1:
41 Das Objekt dient als Vorlage / Blueprint fuer Clones oder erbende
42 Programme.
43
44 Das Objekt im clean_up zu zerstoeren, ist in der Regel ist daher nur
45 sinnvoll, wenn ref kleiner oder gleich 1 ist.
46
47 Sollte man einem Objekt ein clean_up geben, was als Clone im Umlauf ist und
48 dieses im Falle von ref==0 zerstoeren, bedeutet dies letztendlich, dass
49 sich ungenutzte Clones aufraeumen.
50
51 In einem Spezialfall kann ref auch < 0 sein: wenn clean_up *nicht* vom
52 Driver gerufen wird, sondern (manuell) von irgendwo aus der Mudlib, ist
53 die *Konvention*, einen Wert < 0 zu uebergeben.
54
55 Standardmaessig definieren nur Raeume clean_up(). Hierbei gilt die
56 Besonderheit, dass Raeume sich erst beim *zweiten* Aufruf von clean_up()
57 wegraeumen, wenn in ihnen Objekte liegen, die der Raum *nicht* selbst
58 mittels AddItem() erzeugt hat. D.h. laesst jemand etwas im Raum rumliegen,
59 erhoeht sich effektiv die Cleanup-Zeit auf das doppelte. Und hat
60 irgendjemand sich auf einen Hook des Raums registriert, raeumt der Raum
61 sich nicht im clean_up() auf.
62
63 Soll ein Raum sich niemals per clean_up() selber aufraeumen, kann die
64 Property :doc:`P_NEVER_CLEAN` gesetzt werden. Aber bitte seid hiermit
65 *sehr sparsam* und benutzt das nur in Raeumen, die es wirklich benoetigen.
66 Fast alle Raeume kommen super klar, wenn sie bei Bedarf neu erzeugt
67 werden.
Zesstra18626972017-01-31 10:38:27 +010068
69RUeCKGABEWERT
70-------------
Zesstra18626972017-01-31 10:38:27 +010071
Zesstra0db67bd2019-02-18 21:19:46 +010072 Der Rueckgabewert hat nur dann eine Bedeutung, wenn sich das Objekt
Zesstra7a05cf62019-02-18 21:59:20 +010073 nicht selbst zerstoert hat.
Zesstra18626972017-01-31 10:38:27 +010074
Zesstra7a05cf62019-02-18 21:59:20 +010075 Wird 0 zurueckgegeben, so wird clean_up() *nicht erneut* gerufen.
76 Ein Rueckgabewert ungleich 0 zeigt hingegen an, dass das Objekt sich
77 moeglicherweise beim naechsten Aufruf von clean_up() zerstoeren koennte,
78 d.h. der Driver wird es nach Ablauf der Cleanup-Zeit erneut versuchen.
Zesstra18626972017-01-31 10:38:27 +010079
80BEMERKUNGEN
81-----------
Zesstra18626972017-01-31 10:38:27 +010082
Zesstra7a05cf62019-02-18 21:59:20 +010083 Die Cleanup-Zeit, die ein Objekt nicht benutzt werden darf, bevor
84 clean_up() aufgerufen wird, betraegt momentan 18h (64800 Sekunden).
Zesstra18626972017-01-31 10:38:27 +010085
86SIEHE AUCH
87----------
Zesstra18626972017-01-31 10:38:27 +010088
Zesstra0db67bd2019-02-18 21:19:46 +010089 lfuns:
90 :doc:`reset`
91 Properties:
92 :doc:`../props/P_NEVER_CLEAN`
93 Konzepte:
Zesstra18626972017-01-31 10:38:27 +010094 memory
95
Zesstra7a05cf62019-02-18 21:59:20 +01009618.02.2019, Zesstra