/* -*- LPC -*- */ /* * $Locker: $ * $Id: qwho.c,v 1.25 2003/01/16 23:23:09 ceres Exp $ * */ inherit "/cmds/base"; #include <login_handler.h> int playercompare(object p1, object p2); int cmd(string guild_name) { int i; int countcre; int countplay; int counttest; int countloginq; int countlogins; int compressed; string obtyp; string tmp; object *arr; string nam; string cres; string plays; string testers; string *login_q; string logins; int showmasters; mapping user_data; object *liaisons; string friends; int countFriends; int totalUsers; int totalPlayers; int totalCompressed; if (this_player()->query_creator()) { showmasters = 1; } else { showmasters = 0; } countcre = 0; countplay = 0; counttest = 0; compressed = 0; cres = ""; plays = ""; testers = ""; logins = ""; friends = ""; user_data = unique_mapping( users(), (: "/d/liaison/master"->query_member( $1->query_name() ) :) ); if ( user_data[1] ) { liaisons = sort_array( user_data[1], (: playercompare :) ); } else { liaisons = ({ }); } if ( user_data[0] ) { arr = sort_array( user_data[0], (: playercompare :)); } else { arr = ({ }); } arr = liaisons + arr; arr = filter(arr, (: (!$1->query_invis() || reference_allowed(this_player(), $1)) && !$1->query_login_ob() :) ); if (guild_name) { // Do weird filtering! arr = "/cmds/player/who"->filter_users(arr, guild_name, 1); if (!sizeof(arr)) { add_failed_mess("Unable to find any members of " + guild_name + ".\n"); return 0; } } for(i=0;i<sizeof(arr);i++) { nam = arr[i]->query_cap_name(); if (!nam) { if (showmasters) { nam = "/secure/master"; } else { continue; } } switch (arr[i]->query_invis()) { case 0: break; case 1: nam = "[" + nam + "]"; break; case 2: nam = "[{" + nam + "}]"; break; case 3: nam = "[<" + nam + ">]"; break; default: nam = "?" + nam + "?"; break; } obtyp = arr[i]->query_object_type(); switch(obtyp) { case "X": break; case " ": break; case "C": nam += "(%^CYAN%^C%^RESET%^)"; if ( "/d/liaison/master"->query_member((string)arr[i]->query_name())) { nam += "(%^YELLOW%^l%^RESET%^)"; } break; case "S": nam += "(%^BOLD%^%^CYAN%^S%^RESET%^)"; if ( "/d/liaison/master"->query_member((string)arr[i]->query_name())) { nam += "(%^YELLOW%^l%^RESET%^)"; } break; case "T": nam += "(%^BOLD%^%^RED%^T%^RESET%^)"; if ( "/d/liaison/master"->query_member((string)arr[i]->query_name())) { nam += "(%^YELLOW%^l%^RESET%^)"; } break; case "D": nam += "(%^RED%^D%^RESET%^)"; if ( "/d/liaison/master"->query_member((string)arr[i]->query_name())) { nam += "(%^YELLOW%^l%^RESET%^)"; } break; default: break; } if (this_player()->is_friend(arr[i]->query_name())) { nam += "(%^GREEN%^F%^RESET%^)"; } if (compressedp(arr[i])) { compressed++; } if (arr[i]->query_creator()) { countcre++; cres = cres + " " + nam; } else if (obtyp == "p") { counttest++; testers = testers + " " + nam; } else if(arr[i]->query_login_ob()) { countlogins++; logins = logins + " " + nam; } else if (this_player()->is_friend(arr[i]->query_name())) { countFriends++; friends = friends + " " + nam; } else { countplay++; plays = plays + " " + nam; } } if (guild_name) { // Do weird filtering! arr = LOGIN_HANDLER->query_login_queue(); arr = "/cmds/player/who"->filter_users(arr, guild_name); login_q = map(arr, (: $1->query_cap_name() :)); } else { login_q = map(LOGIN_HANDLER->query_login_queue(), (: $1->query_cap_name() :)); } login_q = filter(login_q, (: $1 :)); login_q = sort_array(login_q, 1); countloginq = sizeof(login_q); tmp = sprintf("%%^BOLD%%^%d Creator%s:%%^RESET%%^%s\n", countcre, countcre != 1 ? "s" : "", cres); write(tmp); if (guild_name != "creator" && guild_name != "creators") { switch (counttest) { case 0: break; case 1: write("%^BOLD%^" + counttest + " Playtester:%^RESET%^" + testers + "\n"); break; default: write("%^BOLD%^" + counttest + " Playtesters:%^RESET%^" + testers + "\n"); break; } if (countFriends) { write("%^GREEN%^" + countFriends + " Friend" + (countFriends > 1 ? "s" : "") + ":%^RESET%^" + friends + "\n"); } write("%^BOLD%^" + countplay + " Players:%^RESET%^" + plays + "\n"); if (countlogins < countloginq) { countlogins = countloginq; } if (countlogins-countloginq) { logins = replace(logins, ({ "[", "", "]", ""})); if(countloginq) { foreach(tmp in login_q) { logins = replace(logins, tmp+" ", ""); } } write("%^BOLD%^" + (countlogins - countloginq) + " Logging in:%^RESET%^" + logins + "\n"); } if(countloginq) { write("%^BOLD%^" + countloginq + " Queued:%^RESET%^ " + implode(login_q, " ") + "\n"); } } else { countlogins = 0; counttest = 0; countplay = 0; } totalUsers = countcre + counttest + countplay + countlogins + countFriends; totalPlayers = counttest + countplay + countFriends; totalCompressed = compressed - countFriends; write("%^BOLD%^" + (totalPlayers) + " Players, " + totalUsers + " Total%^RESET%^\n" ); /* + " Total (" + totalCompressed + " with MCCP, " + (totalUsers - totalCompressed) + " without)%^RESET%^\n"); */ return 1; } /* cmd() */ int playercompare(object p1, object p2) { return strcmp(p1->query_name(), p2->query_name()); } /* playercompare() */ mixed *query_patterns() { return ({ "", (: cmd(0) :), "<string'guild name'>", (: cmd($4[0]) :) }); } /* query_patterns() */