if (IS_ADMIN(ch))
snprintf(buf + strlen(buf), sizeof(buf + strlen(buf)), " (room %d)\n\r",pexit->u1.to_room->vnum);
else
snprintf(buf + strlen(buf), sizeof(buf + strlen(buf)), "\n\r");
char * const dir_name [] =
{
"north", "east", "south", "west", "up", "down"
};
char * const dir_name [] =
{
"north", "east", "south", "west", "up", "down"
};
bool_t do_exits(CHAR_DATA *ch, char *argument) {
send_to_char(get_exits(ch, NULL, argument), ch);
return TRUE;
}
/*
* We look for exits even it is an autoexit stuff to fire the skill detect doors
* if there is a room as parameter, use it instead of ch->in_room
*/
char *get_exits(CHAR_DATA *ch, ROOM_INDEX_DATA* initRoom, char *argument) {
initRoom = initRoom ? initRoom : ch ? ch->in_room : NULL;
if (!initRoom)
return NULL;
bool_t fAuto = !str_cmp(argument, "auto");
bool_t fPrompt = !str_cmp(argument, "prompt");
if (ch && !can_look(ch, !fPrompt)) {
if (ch->pcdata)
replace_string( &ch->pcdata->lastExits, "###");
return fPrompt ? "###" : NULL;
}
if (ch && ch->pcdata && fPrompt && ch->pcdata->lastRoomVnum == initRoom->vnum && str_cmp("###", ch->pcdata->lastExits))
return ch->pcdata->lastExits;
static char bufAuto[MAX_STRING_LENGTH];
sprintf(bufAuto, "%s[Exits:", get_color_ch(ch, COL_EXITS));
static char bufCommand[MAX_STRING_LENGTH];
if (ch && IS_IMMORTAL(ch))
sprintf(bufCommand, "Obvious exits from room %d:\n\r", initRoom->vnum);
else
sprintf(bufCommand, "Obvious exits:\n\r");
static char bufPrompt[MAX_STRING_LENGTH];
bufPrompt[0] = '\0';
bool_t found = FALSE, success = TRUE;
EXIT_DATA *pexit;
short int door;
for (door = 0;door < MAX_DIR;door ++) {
pexit = initRoom->exit[door];
if ( !pexit || !pexit->u1.to_room || !can_see_room(ch, pexit->u1.to_room))
continue;
if (IS_SET(pexit->exit_info, EX_INVISIBLE)) {
success = !ch || IS_IMP(ch) ? TRUE : rnd_rng(99) < (get_skill(ch, gsn_detect_doors) * (double)2 / 3);
if (success) {
strcat(bufAuto, get_acolor_ch(ch, C_RED));
strcat(bufPrompt, get_acolor_ch(ch, C_RED));
strcat(bufCommand, get_acolor_ch(ch, C_RED));
}
check_improve(ch, gsn_detect_doors, success, 16 * (success ? 1 : 2));
if ( !success)
continue;
}
else {
char* exitColor = IS_SET(pexit->exit_info, EX_CLOSED) ? get_color_ch(ch,COL_OBJ) : IS_SET(pexit->rs_flags, EX_ISDOOR) ? CC_GRN : get_color_ch(ch,COL_EXITS);
strcat(bufAuto, exitColor);
strcat(bufPrompt, exitColor);
strcat(bufCommand, exitColor);
}
found = TRUE;
sprintf(bufAuto, "%s \t(%s\t)", bufAuto, dir_name[door]);
sprintf(bufPrompt, "%s\t(%s\t)", bufPrompt, short_dir_name[door]);
sprintf(bufCommand, "%s\t(%-5s%s\t) - %s", bufCommand, capitalize(dir_name[door]),
room_is_dark(ch, pexit->u1.to_room) ? get_acolor_ch(ch, C_GRY) : get_color_ch(ch, COL_NORM),
room_is_dark(ch, pexit->u1.to_room) ? "Too dark to tell" : pexit->u1.to_room->name);
if (ch && IS_IMMORTAL(ch))
sprintf(bufCommand, "%s (vnum:%d)", bufCommand, pexit->u1.to_room->vnum);
strcat(bufCommand, ".\n\r");
}
strcat(bufAuto, get_color_ch(ch, COL_EXITS));
strcat(bufCommand, get_color_ch(ch, COL_EXITS));
strcat(bufPrompt, get_color_ch(ch, COL_EXITS));
if ( !found) {
strcat(bufAuto, " none");
strcat(bufPrompt, "none");
strcat(bufCommand, "None.");
}
sprintf(bufAuto, "%s]%s\n\r", bufAuto, get_color_ch(ch, COL_NORM));
sprintf(bufCommand, "%s%s\n\r", bufCommand, get_color_ch(ch, COL_NORM));
strcat(bufPrompt, get_color_ch(ch, COL_PROMPT));
if (ch && ch->pcdata) {
replace_string( &ch->pcdata->lastExits, bufPrompt);
ch->pcdata->lastRoomVnum = initRoom->vnum;
}
return fAuto ? ( ch && !IS_SET(ch->act, PLR_AUTOEXIT) ? NULL : bufAuto) : fPrompt ? bufPrompt : bufCommand;
}
My exits command is jacked up. When I use it, it gives me:
Obvious exits from room 4001:
Nor (rEas (rSou (rWes (r
What is wrong?