STANDARDOBJECT FUER EINEN BEHAELTER
erstellt am 08.11.1996 von Gum
BENUTZUNG
inherit "std/behaelter";
#include <properties.h>
BESCHREIBUNG
Basisklasse fuer alle Behaelter im Spiel. Sie ist von
/std/container abgeleitet und beinhaltet Zusatzfunktionen
fuer das Oeffnen und Schliessen
PROPERTIES
P_CNT_STATUS Zustand des Containers, kann einer der unten
aufgefuehrten Werten sein
P_CNT_KEY Id eines Schluessels, mit dem der Container vom
abgeschlossenen Zustand (P_STATUS_LOCKED) in den
geoeffneten Zustand (P_CNT_STATUS_OPEN) gebracht
werden kann
P_CNT_KEY_CLOSE Id eines Schluessels, mit dem der Container vom
geoeffneten (P_STATUS_OPEN) oder vom geschlossenen
Zustand (P_STATUS_CLOSED) in den abgeschlossenen
Zustand (P_STATUS_LOCKED) gebracht werden kann
P_CNT_FLAGS Zahlenwert, der das allgemeine Verhalten und das
Verhalten des Behaelters bei Reset definiert; er
kann sich aus einer sinnvollen Summe der unten
aufgefuehrten Werte zusammensetzen (einer der drei
Werte 1, 2 oder 4 kann mit 8 kombiniert werden)
WERTE FUER P_CNT_STATUS
CNT_STATUS_OPEN Behaelter ist geoeffnet
CNT_STATUS_CLOSED Behaelter ist geschlossen
CNT_STATUS_LOCKED Behaelter ist abgeschlossen
WERTE FUER P_CNT_FLAG
CNT_RESET_OPEN Behaelter wird bei Reset geoeffnet
CNT_RESET_CLOSED Behaelter wird bei Reset geschlossen
CNT_RESET_LOCKED Behaelter wird bei Reset abgeschlossen
CNT_ONLY_LOCK Behaelter kann vom offenen Zustand nur in den
abgeschlossenen Zustand uebergehen, das heisst,
er kann nicht den Zustand geschlossen annehmen;
beim Schliessen wird automatisch P_STATUS_LOCKED
gesetzt, das Oeffnen ist danach nur mit einem
Schluessel (P_CNT_KEY muss gesetzt sein) moeglich
FUNKTIONEN
Im Behaelter sind folgende Funktionen definiert, die ueber die
Funktionalitaet des normalen Containers hinausgehen:
int IsOpen();
liefert einen Wert ungleich 0, wenn der Behaelter geoeffnet ist,
liefert 0, wenn der Behaelter geschlossen oder abgeschlossen ist
int IsClosed();
liefert einen Wert ungleich 0, wenn der Behaelter geschlossen ist,
liefert 0, wenn der Behaelter geoeffnet ist und auch, wenn er
abgeschlossen ist!
int IsLocked();
liefert einen Wert ungleich 0, wenn der Behaelter abgeschlossen ist,
liefert 0, wenn der Behaelter geoeffnet oder geschlossen ist
int CanOnlyLock();
liefert einen Wert ungleich 0, wenn der Behaelter das Flag
CNT_ONLY_LOCK gesetzt hat, sonst 0
Die folgenden Funktionen koennen ueberschrieben werden, um den
Behaelter an bestimmte spezielle Eigenschaften und Faehigkeiten
anzupassen.
int BeforeOpen();
diese Funktion wird aufgerufen, wenn das Oeffnen des Behaelters
im Prinzip erfolgreich durchgefuerht werden kann
soll das Oeffnen aber noch von anderen, nicht im Standardbehaelter
enthaltenen Parametern abhaengig sein, koennen diese in dieser
Funktion abgetestet werden
soll der Behaelter nicht geoeffnet werden, muss die Funktion 0
zurueckliefern, fuer Fehlermeldungen, warum der Behaelter nicht
geoeffnet werden kann, ist der einzelne Magier selbst
verantwortlich;
steht dem Oeffnen des Behaelters nichts mehr im Wege, muss diese
Funktion den Wert 1 zurueckgeben;
nach dem 'return 1' gibt der Behaelter eine Standardmeldung an
this_player und alle anderen Leute im Raum ueber das erfolgreiche
Oeffnen des Behaelters aus;
standardmaessig macht diese Funktion nur ein 'return 1';
wenn jemandem die Standardmessage fuer das Oeffnen des Behaelters
nicht zusagt, kann er diese Funktion benutzen, um eigene Messages
auszugeben, allerdings muss dann auf zwei Dinge geachtet werden:
1. die Zeile
SetProp(P_CNT_STATUS, CNT_STATUS_OPEN);
muss in der Funktion enthalten sein
2. die Funktion muss mit 'return 0' verlassen werden
int BeforeClose();
bei dieser Funktion gilt das fuer BeforeOpen() gesagte analog fuer
das Schliessen des Behaelters
void AfterOpen();
diese Funktion wird aufgerufen, nachdem der Behaelter erfolgreich
geoeffnet wurde und die Erfolgsmessages ausgegeben wurden
wozu sie benutzt werden kann, ist der Phantasie des einzelnen
ueberlassen (z.b. koennen darin aktionen ausgeloest werden, die
durch das Oeffnen des Behaelters verursacht werden, das Oeffnen
einer Puderdose koennte einen Niesanfall ausloesen, oder der Deckel
einer Truhe erweist sich als zu schwer und faellt wieder zu - in
diesem falle aber nicht das Ruecksetzen von P_CNT_STATUS vergessen)
void AfterClose();
analog zu AfterOpen(), wird aber nach dem erfolgreichen Schliessen
des Behaelters aufgerufen
int ResetFunc();
mit dieser Funktion kann das Verhalten des Behaelters bei reset()
beeinflusst werden, aufgerufen wird sie nach ::reset() und bevor
die Flags (P_CNT_FLAGS) getestet und ausgewertet werden;
liefert die Funktion 0 zurueck, werden die Flags nicht mehr
ausgewertet; standardmaessig liefert die funktion 1 zurueck;
in der funktion koennen beispielsweise weitere (vom Standard-
behaelter unabhaengige) gesetzte Flags getestet und in
Abhaengigkeit von diesen die weitere Ausfuehrung des Resets
gesteuert werden (entweder Abbruch == return 0; oder
Ausfuehrung == return 1; )
int KeyOpenFunc();
entspricht in der Anwendung der Funktion BeforeOpen(), wird aber
nur aufgerufen, wenn beim Oeffnen des Behaelters ein Schluessel
benoetigt wird und alle Kriterien fuer das erfolgreiche Oeffnen
bereits erfuellt wurden (z.b. Behaelter abgeschlossen, Schluessel
passt);
Rueckgabewert 0 == Abbruch des Oeffnens, Rueckgabewert 1 == gib
Standardmessages fuer erfolgreiches Oeffnen aus
ACHTUNG: die Funktion BeforeOpen() wird anschliessend ebenfalls
noch aufgerufen (bevor die Messages ausgegeben werden)!
int KeyCloseFunc();
entspricht in der Anwendung der Funktion BeforeClose(), wird aber
nur aufgerufen, wenn beim Schliessen des Behaelters ein Schluessel
benoetigt wird und alle Kriterien fuer das erfolgreiche Schliessen
bereits erfuellt wurden (z.b. Behaelter nicht abgeschlossen,
Schluessel passt);
Rueckgabewert 0 == Abbruch des Schliessens, Rueckgabewert 1 == gib
Standardmessages fuer erfolgreiches Schliessen aus
ACHTUNG: die Funktion BeforeClose() wird anschliessend ebenfalls
noch aufgerufen (bevor die Messages ausgegeben werden)!
Die folgenden Funktionen werden durch Kommandos aufgerufen und werden
normalerweise nicht ueberschrieben.
int schliesse(string str);
wird durch die Kommandos 'schliess' und 'schliesse' aufgerufen
erledigen alle noetigen Abfragen und Tests beim Schliessen des
Behaelters
int oeffne(string str);
wird durch das Kommandos 'oeffne' aufgerufen
erledigen alle noetigen Abfragen und Tests beim Oeffnen des
Behaelters
int entleeren(string str);
wird durch die Kommandos 'leere' und 'entleere' aufgerufen
erledigen alle noetigen Abfragen und Tests beim Entleeren des
Behaelters
SIEHE AUCH
container(STD), lcontainer(STD), IsOpen(L), IsClosed(L), IsLocked(L),
CanOnlyLock(L)
|