#include <ansi.h>

string *par=({
		"nickname",
		"id",
		"name",
});

int ok_id(string id);
int ok_name(string name);
string replace(string value);

inherit F_CLEAN_UP;
inherit F_BH;

int main(object me, string arg)
{
	string banghui,someone,something;
	string value;
	object ob;
	
	mapping data;
	if(! arg)
		return notify_fail("modify <某人> <参数> to <某值>\n");
	if(sscanf(arg,"%s %s to %s",someone,something,value)!=3)
		return notify_fail("modify <某人> <参数> to <某值>\n");
	if(! (ob=present(someone,environment(me))))
		return notify_fail("这儿没有这么个人。\n");
	if(! ob->is_character())
		return notify_fail("你只能对「人」进行参数修改。\n");
	if( userp(ob))
		return notify_fail("你不能修改玩家的参数。\n");
	if(! is_bangzhu(me))
		return notify_fail("只在帮主才能使用这条命令。\n");
	if(ob->query("banghui")!= me->query("banghui"))
		return notify_fail("你只能修改本帮会的帮众数据。\n");
	if(member_array(something,par)==-1)
		return notify_fail("没有这项参数。\n");
	if(! data=ob->get_npc_data())
		return notify_fail("NPC文件丢失，请与巫师联系。\n");
	if(something=="id")	{
		if(! ok_id(value))	return 1;
	}
	if(something=="name"||something=="nickname")	{
		if(! ok_name(value))	return 1;
		if(something=="nickname")	{
			value=replace(value);
			value+=NOR;
		}
	}
	data[something]=value;
	if(! ob->set_npc_data(data,0))
		return notify_fail("NPC参数设置有误，请与巫师联系。\n");
	if(! ob->save_npc_data(data))
		return notify_fail("NPC文件写入有误，请与巫师联系或稍侯再试。\n");
	write(ob->query("name")+"参数修改成功。\n");
	return 1;
}

int ok_id(string id)
{
	int i;
	i=strlen(id);
	        if( (strlen(id) < 3) || (strlen(id) > 10 ) ) {
			write("请把ID值保持在3至10个。\n");
			return 0;
		}
        while(i--)
                if( id[i]<'a' || id[i]>'z' ) {
			write("请用英文指定id。\n");
			return 0;
		}
	return 1;
}

int ok_name(string name)
{

	if( (strlen(name) < 4) || (strlen(name) > 20 ) )	{
		write("此值太长或太短，请重新设置。\n");
		return 0;
	}
	return 1;
}

string replace(string arg)
{
        arg = replace_string(arg, "$BLK$", BLK);
        arg = replace_string(arg, "$RED$", RED);
        arg = replace_string(arg, "$GRN$", GRN);
        arg = replace_string(arg, "$YEL$", YEL);
        arg = replace_string(arg, "$BLU$", BLU);
        arg = replace_string(arg, "$MAG$", MAG);
        arg = replace_string(arg, "$CYN$", CYN);
        arg = replace_string(arg, "$WHT$", WHT);
        arg = replace_string(arg, "$HIR$", HIR);
        arg = replace_string(arg, "$HIG$", HIG);
        arg = replace_string(arg, "$HIY$", HIY);
        arg = replace_string(arg, "$HIB$", HIB);
        arg = replace_string(arg, "$HIM$", HIM);
        arg = replace_string(arg, "$HIC$", HIC);
        arg = replace_string(arg, "$HIW$", HIW);
        arg = replace_string(arg, "$NOR$", NOR);
	return arg;
}

int help(object me)
{
        write(@HELP
指令格式：modify <某人> <参数> to <数值>
这个指令可以让帮主修改本帮会NPC帮众的参数。
id	修改NPC的id
name	修改NPC的名字
nickname修改NPC的纠号
其中在name与nickname中可以使用颜色控制符。
有关颜色控制符的说明请help nick。
HELP
        );
        return 1;
}

