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