combatd.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,195 行 · 第 1/4 页

C
1,195
字号
	me->kill_ob(obj);}// This function is to announce the special events of the combat.// This should be moved to another daemon in the future.void announce(object ob, string event){// 比武现场转播 start//	player=users();// 比武现场转播 end	switch(event) {		case "dead":message_vision( NOR"\n$N「啪」地一声倒在地上,嘴角溢出几丝鲜血,痛苦的挣扎了几下就死了。\n\n" NOR, ob);// 比武现场转播 start//			if ((string)environment(ob)->query("short") == "擂台")//			for (userno=0; userno<sizeof(player); userno++)//			    if ((player[userno])->query_temp("view_leitai"))//				tell_object(player[userno], "\n"+ob->name()+"「啪」地一声倒在地上,嘴角溢出几丝鲜血,痛苦的挣扎了几下就死了。\n");// 比武现场转播 end			break;		case "unconcious":			message_vision("\n$N脚下一个不稳,跌在地上一动也不动了。\n\n", ob);// 比武现场转播 start//			if ((string)environment(ob)->query("short") == "擂台")//			for (userno=0; userno<sizeof(player); userno++)//			    if ((player[userno])->query_temp("view_leitai"))//				tell_object(player[userno], "\n"+ob->name()+"脚下一个不稳,跌在地上一动也不动了。\n\n");// 比武现场转播 end			break;		case "revive":		        if(ob->query("blind") || ob->query("race") != "人类")			     message_vision("\n$N身子一颤,扭动了几下,清醒了过来。\n\n", ob);			else if(ob->query("mute"))			     message_vision("\n$N慢慢清醒了过来,睁开眼睛站起来摇了摇头。\n\n", ob);			else message_vision("\n$N身子动了动,口中呻吟了几声,清醒过来。\n\n", ob);// 比武现场转播 start//			if ((string)environment(ob)->query("short") == "擂台")//			for (userno=0; userno<sizeof(player); userno++)//			    if ((player[userno])->query_temp("view_leitai"))//				tell_object(player[userno], "\n"+ob->name()+"慢慢睁开眼睛,清醒了过来。\n\n");// 比武现场转播 end			break;	}}void winner_reward(object killer, object victim){	killer->defeated_enemy(victim);}void killer_reward(object killer, object victim){	int gain,gain1;	int bls,zhenfa=0;	object env;	string vmark;	string temp;	string str,killerid;	string msg="莫名其妙的死了。";	mapping quest, actions;	int exp, pot, score, bonus,factor;	int student_num;	// Call the mudlib killer apply.	killer->killed_enemy(victim);	env = environment(victim);	if(objectp(env))	if ( env->query("no_death_penalty")) 	{	victim->set_temp("no_death_penalty",1);	return;	}if (env && environment(victim)->query("no_fight")&& killer){log_file("log", "在NF的ROOM发生死亡:" + base_name(environment(victim)) +"\n", 1);log_file("log", "造成人物" + killer->query("id") + killer->query("name")+"\n", 1);}if (killer){killer->remove_all_enemy(victim);killer->remove_all_killer(victim);if (killer->query("id")=="xun bu"){killer->remove_all_enemy();killer->remove_all_killer();}}	if( userp(victim)) 	{/*		if (userp(killer) && killer->query_condition("killer")){        	killer->add("qiushi/times",1);		killer->add("qiushi/totaltime",killer->query("qiushi/howlong"));		killer->set("qiushi/inage",killer->query("mud_age"));        	killer->set("startroom","/d/death/qiushi");                killer->set("qiushi/howlong",180);                killer->move("/d/death/qiushi");		killer->apply_condition("killer", 360 +			killer->query_condition("killer"));		CHANNEL_D->do_channel(this_object(), "rumor",		sprintf("通缉犯%s被关进了囚室。", killer->name(1), killer->name()));}*/		if ( victim->query_condition("killer") && userp(killer))		zhenfa=1;		else if(!victim->is_killing(killer->query("id")))		{		killer->add("PKS", 1);		if (userp(killer)){//		killer->apply_condition("killer", 120 +//			killer->query_condition("killer"));					if (killer->query_temp("kill_other/"+victim->query("id"))) {						CHANNEL_D->do_channel(this_object(), "rumor",							sprintf("%s被%s杀害了。", victim->name(1), killer->name()));						killer->apply_condition("killer",							120 + killer->query_condition("killer") * 3 / 2);					} else if (victim->query_temp("kill_other/"+killer->query("id")))						CHANNEL_D->do_channel(this_object(), "rumor",							sprintf("%s被%s正当防卫杀死了。",								victim->name(1), killer->name()));					else {						CHANNEL_D->do_channel(this_object(), "rumor",							sprintf("%s失手把%s杀死了。",								killer->name(), victim->name(1)));						killer->apply_condition("killer",							120 + killer->query_condition("killer"));					}					killer->delete_temp("kill_other/"+victim->query("id"));					victim->delete_temp("kill_other/"+killer->query("id"));					killer->delete_temp("other_kill/"+victim->query("id"));					victim->delete_temp("other_kill/"+killer->query("id"));}		}if (killer->query("id")=="xun bu"){killer->remove_all_enemy();killer->remove_all_killer();}victim->remove_all_enemy();victim->remove_all_killer();if (!victim->query_condition("killer")){		victim->clear_condition();}	   // CHANNEL_D->do_channel(this_object(), "rumor",str);		victim->add("shen", -(int)victim->query("shen") / 10);		if (victim->query("combat_exp")>1200000){		if (victim->query("max_neili")>1000)		{			victim->add("max_neili", -50);		}}		if (victim->query("combat_exp")>500000 ||		victim->query_condition("killer")){		victim->clear_condition();		victim->add("combat_exp", -(int)victim->query("combat_exp") / 200);		if( (int)victim->query("potential") > (int)victim->query("learned_points"))		victim->add("potential",		((int)victim->query("learned_points") - (int)victim->query("potential"))/5 );		victim->skill_death_penalty();}		victim->delete("vendetta");		if( victim->query("thief") )		victim->set("thief", (int)victim->query("thief") / 2);                victim->set("killbyname",killer->query("name"));		victim->save();		bls = 10;		if(objectp(killer))		{			msg="被"+killer->name(1);			actions = killer->query("actions");			switch(actions["damage_type"]) {			case "擦伤":		    case "割伤":				msg+="砍死了。";				break;			case "刺伤":				msg+="刺死了。";				break;			case "瘀伤":				msg+="击死了。";				break;			case "内伤":				msg+="震死了。";				break;			default:				msg+="杀死了。";			}		}		if (zhenfa==1){		victim->apply_condition("killer", 0);		CHANNEL_D->do_channel(this_object(), "rumor",		sprintf("通缉犯%s被%s就地正法了。", victim->name(1), killer->name()));                if (victim->query("combat_exp") > 800000){                killer->add("score",300);		CHANNEL_D->do_channel(this_object(), "rumor",		sprintf("%s的江湖阅历提高了!!。",  killer->name()));}}		else {		if ( victim->query_condition("killer")){                victim->apply_condition("killer", 0);		}		CHANNEL_D->do_channel(this_object(), "rumor",sprintf("%s"+msg, victim->name(1)));		//官府开始通辑罪犯!		write_file("/log/static/KILLRECORD",sprintf("%s   杀死了   %s on %s\n", killer->name(1),victim->name(1), ctime(time()) ));}	} else {		killer->add("MKS", 1);		bls = 1;	}	if (userp(killer) && killer->query("combat_exp") < victim->query("combat_exp"))	killer->add("shen", -(int)victim->query("shen") / 10);	if( stringp(vmark = victim->query("vendetta_mark")) )		killer->add("vendetta/" + vmark, 1);	if(     ( (int)killer->query("combat_exp") < victim->query("combat_exp"))		&& (victim->query_condition("sexman")))	{		tell_object(killer,"恭喜你!你为武林除了一害!\n");		exp = 100 + random(500);		pot = 50 + random(100);		score = 50 + random(100);                killer->add("combat_exp",exp);                killer->add("potential",pot);                killer->add("score",score);                killer->add("shen",50);		tell_object(killer,HIW"你被奖励了:" +        	chinese_number(exp) + "点实战经验,"+        	chinese_number(pot) + "点潜能," +        	chinese_number(score)+"点江湖阅历。\n" NOR);		killer->set("quest", 0 );	}// 下面是杀人任务 	if (userp(victim))	{		return;	}	if( interactive(killer) && (quest = killer->query("quest"))		&& (quest["quest_type"]=="杀")		&& ( (int)killer->query("task_time") >= time())		&&(quest["quest"]==victim->query("name")))	{		tell_object(killer,"恭喜你!你又完成了一项任务!\n");		exp = quest["exp_bonus"]/2 + random(quest["exp_bonus"]/2);		pot = quest["pot_bonus"]/2 + random(quest["pot_bonus"]/2);		score = quest["score"]/2 + random(quest["score"]/2);		factor=victim->query("quest_factor");		if (factor)		{			exp=exp*factor/10;			pot=pot*factor/10;			score=score*factor/10;		}		bonus = (int) killer->query("combat_exp");		bonus += exp;		killer->set("combat_exp", bonus);		bonus = (int) killer->query("potential");		bonus = bonus - (int) killer->query("learned_points");		bonus = bonus + pot;//		if( bonus > 100000) bonus = 100000;		bonus += (int)killer->query("learned_points");		killer->set("potential", bonus );		bonus = (int)killer->query("shen");		if(bonus >= 0)			bonus += score;		else			bonus -= score;		killer->set("shen", bonus);             killer->add("score",score);		tell_object(killer,HIW"你被奖励了:" +        	chinese_number(exp) + "点实战经验,"+        	chinese_number(pot) + "点潜能," +        	chinese_number(score)+"点江湖阅历。\n" NOR);		killer->set("quest", 0 );	}}//杀坏人mapping query_action(){        return combat_action[random(sizeof(combat_action))];}

⌨️ 快捷键说明

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