blob: 94e575f4024e910f1dc8658f5cd4b8e586c1128e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001STANDARDOBJEKT FUER RAEUME:
2
3BENUTZUNG:
4 inherit "/std/room";
5
6 #include <properties.h>
7 #include <rooms.h> // Fuer AddItem() und NewDoor()
8
9BESCHREIBUNG:
10 Ein Raum ist ein Objekt, das von Spielern oder anderen Lebewesen
11 betreten werden kann. Er hat Lang- und Kurzbeschreibungen von
12 innen und aussen (zum Beispiel Schiffe oder aehnliche Raeume in
13 Raeumen), die sich der Spieler je nach seinen Beduerfnissen
14 anzeigen lassen kann (kurz/lang-Modus).
15
16 Properties:
17
18 P_INT_SHORT
19 Kurzbeschreibung innerhalb des Raumes
20 P_INT_LONG
21 Langbeschreibung innerhalb des Raumes
22 P_SHORT
23 Kurzbeschreibung von aussen (nur noetig, wenn man den Raum
24 auch wirklich von aussen sehen kann)
25 P_LONG
26 Langbeschreibung von aussen (siehe P_SHORT)
27 Um Situationsbezogene Beschreibungen zu bekommen, kann man
28 Querymethoden auf die jeweiligen Properties setzen, siehe Dokumentation
29 zu Set().
30
31 P_LIGHT
32 Lichtlevel des Raums (0 dunkel, 1 hell)
33 P_LIGHT_TYPE
34 Lichtart, mit der der Raum beleuchtet ist, zB LT_SUNLIGHT
35 P_INDOORS
36 Wenn es sich um einen Aussenraum handelt, 0. 1 fuer Innenraeume.
37 P_TRANSPARENT
38 Ist ungleich 0, wenn man in den Raum von aussen reinschauen
39 kann, oder von innen nach aussen
40 P_NO_TPORT
41 Zum verhindern von Teleportversuchen in oder aus dem Raum
42 P_NOMAGIC
43 Im Raum kann nicht gezaubert werden.
44 P_WATER
45 Im Raum kann geangelt werden, und man kann ggf. sogar Fische fangen.
46
47 Funktionen:
48
49 AddExit(string|string* kmnd, string zielraum)
50 <kmnd> kann ein String sein oder eine Liste von Strings
51 mit den Kommandos mit denen der Spieler in <zielraum>
52 landen soll.
53 RemoveExit(string|string* kmnd)
54 <kmnd> ist ein String oder eine Liste von Strings, deren
55 Ausgaenge entfernt werden sollen. Dabei muss man etwas vor-
56 sichtig sein, da ein Spieler, der zum Zeitpunkt des Aufrufs
57 im Raum ist, die Aktion fuer sich noch definiert hat.
58 Also: Nur benutzen, wenn man weiss, was man tut!
59 AddSpecialExit(string|string* kmnd, string funktion)
60 <funktion> wird aufgerufen, wenn der Spieler das Kommando
61 <kmnd> tippt (oder eins der Kommandos, wenn <kmnd> eine
62 Liste ist). Nuetzlich zum Beispiel um einen Spieler nur
63 durchzulassen, wenn ein Waechter nicht da ist.
64 P_AERIAL_HELPERS/P_AQUATIC_HELPERS
65 Sollte es gewuenscht sein, dass bestimmte Raeume z.B. nur
66 fliegend erreicht werden koennen, oder dass man fuer einen
67 bestimmten Ausgang tauchen koennen muss, sind diese
68 Properties hilfreich, die im Spielerobjekt definiert sind
69 und die dort aktuell registrierten Hilfsobjekte fuers
70 Fliegen/Segeln und Tauchen enthalten.
71 RemoveSpecialExit(string|string* kmnd)
72 siehe RemoveExit()
73 NewDoor()
74 Fuegt dem Raum eine Tuer hinzu, die in einen zweiten Raum fuehrt,
75 und die der Spieler (ggf. mit einem Schluessel) oeffnen und
76 schliessen kann.
77
78 Um Raeume interessanter zu machen, kann man ihnen Details, die
79 vom Spieler angeschaut werden koennen, einbauen:
80
81 AddDetail(string|string* keys, string descr)
82 Eine Beschreibung von Details, die vom Spieler angeschaut
83 werden koennen wird dem Raum gegeben. <keys> kann ein
84 String sein oder eine Liste von Strings. <descr> ist
85 die Beschreibung, die der Spieler erhaelt.
86 RemoveDetail(string|string* keys)
87 Entfernt ein Detail aus einem Raum. <keys> kann ein String
88 sein oder eine Liste von Strings.
89 AddSpecialDetail(string|string* keys, string function)
90 Im Prinzip wie AddDetail(), nur wird als zweites Argument
91 kein fester String angegeben, sondern eine Funktion, die
92 einen String zurueckgeben muss. Damit kann man variable
93 Details programmieren.
94 RemoveSpecialDetail(string|string* keys)
95 siehe RemoveDetail()
96 AddReadDetail(string|string* keys, string desc)
97 <desc> wird ausgegeben, wenn ein Spieler den <key> liest.
98 <keys> kann wieder ein String oder eine Liste von Strings
99 sein.
100 RemoveReadDetail(string|string* keys)
101 siehe RemoveDetail()
102 AddRoomMessage(string* msg, int prob, string|mixed *func)
103 Alle <prob> Sekunden wird aus einer Liste von Meldungen
104 (<msg>) zufaellig eine ausgesucht, die dann im Raum er-
105 scheint. Wenn das Argument <func> angegeben ist, wird
106 eine Funktion diesen Namens aufgerufen, der der Index
107 der ausgegebenen Meldung als Argument uebergeben wird.
108 Func darf auch einen Array von Funktionen enthalten.
109
110 AddCmd(string|string* cmd, string func, int flag)
111 Im Raum wird beim Kommando <cmd> (oder einem der Kommandos)
112 die Funktion <func> aufgerufen. <func> muss 1 zurueck-
113 geben, wenn die Funktion die Kombination aus Kommando
114 und Argumenten akzeptiert, ansonsten 0. Alles was ein
115 Spieler hinter <cmd> noch angibt, wird der Funktion als
116 Argument uebergeben. Wenn <flag> gesetzt ist, wird jedes
117 Kommando, das mit <cmd> beginnt akzeptiert.
118 RemoveCmd(string|string* cmd)
119 Entfernt ein Kommando aus dem Raum.
120 ACHTUNG: Bei Spielern, die zum Zeitpunkt des Funktions-
121 aufrufs noch im Raum sind, ist das Kommando noch definiert.
122 Also: Nur benutzen, wenn man genau weiss, was man tut.
123
124 AddItem(string filename, int refresh)
125 Ein Objekt mit Pfad <filename> wird erzeugt und in den
126 Raum bewegt, dabei gibt es vier verschiedene Modi, die
127 ueber das Argument <refresh> angegeben werden:
128 REFRESH_NONE: Das Objekt wird nur beim allerersten mal
129 erzeugt, und dann nie wieder (erst beim reboot)
130 REFRESH_DESTRUCT: Ein neues Objekt wird erst erzeugt,
131 wenn das alte zerstoert ist. So kann man sicher
132 gehen, dass nur ein Exemplar im Spiel ist.
133 REFRESH_REMOVE: Beim reset wird ein neues Objekt erzeugt,
134 wenn sich das alte nicht mehr im Raum befindet.
135 REFRESH_ALWAYS: Bei jedem reset wird ein neues Objekt
136 erzeugt. VORSICHT: Kann zu riesigen Mengen von
137 Objekten fuehren, wenn ein Raum lange nicht be-
138 sucht wird.
139 Die Konstanten REFRESH_* sind in <rooms.h> definiert.
140
141 Auf die Properties P_EXITS, P_SPECIAL_EXITS, P_DETAILS,
142 P_SPECIAL_DETAILS, P_READ_DETAILS, P_COMMANDS und P_ITEMS
143 sollte NICHT direkt zugegriffen werden.