/* Sorted netstat for catching those multiplayers. Lists player names, IP name, and room they're in, sorted by IP number. */ /* Hamlet wrote June 1995 */ /* Grimbrand wrote some mean nasty additions Jan 1996. */ /* yes... the code needs optimized. I'm lazy, what can I say? */ /* Hamlet added ident stuff, Jan 1996 */ #include <standard.h> #include <cmd.h> inherit CMD_BASE; void setup() { position = 1; } static int cmd(string str, object me) { object *players = users(); int sz = sizeof(players); string *info = allocate(4 * sz); int *sortstuff = allocate(sz); int i,j,k; int least, tmp; int relevant, hits; string ipn; object ob; int LORD_PER = 0; // Wonderflug; removed this_player(1) check; this isn't THAT // critical anyway, certainly nothing someone can't code themselves if("/secure/master"->query_lord(this_player()->query_name())) LORD_PER = 1; /* initialization */ for(i=0;i<sz;i++) { info[i*4] = query_ip_number(players[i]); info[(i*4)+1] = players[i]->query_name(); if(LORD_PER && (tmp = players[i]->query_ident())) info[(i*4)+2] = tmp+"@"+query_ip_name(players[i]); else info[(i*4)+2] = query_ip_name(players[i]); if(environment(players[i])) info[(i*4)+3] = virtual_file_name(environment(players[i])); else info[(i*4)+3] = "No environment"; } for(i=0;i<sz;i++) sortstuff[i] = i*4; /* sorting */ for(j=0;j<(sz-1);j++) { least = j; for(k=j+1;k<sz;k++) if( info[sortstuff[k]] < info[sortstuff[least]] ) least = k; tmp = sortstuff[least]; sortstuff[least] = sortstuff[j]; sortstuff[j] = tmp; } /* output */ if(!str) { tell_object(this_player(), "Name IP Name Room\n"); for(i=0;i<sz;i++) { k = strlen(info[sortstuff[i]+3]); j = k - 36; if( (tmp = strlen(info[sortstuff[i]+2]) - 29) > 0) j += tmp; if(j<0) j = 0; tell_object(this_player(),sprintf("%-13s%-29s %-s\n", info[sortstuff[i]+1], info[sortstuff[i]+2], info[sortstuff[i]+3][j..k])); } } else { ob = find_player(str); if(!ob) { tell_object(this_player(), " Unable to locate "+capitalize(str)+" in the " "realms.\n\n"); return 1; } ipn = query_ip_number(ob); for(relevant=0;relevant<strlen(ipn);relevant++) if(ipn[relevant..relevant] == ".") { hits++; if(hits == 3) break; } tell_object(this_player(), "Name IP Name Room\n"); for(i=0;i<sz;i++) { k = strlen(info[sortstuff[i]+3]); j = k - 36; if( (tmp = strlen(info[sortstuff[i]+2]) - 29) > 0) j += tmp; if(j<0) j = 0; if(ipn[0..relevant] == info[sortstuff[i]][0..relevant]) { tell_object(this_player(),sprintf("%-13s%-29s %-s\n", info[sortstuff[i]+1], info[sortstuff[i]+2], info[sortstuff[i]+3][j..k])); } } } return 1; }