who.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 194 行
C
194 行
/// who.c// From ES2// Modified by Yu Jue@JY#include <ansi.h>#include <net/dns.h>inherit F_CLEAN_UP;int sort_user(object,object);void create() { seteuid(getuid()); }mixed main(object me, string arg, int remote){ string str, *option, fname = ""; object *list, *ob; int i, ppl_cnt, cnt, count, wcnt = 0; int opt_long, opt_id, opt_wiz, opt_party; if( arg ) { option = explode(arg, " "); i = sizeof(option); while( i-- ) switch(option[i]) { case "-l": opt_long = 1; break; case "-i": opt_id = 1; break; case "-w": opt_wiz = 1; break; case "-f": case "-p": opt_party = 1; break; default:/* if( wizardp(me) && option[i][0]=='@' ) { RWHO_Q->send_rwho_q(option[i][1..sizeof(option[i])], me, opt_long); write("网路讯息已送出,请稍候。\n"); return 1; }*/ return notify_fail("指令格式:who [-l|-i|-w|-p]\n"); } } if (me->is_busy()) return notify_fail("你现在正忙着呢。\n"); if (me->is_fighting()) return notify_fail("你正打的热闹着呢!\n"); me->start_busy(3); if( opt_long && !wizardp(me)) { if( (int)me->query("jing") < 50 ) return notify_fail("你的精神太差了,没有办法得知所有玩家的详细资料。\n"); me->receive_damage("jing", 50); } str = HIG"◎ " + MUD_NAME + "\n"NOR; str += HIG"\n─────────────────────────────────────\n"NOR;// ob = filter_array(objects(), (: userp :)); ob = filter_array(children(USER_OB),(: userp :)); if (opt_party) ob = filter_array(ob, (: $1->query("family/family_name") == $2->query("family/family_name") :), me); list = sort_array(ob, (: sort_user :)); ppl_cnt = 0; cnt = 0; if( opt_long || opt_wiz ) { i = sizeof(list); while( i-- ) {ppl_cnt++; // Skip those users in login limbo. if( !environment(list[i]) ) continue; if( !me->visible(list[i]) ) continue; if( opt_wiz && !wiz_level(list[i]) ) continue; if (interactive(list[i])) ppl_cnt++; else{ppl_cnt++; cnt++;} str = sprintf("%s%12s%s%s\n", str, RANK_D->query_rank(list[i]), interactive(list[i])?(query_idle(list[i]) > 120?HIM "+" NOR:" "):HIG "*" NOR, list[i]->short(1) ); } } else { i = sizeof(list); count = 0; while( i-- ) { // Skip those users in login limbo. if( !environment(list[i]) ) continue; if( !me->visible(list[i]) ) continue; if (!wiz_level(list[i]) && fname != list[i]->query("family/family_name")) { fname = list[i]->query("family/family_name"); if (count % 5) str += "\n"; str += sprintf(HIY "%-10s" NOR, (fname?fname:"普通百姓") + ":"); count = 1;ppl_cnt++; } if (!wcnt && wiz_level(list[i])) { if (count % 5) str += "\n"; str += sprintf(HIR "%-10s" NOR, "巫师:"); wcnt = 1; count = 1;ppl_cnt++; } if (!(count%5)) { count++; str += " ";ppl_cnt++; }if (list[i]->query("gender")=="女性") str = sprintf("%s%s%-9s"NOR"%s", str, interactive(list[i])?(query_idle(list[i]) > 120?HIM "+":" "):HIG "*", opt_id?capitalize(list[i]->query("id")): HIG+list[i]->name(1)+"("+list[i]->query("id")+")"NOR, ++count%5 ? "": "\n" );else if (list[i]->query("gender")=="男性") str = sprintf("%s%s%-9s"NOR"%s", str, interactive(list[i])?(query_idle(list[i]) > 120?HIM "+":" "):HIG "*", opt_id?capitalize(list[i]->query("id")): HIW+list[i]->name(1)+"("+list[i]->query("id")+")"NOR, ++count%5 ? "": "\n" );else str = sprintf("%s%s%-9s"NOR"%s", str, interactive(list[i])?(query_idle(list[i]) > 120?HIM "+":" "):HIG "*", opt_id?capitalize(list[i]->query("id")): HIY+list[i]->name(1)+"("+list[i]->query("id")+")"NOR, ++count%5 ? "": "\n" ); if (interactive(list[i])) ppl_cnt++; else{ppl_cnt++; cnt++;} } if( count%5 ) str += "\n"; } str += HIG"─────────────────────────────────────\n"NOR; str = sprintf(""HIG"%s"HIG"有 %d "HIG"位玩家连线中,%d "HIG"位玩家断线中,系统负担:%s"HIG"\n* 表示断线中 + 表示发呆中"NOR"", str, ppl_cnt, cnt, query_load_average());// if( remote ) return str; 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(object me){write(@HELP指令格式 : who [-l|-i|-w|-p]这个指令可以列出所有在线上的玩家及其等级。-l 选项列出较长的讯息。-i 只列出玩家的英文代号。-p 只列出同门的玩家。-w 只列出线上所有的巫师。相关指令: fingerHELP ); return 1;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?