nightmare3_fluffos_v2/
nightmare3_fluffos_v2/bin/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/ChangeLog.old/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/Win32/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/compat/simuls/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/clone/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/command/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/data/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/etc/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/include/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/inherit/master/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/log/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/compiler/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/efuns/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/single/tests/operators/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/testsuite/u/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/tmp/
nightmare3_fluffos_v2/fluffos-2.9-ds2.08/windows/
nightmare3_fluffos_v2/lib/cmds/ambassador/
nightmare3_fluffos_v2/lib/cmds/database/
nightmare3_fluffos_v2/lib/cmds/hm/
nightmare3_fluffos_v2/lib/cmds/soul/
nightmare3_fluffos_v2/lib/daemon/cfg/
nightmare3_fluffos_v2/lib/daemon/cfg/mon_races/
nightmare3_fluffos_v2/lib/daemon/cfg/races/
nightmare3_fluffos_v2/lib/daemon/include/
nightmare3_fluffos_v2/lib/daemon/save/
nightmare3_fluffos_v2/lib/daemon/services/
nightmare3_fluffos_v2/lib/daemon/soul/
nightmare3_fluffos_v2/lib/doc/
nightmare3_fluffos_v2/lib/doc/TestPlans/
nightmare3_fluffos_v2/lib/doc/approval/
nightmare3_fluffos_v2/lib/doc/approval/QC/
nightmare3_fluffos_v2/lib/doc/approval/balance/
nightmare3_fluffos_v2/lib/doc/build/
nightmare3_fluffos_v2/lib/doc/build/armours/
nightmare3_fluffos_v2/lib/doc/build/economy/
nightmare3_fluffos_v2/lib/doc/build/etc/
nightmare3_fluffos_v2/lib/doc/build/monster/
nightmare3_fluffos_v2/lib/doc/build/room/
nightmare3_fluffos_v2/lib/doc/build/virtual/
nightmare3_fluffos_v2/lib/doc/build/weapon/
nightmare3_fluffos_v2/lib/doc/classes/
nightmare3_fluffos_v2/lib/doc/efun/
nightmare3_fluffos_v2/lib/doc/etc/
nightmare3_fluffos_v2/lib/doc/help/creator/
nightmare3_fluffos_v2/lib/doc/help/hm/
nightmare3_fluffos_v2/lib/doc/law/
nightmare3_fluffos_v2/lib/doc/lpc/basic/
nightmare3_fluffos_v2/lib/doc/lpc/data_types/
nightmare3_fluffos_v2/lib/doc/lpc/etc/
nightmare3_fluffos_v2/lib/doc/lpc/intermediate/
nightmare3_fluffos_v2/lib/doc/lpc/types/
nightmare3_fluffos_v2/lib/doc/mudlib/
nightmare3_fluffos_v2/lib/doc/mudlib/features/
nightmare3_fluffos_v2/lib/domains/Examples/etc/
nightmare3_fluffos_v2/lib/domains/Examples/room/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaA/
nightmare3_fluffos_v2/lib/domains/Examples/virtual/exaB/
nightmare3_fluffos_v2/lib/domains/Examples/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/
nightmare3_fluffos_v2/lib/domains/Praxis/adm/
nightmare3_fluffos_v2/lib/domains/Praxis/attic/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/
nightmare3_fluffos_v2/lib/domains/Praxis/cemetary/mon/
nightmare3_fluffos_v2/lib/domains/Praxis/data/
nightmare3_fluffos_v2/lib/domains/Praxis/death/
nightmare3_fluffos_v2/lib/domains/Praxis/mountains/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/armour/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/magic/
nightmare3_fluffos_v2/lib/domains/Praxis/obj/weapon/
nightmare3_fluffos_v2/lib/domains/Praxis/orc_valley/
nightmare3_fluffos_v2/lib/domains/Praxis/quests/
nightmare3_fluffos_v2/lib/domains/Praxis/standardOld/
nightmare3_fluffos_v2/lib/include/
nightmare3_fluffos_v2/lib/log/
nightmare3_fluffos_v2/lib/log/errors/
nightmare3_fluffos_v2/lib/log/reports/
nightmare3_fluffos_v2/lib/log/watch/
nightmare3_fluffos_v2/lib/news/
nightmare3_fluffos_v2/lib/secure/cfg/
nightmare3_fluffos_v2/lib/secure/cmds/ambassador/
nightmare3_fluffos_v2/lib/secure/cmds/mortal/
nightmare3_fluffos_v2/lib/secure/save/users/d/
nightmare3_fluffos_v2/lib/secure/std/
nightmare3_fluffos_v2/lib/std/hm/
nightmare3_fluffos_v2/lib/std/living/
nightmare3_fluffos_v2/lib/std/room/
nightmare3_fluffos_v2/lib/std/user/
nightmare3_fluffos_v2/lib/std/virtual/
nightmare3_fluffos_v2/lib/www/
nightmare3_fluffos_v2/lib/www/errors/
nightmare3_fluffos_v2/lib/www/gateways/
nightmare3_fluffos_v2/win32/
//      /bin/mortal/_who.c
//      from the Nightmare Mudlib
//      lists users() in an interesting format and sorting order
//      created by Descartes of Borg 03 july 1993
//	redesigned by Kalinash 12 Jan 94
 
