WARNING: CODE SPAMMAGE

phantasm@aztechnet.com
Date: 06/11/96


Hehe
I am tired and not thinking clearly. So the answer to my problem is most
likely very simple.
I've cannot figure out why this will not work

This is the who command

And it only displays one person..usually the last person to log on..

(And please don't yap about my lack of CONSTANT USE :)
The edited code is down around the else {} after the if (shortlist)

I am pretty sure the num_can_see is what is causing this..but I am not
sure...

Any help is much appreciated:

"format: who [minlev[-maxlev]] [-n name] [-c classlist] [-s] [-o] [-q]
[-r] [-z$

ACMD(do_who)
{
struct descriptor_data *d;
struct char_data *tch;
char name_search[MAX_INPUT_LENGTH];
char imm_title[20];
char mode;
size_t i;
int low = 0, high = LVL_IMPL, localwho = 0, questwho = 0;
int showclass = 0, short_list = 0, outlaws = 0, num_can_see = 0;
  int who_room = 0;
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':
    case 'k':
      outlaws = 1;
      strcpy(buf, buf1);
break;
    case 'z':
      localwho = 1;
      strcpy(buf, buf1);

break;
    case 's':
    short_list = 1;
    strcpy(buf, buf1);
  break;
case 'q':
    questwho = 1;
  strcpy(buf, buf1);
  break;
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 = 1;
  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_FORMAT, ch);
return;
break;
}                         /* end of switch */

} else {                    /* endif */
send_to_char(WHO_FORMAT, ch);
return;
}
}                             /* end while (parser) */

send_to_char("Players\r\n-------\r\n", ch);

for (d = descriptor_list; d; d = d->next) {
if (d->connected)
continue;

if (d->original)
tch = d->original;
else if (!(tch = d->character))
continue;
if (*name_search && str_cmp(GET_NAME(tch), name_search) &&
  !strstr(GET_TITLE(tch), name_search))
continue;
if (!CAN_SEE(ch, tch) || GET_LEVEL(tch) < low || GET_LEVEL(tch) > high)
    continue;
if (outlaws && !PLR_FLAGGED(tch, PLR_KILLER) &&
      !PLR_FLAGGED(tch, PLR_THIEF))
continue;
  if (questwho && !PRF_FLAGGED(tch, PRF_QUEST))
  continue;
if (localwho && world[ch->in_room].zone != world[tch->in_room].zone)
continue;
who_room && (tch->in_room != ch->in_room))
continue;
if (showclass && !(showclass & (1 << GET_CLASS(tch))))
if (short_list) {
  sprintf(buf, "%s[%2d %s] %-12.12s%s%s",
      (GET_LEVEL(tch) >= LVL_IMMORT ? CCYEL(ch, C_SPR) : ""),
        GET_LEVEL(tch), CLASS_ABBR(tch), GET_NAME(tch),
          (GET_LEVEL(tch) >= LVL_IMMORT ? CCNRM(ch, C_SPR) : ""),
        ((!(++num_can_see % 4)) ? "\r\n" : ""));
  send_to_char(buf, ch);
send_to_char("This is the short list!",ch);
} else {
 if (GET_LEVEL(tch) < 31) {
num_can_see++;
sprintf(buf, "%s[%2d %s ] %s %s",
        (GET_LEVEL(tch) >= LVL_IMMORT ? CCYEL(ch, C_SPR) : ""),
          GET_LEVEL(tch), CLASS_ABBR(tch), GET_NAME(tch),
        GET_TITLE(tch));
}
if (GET_LEVEL(tch) > 30) {
num_can_see++;
if (GET_LEVEL(tch) == 31)
{ sprintf(imm_title, "   %sWizard%s  ",
 CCRED(ch, C_SPR), CCMAG(ch, C_SPR) );
}
if (GET_LEVEL(tch) == 32)
{ sprintf(imm_title, "  %sImmortal%s ",
          CCGRN(ch, C_SPR), CCMAG(ch, C_SPR) );
}
if (GET_LEVEL(tch) == 33)
{ sprintf(imm_title, "%sGreater God%s",
                CCBLU(ch, C_SPR), CCMAG(ch, C_SPR) );
}
if (GET_LEVEL(tch) == 34)
{ sprintf(imm_title, "%sImplementor%s",
                CCCYN(ch, C_SPR), CCMAG(ch, C_SPR) );
}
if (GET_LEVEL(tch) > 34)
{ sprintf(imm_title, "ERROR   "); }
sprintf(buf, "%s[%s]%s %s %s",
(GET_LEVEL(tch) >= LVL_IMMORT ? CCMAG(ch, C_SPR) : ""),
          imm_title, CCYEL(ch, C_SPR), GET_NAME(tch), GET_TITLE(tch));
}
      if (GET_INVIS_LEV(tch))
sprintf(buf, "%s (i%d)", buf, GET_INVIS_LEV(tch));
      else if (IS_AFFECTED(tch, AFF_INVISIBLE))
        strcat(buf, " (invis)");

if (PLR_FLAGGED(tch, PLR_MAILING))
        strcat(buf, " (mailing)");
      else if (PLR_FLAGGED(tch, PLR_WRITING))

      if (PRF_FLAGGED(tch, PRF_DEAF))
        strcat(buf, " (deaf)");
      if (PRF_FLAGGED(tch, PRF_NOTELL))
        strcat(buf, " (notell)");
if (PRF_FLAGGED(tch, PRF_QUEST))
strcat(buf, " (quest)");
      if (PLR_FLAGGED(tch, PLR_THIEF))
  strcat(buf, " (THIEF)");
if (PLR_FLAGGED(tch, PLR_KILLER))
  strcat(buf, " (KILLER)");
if (GET_LEVEL(tch) >= LVL_IMMORT)
strcat(buf, CCNRM(ch, C_SPR));
strcat(buf, "\r\n");
send_to_char(buf, ch);
}                           /* endif shortlist */
}                             /* end of for */
if (short_list && (num_can_see % 4))
send_to_char("\r\n", ch);
if (num_can_see == 0)
sprintf(buf, "\r\nNo-one at all!\r\n");
else if (num_can_see == 1)
sprintf(buf, "\r\nOne lonely character displayed.\r\n");
else
sprintf(buf, "\r\n%d characters displayed.\r\n", num_can_see);
send_to_char(buf, ch);
}



This archive was generated by hypermail 2b30 : 12/18/00 PST