// New mudlist command for I3 system
// Added some enhancements, Avatar of Eodon, 09/19/95
#include <net/i3.h>
inherit DAEMON;
#define SYNTAX "Syntax: mudlist [-a] [mudname]\n"
string *format_info(string name,mixed vls,string option)
{
string flags="";
mapping services=vls[10];
flags += (services["tell"]) ? "* ":" ";
flags += (services["who"]) ? "* ":" ";
flags += (services["finger"]) ? "* ":" ";
flags += (services["locate"]) ? "* ":" ";
flags += (services["channel"]) ? "* ":" ";
flags += (services["news"]) ? "* ":" ";
flags += (services["mail"]) ? "* ":" ";
return ((vls[0]==-1) || (option=="-a")) ?
({sprintf("%-15s %-17s %-5d %-15s %s",
name,vls[1],vls[2],
vls[5][0..14], flags)}):
({});
}
int cmd_mudlist(string args)
{
string *mud,flags;
mixed *vls;
int i,j;
mapping list,newlist;
string *result=({});
string *sorted=({});
list = I3_DAEMON->query_mudlist();
if (!sizeof(list))
{
message("error","No muds on I3 Network!\n", this_player() );
return 1;
}
mud = keys(list);
vls = values(list);
result = ({"There are currently "+sizeof(mud)+" muds on the I3 Network!\n",
sprintf("%-15s %-17s %-5s %-15s %s","Name","IP","Port",
"MudLib","T W F L C N M L"),
sprintf("%-15s %-17s %-5s %-15s %s","----","--","----",
"------","- - - - - - - -")});
if (args && args!="")
{
string option="",name=args;
if (sscanf(args,"-%s %s",option,name)==2 &&
option!="-a")
{
write(SYNTAX);
return 1;
}
else
if (args=="-a")
{
option = "-a";
name = "";
}
if (name!="" && (j=member_array(name,mud))==-1)
{
write("Sorry, the mud "+args+" is not in the list right now. Try again "+
"later.\n");
return 1;
}
sorted += format_info(mud[j][0..14],vls[j],option);
}
else
for (i=0; i<sizeof(mud); i++)
sorted += format_info(mud[i][0..14],vls[i],args);
result += sort_array(sorted,"compare_names",this_object());
this_player()->more(result);
return 1;
}
int compare_names(string a,string b)
{
return strcmp(a,b);
}
string help()
{
write(SYNTAX+"\n"+
"This command gives a full list of all muds and their addresses that "+
"are connected to the Intermud 3 network. "+
"For more info see: http://www.imaginary.com/~beek/intermud.\n");
}