#include <std.h>
#include <daemons.h>
 
#define DEFAULT_SORT "l";
 
inherit DAEMON;
 
string list_users(string *races, string order);
 
int cmd_who(string str) {
    string *args, *races;
    string order;
    int i;
 
    races = ({});
    order = DEFAULT_SORT;
    if(str) {
        i = sizeof(args = explode(str, " "));
        while(i--) {
            if(args[i][0] == '-' && strlen(args[i]) > 1) order = args[i][1..1];
            else if(RACE_D->is_race(args[i])) races += ({ args[i] });
        }
   }
     this_player()->more(explode(list_users(races, order), "\n"));
    return 1;
}
 
string list_users(string *races, string order) {
   object *who, *hms, *ims, *nbs, *nrs, *abs;
     string tmp, mark, borg;
    int i, max, x;
    hms = ({});
    ims = ({});
    nbs = ({});
    nrs = ({});
    abs = ({});
    who = filter_array(users(), "which_users", this_object(), races);
    for(x=0;x<sizeof(who);x++) {
        if(creatorp(who[x]))
	  if(!ims) ims = ({ who[x] }); else ims += ({ who[x] });
        else if(high_mortalp(who[x]))
	  if(!hms) hms = ({ who[x] }); else hms += ({ who[x] });
        else if((int)who[x]->query_level() < 6)
	  if(ambassadorp(who[x]))
	    { if(!abs) abs = ({ who[x] }); else abs += ({ who[x] }); } else
	    { if(!nbs) nbs = ({ who[x] }); else nbs += ({ who[x] }); }
	else 
	  if(!nrs) nrs = ({ who[x] }); else nrs += ({ who[x] });
    }
    switch(order) {
        case "a":
            hms = sort_array(hms, "sort_by_name", this_object());
            ims = sort_array(ims, "sort_by_name", this_object());
            nbs = sort_array(nbs, "sort_by_name", this_object());
            nrs = sort_array(nrs, "sort_by_name", this_object());
            abs = sort_array(abs, "sort_by_name", this_object());
            break;
        case "b":
            hms = sort_array(hms, "sort_by_birth", this_object());
            ims = sort_array(ims, "sort_by_birth", this_object());
            nbs = sort_array(nbs, "sort_by_birth", this_object());
            nrs = sort_array(nrs, "sort_by_birth", this_object());
            abs = sort_array(abs, "sort_by_birth", this_object());
            break;
        case "d":
            hms = sort_array(hms, "sort_by_deaths", this_object());
            ims = sort_array(ims, "sort_by_deaths", this_object());
            nbs = sort_array(nbs, "sort_by_deaths", this_object());
            nrs = sort_array(nrs, "sort_by_deaths", this_object());
            abs = sort_array(abs, "sort_by_deaths", this_object());
            break;
        case "k":
            hms = sort_array(hms, "sort_by_kills", this_object());
            ims = sort_array(ims, "sort_by_kills", this_object());
            nbs = sort_array(nbs, "sort_by_kills", this_object());
            nrs = sort_array(nrs, "sort_by_kills", this_object());
            abs = sort_array(abs, "sort_by_kills", this_object());
            break;
        case "l":
	    hms = sort_array(hms, "sort_by_level", this_object());
	    ims = sort_array(ims, "sort_by_level", this_object());
	    nbs = sort_array(nbs, "sort_by_level", this_object());
	    nrs = sort_array(nrs, "sort_by_level", this_object());
	    abs = sort_array(abs, "sort_by_level", this_object());
            break;
        case "p":
            hms = sort_array(hms, "sort_by_playing_time", this_object());
            ims = sort_array(ims, "sort_by_playing_time", this_object());
            nbs = sort_array(nbs, "sort_by_playing_time", this_object());
            nrs = sort_array(nrs, "sort_by_playing_time", this_object());
            abs = sort_array(abs, "sort_by_playing_time", this_object());
            break;
        case "q":
            hms = sort_array(hms, "sort_by_quests", this_object());
            ims = sort_array(ims, "sort_by_quests", this_object());
            nbs = sort_array(nbs, "sort_by_quests", this_object());
            nrs = sort_array(nrs, "sort_by_quests", this_object());
            abs = sort_array(abs, "sort_by_quests", this_object());
            break;
        case "t":
            hms = sort_array(hms, "sort_by_login_time", this_object());
            ims = sort_array(ims, "sort_by_login_time", this_object());
            nbs = sort_array(nbs, "sort_by_login_time", this_object());
            nrs = sort_array(nrs, "sort_by_login_time", this_object());
            abs = sort_array(abs, "sort_by_login_time", this_object());
            break;
        default:
            hms = sort_array(hms, "sort_by_birth", this_object());
            ims = sort_array(ims, "sort_by_birth", this_object());
            nbs = sort_array(nbs, "sort_by_birth", this_object());
            nrs = sort_array(nrs, "sort_by_birth", this_object());
            abs = sort_array(abs, "sort_by_birth", this_object());
            break;
    }
    max = sizeof(who);
    borg = "%^RED%^%^BOLD%^          Our Reality Which Is Nightmare\n";
    if(sizeof(races) && max == 1)
        borg += "%^RED%^There is only one such person experiencing our Nightmare!\n";
    else
        if(max == 1)
            borg += "%^RED%^   You are the only person experiencing our Nightmare!\n";
        else
            borg += "%^RED%^   There are currently "+max+" people in our Nightmare!\n";
    borg +="\n";
    max = sizeof(hms);
    if(sizeof(races) && max == 1)
        borg += "%^RED%^There is only one such High mortal experiencing our Nightmare!\n";
    else if(max > 0)
        borg += "%^RED%^There are currently "+max+" High mortals in our Nightmare :\n";
    if(max)
	borg += "\n";
    if(max)
    for(i=0; i<max; i++) {
	tmp = "  ";
	if((string)hms[i]->query_title()) tmp += (string)hms[i]->query_title(); else
          tmp += "("+capitalize((string)hms[i]->query_name())+")";
	tmp += ", ";
        tmp += capitalize((string)hms[i]->query_race());
        tmp += " ";
        tmp += capitalize((string)hms[i]->query_class());
        tmp = arrange_string(tmp, 65);
	if(in_edit(hms[i]) || in_input(hms[i]))
          tmp += "*ed*";
        else
          tmp += "    ";
        tmp = arrange_string(tmp, 71);
        if(query_idle(hms[i]) > 60)
          tmp += "-id-";
        else
          tmp += "    ";
    borg += "%^MAGENTA%^%^BOLD%^"+tmp;
    borg += "\n";
    }
    max = sizeof(nrs);
    if(max == 1)
        borg += "\n%^RED%^There is only one such mid-level player experiencing our Nightmare!\n";
    else if(max > 0)
        borg += "\n%^RED%^There are currently "+max+" mid-level players in our Nightmare :\n";
    if(max)
	borg += "\n";
    if(max)
    for(i=0; i<max; i++) {
	tmp = "  ";
	if((string)nrs[i]->query_title()) tmp += (string)nrs[i]->query_title(); else
          tmp += "("+capitalize((string)nrs[i]->query_name())+")";
	tmp += ", ";
        tmp += capitalize((string)nrs[i]->query_race());
        tmp += " ";
        tmp += capitalize((string)nrs[i]->query_class());
        tmp = arrange_string(tmp, 65);
	if(in_edit(nrs[i]) || in_input(nrs[i]))
          tmp += "*ed*";
        else
          tmp += "    ";
        tmp = arrange_string(tmp, 71);
        if(query_idle(nrs[i]) > 60)
          tmp += "-id-";
        else
          tmp += "    ";
    borg += "%^CYAN%^"+tmp;
    borg += "\n";
    }
    max = sizeof(nbs);
    if(sizeof(races) && max ==1)
        borg += "\n%^RED%^There is only one such newbie player experiencing our Nightmare!\n";
    else if(max > 0)
        borg += "\n%^RED%^There are currently "+max+" newbie players in our Nightmare :\n";
    if(max)
	borg += "\n";
    if(max)
    for(i=0; i<max; i++) {
	tmp = "  ";
	if((string)nbs[i]->query_title()) tmp += (string)nbs[i]->query_title(); else
          tmp += "("+capitalize((string)nbs[i]->query_name())+")";
	tmp += ", ";
	if(!(string)nbs[i]->query_race()) tmp += "null"; else
	  tmp += capitalize((string)nbs[i]->query_race());
	  tmp += " ";
	if(!(string)nbs[i]->query_class()) tmp += "null"; else
	  tmp += capitalize((string)nbs[i]->query_class());
          tmp = arrange_string(tmp, 65);
	if(in_edit(nbs[i]) || in_input(nbs[i]))
          tmp += "*ed*";
        else
          tmp += "    ";
        tmp = arrange_string(tmp, 71);
        if(query_idle(nbs[i]) > 60)
          tmp += "-id-";
        else
          tmp += "    ";
    borg += "%^MAGENTA%^"+tmp;
    borg += "\n";
    }
    max = sizeof(abs);
    if(sizeof(races) && max ==1)
        borg += "\n%^RED%^There is only one such ambassador experiencing our Nightmare!\n";
    else if(max > 0)
        borg += "\n%^RED%^There are currently "+max+" ambassadors in our Nightmare :\n";
    if(max)
	borg += "\n";
    if(max)
    for(i=0; i<max; i++) {
	tmp = "  ";
	if((string)abs[i]->query_title()) tmp += (string)abs[i]->query_title(); else
          tmp += "("+capitalize((string)abs[i]->query_name())+")";
	tmp += ", ";
	tmp += capitalize((string)abs[i]->query_race());
	tmp += " ";
	tmp += capitalize((string)abs[i]->query_class());
        tmp = arrange_string(tmp, 65);
	if(in_edit(abs[i]) || in_input(abs[i]))
          tmp += "*ed*";
        else
          tmp += "    ";
        tmp = arrange_string(tmp, 71);
        if(query_idle(abs[i]) > 60)
          tmp += "-id-";
        else
          tmp += "    ";
    borg += "%^GREEN%^"+tmp;
    borg += "\n";
    }
    max = sizeof(ims);
    if(sizeof(races) && max ==1)
        borg += "\n%^RED%^There is only one such Immortal experiencing our Nightmare!\n";
    else if(max > 0)
        borg += "\n%^RED%^There are currently "+max+" Immortals in our Nightmare :\n";
    if(max)
	borg += "\n";
    if(max)
    for(i=0; i<max; i++) {
	tmp = "  ";
        if((int)ims[i]->query_invis() && !archp(this_player())) continue;
	if((string)ims[i]->query_title()) tmp+=(string)ims[i]->query_title(); else
          tmp += "("+capitalize((string)ims[i]->query_name())+")";
	tmp += " - ";
	tmp += capitalize((string)ims[i]->query_position());
        tmp = arrange_string(tmp, 65);
	if(in_edit(ims[i]) || in_input(ims[i]))
          tmp += "*ed*";
        else
          tmp += "    ";
        tmp = arrange_string(tmp, 71);
        if(query_idle(ims[i]) > 60)
          tmp += "-id-";
        else
          tmp += "    ";
    if(archp(ims[i]))
        borg += "%^BLUE%^%^BOLD%^"+tmp;
    else borg += "%^BLUE%^"+tmp;
    borg += "\n";
    }
    return borg;
}
 
