/**
 * Concept derived from The Dreamings creators command;  Galileo
 * 19 July 1999 - Queue put in a check for net dead creators, driver doesn't
 * seem to like it when you call query_idle() on net dead people
 * Modified For Divided Sky; Shaydz
 * @change Rewrote a wee little to make it a few times faster
 * - Sandoz, May 2002.
 */
inherit COMMAND_BASE;
/** @ignore yes */
varargs string get_colour( string person, string *leaders ) {
    // leader mode.
    if( !leaders )
        return "%^CYAN%^";
    if( member_array( person, leaders ) != -1 )
        return "%^CYAN%^";
    if( DOMAIN_H->query_member("learning", person ) &&
        sizeof( DOMAIN_H->query_domains(person) ) == 1 )
        return "%^YELLOW%^";
    return "%^WHITE%^";
} /* get_colour() */
/** @ignore yes */
int cmd( string str ) {
    string *creators, *leaders, option;
    function f;
    if( str == "leader" || str == "leaders") {
        creators = DOMAIN_H->query_leaders();
        option = "leaders";
    } else if( DOMAIN_H->query_domain(str) ) {
        leaders = DOMAIN_H->query_leaders(str);
        creators = DOMAIN_H->query_creators(str);
        option = str;
    } else {
        leaders = DOMAIN_H->query_leaders();
        creators = DOMAIN_H->query_creators();
        option = "creators";
    }
    if( str != "all" && str != "sage")
        creators -= DOMAIN_H->query_members("sage");
    if( str != "all" && str != "afterlife")
        creators -= DOMAIN_H->query_members("afterlife");
    f = function( string name, string *leaders ) {
            int last;
            object ob;
            ob = find_player(name);
            last = ob ? ob->query_last_log_on() : PLAYER_H->test_last(name);
            return sprintf("%s%s%-16s %-26s %-15s%s", get_colour( name,
                leaders ), ( DOMAIN_H->query_member("sage", name ) ?
                "*" : ( DOMAIN_H->query_member("afterlife", name ) ?
                "+" : " ") ), CAP(name), ( ob ? "Currently Logged In" :
                ctime(last) ), ( ob ? ( !interactive(ob) ?
                "Net dead" : "Idle: "+query_idle(ob) / 60 ) :
                time_string( time() - last, 1 ) ), "%^RESET%^");
    };
    creators = map( creators, f, leaders );
    str = create_table( ({ CAP(option), "creator" }), creators, 0 );
    tell_object( TP, str );
    return 1;
} /* cmd() */
/** @ignore yes */
mixed query_patterns() {
    return ({ "", (: cmd(0) :),
      "<string'leaders(s)|sage|afterlife|all'>", (: cmd($4[0]) :) });
} /* query_patterns() */