Okay here is the do_who code I am using.
I have also tried the code without my Mortlevels
string array addition.
I have also added the patch straight into a cherry
copy of bl11 and it did the same thing.
It is adding a space after the second character, then two
spaces after the third, and then four, and I tried up to 8 chars
and it was dding an extra space each time.
Also, please don't rag me for the way i imped the Mortlevels
array, it is temp only, just wanted to see how it would look.
act.information.c
CODE:
/*********************************************************************
* New 'do_who' by Daniel Koepke [aka., "Argyle Macleod"] of The Keep *
******************************************************************* */
char *WHO_USAGE =
"Usage: who [minlev[-maxlev]] [-n name] [-c classes] [-rzqimo]\r\n"
"\r\n"
"Classes: (M)age, (C)leric, (T)hief, (W)arrior\r\n"
"\r\n"
" Switches: \r\n"
"_.,-'~'-,._\r\n"
"\r\n"
" -r = who is in the current room\r\n"
" -z = who is in the current zone\r\n"
"\r\n"
" -q = only show questers\r\n"
" -i = only show immortals\r\n"
" -m = only show mortals\r\n"
" -o = only show outlaws\r\n"
"\r\n";
ACMD(do_who)
{
struct descriptor_data *d;
struct char_data *wch;
char Imm_buf[MAX_STRING_LENGTH];
char Mort_buf[MAX_STRING_LENGTH];
char name_search[MAX_NAME_LENGTH+1];
char mode;
int low = 0, high = LVL_IMPL, showclass = 0;
bool who_room = FALSE, who_zone = FALSE, who_quest = 0;
bool outlaws = FALSE, noimm = FALSE, nomort = FALSE;
int Wizards = 0, Mortals = 0;
size_t i;
const char *WizLevels[LVL_IMPL - (LVL_IMMORT-1)] = {
" Immortal ",
" Lesser God ",
" Greater God ",
"*REALM MASTER*"
};
/* THIS IS TEMP, I KNOW THEIR IS AN EASIER WAY */
/* NOT THE PORBLEM HOWEVER */
const char *Mortlevels[LVL_IMPL - 4] = {
" Newcomer ",
" Newcomer ",
" Newcomer ",
" Newcomer ",
" Newcomer ",
" Trainee ",
" Trainee ",
" Trainee ",
" Trainee ",
" Trainee ",
" Initiate ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c06Initiate\\c00 ",
" \\c02Traveller\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" \\c03Journeymen\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" \\c04Adventurer\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" \\c05Greater Lord\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" \\c01Leader\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" \\c11Instructor\\c00 ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
"\\c11**\\c14Lore Master\\c11**\\c00",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
"\\c08**\\c10 DragonLord\\c08 **\\c00",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a ",
" a "
};
/* This part is from the stock CircleMUD 'do_who'; No reason to rewrite
it. Don't want to take credit for something I didn't write... */
skip_spaces(&argument);
strcpy(buf, argument);
name_search[0] = '\0';
while (*buf) {
half_chop(buf, arg, buf1);
if (isdigit(*arg)) {
sscanf(arg, "%d-%d", &low, &high);
strcpy(buf, buf1);
} else if (*arg == '-') {
mode = *(arg + 1); /* just in case; we destroy arg in the switch */
switch (mode) {
case 'o':
outlaws = TRUE;
strcpy(buf, buf1);
break;
case 'z':
who_zone = TRUE;
strcpy(buf, buf1);
break;
case 'q':
who_quest = TRUE;
strcpy(buf, buf1);
break;
case 'l':
half_chop(buf1, arg, buf);
sscanf(arg, "%d-%d", &low, &high);
break;
case 'n':
half_chop(buf1, name_search, buf);
break;
case 'r':
who_room = TRUE;
strcpy(buf, buf1);
break;
case 'c':
half_chop(buf1, arg, buf);
for (i = 0; i < strlen(arg); i++)
showclass |= find_class_bitvector(arg[i]);
break;
default:
send_to_char(WHO_USAGE, ch);
return;
break;
} /* end of switch */
} else { /* endif */
send_to_char(WHO_USAGE, ch);
return;
}
} /* end while (parser) */
strcpy(Imm_buf, "\\c06+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n \\c00Immortals of Hidden Daze\r\n\\c06+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\\c00\r\n");
strcpy(Mort_buf,"\\c06+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n \\c00Mortals of Hidden Daze\\c06\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\\c00\r\n");
for (d = descriptor_list; d; d = d->next) {
if (d->connected)
continue;
if (d->original)
wch = d->original;
else if (!(wch = d->character))
continue;
if (!CAN_SEE(ch, wch))
continue;
if (GET_LEVEL(wch) < low || GET_LEVEL(wch) > high)
continue;
if ((noimm && GET_LEVEL(wch) >= LVL_IMMORT) || (nomort && GET_LEVEL(wch) < LVL_IMMORT))
continue;
if (*name_search && str_cmp(GET_NAME(wch), name_search) && !strstr(GET_TITLE(wch), name_search))
continue;
if (outlaws && !PLR_FLAGGED(wch, PLR_KILLER) && !PLR_FLAGGED(wch, PLR_THIEF))
continue;
if (who_quest && !PRF_FLAGGED(wch, PRF_QUEST))
continue;
if (who_zone && world[ch->in_room].zone != world[wch->in_room].zone)
continue;
if (who_room && (wch->in_room != ch->in_room))
continue;
if (showclass && !(showclass & (1 << GET_CLASS(wch))))
continue;
if (GET_LEVEL(wch) >= LVL_IMMORT) {
sprintf(Imm_buf, "%s%s[%s] %s %s", Imm_buf, CCYEL(ch, C_SPR),
WizLevels[GET_LEVEL(wch)-LVL_IMMORT], GET_NAME(wch),
GET_TITLE(wch));
Wizards++;
} else {
sprintf(Mort_buf, "%s[%16s %s] %s %s", Mort_buf, Mortlevels[GET_LEVEL(wch) - 0], CLASS_ABBR(wch), GET_NAME(wch), GET_TITLE(wch));
Mortals++;
}
if (GET_INVIS_LEV(wch))
sprintf(buf, "%s (i%d)", buf, GET_INVIS_LEV(wch));
else if (IS_AFFECTED(wch, AFF_INVISIBLE))
strcat(buf, " (Invis)");
if (IS_AFFECTED(wch, AFF_SHADOW_FORM))
strcat(buf, " (ShadowForm)");
if (PLR_FLAGGED(wch, PLR_MAILING))
strcat(buf, " (Mailing)");
else if (PLR_FLAGGED(wch, PLR_WRITING))
strcat(buf, " (Writing)");
if (PRF_FLAGGED(wch, PRF_DEAF))
strcat(buf, " (Deaf)");
if (PRF_FLAGGED(wch, PRF_NOTELL))
strcat(buf, " (NoTell)");
if (PRF_FLAGGED(wch, PRF_QUEST))
strcat(buf, " (Quest)");
if (PLR_FLAGGED(wch, PLR_THIEF))
strcat(buf, " (* THIEF *)");
if (PLR_FLAGGED(wch, PLR_KILLER))
strcat(buf, " (* KILLER *)");
if (GET_LEVEL(wch) >= LVL_IMMORT)
strcat(buf, CCNRM(ch, C_SPR));
strcat(buf, "\r\n");
if (GET_LEVEL(wch) >= LVL_IMMORT)
strcat(Imm_buf, buf);
else
strcat(Mort_buf, buf);
send_to_char(buf, ch);
} /* end of for */
if (Wizards) {
page_string(ch->desc, Imm_buf, 0);
send_to_char("\r\n", ch);
}
if (Mortals) {
page_string(ch->desc, Mort_buf, 0);
send_to_char("\r\n", ch);
}
if ((Wizards + Mortals) == 0)
strcpy(buf, "No wizards or mortals are currently visible to you.\r\n");
if (Wizards)
sprintf(buf, "There %s %d visible immortal%s%s", (Wizards == 1 ? "is" : "are"), Wizards, (Wizards == 1 ? "" : "s"), (Mortals ? " and there " : "."));
if (Mortals)
sprintf(buf, "%s%s %d visible mortal%s.", (Wizards ? buf : "There"), (Mortals == 1 ? "is" : "are"), Mortals, (Mortals == 1 ? "" : "s"));
strcat(buf, "\r\n");
if ((Wizards + Mortals) > boot_high)
boot_high = Wizards+Mortals;
sprintf(buf, "%sThere is a boot time high of %d player%s.\r\n", buf, boot_high, (boot_high == 1 ? "" : "s"));
send_to_char(buf, ch);
}
*******************************************************
I am having a major breakdown over this problem.
Here is a brief exmaple of what the who output looks like:
+-+-+-+-+- blah blah
[ Leader Wiz ] Tray
[ Initiate War ] Bagget
[ Adventurer Pal ] Drace
[ Adventurer Asn ] Shade
and so on, one extra space after each new entry
Can anyone track this bug????
Thanks, Chuck
This archive was generated by hypermail 2b30 : 12/07/00 PST