int which_users(object who, string *races) {
    string my_race;
    int i;
 
    if((int)who->query_invis(this_player())) return 0;
    if(!who->query_title()) return 0;
    if(who->query_invis() && creatorp(who) && !archp(this_player()))
      return 0;
    if(!(i=sizeof(races))) return 1;
   my_race = (string)who->query_race();
     while(i--) if(races[i]== my_race) return 1;
    return 0;
}
 
int sort_by_birth(object alpha, object beta) {
    int a, b;
 
    a = (int)alpha->query_birthday();
    b = (int)beta->query_birthday();
    if(a == b) return strcmp((string)alpha->query_name(),
(string)beta->query_name());
    else if(a > b) return 1;
    else return -1;
}
 
int sort_by_name(object alpha, object beta) {
    return strcmp((string)alpha->query_name(), (string)beta->query_name());
}
 
int sort_by_playing_time(object alpha, object beta) {
    int a, b;
 
    a = (int)alpha->query_age();
    b = (int)beta->query_age();
    if(a==b) return strcmp((string)alpha->query_name(),
(string)beta->query_name());
    else if(a > b) return -1;
    else return 1;
}
 
int sort_by_login_time(object alpha, object beta) {
    int a, b;
 
    a = (int)alpha->query_login_time();
    b = (int)beta->query_login_time();
    if(a==b) return strcmp((string)alpha->query_name(),
(string)beta->query_name());
    else if(a>b) return 1;
    else return -1;
}
 
