blob: 07a22ee6fa29902d48fddfdd80d78dfc56954cfe [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001reset()
2FUNKTION:
3 void reset();
4 protected void reset();
5
6BESCHREIBUNG:
7 reset() wird vom GameDriver in jedem Objekt aufgerufen, um dem Objekt
8 die Gelegenheit zu geben, sich wieder in einen definierten Zustand zu
9 versetzen: Raeume und Monster erzeugen per AddItem() eingefuegte und
10 zwischenzeitlich entfernte Objekte neu, Tueren schliessen sich ...
11
12 Solange das Objekt "benutzt" wird, wird reset() regelmaessig alle
13 45 Minuten (+/-15 Minuten) mit einer Aufloesung von 2s aufgerufen
14 (d.h. der Driver prueft und ruft nur alle 2 Sekunden reset() auf
15 allen Objekten).
16
17 Wird eine Objekt nicht mehr "benutzt", d.h. wird an einem Objekt nicht
18 von aussen (durch call_other etc.) _nach_ einem reset() eine Methode
19 bzw. LFun gerufen, so bekommt dieses Objekt keinen weiteren reset().
20
21 Ein Funktionsaufruf am Objekt schaltet den reset() wieder ein.
22 Bei einem Objekt in einem Container waere das zB das Benutzen des
23 Containers (Hineinlegen/Herausnehmen/Hineinsehen). Das kann
24 sehr lange dauern.
25
26 Die Abschaltung kann man verhindern, indem man im reset() per call_out()
27 eine Funktion im Objekt ruft. Dies aber bitte _nur_ machen, wenn das
28 Objekt _unbedingt_ auf einen staendigen Reset angewiesen ist, auch wenn
29 es nicht "benutzt" wird.
30
31 Aendern laesst sich die Zeit zwischen den Aufrufen von reset() mit
32 set_next_reset(). Die Aufloesung von 2s kann man nicht aendern.
33
34BEMERKUNGEN:
35 - man kann reset() nutzen, um Ereignisse auszuloesen:
36 - es ist billiger als lange call_out()
37 - siehe Warnung bezueglich Abschalten des reset
38 - man kann reset() als protected oder static definieren, wenn man nicht
39 moechte, dass die Funktion von aussen gerufen werden kann. Dies
40 verhindert Einflussnahme von aussen, kann aber auch Debugmassnahmen
41 erschweren. Es ist aber dennoch fuer einige Objekte sinnvoll.
42 - der Driver ruft reset() unabhaengig von zusaetzlichen, "manuellen"
43 Rufen von reset()
44 - keine Rufe von reset() mit call_out() aus reset() (Callout-Ketten-
45 bildung droht), fuer solche Faelle ist set_next_reset(E) da!
46 - bei Blueprints sollte der reset() in der Regel abgeschaltet werden,
47 sofern er nicht auf wichtige Aufgaben in der BP zu tun hat:
48 protected void create() {
49 if(!clonep(ME)) {
50 set_next_reset(-1);
51 return;
52 }
53 ::create();
54 ...
55 }
56
57BEISPIELE:
58 // ein NPC, der bei jedem reset() schaut, ob um ihn herum bessere
59 // Ausruestung liegt als die, die er selbst gerade traegt:
60
61 ...
62 void reset() {
63 ::reset();
64
65 if(clonep(this_object()) && environment()) {
66 object o;
67 o=first_inventory(environment());
68 while(o) {
69 look_for_good_weapons_and_use_them_if_better(o);
70 o=next_inventory(o);
71 }
72 }
73 }
74
75 // ein reset fuer einen Gegenstand, der vielleicht in
76 // in einem Container landet und dann weiter einen reset
77 // bekommen muss/soll
78
79 void reset() {
80 // irgend ein Code hier
81 call_other(this_object(), "???"); // einfach nur was aufrufen
82 }
83
84SIEHE AUCH:
85 clean_up(), set_next_reset(E), query_next_reset(E)
86 memory
87
88letzte Aenderung: 2009-01-14 Rumata