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