int sort_by_level(object alpha, object beta) {
    int a, b;
 
    a = (int)alpha->query_level();
    b = (int)beta->query_level();
    if(a > b) return -1;
    if(b > a) return 1;
    a = creatorp(alpha);
    b = creatorp(beta);
    if( (a && b) || (!a && !b) )
      return strcmp((string)alpha->query_name(), (string)beta->query_name());
    if(a) return 1;
    return -1;
}
 
int sort_by_kills(object alpha, object beta) {
    int a, b;
 
    if((a=sizeof((string *)alpha->query_kills())) > (b=sizeof((string
*)beta->query_kills())))
      return -1;
    else if(a < b) return 1;
    else return strcmp((string)alpha->query_name(), (string)beta->query_name());
}
 
int sort_by_deaths(object alpha, object beta) {
    int a, b;
 
    a = sizeof((mixed *)alpha->query_deaths());
    b = sizeof((mixed *)beta->query_deaths());
    if(a>b) return -1;
    else if(a<b) return 1;
    else return strcmp((string)alpha->query_name(), (string)beta->query_name());
}
 
int sort_by_quests(object alpha, object beta) {
    int a, b;
 
   if((a=(int)alpha->query_quest_points()) >
 (b=(int)beta->query_quest_points()))
      return -1;
    else if(a < b) return 1;
    else return strcmp((string)alpha->query_name(), (string)beta->query_name());
}
 
void help() {
    write(
      "Syntax: <who [-][abdklpqt] [race1 race2 ... raceN]>\n\n"+
      "Lists all players online or all players of the race(s) given.\n"+
      "If no arguments are given, it simply lists all players sorted by\n"
      "birthdate.\n" );
}