⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chanrao.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
//Cracked by Kafei// chanrao.c 《九阴真经》鞭法-「缠绕」// xQin 8/99/*周芷若鞭法奇幻,三招间便已将他圈住,俞莲舟适才竭尽全力,竟然无法从她的鞭圈中脱出,心下好生骇异。*/#include <ansi.h>#include <combat.h>inherit F_SSERVER;int perform(object me, object target){	string msg, attack_skill, dodge_skill;	int ap, dp, wp, rate;	int whip, dodge, busy_time, random_factor;	object weapon, weapon2;	mapping prepare;	if( !target ) target = offensive_target(me);	if( !target || !target->is_character() || !me->is_fighting(target) )		return notify_fail("只能在战斗中施展「缠绕」。\n");	if( !living(target) )		return notify_fail("你现在不必使用「缠绕」。\n");	if( !me->query_temp("weapon") || (weapon = me->query_temp("weapon"))->query("skill_type") != "whip" )		return notify_fail("你手中并无趁手的兵器,如何施展「缠绕」?\n");	if( me->query_temp("yield") )		return notify_fail("你不出招,何以「缠绕」?\n");	if( me->query_temp("jiuyin_chanrao/"+target->name()) )		return notify_fail(target->name() +"已经被缠绕在鞭圈中了。\n");	if( (whip = (int)me->query_skill("whip")) < 200 )		return notify_fail("你的鞭法不够娴熟,施展不出「缠绕」。\n");	if( me->query("neili") <= 500 )		return notify_fail("你现在的内力不足以抖鞭成圈!\n");	if( me->query("jing") < 100 )		return notify_fail("你现在的体力不足以抖鞭成圈!\n");	me->add("neili", -200);	me->add("jing", -40);	msg = HIG"\n$N突然间$W"HIG"抖动,绕成一个个大大小小的圈子,眼看要将$n裹在其间。\n"NOR;	ap = COMBAT_D->skill_power(me, "whip", SKILL_USAGE_ATTACK);	if( ap < 1 ) ap = 1;	dp = COMBAT_D->skill_power(target, "dodge", SKILL_USAGE_DEFENSE);	if( dp < 1 ) dp = 1;        if( random(ap + dp) < dp )        {		dodge_skill = target->query_skill_mapped("dodge");		if( !dodge_skill ) dodge_skill = "轻功";		else dodge_skill = to_chinese(dodge_skill);		if( dp > ap*2 )			msg += CYN"$p瞧出厉害,当下施展"+ dodge_skill +"向後滑出丈许,脱出$W"CYN"所绕的鞭圈范围。\n"NOR;		else if( dp < ap*2/3 )			msg += CYN"$p心下大骇,急忙竭尽全力施展"+ dodge_skill +",好不容易从$W"CYN"所绕的鞭圈中脱出。\n"NOR;		else	msg += CYN"$p心下一惊,立时提气纵跃,施展"+ dodge_skill +"自$W"CYN"所绕的鞭圈之中脱困而出。\n"NOR;		me->start_busy(1+random(3));	}	else	{		msg += WHT"$p$w"WHT"上劲力被$P这么一带,登时身不由主,连转了几个身";		if( objectp(weapon2 = target->query_temp("weapon")) )		{			ap = (int)me->query("neili") / 10				+ whip + (int)me->query_skill("force");			dp = (int)target->query("neili") / 10				+ (int)target->query_skill("parry")				+ (int)target->query_skill("force");			switch( weapon2->query("skill_type") )			{				case "bow"    : wp = 1; break;				case "whip"   : wp = 1; break;				case "sword"  : wp = 2; break;				case "hook"   : wp = 2; break;				case "blade"  : wp = 2; break;				case "pike"   : wp = 3; break;				case "stick"  : wp = 3; break;				case "club"   : wp = 3; break;				case "staff"  : wp = 4; break;				case "axe"    : wp = 5; break;				case "hammer" : wp = 5; break;				default       : wp = 3; break;			}			rate = 11/8;			if( (ap>=dp) && ((random(ap-dp)+wp)*rate > wp) ) 			{				msg += ",$w"WHT"脱手上扬。\n"NOR;				weapon2->unequip();				weapon2->move(environment(target));				target->reset_action();			}			else msg += "。\n"NOR;		}		else msg += "。\n"NOR;		target->start_busy(2);		target->set_temp("guarding", 0);		if( !me->query_temp("guarding") )                	me->set_temp("guarding", 1);		dodge = target->query_skill("dodge");		busy_time = (int)whip/8 - (int)dodge/10 + 1;		if( busy_time < (int)whip/60 ) busy_time = (int)whip/60;		if( busy_time > (int)whip/20 ) busy_time = (int)whip/20;		if( wizardp(me) ) tell_object(me, sprintf("\nbusy time: %d, ", busy_time));		random_factor = busy_time/5;		if( random_factor > 6 ) random_factor = 6;		if( random_factor < 2 ) random_factor = 2;		switch( random(2) )		{			case 0 : busy_time += random(random_factor); break; 			case 1 : busy_time -= random(random_factor); break;		}		if( wizardp(me) )			tell_object(me, sprintf("random factor: %d, new busy time: %d", random_factor-1, busy_time));		me->delete_temp("jiuyin_chanrao");		me->add_temp("jiuyin_chanrao/"+target->name(), busy_time);		remove_call_out("jiuyin_chanrao");		call_out("jiuyin_chanrao", 1, me, target, weapon);	}	msg = replace_string(msg, "$W", weapon->name());	if( objectp(weapon2) )		msg = replace_string(msg, "$w", weapon2->name());	else 	{		prepare = target->query_skill_prepare();		if( !prepare ) prepare = ([]);		switch( sizeof(prepare) )		{			case 0: attack_skill = "unarmed"; break;			case 1: attack_skill = (keys(prepare))[0]; break;			case 2: attack_skill = (keys(prepare))[random(2)]; break;		}		switch( attack_skill )		{			case "strike" :	msg = replace_string( msg, "$w", "掌" ); break;			case "cuff" :	msg = replace_string( msg, "$w", "拳" ); break;			case "claw" :	msg = replace_string( msg, "$w", "爪" ); break;			case "finger" :	msg = replace_string( msg, "$w", "指" ); break;			case "hand" :	msg = replace_string( msg, "$w", "手" ); break;			case "kick" :	msg = replace_string( msg, "$w", "脚" ); break;			default :	msg = replace_string( msg, "$w", "拳脚" ); break;		}	}	message_vision(msg, me, target);	return 1;}void jiuyin_chanrao(object me, object target, object weapon){	if( !me ) return;	if( !living(me) || me->is_ghost() || me->query("neili") <= 100 )	{		me->delete_temp("jiuyin_chanrao");		return;	}	if( weapon != me->query_temp("weapon") && living(target) )	{		me->delete_temp("jiuyin_chanrao");		message_vision("\n$N手中"+ weapon->name() +"一失,$n顿感压力骤减,终於能自圈中脱出。\n", me, target);		return;	}	if( !me->is_fighting(target) ) 	{		me->delete_temp("jiuyin_chanrao");		message_vision("$N忽地"+ weapon->name() +"一抖,收了回来。\n", me);		return;	}	if( me->query_skill_mapped("whip") != "feiyu-bian" )	{		me->delete_temp("jiuyin_chanrao");		message_vision(HIG"\n$N一抖"+ weapon->name() +HIG",鞭法忽变!\n"NOR, me);		return;	}	if( !me->query_temp("jiuyin_chanrao") && living(target) )	{		message_vision("\n$n竭尽全力,终於从$N的鞭圈中脱出。\n", me, target);		return;	}	call_out("jiuyin_chanrao", 1, me, target, weapon);}

⌨️ 快捷键说明

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