mcheck.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 125 行

C
125
字号
// mcheck.c// Created by bbb@SJ/*   Modified by snowman@SJ 28/06/2000   added ip check and player check.   also added passwd & email check.*/#include <ansi.h>inherit F_CLEAN_UP;int main(object me, string arg){        int i, j, count = 0;        object *lob, obj, *obs;        string ip, tmp, str = HIR"\n  …… 检查多重登录(ML) …… "NOR;	mixed groups;     	int ip1,ip2,ip3,ip4,n,myip,yourip;    	string arg1;		obs = filter_array(objects(), (: interactive :));        obs = filter_array(obs, (:environment:));        obs = sort_array(obs, (:strcmp(query_ip_number($2), query_ip_number($1)):));        i = sizeof(obs);        	if( stringp(arg) ){		if( objectp(obj = LOGIN_D->find_body(arg)) && me->visible(obj) && interactive(obj)){			arg = query_ip_number(obj);			tmp = "\n"+ obj->name(1) +"("+ obj->query("id") +")\nIP:"+ arg +"\nPort:["+query_ip_rport(obj)+"]\n";			tmp += "目前和此人从相同IP连入的玩家有:\n\t";		}		else tmp = "\n目前通过 " + arg + " 连入的玩家有:\n\t"; 		n=sscanf(arg,"%d.%d.%d.%d",ip1,ip2,ip3,ip4);		myip = (ip1<<24)+(ip2<<16)+(ip3<<8)+ip4;		while(i--){			if( obs[i] == obj ) continue;        		arg1 = query_ip_number(obs[i]);			sscanf(arg1,"%d.%d.%d.%d",ip1,ip2,ip3,ip4);			yourip = (ip1<<24)+(ip2<<16)+(ip3<<8)+ip4;        		if (query_ip_number(obs[i]) == arg			|| (myip>>(8*(4-n)))==(yourip>>(8*(4-n)))){				tmp += sprintf("%-25s ", obs[i]->query("name") + "("+obs[i]->query("id")+")" + "["+query_ip_rport(obs[i])+"]");				count++;				if( count % 3 == 0 ){					tmp += "\n\t";					count = 0;				}			}		}		write(tmp+"\n");		return 1;	}		groups = unique_array(obs, (: query_ip_number($1) :));	if ( !sizeof(groups) ) return notify_fail(HIR"\n  …… 完毕 …… \n"NOR);		for(i = 0; i < sizeof(groups); i++) {		if( sizeof( groups[i])  <= 1)  			continue;		obs = groups[i];		lob = obs->query_temp("link_ob") - ({0});		ip = query_ip_number(obs[0]);		tmp = sprintf("\n"HIY"%-16s"WHT" → "NOR, ip);		for( j = 0; j < sizeof(obs); j++ ){			if( j > 0 && j % 4 == 0 ) tmp += "\n\t\t    ";			tmp += sprintf("%-16s", obs[j]->query("id")+"("+ query_ip_rport(obs[j])+")");		}				str += tmp;		lob = sort_array(lob, (:strcmp($1->query("password"), $2->query("password")):));	        count = sizeof(lob);	        ip = j = 0;	        tmp = arg = "";	        while(count--){	        	if (lob[count]->query("password") != ip) {	                	if (j > 1) arg += "(" +tmp+") ";	                        ip = lob[count]->query("password");	                        j = 0;	                        tmp = "";	                }	                tmp += lob[count]->query("id")+", ";	                j++;	        }	 	if (j > 1) arg += "(" +tmp+") ";	        if( arg != "" ) str += HIG"\n\t\t    口令相同的有:"+arg+NOR;	        lob = sort_array(lob, (:strcmp($1->query("email"), $2->query("email")):));	        count = sizeof(lob);	        ip = j = 0;	        tmp = arg = "";	        while(count--){	                if (lob[count]->query("email") != ip) {	                        if (j > 1) arg += "(" +tmp+") ";	                        ip = lob[count]->query("email");	                        j = 0;	                        tmp = "";	                }	                tmp += lob[count]->query("id")+", ";	                j++;	        }	        if (j > 1) arg += "(" +tmp+") ";	        if( arg != "" ) str += HIC"\n\t\t    Email相同的有:"+arg+NOR;	}        str += HIR"\n  …… 完毕 …… \n"NOR;        me->start_more(str);        return 1;}int help(object me){        write(@HELP指令格式:mcheck [ip|某人]例:	mcheck 61.137.155.126   -> 列出从此ip连入的玩家。	mcheck 61.137.   	-> 列出从此ip范围内连入的玩家。	mcheck snowman		-> 列出和次玩家相同ip的其它玩家。	mcheck			-> 列出所有相同ip的列表,附带相同 email, passwd列表。	HELP        );        return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?