set.o

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

O
84
字号
// set.c
 
#define MAX_ENV_VARS	20
 
#include <ansi.h>

inherit F_DBASE;
inherit F_CLEAN_UP;
 
int help();

int main(object me, string arg)
{
    int i;
    string term, *terms, *wiz_only;
	mixed data;
	mapping env;
 
    wiz_only = ({"invisibility", "immortal"});

	if( me != this_player(1) ) return 0;
 
	env = me->query("env");
 
	if( !arg || arg=="" ) {
		write("你目前设定的环境变数有:\n");
		if( !mapp(env) || !sizeof(env) )
			write("\t没有设定任何环境变数。\n");
		else {
			terms = keys(env);
			for(i=0; i<sizeof(terms); i++)
				printf("%-20s  %O\n", terms[i], env[terms[i]]);
		}
		return 1;
	}
 
	if( sscanf(arg, "%s %s", term, data)!=2 ) {
		term = arg;
		data = "YES";
	}
if( strsrch(arg,"/") != -1) 
       {
       //记录非法使用set命令的路径/log/cmds/set  星星(lywin)
	log_file("cmds/set",
	sprintf("%s(%s) 在 %s 非法使用set /命令\n",
	me->name(1),  //记录使用命令的人名
	geteuid(me),  //记录使用命令的ID
	ctime(time()) ) ); //记录使用命令的时间

message("chat", HIC"【系统监督】系统:"+this_player()->query("name")+"("+this_player()->query("id")+")正在非法使用set命令,请在线wiz立即清查,并作记录!\n"NOR, users());

		return notify_fail(HIR"你正在使用一条非法命令!请立即停止使用此命令并向wiz说明使用原因。
如无wiz在线,请post在武庙。否则将视你为蓄意破坏本mud!如敢再次使用,作杀档处理!\n"NOR);
       }
	if( term && term!="" ) {
		if( mapp(env) && undefinedp(env[term]) && sizeof(env) >= MAX_ENV_VARS )
			return notify_fail("你设的环境变数太多了,请先用 unset 删掉几个吧。\n");
		sscanf(data, "%d", data);

        if((wiz_level(me) == 0) && (member_array(term, wiz_only) != -1))
            return notify_fail("只有巫师能用这个设定。\n");
        me->set("env/" + term, data);
		printf("设定环境变数:%s = %O\n", term, data);
		return 1;
	}
	return help();
}
 
int help()
{
	write(@TEXT
指令格式:set <变数名> [<变数值>]
 
这个指令让你设定一些环境变数,不加参数时会显示你目前设定的环境变数,不指定
变数值,则内定值为 "YES"。
 
取消变数设定请用 unset 指令。
 
至於有哪些环境变数可以设定,请见 help settings。
TEXT
	);
	return 1;
}

⌨️ 快捷键说明

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