Shows Exits as:
Normal: south
Closed: [south]
Locked: [south]
DT : ***SOUTH***
void do_exits( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
EXIT_DATA *pexit;
bool found, closed=FALSE, locked=FALSE, DT=FALSE;
bool fAuto;
int spaces;
set_char_color( AT_EXITS, ch );
fAuto = !str_cmp( argument, "auto" );
if ( !check_blind(ch) )
return;
strcpy( buf, fAuto ? "&WExits:" : "&WObvious exits:\n\r" );
found = FALSE;
for ( pexit = ch->in_room->first_exit; pexit; pexit = pexit->next )
{
if ( pexit->to_room
&& !IS_SET(pexit->exit_info, EX_SECRET)
&& (!IS_SET(pexit->exit_info, EX_WINDOW)
|| IS_SET(pexit->exit_info, EX_ISDOOR))
&& !IS_SET(pexit->exit_info, EX_HIDDEN) )
{
found = TRUE;
closed = IS_SET(pexit->exit_info, EX_CLOSED);
locked = (IS_SET(pexit->exit_info, EX_LOCKED) || IS_SET(pexit->exit_info, EX_BOLTED) );
DT = ((IS_IMMORTAL(ch) || IS_AFFECTED(ch, AFF_DETECTTRAPS)) && xIS_SET(pexit->to_room->room_flags, ROOM_DEATH));
if ( fAuto )
{
sprintf( buf, "%s %s" "%s" "&W" "%s", buf,
DT? "&R***" : !closed ? "" : locked ? "&R[&W" : "[",
DT ? strupper(dir_name[pexit->vdir]): dir_name[pexit->vdir],
DT? "&R***&W" : !closed ? "" : locked ? "&R]&W" : "]");
}
else
{
/* I don't want to underline spaces, so I'll calculate the number we need */
spaces = 5 - strlen (dir_name[pexit->vdir]);
if (spaces < 0)
spaces = 0;
sprintf( buf + strlen(buf), "%s" "%*s - %s\n\r",
capitalize( dir_name[pexit->vdir] ),
spaces, /* number of spaces */
"",
DT ? "&RYou sense an aura of imminent doom this way&W" : locked ? "&R[&WClosed and Locked/Barred&R]&W" : closed ? "[Closed]" : room_is_dark( pexit->to_room ) ? "Too dark to tell" : pexit->to_room->name );
}
}
}
if ( !found )
strcat( buf, fAuto ? " none.\n\r" : "None.\n\r" );
else
if ( fAuto )
strcat( buf, ".\n\r" );
send_to_char( buf, ch );
return;
}