#include <sys_debug.h>#include <config.h>#include <thing/properties.h>#include <moving.h>#include <defines.h>#include <daemon.h>#include <doorroom.h>#include <routingd.h>#include <exploration.h>#include <room/exits.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | NEED_PROTOTYPES |
| #define | NUMBERS ({ "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht" }) |
Funktionen | |
| static mapping | rescueExit () |
| static mapping | _set_exits (mapping map_ldfied) |
| static mapping | _query_exits () |
| static int | _set_special_exits (mapping map_ldfied) |
| static mapping | _query_special_exits () |
| void | reset () |
| protected void | create () |
| protected void | create_super () |
| void | AddExit (mixed cmd, mixed room) |
| void | RemoveExit (mixed cmd) |
| void | AddSpecialExit (mixed cmd, mixed functionname) |
| void | RemoveSpecialExit (mixed cmd) |
| varargs string | GetExits (object viewer) |
| void | init () |
| int | _normalfunction () |
| static string | _MakePath (string str) |
| #define NUMBERS ({ "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht" }) |
Definiert in Zeile 38 der Datei exits.c.
Wird benutzt von GetExits().
| static string _MakePath | ( | string | str | ) | [static] |
Definiert in Zeile 292 der Datei exits.c.
Wird benutzt von AddExit().
00293 { 00294 string *comp; 00295 00296 comp = explode( object_name(this_object()), "/" ) - ({""}); 00297 00298 switch( str[0] ){ 00299 case '.': 00300 str = "/" + implode( comp[0..<2], "/" ) + "/" + str; 00301 break; 00302 00303 case '~': 00304 str = "/" + comp[0] + "/" + (comp[0] == "d" ? comp[1] + "/" : "") 00305 +REAL_UID(this_object()) + str[1..]; 00306 break; 00307 } 00308 00309 return MASTER->_get_path( str, getuid(this_object()) ); 00310 }

