reset() ======= FUNKTION -------- :: void reset(); protected void reset(); BESCHREIBUNG ------------ :: reset() wird vom GameDriver in jedem Objekt aufgerufen, um dem Objekt die Gelegenheit zu geben, sich wieder in einen definierten Zustand zu versetzen: Raeume und Monster erzeugen per AddItem() eingefuegte und zwischenzeitlich entfernte Objekte neu, Tueren schliessen sich ... Solange das Objekt "benutzt" wird, wird reset() regelmaessig alle 45 Minuten (+/-15 Minuten) mit einer Aufloesung von 2s aufgerufen (d.h. der Driver prueft und ruft nur alle 2 Sekunden reset() auf allen Objekten). Wird eine Objekt nicht mehr "benutzt", d.h. wird an einem Objekt nicht von aussen (durch call_other etc.) _nach_ einem reset() eine Methode bzw. LFun gerufen, so bekommt dieses Objekt keinen weiteren reset(). Ein Funktionsaufruf am Objekt schaltet den reset() wieder ein. Bei einem Objekt in einem Container waere das zB das Benutzen des Containers (Hineinlegen/Herausnehmen/Hineinsehen). Das kann sehr lange dauern. Die Abschaltung kann man verhindern, indem man im reset() per call_out() eine Funktion im Objekt ruft. Dies aber bitte _nur_ machen, wenn das Objekt _unbedingt_ auf einen staendigen Reset angewiesen ist, auch wenn es nicht "benutzt" wird. Aendern laesst sich die Zeit zwischen den Aufrufen von reset() mit set_next_reset(). Die Aufloesung von 2s kann man nicht aendern. BEMERKUNGEN ----------- :: - man kann reset() nutzen, um Ereignisse auszuloesen: - es ist billiger als lange call_out() - siehe Warnung bezueglich Abschalten des reset - man kann reset() als protected oder static definieren, wenn man nicht moechte, dass die Funktion von aussen gerufen werden kann. Dies verhindert Einflussnahme von aussen, kann aber auch Debugmassnahmen erschweren. Es ist aber dennoch fuer einige Objekte sinnvoll. - der Driver ruft reset() unabhaengig von zusaetzlichen, "manuellen" Rufen von reset() - keine Rufe von reset() mit call_out() aus reset() (Callout-Ketten- bildung droht), fuer solche Faelle ist set_next_reset(E) da! - bei Blueprints sollte der reset() in der Regel abgeschaltet werden, sofern er nicht auf wichtige Aufgaben in der BP zu tun hat: protected void create() { if(!clonep(ME)) { set_next_reset(-1); return; } ::create(); ... } BEISPIELE --------- :: // ein NPC, der bei jedem reset() schaut, ob um ihn herum bessere // Ausruestung liegt als die, die er selbst gerade traegt: ... void reset() { ::reset(); if(clonep(this_object()) && environment()) { object o; o=first_inventory(environment()); while(o) { look_for_good_weapons_and_use_them_if_better(o); o=next_inventory(o); } } } // ein reset fuer einen Gegenstand, der vielleicht in // in einem Container landet und dann weiter einen reset // bekommen muss/soll void reset() { // irgend ein Code hier call_other(this_object(), "???"); // einfach nur was aufrufen } SIEHE AUCH ---------- :: clean_up(), set_next_reset(E), query_next_reset(E) memory letzte Aenderung: 2009-01-14 Rumata