purge.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 99 行
C
99 行
// purge.c#include <ansi.h>#define SYNTAX "指令格式:purge [<未上线天数>] | <使用者姓名> because <原因>\n"inherit F_CLEAN_UP;int do_purge_players(int day);int main(object me, string arg){ string name, reason; string status; int day; status = wizhood(me); if( me!=this_player(1) || wiz_level(me) < wiz_level(status) ) return notify_fail("你没有权力使用这个指令。\n"); if( !arg ) return notify_fail(SYNTAX);if( sscanf(arg, "%d", day) && day < 30) return notify_fail("你没有权力删除30天以下的玩家。\n"); if( sscanf(arg, "%d", day) && day >= 0) return do_purge_players(day); if( sscanf(arg, "%s because %s", name, reason)!=2 ) return notify_fail(SYNTAX); seteuid(getuid()); if( file_size(DATA_DIR + "login/" + name[0..0] + "/" + name + SAVE_EXTENSION)<0 ) return notify_fail("没有这位使用者。\n"); rm(DATA_DIR + "login/" + name[0..0] + "/" + name + SAVE_EXTENSION); rm(DATA_DIR + "user/" + name[0..0] + "/" + name + SAVE_EXTENSION); rm(DATA_DIR + "mail/" + name[0..0] + "/" + name + SAVE_EXTENSION); write( "使用者 " + capitalize(name) + " 删除掉了。\n"); log_file("static/PURGE", sprintf("[%s] %s purged %s because %s.\n", ctime(time())[0..15], geteuid(this_player(1)), name, reason)); return 1;}int do_purge_players(int day){ int i, j, ppl_cnt, count; string *dir, *ppls, name; mixed info; if (day < 30) day=30; seteuid(getuid()); message("system", "\n*** 整理玩家储存档中,请稍候.... ***\n", users()); write("处理中:"); count = 0; ppl_cnt = 0; dir = get_dir(DATA_DIR + "login/"); for(i=0; i<sizeof(dir); i++) { reset_eval_cost(); write(dir[i]); ppls = get_dir(DATA_DIR + "login/" + dir[i] + "/"); ppl_cnt += sizeof(ppls); for(j=0; j<sizeof(ppls); j++) { if( sscanf(ppls[j], "%s.o", name)==1 ) if( (string)SECURITY_D->get_status(name)!="(player)" ) continue; if( !sscanf(ppls[j], "%s.o", name)==1 ) continue; info = stat(DATA_DIR + "login/" + dir[i] + "/" + ppls[j]); if( (time()-(int)info[1])/86400 >= day ) { rm(DATA_DIR + "login/" + dir[i] + "/" + ppls[j]); rm(DATA_DIR + "user/" + dir[i] + "/" + ppls[j]); rm(DATA_DIR + "mail/" + dir[i] + "/" + ppls[j]); count ++; } } } write("\n\n原来总共有 " + ppl_cnt + " 位使用者。\n"); write( count + " 个超过 " + day + " 天未上线的使用者被清除掉了。\n"); write("现在总共有 " + (ppl_cnt - count) + " 位使用者。\n"); log_file("static/PURGE", sprintf("[%s] %s cleaned up %d characters who didn't login for more than %d days\n" "\t\tResulting statistics: %d characters remaining.\n", ctime(time())[0..15], geteuid(this_player(1)), count, day, ppl_cnt - count)); return 1;}int help(object me){write(@HELP指令格式:purge [<未上线天数>] | <使用者姓名> because <原因>清除一个使用者或清除超过一定天数不曾上线地使用者。HELP ); return 1;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?