| int _normalfunction | ( | ) |
Definiert in Zeile 246 der Datei exits.c.
Benutzt EP_EXIT, GiveEP(), M_GO, message, P_EXITS und Query().
00247 { 00248 string verb, destroom; 00249 mixed message; 00250 int ret; 00251 00252 verb = query_verb(); 00253 destroom = (Query(P_EXITS) || ([]))[verb]; // hier kein rescueExit !! 00254 00255 if ( !destroom ) 00256 return 0; 00257 00258 if ( closurep(destroom) ){ 00259 ret = funcall( destroom, verb ); 00260 00261 if (ret) 00262 GiveEP( EP_EXIT, verb ); 00263 00264 return ret; 00265 } 00266 00267 message = explode( destroom, "#" ); 00268 00269 if ( sizeof(message) == 2 ){ 00270 destroom = message[1]; 00271 message = message[0]; 00272 } 00273 else 00274 if( member( ({ "sueden", "suedwesten", "westen", 00275 "nordwesten", "norden", "nordosten", "osten", 00276 "suedosten" }), verb ) != -1 ) 00277 message = "nach " + capitalize(verb); 00278 else if ( member( ({ "oben", "unten" }), verb ) != -1 ) 00279 message = "nach " + verb; 00280 else 00281 message = verb; 00282 00283 ret = this_player()->move( destroom, M_GO, message ); 00284 00285 if (ret) 00286 GiveEP( EP_EXIT, verb ); 00287 00288 return ret; 00289 }

| static mapping _query_exits | ( | ) | [static] |
Definiert in Zeile 61 der Datei exits.c.
Benutzt DOOR_MASTER, exits, i, m_delete(), P_DOOR_INFOS, P_EXITS, Query(), QueryProp() und rescueExit().
00062 { 00063 mapping exits; 00064 mixed key; 00065 int i; 00066 00067 if( (!previous_object() || object_name(previous_object()) != DOOR_MASTER) 00068 && QueryProp(P_DOOR_INFOS) ) 00069 call_other( DOOR_MASTER, "init_doors" ); 00070 00071 key = m_indices( exits = (Query(P_EXITS) || rescueExit()) ); 00072 00073 for ( i = sizeof(key); i--; ) 00074 if( !stringp(exits[key[i]]) ) 00075 exits = m_delete( exits, key[i] ); 00076 00077 return exits; 00078 }

| static mapping _query_special_exits | ( | ) | [static] |
Definiert in Zeile 87 der Datei exits.c.
Benutzt exits, i, m_delete(), P_EXITS, Query() und rescueExit().
00088 { 00089 mapping exits; 00090 mixed key; 00091 int i; 00092 00093 key = m_indices( exits = (Query(P_EXITS) || rescueExit()) ); 00094 00095 for ( i = sizeof(key); i--; ) 00096 if( stringp(exits[key[i]]) ) 00097 exits = m_delete( exits, key[i] ); 00098 00099 return exits; 00100 }

| static mapping _set_exits | ( | mapping | map_ldfied | ) | [static] |
Definiert in Zeile 53 der Datei exits.c.
00054 { 00055 if( mappingp(map_ldfied) ) 00056 return Set( P_EXITS, map_ldfied ); 00057 return 0; 00058 }

| static int _set_special_exits | ( | mapping | map_ldfied | ) | [static] |
| void AddExit | ( | mixed | cmd, | |
| mixed | room | |||
| ) |
Definiert in Zeile 116 der Datei exits.c.
Benutzt _MakePath(), i, msg(), P_EXITS, Query(), rescueExit(), ROUTER und Set().
Wird benutzt von AddSpecialExit(), create() und move().
00117 { 00118 int i; 00119 mapping exita; 00120 00121 exita = Query(P_EXITS) || rescueExit(); 00122 00123 if ( !closurep(room) ){ 00124 int s; 00125 string msg; 00126 object router; 00127 00128 if( (s = member(room, '#')) != -1 ){ 00129 msg = room[0..s]; 00130 room = room[s+1..]; 00131 } 00132 else 00133 msg = ""; 00134 00135 room = _MakePath(room); 00136 00137 if ( !clonep(this_object()) && objectp(router = find_object(ROUTER)) ) 00138 router->RegisterExit( object_name(this_object()), cmd, room ); 00139 00140 room = msg + room; 00141 } 00142 00143 if( !pointerp(cmd) ) 00144 exita += ([ cmd : room ]); 00145 else 00146 for( i = sizeof(cmd); i--; ) 00147 exita += ([ cmd[i] : room ]); 00148 00149 Set( P_EXITS, exita ); 00150 }


| void AddSpecialExit | ( | mixed | cmd, | |
| mixed | functionname | |||
| ) |
Definiert in Zeile 175 der Datei exits.c.
Benutzt AddExit().
Wird benutzt von set_doors().
00176 { 00177 00178 if ( stringp(functionname) ) 00179 functionname = symbol_function( functionname, this_object() ); 00180 00181 if ( !closurep(functionname) ) { 00182 catch(raise_error(sprintf( "method %O doesn't exist\n", 00183 functionname)); publish); 00184 return; 00185 } 00186 00187 AddExit( cmd, functionname ); 00188 }


| protected void create | ( | ) |
| protected void create_super | ( | ) |
Definiert in Zeile 112 der Datei exits.c.
Benutzt set_next_reset().
00112 { 00113 set_next_reset(-1); 00114 }

| varargs string GetExits | ( | object | viewer | ) |
Definiert in Zeile 197 der Datei exits.c.
Benutzt break_string(), DOOR_MASTER, exits, i, NUMBERS, P_DOOR_INFOS, P_EXITS, P_HIDE_EXITS, Query(), QueryProp() und rescueExit().
00198 { 00199 int n, i; 00200 string exits, *indices, *hidden; 00201 00202 if ( QueryProp(P_DOOR_INFOS) ) 00203 call_other( DOOR_MASTER, "init_doors" ); 00204 00205 indices = m_indices( Query(P_EXITS) || rescueExit() ); 00206 00207 if ( pointerp(hidden = QueryProp(P_HIDE_EXITS)) ) 00208 indices -= hidden; 00209 00210 n = sizeof( indices ); 00211 00212 switch (n){ 00213 case 0: 00214 return "Es gibt keine sichtbaren Ausgaenge.\n"; 00215 00216 case 1: 00217 return "Es gibt einen sichtbaren Ausgang: " + indices[0] + ".\n"; 00218 00219 case 2: case 3: case 4: case 5: case 6: case 7: case 8: 00220 exits = "Es gibt " + NUMBERS[n-2] + " sichtbare Ausgaenge: "; 00221 break; 00222 00223 default: 00224 exits = "Es gibt viele sichtbare Ausgaenge: "; 00225 } 00226 00227 for ( i = 0; i < n-2; i++ ) 00228 exits += indices[i] + ", "; 00229 00230 exits += indices[n-2] + " und " + indices[n-1] + "."; 00231 00232 return break_string( exits, 78 ); 00233 }

| void init | ( | ) |
| void RemoveExit | ( | mixed | cmd | ) |
Definiert in Zeile 153 der Datei exits.c.
Benutzt i, m_delete(), P_EXITS, Query(), rescueExit(), Set() und SetProp().
Wird benutzt von RemoveSpecialExit().
00154 { 00155 mapping exita; 00156 int i; 00157 00158 if ( !cmd ) { 00159 SetProp(P_EXITS, ([]) ); 00160 return; 00161 } 00162 00163 if ( !pointerp(cmd) ) 00164 cmd = ({ cmd }); 00165 00166 exita = Query(P_EXITS) || rescueExit(); 00167 00168 for( i = sizeof(cmd); i--; ) 00169 exita = m_delete( exita, cmd[i] ); 00170 00171 Set( P_EXITS, exita ); 00172 }


| void RemoveSpecialExit | ( | mixed | cmd | ) |
Definiert in Zeile 191 der Datei exits.c.
Benutzt RemoveExit().
Wird benutzt von set_doors().
00192 { 00193 RemoveExit( cmd ); 00194 }


| static mapping rescueExit | ( | ) | [static] |
Definiert in Zeile 43 der Datei exits.c.
Wird benutzt von _query_exits(), _query_special_exits(), AddExit(), GetExits() und RemoveExit().
00044 { 00045 catch(raise_error(sprintf( 00046 "room/exits.c: Forgotten ::create()? " 00047 "P_EXITS in %O is 0!\n", this_object()));publish); 00048 00049 return ([]); 00050 }

1.6.3