Ok this is the *REAL* do_who from the original writer Michael Kohler This is NOT a copy from what is in the snippits under WHO.TXT this is the original. I can be reached at falnangl@borg.com **Replace the origional do_who with the one below up to if (short_list && (num_can_see % 4)) send_to_char("\r\n", ch); ** ACMD(do_who) { struct descriptor_data *d; struct char_data *tch; char name_search[MAX_INPUT_LENGTH]; char sex; char class; 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; int c_level = 36; /* Number of Max levels must go here */ const char *Wizlev[LVL_OWNER - (LVL_IMMORT-1)] = { "IMM", (/* I have 36 levels on my mud from Levels 31-36 "DEI", ** change what needs to be changed and erase what is in the ( ) "SUP", */) "GOD", "CDR", "IMP", }; 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; 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 = 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) */ /* Use this format to define what you want the upper area of do_who to say */ send_to_char("&WTL(Total Levels) LV(Level) CC(Current Class) S(Sex)\r\n" "[ TL Lv CC S] [Pk's] [Cl] Name Status......\r\n" "--------------------------------------------------------------\r\n", ch); for (; c_level > 0;c_level--) { /* Sorting by levels */ for (d = descriptor_list; d; d = d->next) { if (d->connected) continue; if (GET_LEVEL(d->character) !=c_level) /* end of sorting by levels */ 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; if (who_room && (tch->in_room != ch->in_room)) continue; if (showclass && !(showclass & (1 << GET_CLASS(tch)))) continue; if (short_list) { if (GET_LEVEL(tch) >= LVL_IMMORT) strcpy(buf, "&R"); else if (GET_LEVEL(tch) >= 20) strcpy(buf, "&Y"); else if (GET_LEVEL(tch) >= 10) strcpy(buf, "&G"); else strcpy(buf, "&M"); sprintf(buf, "%s[%2d %s] %-12.12s%s%s", GET_LEVEL(tch), CLASS_ABBR(tch), GET_NAME(tch), ((!(++num_can_see % 4)) ? "\r\n" : "")); send_to_char(buf, ch); } else { num_can_see++; if (GET_LEVEL(tch) >= LVL_IMMORT) /* Anything LVL_IMMORT+ willbe shown in red */ strcpy(buf2, "&R"); else if (GET_LEVEL(tch) >= 20) /* anyone lvl 20+ will be in yellow */ strcpy(buf2, "&Y"); else if (GET_LEVEL(tch) >= 10) /* green */ strcpy(buf2, "&G"); else strcpy(buf2, "&M"); /* bright magenta */ if (GET_SEX(tch) == SEX_MALE) sex = 'M'; else if (GET_SEX(tch) == SEX_FEMALE) sex = 'F'; else sex = 'Y'; if (GET_LEVEL(tch) >= LVL_IMMORT) { sprintf(buf, "%s[%2d %2d %s %c]&Y [%4d] [ ]&C %s", buf2, GET_LEVEL(tch), GET_LEVEL(ch), Wizlev[GET_LEVEL(tch)-LVL_BLD], sex, GET_PKS(tch), GET_NAME(tch)); } if (GET_LEVEL(tch) < LVL_IMMORT) { /* new stuff I added */ if ((IS_AFFECTED(tch, AFF_INVISIBLE) || GET_INVIS_LEV(tch) > GET_LEVEL(ch)) && GET_LEVEL(ch) < LVL_IMMORT) { sprintf(buf, "%s[%2d %2d %s %c]&Y [%4d] [ ]&C Someone", buf2, GET_LEVEL(tch), GET_LEVEL(tch), CLASS_ABBR(tch), sex, GET_PKS(tch)); } else { sprintf(buf, "%s[%2d %2d %s %c]&Y [%4d] [ ]&C %s", buf2, GET_LEVEL(tch), GET_LEVEL(tch), CLASS_ABBR(tch), sex, GET_PKS(tch), GET_NAME(tch)); } } if (GET_INVIS_LEV(tch)) sprintf(buf, "%s [INVIS %d]", buf, GET_INVIS_LEV(tch)); else if (IS_AFFECTED(tch, AFF_INVISIBLE)) strcat(buf, " [Invisible]"); if (PLR_FLAGGED(tch, PLR_MAILING)) strcat(buf, " [Mailing]"); if (GET_GOHOME(tch) == world[tch->in_room].number) /* Gohomes */ strcat(buf, " [At Home]"); else if (PLR_FLAGGED(tch, PLR_WRITING)) strcat(buf, " [Editing]"); if (PRF_FLAGGED(tch, PRF_UNDEAD)) strcat(buf, " [Undead Corpse]"); /* If you have an actual death code */ if (PRF_FLAGGED(tch, PRF_AFK)) /* This is if you have the afk flag */ strcat(buf, " [AFK]"); if (PRF_FLAGGED(tch, PRF_CODING)) strcat(buf, " [Coding]"); if (PRF_FLAGGED(tch, PRF_DEAF)) strcat(buf, " [Deaf]"); if (PRF_FLAGGED(tch, PRF_NOTELL)) strcat(buf, " [No-Tells]"); if (PRF_FLAGGED(tch, PRF_QUEST)) strcat(buf, " [QUESTING]"); if (PLR_FLAGGED(tch, PLR_THIEF)) strcat(buf, " [Assassin]"); if (PLR_FLAGGED(tch, PLR_KILLER)) strcat(buf, " [Slayer]"); 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 */ } /* end of first for */