⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whomp.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
// who.c// Change By 武林列传之烽火再起 蝴蝶君[Robert] Mail:robert_st@sina.com/*  重新编译过的who指令,增加了可查询在线男、女、无性玩家,断线状态的玩家和简略的  在线玩家总数。并可识别并整理帮派、玩家帮会的在线玩家。*/#include <ansi.h>#include <net/dns.h>#include <mudlib.h>inherit F_CLEAN_UP;int sort_user(object,object);int help();private void create() { seteuid(getuid()); }mixed main(object me, string arg, int remote){        string name, str, *option;        object *list, *ob, ob1;        int i, ppl_cnt,player_cnt;        int opt_long, opt_wiz, opt_party,opt_male,opt_female,opt_normal,opt_number;        int opt_dead,opt_banghui;        if(remote && sizeof(arg)<2) arg="";           if (!me)                 return notify_fail("你现在正忙着呢。\n");        if (me->is_busy())                return notify_fail("你现在正忙着呢。\n");        if (me->is_fighting())         return notify_fail("你正打的热闹着呢!\n");        me->start_busy(3);        if( arg )        {                option = explode(arg, " ");                i = sizeof(option);                while( i-- )                        switch(option[i])                        {                                case "-h": return help();                                case "-l": opt_long = 1;break;                                case "-w": opt_wiz = 1;break;                                case "-b": opt_banghui = 1;break;                                case "-p": opt_party = 1;break;                                case "-f": opt_female = 1;break;                                case "-m": opt_male = 1;break;                                case "-n": opt_normal = 1;break;                                case "-a": opt_number = 1;break;                                case "-d": opt_dead = 1;break;                                default://                                        if(option[i][0]=='@' )//                                        {//                                                RWHO_Q->send_rwho_q(option[i][1..sizeof(option[i])],me, opt_long);//                                                write("网路讯息已送出,请稍候。\n");//                                                return 1;//                                        }//                                        ob1 = present(option[i], environment(me));                                        if (!ob1 ) ob1 = find_player(option[i]);                                        if (!ob1) ob1 = find_living(option[i]);                                        if ((!ob1) && (option[i] =="me")) ob1=me;//&&!find_player(ob1)->query("env/invisibility")                                        if (!ob1) return notify_fail("没有这个玩家或参数错误。\n指令格式 : who [-h] [-l] [-w] [-b] [-p] [-f] [-m] [-a] [-d][<ID>]\n");                                        if (!ob1 || wizardp(ob1) )  return notify_fail("没有这个玩家或参数错误。\n指令格式 : who [-h] [-l] [-w] [-b] [-p] [-f] [-m] [-a] [-d][<ID>]\n");//                                        if ( ob1 && find_player(ob1)->query("env/invisibility")  return notify_fail("没有这个玩家或参数错误。\n指令格式 : who [-h] [-l] [-w] [-b] [-p] [-f] [-m] [-a] [-d][<ID>]\n");                                        me = ob1; opt_party = 1;                        }        }        str = HIY"\n海洋II"HIW"目前";        if(opt_banghui)                if(me->query("faction/name"))                        str += me->query("faction/name")+"的玩家有:";                else                        return notify_fail("你目前还没有加入任何帮会。\n");        else if(opt_party)                if(me->query("family/family_name"))                        str += me->query("family/family_name")+"的玩家有:";                else str += "普通百姓有:";        else if(opt_male)                str += "男性玩家有:";        else if(opt_female)                str += "女性玩家有:";        else if(opt_normal)                str += "太监有:";        else if(opt_wiz)                str += "巫师有:";        else if(opt_long) str += "玩家有:";        else str += "总人物有:";        str += HIY"\n─────────────────────────────────────\n"NOR;        ob = filter_array(children(USER_OB),(: userp :));        if(opt_banghui)                ob = filter_array(ob, (: $1->query("faction/name") ==      $2->query("faction/name") :), me);        else if (opt_party)                ob = filter_array(ob, (: $1->query("family/family_name") ==      $2->query("family/family_name") :), me);        list = sort_array(ob, (: sort_user :));//        list = sort_array(ob,"sort_user");        ppl_cnt = 0;        if(opt_long || opt_wiz)        {                i = sizeof(list);                while ( i-- )                {                        // Skip those users in login limbo.                        if( !environment(list[i])) continue;                        if( !wizardp(me) && !me->visible(list[i]) ) continue;                        if( opt_wiz && !wizardp(list[i]) && wizhood(list[i]) != "(immortal)" ) continue;                        if( interactive(list[i]) )                                ppl_cnt++;                                player_cnt++;                        str = sprintf("%s%12s%s%s\n",str,RANK_D->query_rank(list[i]),                                interactive(list[i])?(query_idle(list[i]) > 120? HIG "*" NOR:" "):HIR "#" NOR,                                list[i]->short(1));                }        }        else {                ppl_cnt = 0;                i = sizeof(list);                while( i-- ){                        if(!environment(list[i])) continue;                        if(!me && wizardp(list[i]) && list[i]->query("env/invisibility")) continue;                        if(!remote && !wizardp(me) && !me->visible(list[i])) continue;                        if(opt_wiz && !wizardp(list[i]) ) continue;                        if(opt_male && list[i]->query("gender")!="男性") continue;                        if(opt_female && list[i]->query("gender")!="女性") continue;                        if(opt_normal && list[i]->query("gender")!="无性") continue;                        if(opt_dead && !list[i]->query_temp("netdead")) continue;                        name=interactive(list[i])?(query_idle(list[i])>120?HIG"*"NOR + WHT:" "):HIR "#"NOR + WHT;                        if( wizardp(list[i])){                        name = sprintf( HIG"%s%-10s(%-11s"HIY"│"NOR + HIG,name,list[i]->name(1),                                capitalize(list[i]->query("id"))+")");                        }                        else if(list[i]->query("gender") == "女性"){                        name = sprintf( HIC"%s%-10s(%-11s"HIY"│"NOR + HIC,name,list[i]->name(1),                                capitalize(list[i]->query("id"))+")");                        }                        else {                        name = sprintf(NOR + WHT"%s%-10s(%-11s"HIY"│"NOR + WHT,name,list[i]->name(1),                                        capitalize(list[i]->query("id"))+")");                        }                        str = sprintf("%s%25s%s", str, name,ppl_cnt%3==2?"\n":"");                        ppl_cnt++;                        player_cnt++;                }                if ( ppl_cnt%3 ) str += "\n";        }        str += HIY"─────────────────────────────────────\n"NOR;        if(opt_number)                                str = HIY"海洋II"NOR + WHT"目前当前共有"+chinese_number(player_cnt)+"位使用者连线中。\n";        else if(player_cnt)        str = sprintf("%s共有 %s 位使用者连线中,系统负担:%s\n "HIG"*"NOR" 表示发呆中,"HIR"#"NOR" 表示断线中。\n\n", str, CHINESE_D->chinese_number(player_cnt),        query_load_average());        else        str = sprintf("目前游戏中并没有符合该条件的玩家。\n");        if( remote ) return str;        else        me->start_more(str);        return 1;}int sort_user(object ob1, object ob2){	string name1, name2;	reset_eval_cost();	if( wiz_level(ob1) != wiz_level(ob2) )		return wiz_level(ob2)			- wiz_level(ob1);		name1 = ob1->query("family/family_name");	name2 = ob2->query("family/family_name");	if (intp(name1)) name1 = "";	if (intp(name2)) name2 = "";	if (name1 > name2) return -1;	if (name1 < name2) return 1;	return (int)ob2->query("combat_exp") - (int)ob1->query("combat_exp");}int help(){        write("指令格式 : who [-h] [-l] [-w] [-p] [-f] [-m] [-a] [-d] [<ID>]这个指令可以列出所有在游戏中的玩家及其等级。-h 列出帮助屏幕。-l 选项列出较长的讯息。-b 只列出同帮会的玩家。-p 只列出同门派的玩家。-w 只列出游戏中的巫师。-f 只列出游戏中的女玩家。-m 只列出游戏中的男玩家。-n 只列出游戏中的无性玩家。-a 只列出当前游戏中玩家的总人数。-d 只列出当前游戏中处于断线状态中的玩家。<ID> 列出<ID>代表玩家所属门派的玩家。"HIG"*"NOR" 表示"HIG"发呆"NOR"中,"HIR"#"NOR" 表示"HIR"断线"NOR"中。相关指令: finger \n\n");        return 1;}

⌨️ 快捷键说明

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