juemie.c

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

C
258
字号
// juemie 灭星绝
#include <ansi.h>
#include <skill.h>
#include <weapon.h>
#include <combat.h>


inherit F_SSERVER;
 
int perform(object me, object target)
{
        object weapon, ob;
        string msg, string1;
        int extra;
        int count;
                int damage;
int finger, skill, jiali, my_rate, your_rate, neili_cost, jingli_cost;
 	if( !target ) target = offensive_target(me);

        if( !me->is_fighting() )
                return notify_fail("只能在战斗中使用。\n");
 
        if (!objectp(weapon = me->query_temp("weapon"))
        || (string)weapon->query("skill_type") != "sword")
                return notify_fail("开始时必须拿着一把剑!\n");

	if(me->is_busy())
		return notify_fail("你现在没空!!\n");

	if( (int)me->query("neili") < 2000  ) 
		return notify_fail("你的内力不够。\n");

	if( (int)me->query("neili") < me->query("max_neili")/7+200 ) 
		return notify_fail("你的内力不够。\n");

       if( !wizardp(me) &&(int)me->query_skill("jinding-zhang", 1) < 500 )
		return notify_fail("你的本门外功不够!不能贯通使用!\n");

	if(!wizardp(me) && (int)me->query_skill("huifeng-jian", 1) < 500 )
		return notify_fail("你的本门外功不够高!不能贯通使用!\n");

	if(!wizardp(me) && (int)me->query_skill("linji-zhuang", 1) < 500 )
		return notify_fail("你的本门内功不够高!不能贯通使用!\n");

	if(!wizardp(me) && (int)me->query_skill("jiuyin-zhengong", 1) )
		return notify_fail("你的杂学太多,无法对本门武功贯通使用!\n");

        if (!wizardp(me) && !me->query("guard/flag"))
		return notify_fail("你的江湖经验还不够,无法对本门武功贯通使用!\n");

        if (!wizardp(me) && !me->query("guard/ok"))
		return notify_fail("你还没有通过华山论剑! 无法对本门武功贯通使用!\n");

        if ( !wizardp(me) && me->query_skill_mapped("force") != "linji-zhuang")
                return notify_fail("不使用本门内功,如何使用本门绝学!\n");


        msg = HBWHT "$N贯通峨嵋派武学,使出了峨嵋派的绝学之精髓!\n" NOR;
	me->add("neili", -me->query("max_neili")/7);
        message_vision(msg, me, target);          

	extra = me->query_skill("huifeng-jian",1) / 15;
	extra += me->query_skill("linji-zhuang",1) /15;
 
        msg = YEL "$N使出回风拂柳剑绝技「一剑化三清」,一招连环三剑,手中的"+ weapon->name()+  "闪电般攻出第一剑!" NOR;
        message_vision(msg, me);

        me->add_temp("apply/attack", extra*2);
        me->add_temp("apply/damage", extra*4);
        msg = HIY "只见$N右手一抖,"+ weapon->name()+ HIY"划向$n的左肩!" NOR;
               COMBAT_D->do_attack(me,target, me->query_temp("weapon"),TYPE_REGULAR,msg);
        if (me->query("combat_exp")> target->query("combat_exp")/3 )
        {                
        msg = HIW "第一道剑气"+HIR+"击向$n周身,$n只觉得全身气脉通道阻塞,真气立受干挠!\n"NOR;   
        message_vision(msg, me, target);
  if( !target->is_busy() )
{
        target->start_busy(2);
}
        }
        msg =  HIW "$N凌空一劈,"+ weapon->name()+ GRN"削向$n的右肩!" NOR;
             	COMBAT_D->do_attack(me,target, me->query_temp("weapon"),TYPE_REGULAR,msg);
        if (me->query("combat_exp")> target->query("combat_exp")/3 )
        {                
        msg = HIC "第二道剑气"+HIM+"扫中$n的身上,$n只觉得全身一阵急痛!\n"NOR;   
                message_vision(msg, me, target);
        target->add("jing",-extra);
        target->add("eff_jing",-extra);
        }
        msg = CYN "$N长啸一声,聚功力于左手,使出剑法的最高境界--灭剑,朝$n的胸前劈去!" NOR;
        COMBAT_D->do_attack(me,target, me->query_temp("weapon"),TYPE_REGULAR,msg);
        if (me->query("combat_exp")> target->query("combat_exp")/3 )
        {                
        msg = MAG "最后一道剑气"+HIB+"扫中$n的章门穴,$n只觉得全身内力提不起来了!\n"NOR;   
        message_vision(msg, me, target);
        target->add("neili",-extra*4);
        target->add("eff_neili",-extra*4);
        }
        me->add_temp("apply/attack", - extra*2);
        me->add_temp("apply/damage", - extra*4);
        me->start_busy(4);

        msg = YEL "$N手中长剑剑芒跃动,剑光暴长,幻出死亡的色彩,剑尖渐渐逼近$n,\n"NOR;
        msg += YEL"$n看到漫天剑光,抽身后跃,只这一刹,漫天剑影化为一剑直刺$n前胸,"NOR;

	if( weapon = target->query_temp("weapon") ){
        if( random(me->query("combat_exp"))+5000 > target->query("combat_exp")/2) {  
    msg += HIM"\n$p只觉得浑身一热,手掌虎口巨痛,手中"
                + target->query_temp("weapon")->query("name") + "脱手而出。\n" NOR;
		message_vision(msg, me, target);
		(
		target->query_temp("weapon"))->move(environment(target));
	} else {
    msg += HIY"\n$p危急中突然伏地翻滚而出,避过了这致命一击,已吓得脸色苍白!\n" NOR;
		message_vision(msg, me, target);
          message_vision(HIW "但$N飘身而起,使出峨嵋绝技「灭剑」心法,顿时剑意空灵飘逸,似万千柳絮飞舞,又如和风阵阵
拂过。$n惊骇之下,顿时出招散乱,无从招架!\n" NOR, 
                         me, target);
	}
        }
        else
        {
        if (random(me->query_skill("force")) > target->query_skill("force")/2 
        || random(me->query("combat_exp"))+5000 > target->query("combat_exp")/3 )
	{
		
		damage = (int)me->query_skill("huifeng-jian", 1);
		
		damage = damage*4 + random(damage);
		
		target->receive_damage("qi", damage);
		target->receive_wound("qi", damage);
		
		if( damage < 300 ) msg += HIY"\n结果$n脸色被一剑击中,昏昏沉沉接连退了好几步!\n"NOR;
        	else if( damage < 400 ) msg += HIY"\n结果一剑击中,$n「哇」地一声吐出一口鲜血!\n"NOR;
        	else if( damage < 500 ) msg += RED"\n结果「轰」地一声,一剑穿心,$n全身气血倒流,口中鲜血狂喷而出!\n"NOR;
        	else msg += HIR"\n结果只听见几声喀喀轻响,一剑穿心,$n一声惨叫,像滩软泥般塌了下去!!\n"NOR;
		
	} else 
	{
    msg += HIY"\n$p危急中突然伏地翻滚而出,避过了这致命一击,已吓得脸色苍白!\n" NOR;
	message_vision(msg, me, target);
            message_vision(HIW "但$N飘身而起,使出峨嵋绝技「灭剑」心法,顿时剑意空灵飘逸而,似万千柳絮飞舞,又如和风阵阵
拂过。$n虽已加倍提防,但仍感攻势频频收挫。\n" NOR, 
me, target);
        target->add("jing",-extra);
        target->add("eff_jing",-extra/2);
        target->add("qi",-extra);
        target->add("eff_qi",-extra/2);
	}
	message_vision(msg, me, target);

        }
 msg = HIY "\n$N突然间全身骨骼中发出劈劈拍拍的轻微爆裂之声,炒豆般的响声未绝,右掌已向$n胸口击去。\n\n"NOR;
  msg += HIG"这一掌是峨嵋派的绝学,叫做“佛光普照”。这“佛光普照”的掌法便只一招,而且这\n";
  msg += HIG"一招也无其他变化,招式平平淡淡,一成不变,可是其威力之生,就在于以峨嵋派绝顶\n";
  msg += HIG"内功作为根基。一掌既出,内力如排山倒海一般袭来,敌人挡无可挡,避无可避。\n\n";

// because hy2 can not jiajin, so update jiajin to jiali (by xbd)
  if( random( me->query("combat_exp") ) > random( target->query("combat_exp")*2 ) || !living(target) )
  {
                        damage = random(  me->query_skill("force") + me->query_skill("strike") + me->query("jiali") )*( 1 + random(me->query("jiali")/5) ) ;
                        if(damage > 3100) damage = 3100;
                        if(damage < 500) damage = 500;
//                        me->add("jing", -me->query("jiajin")/2);

                        target->receive_damage("qi", damage,  me);
                        target->receive_wound("qi", random(damage), me);

                msg += HIR"猛听得砰然一声大响,$N已打中在$p胸口.\n"NOR;
                if ( damage < 400) {
                        msg += HIC"$n身子一晃,立足不定,差点儿就要摔倒。\n"NOR;
                }else if ( damage < 600) {
                        msg += HIR"$n向后接连摔了两个筋斗,哇的一声,喷出一口鲜血。\n"NOR;
                }else if ( damage < 1000) {
                        msg += YEL"$n哇的一声,喷出一口鲜血,委顿在地,便似一堆软泥。\n"NOR;
                }else if ( damage < 2000) {
                        msg += RED"$n身子便如一捆稻草般,在空中平平的飞了出去,重重摔在地下,口中鲜血狂喷.\n"NOR;
                }else if ( damage < 3000) {
                        msg += RED"只听一声巨响,$n口中鲜血狂喷,全身骨骼碎裂。\n"NOR;
                }else {
                        msg += RED"只听一声巨响,$n全身骨骼碎裂,竟被这排山倒海般的一击将身子打成了两截。\n"NOR;
                }
                msg += NOR;
  }
  else if( random( me->query("combat_exp")*2 ) > random( target->query("combat_exp") )
                                &&  random(target->query_skill("dodge")) < random( me->query_skill("strike") )  )
  {
                        damage = random(  me->query_skill("force") + me->query_skill("strike") + me->query("jiali") )*( 1 + random(me->query("jiali")/5) ) ;
                        damage = damage / 2;
                        if(damage > 2000) damage = 2000;
                        if(damage < 350) damage = 350;

//                        me->add("jing", -me->query("jiajin")/2);

                        target->receive_damage("qi", damage,  me);
                        target->receive_wound("qi", random(damage), me);

                        msg += HIY"$p眼看这一招来势汹汹,知道难于对付,连忙发力抵抗,猛听得砰然一声大响,$N已打中在$p胸口.\n"NOR;
                if ( damage < 400) {
                        msg += HIC"$n身子一晃,立足不定,差点儿就要摔倒。\n"NOR;
                }else if ( damage < 600) {
                        msg += HIR"$n向后接连摔了两个筋斗,哇的一声,喷出一口鲜血。\n"NOR;
                }else if ( damage < 1000) {
                        msg += RED"$n哇的一声,喷出一口鲜血,委顿在地,便似一堆软泥。\n"NOR;
                }
                else msg += RED"$n身子便如一捆稻草般,在空中平平的飞了出去,重重摔在地下,口中鲜血狂喷.\n"NOR;

                msg += NOR;
                target->add( "neili", -damage/4 );
  }
  else if( random( me->query("combat_exp")*2 ) > random( target->query("combat_exp") ) &&
          random( target->query_skill("dodge")*2 ) > random( me->query_skill("strike") ) )
  {
                        damage = random(  me->query_skill("force") + me->query_skill("strike") + me->query("jiali") )*( 1 + random(me->query("jiali")/5) ) ;
                        damage = damage / 3;
                        if(damage > 1000) damage = 1000;
                        if(damage < 250) damage = 250;

//                        me->add("jing", -me->query("jiajin")/2);

                        target->receive_damage("qi", damage,  me);
                        target->receive_wound("qi", random(damage), me);

                        msg += HIM"$p眼看这一招来势汹汹,慌忙使出本门身法,向侧跃出数丈,可是这佛光普照蕴藏峨眉内家上乘内功,\n";
                        msg += "方圆数丈都被神功所震撼,$p只觉得后心一震,已被劈空掌力所伤.\n"NOR;
                if ( damage < 400) {
                        msg += HIC"$n身子一晃,立足不定,差点儿就要摔倒。\n"NOR;
                }else if ( damage < 600) {
                        msg += HIR"$n向后接连摔了两个筋斗,哇的一声,喷出一口鲜血。\n"NOR;
                }else if ( damage < 1000) {
                        msg += RED"$n哇的一声,喷出一口鲜血,委顿在地,便似一堆软泥。,\n"NOR;
                }
                else msg += RED"$n身子便如一捆稻草般,在空中平平的飞了出去,重重摔在地下,口中鲜血狂喷.\n"NOR;

                msg += NOR;
                target->add( "neili", -damage/4 );
  }
  else {
         msg += HIC"$n眼看这一招来势汹汹,使出本门身法,向後跃出数丈,\n\n"NOR;
         msg += HIW"$N这一招乃是使上了全力,丝毫不留余地。没想到全无用处,不觉脸如死灰,手掌微微发抖。\n" NOR;
         neili_cost = jiali*3;
//         jingli_cost = me->query("jiajin")*2;
         if(neili_cost > me->query("neili")) 
                neili_cost = me->query("neili");
         if(jingli_cost > me->query("jingli"))
                jingli_cost = me->query("jingli")-1;

         message_vision(msg+"\n", me, target);
         return 1;
  }

  message_vision(msg+"\n", me, target);
  COMBAT_D->report_status(target);
        return 1;
}

⌨️ 快捷键说明

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