MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | STANDARDOBJEKT FUER RAEUME: |
| 2 | |
| 3 | BENUTZUNG: |
| 4 | inherit "std/room"; |
| 5 | |
| 6 | #include <properties.h> |
| 7 | #include <rooms.h> // Fuer AddItem() und NewDoor() |
| 8 | |
| 9 | BESCHREIBUNG: |
| 10 | Ein Raum ist ein Objekt, dass von Spielern oder anderen Lebewesen |
| 11 | betreten werden kann. Er hat Lang- und Kurzbeschrreibungen von |
| 12 | innen und aussen (zum Beispiel Schiffe oder aehnliche Raeume in |
| 13 | Raeumen), die sich der Spieler je nach seinen Beduerftnissen |
| 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 | Kurzbeschriebung 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 | int_short(), int_long(), short(), long() ueberschreiben, oder |
| 29 | den process_string Mechanismus verwenden (siehe entsprechende |
| 30 | Dokumentation) |
| 31 | |
| 32 | P_LIGHT |
| 33 | Lichtlevel des Raums (0 dunkel, 1 hell) |
| 34 | P_INDOORS |
| 35 | 1 Wenn der Raum nicht im Freien ist |
| 36 | P_TRANSPARENT |
| 37 | Ist ungleich 0, wenn man in den Raum von aussen reinschauen |
| 38 | kann, oder von innen nach aussen |
| 39 | P_NO_TPORT |
| 40 | Zum verhindern von Teleportversuchen in oder aus dem Raum |
| 41 | (siehe auch /doc/properties.h) |
| 42 | P_NOMAGIC |
| 43 | Im Raum kann nicht gezaubert werden. |
| 44 | |
| 45 | Funktionen: |
| 46 | AddExit(string|string* kmnd, string zielraum) |
| 47 | <kmnd> kann ein String sein oder eine Liste von Strings |
| 48 | mit den Kommandos mit denen der Spieler in <zielraum> |
| 49 | landen soll. |
| 50 | RemoveExit(string|string* kmnd) |
| 51 | <kmnd> ist ein String oder eine Liste von Strings, deren |
| 52 | Ausgaenge entfernt werden sollen. Dabei muss man etwas vor- |
| 53 | sichtig sein, da ein Spieler, der zum Zeitpunkt des Aufrufs |
| 54 | im Raum ist, die Aktion fuer sich noch definiert hat. |
| 55 | Also: Nur benutzen, wenn man weiss, was man tut! |
| 56 | AddSpecialExit(string|string* kmnd, string funktion) |
| 57 | <funktion> wird aufgerufen, wenn der Spieler das Kommando |
| 58 | <kmnd> tippt (oder eins der Kommandos, wenn <kmnd> eine |
| 59 | Liste ist). Nuetzlich zum Beispiel um einen Spieler nur |
| 60 | durchzulassen, wenn ein Waechter nicht da ist. |
| 61 | RemoveSpecialExit(string|string* kmnd) |
| 62 | siehe RemoveExit() |
| 63 | NewDoor() |
| 64 | siehe /doc/std/door |
| 65 | |
| 66 | Um Raeume interessanter zu machen, kann man ihnen Details, die |
| 67 | vom Spieler angeschaut werden koennen, einbauen: |
| 68 | |
| 69 | AddDetail(string|string* keys, string descr) |
| 70 | Eine Beschreibung von Details, die vom Spieler angeschaut |
| 71 | werden koennen wird dem Raum gegeben. <keys> kann ein |
| 72 | String sein oder eine Liste von Strings. <descr> ist |
| 73 | die Beschreibung, die der Spieler erhaelt. |
| 74 | RemoveDetail(string|string* keys) |
| 75 | Entfernt ein Detail aus einem Raum. <keys> kann ein String |
| 76 | sein oder eine Liste von Strings. |
| 77 | AddSpecialDetail(string|string* keys, string function) |
| 78 | Im Prinzip wie AddDetail(), nur wird als zweites Argument |
| 79 | kein fester String angegeben, sonder eine Funktion, die |
| 80 | einen String zurueckgeben muss. Damit kann man variable |
| 81 | Details programmieren. |
| 82 | RemoveSpecialDetail(string|string* keys) |
| 83 | siehe RemoveDetail() |
| 84 | AddReadDetail(string|string* keys, string desc) |
| 85 | <desc> wird ausgegeben, wenn ein Spieler den <key> liest. |
| 86 | <keys> kann wieder ein String oder eine Liste von Strings |
| 87 | sein. |
| 88 | RemoveReadDetail(string|string* keys) |
| 89 | siehe RemoveDetail() |
| 90 | AddRoomMessage(string* msg, int prob, string|string *func) |
| 91 | Alle <prob> Sekunden wird aus einer Liste von Meldungen |
| 92 | (<msg>) zufaellig eine ausgesucht, die dann im Raum er- |
| 93 | scheint. Wenn das Argument <func> angegeben ist, wird |
| 94 | eine Funktion diesen Namens aufgerufen, der der Index |
| 95 | der ausgegebenen Meldung als Argument uebergeben wird. |
| 96 | func darf auch einen Array von Funktionen enthalten. Es wird |
| 97 | dann zufaellig eine ausgewaehlt. |
| 98 | |
| 99 | AddCmd(string|string* cmd, string func, int flag) |
| 100 | Im Raum wird beim Kommando <cmd> (oder einem der Kommandos) |
| 101 | die Funktion <func> aufgerufen. <func> muss 1 zurueck- |
| 102 | geben, wenn die Funktion die Kombination aus Kommando |
| 103 | und Argumenten akzeptiert, ansonsten 0. Alles was ein |
| 104 | Spieler hinter <cmd> noch angibt, wird der Funktion als |
| 105 | Argument uebergeben. Wenn <flag> gesetzt ist, wird jedes |
| 106 | Kommando, das mit <cmd> beginnt akzeptiert. |
| 107 | RemoveCmd(string|string* cmd) |
| 108 | Entfernt ein Kommando aus dem Raum. |
| 109 | ACHTUNG: Bei Spielern, die zum Zeitpunkt des Funktions- |
| 110 | aufrufs noch im Raum sind, ist das Kommando noch definiert. |
| 111 | Also: Nur benutzen, wenn man genau weiss, was man tut. |
| 112 | |
| 113 | AddItem(string filename, int refresh) |
| 114 | Ein Objekt mit Pfad <filename> wird erzeugt und in den |
| 115 | Raum bewegt, dabei gibt es vier verschiedene Modi, die |
| 116 | ueber das Argument <refresh> angegeben werden: |
| 117 | REFRESH_NONE: Das Objekt wird nur beim allerersten mal |
| 118 | erzeugt, und dann nie wieder (erst beim reboot) |
| 119 | REFRESH_DESTRUCT: Ein neues Objekt wird erst erzeugt, |
| 120 | wenn das alte zerstoert ist. So kann man sicher |
| 121 | gehen, dass nur ein Exemplar im Spiel ist. |
| 122 | REFRESH_REMOVE: Beim reset wird ein neues Objekt erzeugt, |
| 123 | wenn sich das alte nicht mehr im Raum befindet. |
| 124 | REFRESH_ALWAYS: Bei jedem reset wird ein neues Objekt |
| 125 | erzeugt. VORSICHT: Kann zu riesigen Mengen von |
| 126 | Objekten fuehren, wenn ein Raum lange nicht be- |
| 127 | sucht wird. |
| 128 | Die Konstanten REFRESH_* sind in <rooms.h> definiert. |
| 129 | |
| 130 | Auf die Properties P_EXITS, P_SPECIAL_EXITS, P_DETAILS, |
| 131 | P_SPECIAL_DETAILS, P_READ_DETAILS, P_COMMANDS und P_ITEMS |
| 132 | sollte NICHT direkt zugegriffen werden. |