Example #1
0
int exert(object me, object target)
{
        int sp, dp, jl;

        if( !target ) target = offensive_target(me);

        if( !objectp(target) || target == me)
                return notify_fail("你要吸取谁的精力?\n");

        if (environment(me)->query("no_fight"))
                return notify_fail("这里不能战斗,你不可以使用化功大法吸人的精力。\n");

        if ( me->query_temp("sucked") )
                return notify_fail("你刚刚吸取过精力!\n");

        if( objectp(me->query_temp("weapon")) )
                return notify_fail("必须空手才能够吸取别人的精力!\n");

        if( !me->is_fighting() || !target->is_fighting() || !living(target) )
                return notify_fail("你必须在战斗中才能吸取对方的精力!\n");

        if( (int)me->query_skill("huagong-dafa",1) < 90 )
                return notify_fail("你的化功大法功力不够,不能吸取对方的内力!\n");

        if( (int)me->query("neili") < 300 )
                return notify_fail("你的内力不够,不能使用化功大法。\n");

        if( (int)me->query("jingli") < 100 )
                return notify_fail("你的精力不够,不能使用化功大法。\n");

        if( (int)me->query("jingli") >= (int)me->query("max_jingli") * 5/2 )
                return notify_fail("你吸取的精力充塞全身,无法再吸取精力!\n");

        if( (int)target->query("max_jingli") <= 0 )
                return notify_fail( target->name() +
                        "没有任何精力!\n");

        if( (int)target->query("jingli") < (int)target->query("max_jingli") / 10 )
                return notify_fail( target->name() + "已经精力涣散,你已经无法从他体内吸取任何精力了!\n");

	
        message_vision(HIR "$N朝$n微微一笑,突然翻掌变爪,扣向$n的手腕!\n\n" NOR, me, target );

        if( !target->is_killing(me) ) target->kill_ob(me);

        sp = me->query_skill("force") + me->query_skill("dodge") + me->query("kar")*50;
        dp = target->query_skill("force") + target->query_skill("dodge") + target->query("kar")*50;
        sp *= me->query("combat_exp")/1000;
        dp *= target->query("combat_exp")/1000;

        me->set_temp("sucked", 1);              

        if( random(sp+dp) > dp )
        {
                tell_object(target, HIR "你腕内会宗穴被" + me->name() + "突然扣住,动弹不得,只觉精力如洪水般自会宗穴奔腾而出!\n" NOR);
                tell_object(me, HIG "你觉得" + target->name() + "的精力自手掌源源不绝地流了进来。\n" NOR);

		jl = (1+random(3)) * (int)me->query_skill("huagong-dafa", 1)/2;
		if ((int)target->query("jingli") > jl)
		{		
	                target->add("jingli", -1 * jl );
	                me->add("jingli", jl);
		}else{
	                me->add("jingli", jl/2);
	                target->add("jingli", -jl/2 );
	                }
                if( target->query("combat_exp") >= me->query("combat_exp")/2 ) {
                        me->add("potential", 1);
                        me->add("combat_exp", 1);
                        if (me->query("potential") > me->query_potential_limit())
                        me->set("potential", me->query_potential_limit());
                }

                me->start_busy(1+random(3));
                target->start_busy(1+random(3));
                me->add("neili", -(int)me->query_skill("huagong-dafa", 1)/6);
                me->add("jingli", -5);

                call_out("del_sucked", 2, me);
        }
        else
        {       
                message_vision(HIY "可是$p看破了$P的企图,没让$P扣住手腕。\n" NOR, me, target);
                me->add("jingli", -20);
                me->start_busy(2+random(2));
                call_out("del_sucked", 5, me);
        }

        return 1;
}
Example #2
0
int perform(object me, object target)
{
        string msg;
        int level,extra,kee,i;
        if( !target ) target = offensive_target(me);
        if( !target
        ||      !target->is_character()
        ||      !me->is_fighting(target) )
                return notify_fail("[棉里藏针]只能对战斗中的对手使用。\n");
        level = (int)me->query_skill("unarmed");
        extra = (int)me->query("wudang/level");
        extra = (extra >=2000)? 2000:extra;
        if(!me->query("wudang/zhen")){ 
                me->add_temp("apply/attack",extra/20);
                COMBAT_D->do_attack(me,target,TYPE_PERFORM, 0);
                me->add_temp("apply/attack",-extra/20);
                me->start_busy(1);
                if (me->query("wudang/level") < 3000){
                        me->add("wudang/level",1);
                        if ((int)me->query("wudang/level")%100==0)
                                tell_object(me, HIW "由於你勤习棉里藏针,你的熟练度提高了。\n" NOR);
                }
                else if (me->query("family/master_id") == "master shi"){
                        me->set("wudang/zhen",1);
                        tell_object(me, HIW "由於你勤习棉里藏针,你悟出了新的变化!\n" NOR);
                        me->set("wudang/level",0);
                }
                return 1;
        }else {
                if ( me->query_skill_mapped("force") != "taijiforce")
                        return notify_fail("棉里藏针必须和太极心法配和!\n");
                me->add_temp("apply/damage",level/10);
                me->add_temp("apply/attack",level/20);
                kee = target->query("kee");
                msg = HIR "\n$N"+HIR"双手猛然一抖一拢,一股气劲向$n"+HIR"撞到!" NOR;
                COMBAT_D->do_attack(me,target,TYPE_PERFORM,msg);
                me->add_temp("apply/damage",- level/10);
                me->add_temp("apply/attack",- level/20);
                msg =  HIW "气劲呼的一声,散开消失...\n" NOR;
                message_vision(msg, me, target);
                for (i=0; i< (int)level/50 ;i++){
                        if( (int)target->query("kee") < kee ) { 
                                if (level>300){
                                        msg = HIY"$N"+HIY"一击命中,双手顺势向外一拨,引开了$n"+HIY"的守势!\n"NOR;
                                        message_vision(msg, me, target);
                                        target->start_busy(1);
                                        me->start_busy(1);
                                        call_out("nextattack",1,me,target);
                                        break;
                                }else{
                                        msg = HIY"$N"+HIY"一击命中,但$n"+HIY"立刻将自己护住!\n"NOR;
                                        message_vision(msg, me, target);
                                        me->start_busy(2);
                                        break;
                                }
                        }else {
                                kee = target->query("kee");
                                msg = HIY"$N"+HIY"双手一翻一抖,一股气劲又向$n"+HIY"撞到!" NOR;
                                me->add_temp("apply/damage",level/10);
                                me->add_temp("apply/attack",level/20);
                                COMBAT_D->do_attack(me,target,TYPE_PERFORM,msg);
                                me->add_temp("apply/damage",- level/10);
                                me->add_temp("apply/attack",- level/20);
                                msg =  HIW "气劲呼的一声,散开消失...\n" NOR;
                                message_vision(msg, me, target);
                        }
                }
                if (i == (int)level/50 ){
                        message_vision(HIY"$N"+HIY"一招"+chinese_number(i)+"式居然全部未中,立刻露出破绽。\n"NOR,me);
                        me->start_busy(5);
                }
                return 1;
        }
}
Example #3
0
int curse(object me, object target)
{
        string msg,id_enemy;
        int damage, ap, dp;
        int extradam, my_exp;
        
        if(me->query("class")!="yinshi")
                return notify_fail("只有帝王谷弟子才能下降头。\n");
        if((int)me->query_skill("celecurse", 1) < 150
                && userp(me))
                return notify_fail("你的降头术不够高!\n"); 
        if( !target ) target = offensive_target(me);
        if( !target
                ||!target->is_character()
                ||target->is_corpse()
                ||target==me)
                return notify_fail("你要对谁施展这个降头?\n");
    
        if((int)me->query("kee") < 100 && userp(me))
                return notify_fail("你的气血不够!\n");
    
        me->receive_wound("kee", 10);
        msg = RED "$N"+RED"的眼中红光一闪,一条细如发丝的血线射向$n!\n\n" NOR;
    
        ap = me->query_skill("cursism");
        my_exp=me->query("combat_exp");
        dp = target->query("combat_exp");
    
        if (userp(me)) {
                extradam = me->query("kee");
                extradam = extradam/5;
        } else  extradam = 1000; 
//      message_vision("extradam is"+(string)(extradam)+".\n",me);
//      =10000/5
    
        damage = ap*4 + random(ap*5) + extradam/4;
//      400x4+ random(400x5) + 2000/4
//      lowest 2100, highest 4100, average 3100 
// message_vision("damage is"+(string)(damage)+".\n",me);
 
        if(damage >me->query("max_kee")) damage = me->query("max_kee");
    
        if (userp(me)) ap=random(my_exp/80*ap);
                        else ap=random(8*my_exp);
        if( ap>dp) {
                if (!me->is_fighting(target)) {
                if (!userp(target)||!userp(me)) {
                        target->kill_ob(me);
                        me->kill_ob(target);
                }else { 
                        id_enemy=target->get_id();
                        me->ccommand("kill "+id_enemy);
                        target->kill_ob(me);
                }
                }
                message_vision(msg, me, target);
                target->receive_wound("kee", damage/2, me);
                target->receive_damage("kee", damage/2, me);
                COMBAT_D->report_status(target);
                COMBAT_D->win_lose_check(me,target,1);
        } else          {
                msg += WHT"但是被$n"NOR+WHT"发现了!!\n"NOR;
                message_vision(msg, me, target);
                if (!me->is_fighting(target)) {
                if (!userp(target)||!userp(me)) {
                        target->kill_ob(me);
                        me->kill_ob(target);
                }else { 
                        id_enemy=target->get_id();
                        me->ccommand("kill "+id_enemy);
                        target->kill_ob(me);
                }
                }
        }
        me->start_busy(3) ;   
        return 1;
}        
Example #4
0
int perform(object me, object target)
{
    	string msg;
    	int extra, hammer;
    	object weapon;
    	int busy, super;
    	
    	if( !target ) target = offensive_target(me);
		if( !target
        ||!target->is_character()
        ||!me->is_fighting(target) )
        	return notify_fail("『天雷一击』只能对战斗中的对手使用。\n");
        
    	weapon = me->query_temp("weapon");
    	extra = me->query_skill("thunderwhip",1);	// 200 *1.6
    	    	
    	if( extra <50) return notify_fail("『天雷一击』至少需要50级的天雷破!\n");

    	if( extra < 200 || me->query("class")!= "yinshi")
    	{
            me->add_temp("apply/attack", extra);
        	me->add_temp("apply/damage", extra);
        	msg = HIR"\n$N"+HIR"力灌鞭梢,手中的"+weapon->query("name")+
            		HIR""叭"的一声,象条毒龙般向$n"NOR+HIR"钻去!\n" NOR;
        	message_vision(msg,me,target);
        	COMBAT_D->do_attack(me,target, TYPE_PERFORM,"");
        	me->add_temp("apply/attack", -extra);
        	me->add_temp("apply/damage", -extra);
        	me->perform_busy(2);
    	}	
    	else	{	  		
   			
   			me->add_temp("apply/attack", extra);
        	me->add_temp("apply/damage", extra);
        	msg = HIR"\n$N"+HIR"力灌鞭梢,手中的"+weapon->query("name")+
            		HIR""叭"的一声,象条毒龙般向$n"NOR+HIR"钻去!\n" NOR;
        	message_vision(msg,me,target);
        	COMBAT_D->do_attack(me,target, TYPE_PERFORM,"");
               	
        	msg = HIR"\n$N"+HIR"急运真气,大喝一声,手中的"+weapon->query("name")+
            		HIR"夹着惊雷之势向$n"NOR+HIR"反卷而去!\n" NOR;
        	message_vision(msg,me,target);
        	COMBAT_D->do_attack(me,target, TYPE_PERFORM,"");
        	me->add_temp("apply/attack", -extra);
        	me->add_temp("apply/damage", -extra);
        	
	    	busy = 2;
	    	super = me->query_skill("flying-dragon",1);
	    	if (super >=100) {
	    		super = (super-100)/10;
				if (random(100)<super && me->query_temp("yl9x_times") < 2 )	{
					me->add_temp("yl9x_times",1);
					message_vision(WHT"$N一口真气吐出,身法竟然丝毫不显迟滞。\n"NOR, me);
					busy = 0;
				} else {
					me->set_temp("yl9x_times",0);
				}
			}

        	me->perform_busy(busy);
   		}
	return 1;
}
Example #5
0
int perform(object me, object target)
{
        int damage,l_temp;
        string msg;

        int busy_time,busy_time1,pfm_time,pfm_time1;
        busy_time=3;   //perform的忙时间基数
        busy_time1=2;  //成功对手的忙时间基数
        if( !target ) target = offensive_target(me);

        if( !target || !target->is_character() || !me->is_fighting(target) )
                return notify_fail("神功伤敌只能对战斗中的对手使用。\n");

        if( objectp(me->query_temp("weapon")) )
                return notify_fail("你必须空手才能使用「九阴绝户手」!\n");  
                
        if( (int)me->query_skill("lanhua-shou", 1) < 100 )
                return notify_fail("你的兰花手不够娴熟,不会使用「九阴绝户手」。\n");

        if( (int)me->query_skill("jiuyin-xinjing", 1) < 100 )
                return notify_fail("你的九阴心经不够高,不能用「九阴绝户手」伤敌。\n");

        if( (int)me->query("force") < 500 )
                return notify_fail("你现在内力太弱,不能使出「九阴绝户手」招式。\n");

        if( (int)me->query_condition("juehu_busy"))
                 return notify_fail("你元气大伤,现在没有能力使出「九阴绝户手」招式。\n");

                        
        msg = HIB "$N默运神功,脸色白得吓人,突然使出兰花手的一记阴招「九阴绝户手」,企图当场把$n废于掌下。\n\n"NOR;

        pfm_time=(int)busy_time-(me->query("lanhua-shou",1)+me->query("jiuyin-xinjing",1))*(1+busy_time)/200*busy_time;
        pfm_time1=busy_time1+(int)(me->query("lanhua-shou",1)+me->query("jiuyin-xinjing",1))*(1+busy_time)/200*busy_time;
        if (random(me->query_skill("force")) > target->query_skill("force")/2 )
        {
                me->start_busy(pfm_time);
                target->start_busy(random(pfm_time1));
                
                damage = (int)me->query_skill("lanhua-shou", 1);
                
                damage = damage + random(damage)/2;
                
                target->receive_damage("kee", damage);

                target->receive_wound("sen", damage/2);
                target->receive_damage("kee", damage/2);
                target->receive_wound("sen", damage/3);
                me->add("force", -damage/6);
                msg += RED"结果$N一击命中,$n只感到下体一阵刺痛,体内精元不断外泄,顿时觉的四肢无力,两腿不停颤抖。\n"NOR;
                
        } else 
        {
                me->start_busy(random(pfm_time));
                l_temp=80-(int)me->query_skill("jiuyin-xinjing", 1)/10;
                me->add("force", -l_temp);
                msg += CYN"可是$p看破了$P的狠毒企图,向旁跳开数步,躲开了$P的凌厉一击!\n"NOR;
        }
        message_vision(msg, me, target);
        if (damage>200 )
         {
          me->add("sen", -damage);
//          target->apply_condition("juehu_hurt",(int)(500*target->query("age")));
          me->apply_condition("juehu_busy",(int)(100*me->query("age")));
          me->add("max_force", - (20 + random(20)));
          if (target->query("gender")== "男性")
          {
             message_vision(HIW"$N突然觉的丹田内的精元已流失迨尽,心里一阵难过,知道自己有一段时间不能行欢做乐了!\n"NOR,target);
           } else
           {if (target->query("gender")== "女性")
               message_vision(HIW"$N被你一击命中,,不禁既羞又怒,见$n竟对一女流之辈也用此阴毒招数!\n"NOR,target,me);
            else
               message_vision(HIW"$N虽然击中$n的私处,但感觉受力甚轻,似乎已无要害可言!\n"NOR,me,target);
           }
          target->kill_ob(me);
         }
        return 1;
}
Example #6
0
int cast(object me, object target)
{
    string msg;
    int ap, dp, dg, damage;

    if (!target) target = offensive_target(me);
    if (!target
    ||  !target->is_character()
    ||  target->is_corpse()
    ||  target==me)
        return notify_fail("你要对谁用扭转乾坤?\n");
    if (!me->query("cast_juanbi"))
        return notify_fail("「扭转乾坤」是白象小王的绝活,没有他的亲传谁也用不了!\n");
    if (!target->is_fighting(me))
        return notify_fail("只有在战斗中才能使用扭转乾坤!\n");
    if ((int)me->query("kee") < 100)
        return notify_fail("你体力不足,用不了扭转乾坤!\n");
    if ((int)me->query("force") < 100)
        return notify_fail("你须运足内力才能使用扭转乾坤!\n");
    if ((int)me->query_skill("dengxian-dafa", 1) < 40)
        return notify_fail("你的登仙大法还不够纯熟。\n");
    if ((int)me->query("mana") < 300)
        return notify_fail("你的法力不足以变作神象伤敌!\n");

    if (me->query("cast_juanbi") > 0)
        msg = HIW"\n$N趁$n不备,怒吼一声,转瞬间化作一只黄牙老象,"
                +"伸出蛟龙般的鼻子向$n卷去!\n" NOR;
    else // cast_juanbi == -1, it's baixiang-xiaow himself
        msg = HIW"\n$N趁$n不备,怒吼一声,现出白色巨象的原形,"
                +"伸出蛟龙般的鼻子向$n卷去!\n" NOR;

    ap = (int)me->query_skill("spells");

    dp = target->query_skill("spells");
    dg = target->query_skill("dodge");
    if (dp!=0) dp=100*ap/dp/3+random(100*ap/dp)/2; else dp=100;
    if (dg!=0) dg=100*ap/dg/3+random(100*ap/dg)/2; else dg=100;

    damage = me->query("max_mana")/20+1;
    damage = (me->query("mana_factor")+me->query("str")+random(damage))*2;
    if (dp < 30) {
        msg += HIW"不料$n早有准备,扭转身形轻舒猿臂一把抓住了$N的鼻子!\n"
                +"$N疼得一声闷哼,身不由己的被$n拖了过去!\n"NOR;
        message_vision(msg, me, target);
        me->add("kee", me->query("str") * 2);
        me->start_busy(30-dp+random(10));
    } else if (dp<60 && dp>30) {
        msg += HIW"$n连忙扭转身形运转神功将$N的长鼻荡开。\n"NOR;
        message_vision(msg, me, target);
        me->start_busy(1+random(2));
    } else if (dg<50) {
        msg += HIW"$n纵身向后一跃,闪过了这一击。\n"NOR;
        message_vision(msg, me, target);
        me->start_busy(1+random(2));
        target->start_busy(random(3));
    } else {
        msg += HIW"$n促不击防,被$N的长鼻高高卷起,$N用力一甩,"
                +"$n如断了线的风筝般飞了出去!\n"NOR;
        message_vision(msg, me, target);
        target->receive_damage("kee",damage,me);
        me->start_busy(random(2));
        target->start_busy(1+random(3));
        COMBAT_D->report_status(target); 
    }

    me->add("force", -30);
    me->add("mana", -30);

    target->kill_ob(me);
    return 1;
}
Example #7
0
int perform(object me, object target)
{
        string msg;
        int extra,adjust;
        int count;
        object weapon,targetweapon;
        extra = me->query_skill("ittouryu",1);
        
        if ( extra < 150) return notify_fail("你的[一刀流剑术]还不够纯熟!\n"); 
        if( !target ) target = offensive_target(me);    
        if( !target     
        ||      !target->is_character()
        ||      !me->is_fighting(target) )
                return notify_fail("[百鬼夜狂]只能对战斗中的对手使用。\n");
//      if(me->query_temp("timer/hyakki")+60>time())
//              return notify_fail("你的杀气已尽,无法在短时间内再出这一招。\n");
        msg = HIR  "\n\n$N突然仰天长嚎,头发如钢针般根根直竖,$n依稀看到$N的瞳仁正在变成红色。
$N猛地扑向$n,发动了一刀流的最强一招-「百鬼夜狂」,将$n笼罩在一片刀光中。
" NOR;
        count=0;
        
        adjust = 440-me->query_skill("blade")>0?0:440-me->query_skill("blade");
//      message_vision("adjust is "+(string)adjust+"\n",me);    
//      me->set_temp("timer/hyakki",time());
        me->add_temp("apply/attack",adjust);
        me->add_temp("apply/damage",extra);
        msg += HIC  "百鬼袭!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIG  "百鬼冲!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIB  "百鬼碎!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIY  "百鬼突!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIM  "百鬼坠!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIW  "百鬼斩!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg = HIR  "灭!!!!" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        if(target->query_temp("damaged_during_attack")) count++;
        msg="\n\n";
        me->add_temp("apply/damage",-extra);
        me->add_temp("apply/attack",-adjust);
        if(!count)
                msg+=HIB"$n好整以暇地闪过$N所有的攻击,冷冷地说:
“该轮到我了!”。\n"NOR;
        else if(count<4)
                msg+=HIY"突然,一蓬鲜血激射,随之$n破出刀光,捂着殷红的衣襟,
退向一侧。\n"NOR;
        else if(count<7)
                msg+=HIM"突然,一蓬鲜血激射,随之$n破出刀光,捂着殷红的衣襟,
口中撕吼着:“魑魅魍魉...”,
$N接道:“百鬼夜狂”。\n"NOR;
        else
                msg+=HIR"突然,一蓬鲜血激射,随之$N破出刀光,背对着血泊中的$n
傲慢地说道:“笑止千万!”\n"NOR;
        message_vision(msg,me,target);
        if (count>3) target->start_busy(3);
                else target->start_busy(count);
        if (count>5) me->start_busy(3);
                else me->start_busy(8-count);
        
        return 1;
}     
Example #8
0
int exert(object me, object target)
{
	int sp, dp;

       if ( target == me ) target = offensive_target(me);
	if( !objectp(target) || target->query("id") == "mu ren" )
		return notify_fail("你要吸取谁的真气?\n");


	if ( me->query_temp("sucked") )
		return notify_fail("你刚刚吸取过真气!\n");

	if( objectp(me->query_temp("weapon")) )
		return notify_fail("你必须空手才能施用化功大法吸人真气!\n");

//        if( !me->is_fighting() || !target->is_fighting())

	if( (int)me->query_skill("huagong-dafa",1) < 30 )
		return notify_fail("你的化功大法功力不够,不能吸取对方的真气。\n");

	if( (int)me->query("neili",1) < 10 )
		return notify_fail("你的内力不够,不能使用化功大法。\n");

        if( (int)target->query("qi") < 30 )
		return notify_fail( target->name() +
			"已经真气涣散,你已经无法从他体内吸取真气了!\n");

	message_vision(
		HIR "$N突然诡异的一笑,双手一扬,拇指对准$n的掌心按了过来!\n\n" NOR,
		me, target );

        if ( living(target) )
           { if( !target->is_killing(me) ) target->kill_ob(me); }

        sp = me->query_skill("force") + me->query_skill("dodge") + me->query_skill("zhaixinggong",1)/2;
        dp = target->query_skill("force") + target->query_skill("dodge");

	me->set_temp("sucked", 1);		

        if (( random(sp) > random(dp) ) || !living(target) )
	{
		tell_object(target, HIR "你突然觉得全身真气自手掌奔涌而出,四肢无力,再也使不出劲来!\n" NOR);
		tell_object(me, HIG "你觉得" + target->name() + "的真气自手掌源源不绝地流了进来。\n" NOR);

		target->receive_damage("qi", (int)me->query_skill("huagong-dafa", 1) );
		me->add("qi", (int)me->query_skill("huagong-dafa", 1) );
		me->add("eff_qi", (int)(me->query_skill("huagong-dafa", 1)*2/3) );
            if ( me->query("eff_qi") > me->query("max_qi") )
                 me->set("eff_qi", me->query("max_qi"));

		if( target->query("combat_exp") >= me->query("combat_exp") )
			me->add("combat_exp",1);

                me->start_busy(2);
                target->start_busy(random(2));
		me->add("neili", -5);

		call_out("del_sucked", 2, me);
	}
	else
	{	
		message_vision(HIY "可是$p看破了$P的企图,机灵地闪了开去。\n" NOR, me, target);
                me->start_busy(2);
		call_out("del_sucked", 4, me);
	}

	return 1;
}
Example #9
0
int perform(object me, object target)
{
        int ap,dp,damage,chance;
        string msg;
        object weapon;
                
        if( !target ) target = offensive_target(me);

        if( !target
        ||      !target->is_character()
        ||      target->is_corpse()
        ||      target==me)
                return notify_fail("你要对谁施展「断水无痕」?\n");

        if(!me->is_fighting())
                return notify_fail("「断水无痕」只能在战斗中使用!\n");
        if(me->query("family/family_name")!="蜀山剑派")
                return notify_fail("不是蜀山的不能用「断水无痕」!\n");
                if(me->query("shushan/duanshui_master")!=1)
                return notify_fail("你还没领会「断水无痕」!\n");

        if((int)me->query("max_force") < 500 )
                return notify_fail("你的内力不够!\n");

   if((int)me->query("force") < 500 )
     return notify_fail("你的内力不足!\n");

        if((int)me->query("sen") < 300 )
                return notify_fail("你的精神不足,没法子施用外功!\n");

        if((int)me->query_skill("shushan-jianfa", 1) < 100)
                return notify_fail("你的蜀山剑法修为还不够,使用这一招会有困难!\n");


        msg = CYN"\n$N手腕晃动如疾风,以砍断三千尺飞流的速度,直逼$n!\n"NOR;
        ap = me->query_skill("sword");
        ap = ap*ap*ap / 20;
        dp = target->query("combat_exp"); 
        chance = (int)(random( ap + dp ) / dp * 100);
        if (target->is_busy()) chance *= 3;
        if( chance > 40 ) {
                damage = me->query_skill("sword") * 2 + me->query("force_factor");
                if (damage > 800) damage = 750+random(75);
                target->receive_damage("kee",damage);
                target->receive_wound("kee",damage/3);
target->start_busy(random(1)+1);
                msg += CYN"结果$n被$N的「断水无痕」拦腰而过!\n"NOR;
        }
        
        else 
                msg += "但是被$n躲开了。\n"NOR;
        message_vision(msg, me, target);
        if( damage > 0 ) COMBAT_D->report_status(target);
   
        if( !target->is_fighting(me) ) {
                if( living(target) ) {
                        if( userp(target) ) target->fight_ob(me);
                        else target->kill_ob(me);
                }
        }
        me->add("force",-200-me->query("force_factor"));
        me->start_busy(3);
        return 1;
}
Example #10
0
int perform(object me, object target)
{
        int damage;
        string msg, wn;
        object weapon;
        int ap, dp;
  
        me = this_player();

        if (userp(me) && ! me->query("can_perform/tianlei-dao/zha"))
                return notify_fail("你所使用的外功中没有这种功能。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(ZHA "只能在战斗中对对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon"))
           || (string)weapon->query("skill_type") != "blade")
                return notify_fail("你所使用的武器不对,难以施展" ZHA "。\n");

        if ((int)me->query_skill("tianlei-dao", 1) < 150)
                return notify_fail("你天雷绝刀不够娴熟,难以施展" ZHA "。\n");

        if (me->query_skill_mapped("blade") != "tianlei-dao")
                return notify_fail("你没有激发天雷绝刀,难以施展" ZHA "。\n");

        if ((int)me->query_skill("force") < 180)
                return notify_fail("你的内功火候不够,难以施展" ZHA "。\n");

        if ((int)me->query("neili") < 300)
                return notify_fail("你现在的真气不够,难以施展" ZHA "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        wn = weapon->name();
                           
        msg = HIW "\n$N" HIW "一声怒喝,内劲瀑涨,施展出绝招「" HIY "春雷炸空" HIW 
              "」手中" + wn + HIW "出神般的挥舞而出,威力惊人,有如神助一般。" NOR;

        message_sort(msg, me, target);

        ap = me->query_skill("blade");
        dp = target->query_skill("parry");

        if (ap / 2 + random(ap) > dp)
        {
                damage = ap + random(ap / 2);
         	msg = COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 65,
                                          HIR "$n" HIR "见$N" HIR "来势凶猛,刀"
                                          "光闪烁,惊骇间肩膀已中一刀,一股鲜血" 
                                          "喷涌而出。\n" NOR);
         	me->start_busy(2 + random(4));
         	me->add("neili", -240);
        } else
        {
         	msg = CYN "然而$n" CYN "以快制快,侧身"
                      "一跳,躲过这招。\n" NOR;

         	me->start_busy(2);
         	me->add("neili", -180);
        }
        message_combatd(msg, me, target);

        return 1;
}
Example #11
0
int perform(object me, object target)
{
        mapping prepare;
        string msg;
        int skill;
        int delta;
        int i;

        if (! target) target = offensive_target(me);

        if (userp(me) && ! me->query("can_perform/liumai-shenjian/six"))
                return notify_fail("你所使用的外功中没有这种功能。\n");

        if (! target || ! me->is_fighting(target))
                return notify_fail(SIX "只能对战斗中的对手使用。\n");

        if (me->query_skill_prepared("finger") != "liumai-shenjian")
                return notify_fail("你没有准备使用六脉神剑,无法施展" SIX "。\n");

        skill = me->query_skill("liumai-shenjian", 1);

        if (skill < 220)
                return notify_fail("你的六脉神剑修为有限,无法使用" SIX "!\n");

        if (me->query_skill("force") < 400)
                return notify_fail("你的内功火候不够,难以施展" SIX "!\n");

        if (me->query("max_neili") < 7000)
                return notify_fail("你的内力修为没有达到那个境界,无法运转内"
                                   "力形成" SIX "!\n");

        if (me->query("neili") < 500)
                return notify_fail("你的真气不够,现在无法施展" SIX "!\n");

        if (me->query_temp("weapon"))
                return notify_fail("你必须是空手才能施展" SIX "!\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIW "$N" HIW "摊开双手,手指连弹,霎时间空气炙热,几"
              "欲沸腾,六道剑气分自六穴,一起冲向$n" HIW "!\n" NOR;

        if (random(me->query("combat_exp")) > target->query("combat_exp") / 3 * 2)
        {
                msg += HIR "$n" HIR "只感剑气纵横,微一愣神,不禁心萌退意。\n" NOR;
                delta = skill / 6;
        } else
                delta = 0;

        message_combatd(msg, me, target);

        me->add("neili", -400);
        target->add_temp("apply/parry", delta);
        target->add_temp("apply/dodge", delta);
        for (i = 0; i < 6; i++)
        {
                if (! me->is_fighting(target))
                        break;

                if (random(2) == 1 && ! target->is_busy())
                        target->start_busy(1);

                me->set_temp("liumai-shenjian/hit_msg", i);

                COMBAT_D->do_attack(me, target, 0, i * 3);
        }
        target->add_temp("apply/parry", -delta);
        target->add_temp("apply/dodge", -delta);
        me->delete_temp("liumai-shenjian/hit_msg");
        me->start_busy(1 + random(5));

        return 1;
}
Example #12
0
int perform(object me, object target)
{
        string msg, tparryskill;
        int myskill, myskill1, tparryb, tparryh, myforce, tforce, myexp, texp, damage;
        object weapon,tweapon;
        weapon = me->query_temp("weapon");
        myskill= (int)me->query_skill("sword",1);
        myskill1= (int)me->query_skill("sanqing-jian",1);
        myforce = (int)me->query("force");
        myexp = (int)me->query("combat_exp");
        msg = "";
        if(!objectp(weapon)||(string)weapon->query("skill_type")!="sword")
        return notify_fail("不拿剑怎使剑走奇门?");
        if ( myskill1 < 100) return notify_fail("你的三清剑法还不够火候!\n");
        if(me->query("family/family_name") != "五庄观" )
                return notify_fail("你是哪儿偷学来的武功,也想用『剑走奇门』?\n");
        if( !target ) target = offensive_target(me);
        if( !target
        ||      !target->is_character()
        ||      !me->is_fighting(target) )
                return notify_fail("『剑走奇门』只能在战斗中使用。\n");
        if ((int)me->query("force")<300)
                return notify_fail("你的内力不够。\n"); 
        tweapon = target->query_temp("weapon");  
        tparryb= (int)target->query_skill("parry",1);
        tforce = (int)target->query("force");
        texp = (int)target->query("combat_exp");
        tparryskill = target->query_skill_mapped("parry");
        tparryh=target->query_skill(tparryskill,1);
        me->add("force",-300);
        me->receive_damage("sen", 20);
     message_vision(HIW"$N招式一缓,手中"+weapon->name()+HIW"仿佛挽了千斤似的,使出了三清剑的绝学--『剑走奇门』!\n\n" NOR,me,target);        
     message_vision(HIW"$N气运丹田,平平刺出一剑。\n"NOR,me);
     message_vision(HIW"这一招『剑走奇门』挟着内力,却象密云乍现,惊雷含劲欲发!\n\n"NOR,me);
     if (random(myexp)>(int)(texp/10) && random(myforce) > (int)(tforce/3)) 
        {
             msg = HIW"$n只觉得一股劲气象闪电一般,穿体而过!\n"
                                "“哇”的一声,$n喷出一大口鲜血,看来是受了内伤!\n\n"NOR;
	damage= (int)(((int)me->query("max_force")/2+myforce -  (int)target->query("max_force")/2 - tforce)/3);
 	if(damage<1)damage = 1;
 	target->receive_damage("kee", me->query("eff_kee")*damage/80, me);
 	target->receive_wound("kee", me->query("eff_sen")*damage/100, me);
     	message_vision(msg, me, target);
     	COMBAT_D->report_status(target);
     	}
     else {
            msg = HIW"$n忙运功向抗,深厚的内力将$N的攻势都激散了。\n\n"NOR;
            message_vision(msg, me, target);
        }


     message_vision(HIW"$N由静转动,一动便急如风,脚踏奇门,剑走奇招,剑剑从$n意想不到的方位无声无息地刺出!\n" NOR,me,target);
     message_vision(HIW"这一招『脚踏奇门』好似天公作怒,要把天下妖孽尽数劈死,使得个痛快淋漓\n\n" NOR,me,target);
     if(random(myexp)>(int)(texp/10)&& random((int)(myskill + myskill1*3/2))>(int)((tparryb+tparryh)/2))
     {msg = HIW"$n马上手忙脚乱,不知该如何去招架这静若水、快如电的剑法!\n"
        "果不然,$N的"+weapon->name()+HIW"招招命中,$n浑身上下被刺的遍体鳞伤!\n\n"NOR;
     damage=random(100)+me->query("force_factor");
     if(damage<1)damage = 1;
     target->receive_damage("kee", me->query("eff_kee")*damage/80, me);
     target->receive_wound("kee", me->query("eff_sen")*damage/100, me);
     message_vision(msg, me, target);
     COMBAT_D->report_status(target);
     }
     else{
            msg = HIW"$n却心静如水,丝毫不显慌乱,见招拆招,瓦解了$N这无声的攻势。\n\n"NOR;
            message_vision(msg, me, target);
        }


          message_vision(HIW"$N突然收住身形,回步而立,撤剑于背后,无招胜有招,无形胜有形。\n"NOR,me);
          message_vision(HIW"这一招『无招胜有招』把三清剑法的精髓要旨发挥地酣畅爽快!\n\n"NOR,me);
if(random(myexp)>(int)(texp/2))
{msg = HIW"$n果然上当,以为$N露出破绽,大喜之下,急忙上前想抢攻。\n"
"$N微微一笑,待$n靠近,长袖一抖,袖尽剑出,直探$n的胸口。\n"
"$n连剑影还没看到,就差点儿被穿的透心凉!\n\n"NOR;
damage=(int)(random((int)(myskill1/2))+me->query("force_factor")*3/2);
if(damage<1)damage = 1;
target->receive_damage("kee", me->query("eff_kee")*damage/80, me);
target->receive_wound("kee", me->query("eff_sen")*damage/100, me);
     message_vision(msg, me, target);
     COMBAT_D->report_status(target);
     }
else{
         msg = HIW"$n看破了这招的虚实,将计就计,假装冲上前,却在$N出剑的一瞬间腾空跃开,回手竟反攻一招!\n\n"NOR;
            message_vision(msg, me, target);
        COMBAT_D->do_attack(target, me, tweapon);
        }
        
        me->start_busy(3);
        
     
        return 1;
}
Example #13
0
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int damage;
 
        if (playerp(me) && ! me->query("can_perform/yinlong-bian/zhu"))
                return notify_fail("你还不会这种功能。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(DUO "只能在战斗中对对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon")) ||
            weapon->query("skill_type") != "whip")
                return notify_fail("你使用的武器不对。\n");

        if (me->query_skill("force", 1) < 130)
                return notify_fail("你的内功火候不够,使不了" DUO "。\n");

        if (me->query_skill("yinlong-bian", 1) < 100)
                return notify_fail("你的银龙鞭法功力太浅,使不了" DUO "。\n");

        if (me->query("neili") < 300)
                return notify_fail("你的真气不够,无法使用" DUO "。\n");

        if (me->query_skill_mapped("whip") != "yinlong-bian")
                return notify_fail("你没有激发银龙鞭法,使不了" DUO "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIW "$N" HIW "诡异的一笑,手中" + weapon->name() +
              HIW "犹如一条银龙猛然飞向$n" HIW ",正是九阴真经中的"
             "绝招「" HIC "天诛龙蛟诀" HIW "」!\n" NOR;

        ap = me->query_skill("whip") + me->query_skill("force");
        dp = target->query_skill("force") + target->query_skill("parry");

        if (ap * 11 / 20 + random(ap) > dp)
        {
                damage = ap + random(ap / 2);
                me->add("neili", -200);
                me->start_busy(2);

                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 85,
                                           HIR "结果$n" HIR "一声惨叫,未能看破$N"
                                           HIR "的企图,被这一鞭硬击在胸口,鲜血飞"
                                           "溅,皮肉绽开!\n" NOR);
                message_combatd(msg, me, target);
                
        } else
        {
                me->add("neili", -100);
                me->start_busy(3);
                msg += CYN "可是$p" CYN "飞身一跃而起,躲避开了"
                       CYN "$P" CYN "的攻击!\n" NOR;
                message_combatd(msg, me, target);
        }

        return 1;
}
Example #14
0
int perform(object me, object target)
{
        string msg;
        int damage, ap, dp;

        if( !target ) target = offensive_target(me);

        if( !target
        ||      !target->is_character()
        ||      target->is_corpse()
        ||      target==me)
                return notify_fail("你要对谁施展「暴风骤雨」?\n");

        if((int)me->query("force") < 25+(int)me->query("force_factor") )
                return notify_fail("你的内力不够!\n");

        if((int)me->query("kee") < 100 )
                return notify_fail("你的气血不足,没法子施用外功!\n");

   if((int)me->query_skill("jienan-zhi", 1) <100)
     return notify_fail("你的劫难指级别还不够!\n");


        me->add("force", -25-(int)me->query("force_factor"));
        me->receive_damage("kee", 100);

        if( random(me->query("max_force")) < 50 ) {
                write("糟糕,没成功!\n");
                return 1;
        }

   msg = HIC
"\n$N口中大喝了一声,施展出「暴风骤雨」,双手十指上下翻飞,身形前后左右移动,\n"
"$n只觉得到处是$N的影子,根本不知如何招架,更不用说躲闪了!\n\n" NOR;

        ap = me->query_skill("jienan-zhi", 1);
// + me->query_skill("parry");
        ap = ( ap * ap * ap / (4 * 400) ) + (int)me->query("kee");
        ap = ap*250 + (int)me->query("combat_exp");
        dp = target->query_skill("parry");
   dp = ( dp * dp * dp / (4 * 400) ) + (int)target->query("kee");
   dp = dp*250 + target->query("combat_exp"); 
        if( random(ap + dp) > dp ) {
                damage = (int)me->query("max_force") / 10 +
        random((int)me->query("eff_kee") /50);
                damage -= (int)target->query("max_force") / 10 +
        random((int)target->query("eff_kee") / 5);
     damage+=(int)me->query("force_factor")-random((int)target->query("force_factor"));
//here we can see if 2 players are at same status, the attacker has higher chance.
                if( damage > 0 ) {
     msg += HIC "结果十指结结实实全部击中了$n,差点没把$n戳了个透心凉!\n" NOR;
//finally damage also depends on enabled unarmed level.
     damage +=random((damage*(int)me->query_skill("unarmed"))/80);
                        target->receive_damage("sen", damage, me);
                        target->receive_wound("sen", damage/4, me);
                        target->receive_damage("kee", damage, me);
                        target->receive_wound("kee", damage/3, me);
                        me->improve_skill("jienan-zhi", 1, 1);
                }
       else {
//here, cast failed and the target's force_factor will be added to the previous 
//damage to hurt yourself:(...note damage<0.
     msg += HIC "结果被$n以内力反激,$N反而自受其苦,双手受伤不轻!\n" NOR;
     damage -= (int)target->query("force_factor");
     damage -=random((-damage*(int)target->query_skill("unarmed"))/100);
                        me->receive_damage("sen", -damage, target);
                        me->receive_wound("sen", -damage/4, target);
                        me->receive_damage("kee", -damage, target);
                        me->receive_wound("kee", -damage/3, target);
                        me->improve_skill("jienan-zhi", 1, 1);
       }
             } 
   else
                msg += "但是被$n躲开了。\n";

        message_vision(msg, me, target);
        if( damage > 0 ) COMBAT_D->report_status(target);
        else if( damage < 0 ) COMBAT_D->report_status(me);
//damage=0 corresponding to "但是被$n躲开了。\n"--no report.   

        if( !target->is_fighting(me) ) {
                if( living(target) ) {
                        if( userp(target) ) target->fight_ob(me);
                        else target->kill_ob(me);
                }
        }

        me->start_busy(3);
        return 1;
}
Example #15
0
int perform(object me, object target)
{
        int damage;
        string msg, wp;
        object weapon;
        int ap, dp;

        if (userp(me) && ! me->query("can_perform/yiyang-zhi/die"))
                return notify_fail("你还没有受过高人指点,无法施展" DIE "。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(DIE "只能对战斗中的对手使用。\n");
 
        if (me->query_temp("weapon") || me->query_temp("secondary_weapon"))
                return notify_fail(DIE "只能空手施展。\n");

        if ((int)me->query_skill("yiyang-zhi", 1) < 200)
                return notify_fail("你一阳指诀不够娴熟,难以施展" DIE "。\n");

        if (me->query_skill_mapped("finger") != "yiyang-zhi")
                return notify_fail("你没有激发一阳指诀,难以施展" DIE "。\n");

        if (me->query_skill_prepared("finger") != "yiyang-zhi")
                return notify_fail("你没有准备一阳指诀,难以施展" DIE "。\n");

        if ((int)me->query_skill("force") < 300)
                return notify_fail("你的内功火候不够,难以施展" DIE "。\n");

        if (me->query("max_neili") < 5000)
                return notify_fail("你的内力修为不足,难以施展" DIE "。\n");

        if ((int)me->query("neili") < 1000)
                return notify_fail("你现在的真气不够,难以施展" DIE "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        damage = da_power(me, "finger");
        ap = ap_power(me, "finger");
        dp = dp_power(target, "parry");

        msg = HIW "突然间";

        if (objectp(weapon = target->query_temp("weapon")))
        {
                wp = weapon->name();
                msg += "$N" HIW "单指一扬,径点$n" HIW "持着" + wp + NOR + HIW
                       "的手腕上「" HIY "腕骨" HIW "」、「" HIY "阳谷" HIW "」"
                       "、「" HIY "养老" HIW "」三穴。\n" NOR;

                ap = ap_power(me, "finger");
                dp = dp_power(target, "force");

                if (ap / 2 + random(ap) > dp)
                {
                        msg += HIR "霎时间$n" HIR "只觉得手腕一麻,手中" + wp +
                               HIR "再也拿持不住,脱手掉在地上。\n\n" HIW "紧"
                               "接着";
                        me->add("neili", -150);
                        weapon->move(environment(target));
                } else
                {
                        msg += CYN "可是$n" CYN "将手中" + wp + NOR + CYN "转"
                               "动如轮,终于化解了这一招。\n\n" HIW "紧接着";
                        me->add("neili", -100);
                }
        }

        msg += "$N" HIW "凝气于指,一式「" HIR "阳关三叠" HIW "」点出,顿时一股"
               "纯阳的内力直袭$n" HIW "胸口!\n" NOR;
        if (ap / 2 + random(ap) > dp)
        {
                msg += COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 20,
                                           HIR "结果$n" HIR "被$N" HIR "一指点中"
                                           HIY + xue_name[random(sizeof(xue_name))] +
                                           HIR ",全身真气逆流而上,登时呕出一大"
                                           "口鲜血。\n" NOR);

                target->add_temp("yiyang-zhi/die", 1);
        } else
        {
                msg += CYN "可是$p" CYN "镇定自如,全力化解了$P"
                       CYN "这精妙的一指。\n" NOR;
        }

        ap = ap_power(me, "finger");
        dp = dp_power(target, "dodge");

        msg += "\n" HIW "接着$N" HIW "踏前一步,体内真气迸发,隔空一指劲点$n" HIW
               "而去,指气纵横,嗤然作响!\n" NOR;
        if (ap / 2 + random(ap) > dp)
        {
                msg += COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 20,
                                           HIR "结果$n" HIR "被$N" HIR "一指点中"
                                           HIY + xue_name[random(sizeof(xue_name))] +
                                           HIR ",全身真气逆流而上,登时呕出一大"
                                           "口鲜血。\n" NOR);

                target->add_temp("yiyang-zhi/die", 1);
        } else
        {
                msg += CYN "可是$p" CYN "镇定自如,全力化解了$P"
                       CYN "这精妙的一指。\n" NOR;
        }

        ap = ap_power(me, "finger");
        dp = dp_power(target, "force");

        msg += "\n" HIW "最后$N" HIW "一声猛喝,单指“嗤”的一声点出,纯阳指力同"
               "时笼罩$n" HIW "全身诸多要穴!\n" NOR;
        if (ap / 2 + random(ap) > dp)
        {
                msg += COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 20,
                                           HIR "结果$n" HIR "被$N" HIR "一指点中"
                                           HIY + xue_name[random(sizeof(xue_name))] +
                                           HIR ",全身真气逆流而上,登时呕出一大"
                                           "口鲜血。\n" NOR);

                target->add_temp("yiyang-zhi/die", 1);
        } else
        {
                msg += CYN "可是$p" CYN "镇定自如,全力化解了$P"
                       CYN "这精妙的一指。\n" NOR;
        }

        if (target->query_temp("yiyang-zhi/die", 1) == 3
           && target->query("neili"))
        {
                msg += HIY "\n$n" HIY "被$N" HIY "三指连中,全身真气涣"
                       "散,宛如黄河决堤,内力登时狂泻而出。\n\n" NOR;
                target->set("neili", 0);
        }
        me->start_busy(4 + random(4));
        me->add("neili", -800);
        target->delete_temp("yiyang-zhi/die");
        message_combatd(msg, me, target);

        if (! target->query("neili"))
                tell_object(target, HIC "你只觉丹田内竟似空空如也,一时"
                                    "说不出的难受。\n" NOR);

        return 1;
}
Example #16
0
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp, count;
        int i, attack_time;

        if (userp(me) && ! me->query("can_perform/dagou-bang/tian"))
                return notify_fail("你还没有受过高人指点,无法施展" TIAN "。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(TIAN "只能对战斗中的对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon"))
           || (string)weapon->query("skill_type") != "staff")
                return notify_fail("你使用的武器不对,难以施展" TIAN "。\n");

        if (me->query_skill("dagou-bang", 1) < 220)
                return notify_fail("你打狗棒法不够娴熟,难以施展" TIAN "。\n");

        if (me->query_skill_mapped("staff") != "dagou-bang")
                return notify_fail("你没有激发打狗棒法,难以施展" TIAN "。\n");

        if ((int)me->query_skill("force") < 300)
                return notify_fail("你的内功火候不足,难以施展" TIAN "。\n");

        if (me->query("neili") < 500)
                return notify_fail("你现在的真气不够,难以施展" TIAN "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIW "$N" HIW "手中" + weapon->name() + HIW "一卷,带"
              "起阵阵风声,犹若千百根相似,层层叠叠将$n" HIW "笼罩"
              "其中。\n" NOR;

        ap = ap_power(me, "staff");

        dp = dp_power(target, "parry");

        attack_time = 5;

        if (ap / 2 + random(ap) > dp)
        {
                msg += HIR "$n" HIR "只觉眼花缭乱,发现四面八方皆是杖"
                       "影,心底寒意顿生,招架散乱。\n" NOR;
                count = ap / 8;
                me->add_temp("apply/attack", count);
                me->add_temp("apply/damage", count);
                attack_time += random(ap / 90);
        } else
        {
                msg += HIY "$n" HIY "只觉眼前一花,发现四面八方皆是杖"
                       "影,急忙收敛心神,仔细招架。\n" NOR;
                count = 0;
        }
        message_combatd(msg, me, target);

        if (attack_time > 9)
                attack_time = 9;

        me->add("neili", -attack_time * 30);

        for (i = 0; i < attack_time; i++)
        {
                if (! me->is_fighting(target))
                        break;

                COMBAT_D->do_attack(me, target, weapon, 0);
        }
        me->add_temp("apply/attack", -count);
        me->add_temp("apply/damage", -count);
        me->start_busy(1 + random(attack_time));

        return 1;
}
Example #17
0
int cast(object me, object target)
{
   string msg;
   int success, ap, dp;

   if( (string)me->query("class") != "yaomo" )
     return notify_fail("只有妖魔才能施展天魔解体大法。\n");

   if( !target ) target = offensive_target(me);

   if( !target
   || !target->is_character()
   || target->is_corpse()
   || target==me)
     return notify_fail("你要对谁施展天魔解体大法?\n");

   if((int)me->query("mana") < 100 || (int)me->query("max_mana") < 100 )
     return notify_fail("你的法力不够,不能有效施展天魔解体大法!\n");

   if((int)me->query("force") < 50 || (int)me->query("max_force") < 50 )
     return notify_fail("你的内力不够,不能有效施展天魔解体大法!\n");

   if((int)me->query("sen") < 100 || (int)me->query("sen") < (int)me->query("max_sen")/2 )
     return notify_fail("你无法集中精力施展天魔解体大法!\n");

   if( (int)me->query("combat_exp") < (int)target->query("combat_exp")/10  )
     return notify_fail("对方比你强太多了,还是别送死吧!\n");
   //here, we do not allow that a too weak player trys this on 
   //a much stronger player. this is to prevent statistically possible 
   //but unreasonable results from happenning. 

   if( random(me->query("max_mana")) < 50 ) {
     write("你失败了!\n");
     return 1;
   }

   msg = HIC
"$N口中念了几句咒文,双手捧住脑袋,仰天发出一声悲嘶!\n\n忽然间$N将自己舌头狠命一咬,一道血雾向$n喷了过去!\n" NOR;

   success = 1;
   ap = me->query_skill("spells");
   ap = ap * ap * ap /10 ;
   ap += (int)me->query("combat_exp");
   ap = 4*ap; //this is for 拼命 so easier.
   dp = target->query("combat_exp");
   if( random(ap + dp) < dp ) success = 0;
//here we compared exp and spells level. 
//note: has nothing to do with target's spells level.

   ap = (int)me->query("max_mana");
   dp = (int)target->query("max_mana");
   if( ap < random(dp) ) success = 0;
//here we compared max_mana.
//if the attacher has half of the max_mana of the target, 
//he has 50% chance to kill his target, which is reasonable.

   if(success == 1 ){//now both die.
     msg +=  HIR "结果$n被血雾罩住,顿时发出一声惨叫!\n而$N也身子一瘫,倒在地上。\n" NOR;
     message_vision(msg, me, target);

     target->kill_ob(me);
     me->kill_ob(target);
     //to produce killing messages.

     me->add("max_mana", -100);
     me->add("max_force", -50);
     me->save();
     //successed, attacker lost 100 max_fali and 50 max_neili.
     
     target->receive_wound("sen", (int)target->query("max_sen")+1, me);
     target->receive_wound("kee", (int)target->query("max_kee")+1, me);
     COMBAT_D->report_status(target);
     //target die here.

     me->receive_wound("sen", (int)me->query("max_sen")+1, target);
     me->receive_wound("kee", (int)me->query("max_kee")+1, target);
     COMBAT_D->report_status(me);
     //attacker die here.

   }
       
   else {
     msg +=  HIR "结果血雾被$n法力反激,反而罩住了$N!\n$N长叹一声,身子一瘫,倒在地上。\n" NOR;
     message_vision(msg, me, target);

     target->kill_ob(me);
     me->kill_ob(target);
     //to produce killing messages.

     me->add("max_mana", -50);
     me->add("max_force", -25);
     me->save();
     //failed, attacker lost 50 max_fali and 25 max_neili.
     
     me->receive_wound("sen", (int)me->query("max_sen")+1, target);
     me->receive_wound("kee", (int)me->query("max_kee")+1, target);
     COMBAT_D->report_status(me);
     //attacker die here.
   } 

   return 3+random(5);
}
Example #18
0
int perform(object me, object target)
{
        object weapon;
        string wn, msg;
        object sroom, room;
        int ap, dp, damage;

        if (userp(me) && ! me->query("can_perform/lunhui-jian/hui"))
                return notify_fail("你所使用的外功中没有这种功能。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(HUI "只能对战斗中的对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon"))
           || (string)weapon->query("skill_type") != "sword")
                return notify_fail("你使用的武器不对,难以施展" HUI "。\n");

        if ((int)me->query_skill("force") < 750)
                return notify_fail("你的内功修为不够,难以施展" HUI "。\n");

        if ((int)me->query("max_neili") < 10000)
                return notify_fail("你的内力修为不够,难以施展" HUI "。\n");

        if ((int)me->query_skill("buddhism", 1) < 500)
                return notify_fail("你对禅宗心法参悟不够,难以施展" HUI "。\n");

        if ((int)me->query_skill("lunhui-jian", 1) < 500)
                return notify_fail("你释迦轮回剑火候不够,难以施展" HUI "。\n");

        if (me->query_skill_mapped("sword") != "lunhui-jian")
                return notify_fail("你没有激发释迦轮回剑,难以施展" HUI "。\n");

        if ((int)me->query("neili") < 1000)
                return notify_fail("你现在真气不够,难以施展" HUI "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        wn = weapon->name();

        message_combatd(HIW "$N" HIW "面露拈花之意,祭起手中" + wn +
                        HIW ",霎时碧波流转,华光万丈,说不尽的祥和。"
                        "\n" NOR, me, target);

        //  记录下最初的房间
        if (! objectp(sroom = environment(me)))
                return 1;

        ap = me->query_skill("sword") +
             me->query_skill("buddhism", 1);

        dp = target->query_skill("parry") +
             target->query_skill("buddhism", 1);

        damage = ap + random(ap);

        // 六道轮回之人间道
        room = find_object("/d/special/liudaolunhui/rendao");
        if (! room) room = load_object("/d/special/liudaolunhui/rendao");

        me->move(room);
        target->move(room);

        message_vision(HIY "\n$N" HIY "左手轻轻一拨,右手所持的" + wn +
                       HIY "叮呤做响,剑姿说不出的潇洒妙曼。\n" NOR, me, target);

        if (ap / 2 + random(ap) > dp)
        {
                msg = COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 300,
                                           (: attack1, me, target, damage :));
        } else
Example #19
0
int perform(object me, object target)
{
        int damage;
        string msg;
        int ap, dp;

        if (userp(me) && ! me->query("can_perform/henshan-quan/lan"))
                return notify_fail("你所使用的外功中没有这种功能。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(LAN "只能对战斗中的对手使用。\n");

        if (me->query_temp("weapon") || me->query_temp("secondary_weapon"))
                return notify_fail(LAN "只能空手施展。\n");

        if ((int)me->query_skill("henshan-quan", 1) < 60)
                return notify_fail("你衡山拳法不够娴熟,难以施展" LAN "。\n");

        if (me->query_skill_mapped("cuff") != "henshan-quan")
                return notify_fail("你没有激发衡山拳法,难以施展" LAN "。\n");

        if (me->query_skill_prepared("cuff") != "henshan-quan")
                return notify_fail("你没有准备衡山拳法,难以施展" LAN "。\n");

        if (me->query_skill("force") < 80)
                return notify_fail("你的内功修为不够,难以施展" LAN "。\n");

        if ((int)me->query("neili") < 200)
                return notify_fail("你现在的真气不够,难以施展" LAN "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        ap = me->query_skill("cuff");
        dp = target->query_skill("parry");

        msg = HIC "\n$N" HIC "双拳挥出,施一招「" HIG "青天揽日月"
              HIC "」,拳速极快,部位极准," HIC "分袭$n" HIC "面"
              "门和胸口。" NOR;
        
        message_sort(msg, me, target);

        if (ap / 2 + random(ap) > dp)
        {
                damage = (int)me->query_skill("henshan-quan", 1);
                damage += random(damage / 2);

                msg = COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 40,
                                          HIR "$N" HIR "出手既快,方位又奇,$n"
                                          HIR "闪避不及,闷哼一声,已然中拳。\n" NOR);

                me->add("neili", -100);
	        me->start_busy(2 + random(2));                                         
        } else
        {
                msg = CYN "$n" CYN "不慌不忙,以快打快,将$N"
                      CYN "这招化去。\n" NOR;

                me->add("neili", -30);
	        me->start_busy(2 + random(3));
        }
        message_combatd(msg, me, target);
        return 1;
}
Example #20
0
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int damage;

        if (userp(me) && ! me->query("can_perform/miaojia-jian/zhu"))
                return notify_fail("你还没有受过高人指点,无法施展" ZHU "。\n");

        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail(ZHU "只能对战斗中的对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon")) ||
            (string)weapon->query("skill_type") != "sword")
                return notify_fail("你使用的武器不对,难以施展" ZHU "。\n");

        if ((int)me->query_skill("miaojia-jian", 1) < 120)
                return notify_fail("你苗家剑法不够娴熟,难以施展" ZHU "。\n");

        if ((int)me->query_skill("force") < 150 )
                return notify_fail("你的内功火候不够,难以施展" ZHU "。\n");

        if ((int)me->query("max_neili") < 1200)
                return notify_fail("你的内力修为不够,难以施展" ZHU "。\n");

        if ((int)me->query("neili") < 200)
                return notify_fail("你现在真气不够,难以施展" ZHU "。\n");

        if (me->query_skill_mapped("sword") != "miaojia-jian")
                return notify_fail("你没有激发苗家剑法,难以施展" ZHU "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIY "$N" HIY "回圈手中" + weapon->name() + HIY "施「黄龙吐珠」斜"
              "贯而出,剑尖顿时吐出一道黄芒,闪电般射向$n" + HIY "!\n" NOR;

        ap = ap_power(me, "sword"); 
        dp = dp_power(target, "parry"); 

        if (ap / 2 + random(ap) > dp)
        {
                damage = da_power(me, "sword");
                
                me->add("neili", -150);
                me->start_busy(2);
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 60,
                                           HIR "$n" HIR "见状连忙格挡,可哪里来得"
                                           "及,登时只觉全身一麻,剑气已透胸而过。\n"
                                           NOR);
        } else
        {
                me->add("neili", -50);
                me->start_busy(3);
                msg += CYN "可是" CYN "$n" CYN "一声冷"
                       "笑,飞身一跃而起,避开了" CYN
                       "$N" CYN "发出的剑气。\n"NOR;
        }
        message_combatd(msg, me, target);

        return 1;
}
Example #21
0
int cast(object me, object target)
{
    string msg;
    int damage, ap, dp;

    if (!target) target = offensive_target(me);
    if (!target
    ||  !target->is_character()
    ||  target->is_corpse()
    ||  target==me)
        return notify_fail(HIR "你要对谁使用黑雾?\n" NOR);
    if ((int)me->query_skill("necromancy", 1) < 30)
        return notify_fail("你的勾魂术火候不够,哪里用得出这招!\n");
    if ((int)me->query("mana") < 40 + (int)me->query("mana_factor"))
        return notify_fail("你的法力不够!\n");
    if ((int)me->query("force") < 200)
        return notify_fail("你的内力不够,无法喷出黑雾。\n");
    if ((int)me->query("sen") < 40)
        return notify_fail("你现在神智不清,别把自己迷倒了!\n");

    me->add("mana", -50-(int)me->query("mana_factor"));
    me->add("force", -150);
    me->receive_damage("sen", 50);

    if (random(me->query("max_mana")) < 150) {
        write("这一次好象不灵。\n");
        return 1;
    }

    msg = HIG "$N突然腾空而起,口中高呼念念有词,张口喷出黑雾将$n团团围住!\n" NOR;

    ap = me->query_skill("spells");
    ap = (ap * ap * ap / (4 * 400)) * (int)me->query("sen");
    ap += (int)me->query("combat_exp");
    dp = target->query("combat_exp");
    if (random(ap + dp) > dp) {
        damage = (int)me->query("max_mana") / 10 + random((int)me->query("eff_sen") / 10);
        damage -= (int)target->query("max_mana") / 10 + random((int)me->query("eff_sen") / 5);
        damage += (int)me->query("mana_factor") - random((int)target->query("mana_factor"));
        //here we can see if 2 players are at same status, the attacker has higher chance.
        if (damage > 0) {
            //finally damage also depends on enabled spells level.
            damage += damage+random((damage*(int)me->query_skill("spells"))/240);
            msg += HIM "结果$n分不清东西了!\n" NOR;
            target->receive_damage("sen", damage, me);
            target->receive_wound("sen", damage*2, me);
            target->receive_damage("kee", damage*2, me);
            target->receive_wound("kee", damage*3, me);
            target->start_busy(1);
            me->improve_skill("necromancy", 1, 1);
            me->start_busy(2);
        } else {
            //here, cast failed and the target's mana_factor will be added to the previous 
            //damage to hurt yourself:(...note, damage<0.
            msg += HIC "结果黑雾$n以法力一逼,反向$N回卷而去!\n" NOR;
            damage -= (int)target->query("mana_factor");
            damage -= random((-damage*(int)target->query_skill("spells"))/100);
            me->receive_damage("sen", -damage, target);
            me->receive_wound("sen", -damage*2, target);
            me->receive_damage("kee", -damage, target);
            me->receive_wound("kee", -damage*3, target);
        //  me->improve_skill("necromancy", 1, 1);
        }
    } else
        msg += "但是被$n躲开了。\n";

    message_vision(msg, me, target);
    if (damage > 0) COMBAT_D->report_status(target);
    else if (damage < 0) COMBAT_D->report_status(me);
    //damage=0 corresponding to "但是被$n躲开了。\n"--no report.   

    if (!target->is_fighting(me)) {
        if (living(target)) {
            if (userp(target)) target->fight_ob(me);
            else target->kill_ob(me);
        }
        me->kill_ob(target);
    }

    me->start_busy(1+random(2));
    return 3+random(5);
}
Example #22
0
int perform(object me, object target)
{
	string msg;
	int myexp,yourexp,lvl,extra, mod, x;

	if (userp(me))
	if (me->query("class")!= "shaolin" && me->query("class")!="bonze")
		return notify_fail("『千手千变』是佛门武功。\n");
	
	extra=me->query_skill("dabei-strike",1);		
	if(extra<20)
		return notify_fail("『千手千变』需要20级的大慈大悲千叶式。\n");

	if( !target ) target = offensive_target(me);
	if( !target
	||	!target->is_character()
	||	!me->is_fighting(target) )
		return notify_fail("『千手千变』只能对战斗中的对手使用。\n");
		
	if ((target->query("boss") || target->query("big_boss"))&& me->query("class")!="shaolin")
		return notify_fail(HIW"此人功力深湛,不会被此手法迷惑的。\n"NOR);
		
	mod = COMBAT_D->can_busy(me, target, "dabei-strike");	
	if (!mod)
		return notify_fail(HIW"此人功力深湛,不会被此手法迷惑的。\n"NOR);
			
	if(target->is_busy())
		return notify_fail(target->name()+"已经手忙脚乱了!\n");
			
	myexp = (int) me->query("combat_exp");
	yourexp = (int) target->query("combat_exp")* mod/10;

// 	(180/2+1.2x180)	= 306/40+1 = 8
	lvl = (int) me->query_skill("unarmed") / 40 + 1;

	// 兴国的BUSY效率不高
	if (lvl > 5 && me->query("class")=="bonze")	lvl = 5;
			
	msg = HBRED+HIW "$N"HIW"使出大悲千叶掌法中的『千手千变』,幻出无数掌影击向$n!" NOR;
			
	if (COMBAT_D->do_busy_attack(me, target, "dabei-strike", "unarmed", lvl* 100, mod)) 
	{
		message_vision(msg + "\n", me, target);
		msg = YEL"结果$n被$N攻了个手忙脚乱!\n"NOR;
		message_vision(msg, me, target);
		target->force_busy(2);
		target->set_temp("busy_timer/dabei-strike",time());
		me->perform_busy(1);
	}
	else
	{
		me->add_temp("apply/attack",extra/2);
		COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
		me->add_temp("apply/attack",-extra/2);
		me->perform_busy(2);
	}
	
	// INherently, Every busy has 4*level hate, unarmed makes it 10x you/target level every 2 turn.
	if (target && !userp(target)){
		x = me->query("combat_exp")> target->query("combat_exp") 
			? target->query("combat_exp"): me->query("combat_exp");
		target->add_hate(me, F_LEVEL->get_level(x)*6);
	}
	
	return 1;
}
Example #23
0
int perform(object me, object target)
{
	object armor;
	int damage;
	string *limb, type, result, str;

	type = "内伤";

	if( !target ) target = offensive_target(me);

	if( !target
	||	!target->is_character()
	||	!me->is_fighting(target) )
		return notify_fail("你不在战斗中。\n");

	if ( objectp(me->query_temp("weapon")) )
		return notify_fail("你不是空手。\n");

/*
	if( target->is_busy() )
		return notify_fail(target->name() + "目前正自顾不暇,放胆攻击吧。\n");
*/
	
	if( (int)me->query_skill("huoyan-dao", 1) < 120 )
		return notify_fail("你的火焰刀修为不够。\n");

	if ( me->query_skill_mapped("force") != "xiaowuxiang"
	&& me->query_skill_mapped("force") != "longxiang-banruo")
                return notify_fail("你所用内功不对!\n");

	if( me->query("neili") <= 500 )
                return notify_fail("你的内力不够!\n");

	if( me->query("jingli") <= 150 )
                return notify_fail("你的精力不够!\n");

	message_vision(HIR "$N长吸一口气,身上衣衫缓缓涨起,两掌变得通红,射出一股灼人热气。$n的身影被笼罩在一团火焰之中。\n\n" NOR, me,target);
	//tell_object(target, BLU "你只觉一股热浪扑面,霍的胸口一阵剧痛。\n"NOR);
	me->add("neili", -100);
	me->add("jingli", -100);

	if( random(me->query("combat_exp")) > (int)target->query("combat_exp")/2){ 
		if( target->query_temp("armor/cloth")){
		armor = target->query_temp("armor/cloth");
		if( armor->query("armor_prop/armor") < 150){
		message_vision(HIY"只见$N身上的$n"+HIY+"已被震得粉碎,变成一块块破布掉在地上。\n"NOR, target, armor);
		armor->unequip();
                armor->move(environment(target));
                armor->set("name", "破碎的" + armor->query("name"));	
		armor->set("value", 0);
                armor->set("armor_prop/armor", 0);
                target->reset_action();
		}
	}
		damage = random((int)me->query_skill("strike"))*5;
                target->receive_damage("qi", damage,  me); 
		target->receive_wound("qi", (int)me->query_skill("huoyan-dao", 1), me);
		target->start_busy(1+random(3));
		
	limb = target->query("limbs");
   	result = COMBAT_D->damage_msg(damage, type);
   	result = replace_string( result, "$l", limb[random(sizeof(limb))]);
   	result = replace_string( result, "$p", target->name() );
   	message_vision(result, me, target);

   	str = COMBAT_D->status_msg((int)target->query("qi") * 100 /(int)target->query("max_qi"));
   	message_vision("($N"+str+")\n", target);
	}

	else 
	{
	message_vision(HIY "$p赶紧向後跃开数丈,躲开$P的攻击。\n" NOR, me, target);
	}
	me->start_busy(1+random(3));
	return 1;
}
Example #24
0
int perform(object me, object target)
{
        object weapon;
        string msg;
 
        if (userp(me) && ! me->query("can_perform/huoyan-dao/yan"))
                return notify_fail("你还没有受过高人指点,无法施展" YAN "。\n");

        if (! target) target = offensive_target(me); 
        
        if (! target || ! me->is_fighting(target)) 
                return notify_fail(YAN "只能在战斗中对对手使用。\n");
         
        if (me->query_temp("weapon") || 
            me->query_temp("secondary_weapon")) 
                return notify_fail("你必须空手才能施展" YAN "。\n");
         
        if (me->query_skill("force") < 200) 
                return notify_fail("你的内功的修为不够,无法施展" YAN "。\n");
        
        if (me->query_skill("huoyan-dao", 1) < 150) 
                return notify_fail("你的火焰刀修为不够,无法施展" YAN "。\n");
         
        if (me->query("neili") < 600 || me->query("max_neili") < 2000) 
                return notify_fail("你的真气不够,无法施展" YAN "。\n");

        if (me->query_skill_mapped("strike") != "huoyan-dao") 
                return notify_fail("你没有激发火焰刀,无法施展" YAN "。\n");

        if (me->query_skill_prepared("strike") != "huoyan-dao")
                return notify_fail("你没有准备火焰刀,无法施展" YAN "。\n");

        if (me->query_skill_prepared("hand") == "dashou-yin")
                return notify_fail("施展" YAN "时火焰刀不宜和密宗大手印互背!\n");

        if (! living(target))
               return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIR "$N" HIR "一声怒嚎,狂催真气注入单掌,掌缘顿时腾起一道烈炎,接二连三朝$n"
              HIR "劈去。\n" NOR;
        message_combatd(msg, me, target);

        me->add("neili", -500);

        me->add_temp("apply/attack", 50);
        COMBAT_D->do_attack(me, target, weapon, 0);

        me->add_temp("apply/attack", 50);
        COMBAT_D->do_attack(me, target, weapon, 0);

        me->add_temp("apply/attack", 50);
        COMBAT_D->do_attack(me, target, weapon, 0);

        me->add_temp("apply/attack", 50);
        COMBAT_D->do_attack(me, target, weapon, 0);

        me->add_temp("apply/attack", 50);
        COMBAT_D->do_attack(me, target, weapon, 0);

        // 消除攻击修正
        me->add_temp("apply/attack", -250);

        me->start_busy(3 + random(2));

        return 1;
}
Example #25
0
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int damage;
 
        if (! target) target = offensive_target(me);

        /*
        if (userp(me) && ! me->query("can_perform/wudang-jian/sheng"))
                return notify_fail("你所使用的外功中没有这种功能。\n");
        */

        if (! target || ! me->is_fighting(target))
                return notify_fail(SHENG "只能在战斗中对对手使用。\n");

        if (! objectp(weapon = me->query_temp("weapon")) ||
              (string)weapon->query("skill_type") != "sword")
                return notify_fail("你使用的武器不对,难以施展" SHENG "。\n");

        if (me->query_skill("force") < 80)
                return notify_fail("你的内功的修为不够,难以施展" SHENG "。\n");

        if (me->query_skill("wudang-jian", 1) < 60)
                return notify_fail("你的武当剑法修为不够,难以施展" SHENG "。\n");

        if (me->query_skill_mapped("sword") != "wudang-jian")
                return notify_fail("你没有激发武当剑法,难以施展" SHENG "。\n");

        if (me->query("neili") < 50)
                return notify_fail("你现在真气不够,难以施展" SHENG "。\n");

        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIW "$N" HIW "凝神聚气,手中" + weapon->name() +
              HIW "回转,划出一个闪亮的剑圈,套向$n" HIW "而去。\n" NOR;

        ap = me->query_skill("sword");
        dp = target->query_skill("parry");

        if (ap / 2 + random(ap) > dp)
        {
                damage = ap / 3 + random(ap / 2);
                me->add("neili", -30);
                me->start_busy(2);
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 10,
                                           HIR "$n" HIR "不明剑理,一个不慎,登时被$N"
                                           HIR "划中,鲜血直流!\n" NOR);
        } else
        {
                me->add("neili", -20);
                me->start_busy(3);
                msg += CYN "可是$p" CYN "微微一笑,轻轻格挡开了$P"
                       CYN "的剑招。\n"NOR;
        }

        message_combatd(msg, me, target);

        return 1;
}
Example #26
0
int perform(object me, object target)
{
	object ob;
	string msg;
	int skill;
	
	        if (! wizardp(me)) 
                return notify_fail("目前这功能还不开放!\n");

	if( !target ) target = offensive_target(me);
	if( !target
        ||      !target->is_character()
        ||      !me->is_fighting(target) )
                return notify_fail("花开并蒂只能带动战斗中的对手。\n");
                
        if( me->query_temp("yield") )
                return notify_fail("你不出掌,怎么能出「花开并蒂」?\n");
        
        if( objectp(ob = me->query_temp("double_huakai")) )
	{
                if( ob->is_fighting(me) )
                	return notify_fail("你已经在出「花开并蒂」了。\n");
        }
        
        if( (int)me->query_temp("huakai"))
        	return notify_fail("你已经在出「花开并蒂」了。\n");
        	
        if( (int)me->query_skill("mian-zhang", 1) < 99)
        	return notify_fail("你的绵掌不够纯熟,尚未能出此绝招。\n");
        
        if( (int)me->query_skill("taiji-shengong", 1) < 79)
        	return notify_fail("你的太极神功修为不够,不能出「花开并蒂」。\n");
        	
        if( (int)me->query("jiali") > 2 || (int)me->query("jiajin") > 2)
        	return notify_fail("你发现加力后无法把绵掌中若有若无,借力打力的要决发挥出来。\n");
                
        msg = HIM "\n$N深深吸了一口气,一招「花开并蒂」左手挥掌猛击$n的右颊,右手出指疾点$n的“缺盆穴”。\n"NOR;
        
        me->add("neili", -30 +random(-20));
        me->add("jingli", -15 +random(-15));
        
	
        if( random(me->query("combat_exp") * me->query_int() / 100) 
		> (int)target->query("combat_exp") * target->query_int() / 300 )
        {
		me->start_busy(2);
		me->set_temp("huakai", 1);
		call_out("huakai", 1, me, target);
	}
	else
	{
		msg += YEL"可是$p已看破此招,不慌不忙的避开了。\n"NOR;
		me->start_busy(1+random(3));
		}
	
		message_vision(msg, me, target);
	
	return 1;
	

}	
Example #27
0
int perform(object me, object target)
{
	object weapon;
	int i, a, ap, dp, power;

	if (!target) target=offensive_target(me);

	if (!target || !target->is_character() || !me->is_fighting(target))
		return notify_fail("你不在战斗中!\n");

	weapon=me->query_temp("weapon");

	if (!objectp(weapon) || weapon->query("skill_type") != "sword")
		return notify_fail("你手中无剑,如何使得出哀牢山剑意?\n");

	if (me->query_skill("kurong-changong", 1)<70)
		return notify_fail("你的内功火候未到,无法架御哀牢山剑意!\n");
	
	if (me->query_skill("sword", 1) < 100)
		return notify_fail("你剑法修为不够,无法施展哀牢山剑意!\n");
	
	if (me->query_skill("duanjia-jian",1)<60)
		return notify_fail("你段家剑修为不够,无法施展哀牢山剑意!\n");
	
	if( me->query_skill_mapped("force") != "kurong-changong")
		return notify_fail("你所用的内功与哀牢山剑意气路相悖!\n");

	if (me->query("neili") <= 500)
		return notify_fail("你的内力不够使用哀牢山剑意!\n");
	
	message_vision(HIR "\n突然间$N剑法突变,剑气纵横,上六剑,下六剑,前六剑,后六剑,\n\n"NOR, me, target);
	message_vision(HIR "\n左六剑,右六剑,施展哀牢山剑意对$n虚虚实实连刺了三十六剑!\n\n" NOR, me, target);

	if (me->query("combat_exp")*100/target->query("combat_exp")<120)
		a=3;
	else
	{
		if (me->query("combat_exp")*100/target->query("combat_exp")<150)
			a=4;
		else
		{
			if (me->query("combat_exp")*100/target->query("combat_exp")<180)
				a=5;
			else a=6;
		}
	}

	for (i=1; i<=a; i++)
		COMBAT_D->do_attack(me, target, weapon);

	ap = me->query_skill("force")+me->query_skill("sword")/3;
	dp = target->query_skill("force")+target->query_skill("dodge")/3;
	power =  me->query_skill("yiyang-zhi",1) + me->query_skill("duanjia-jian",1);

// 增加攻击力 消耗极大之内力
	if(random(2) == 1
		&& random(ap+dp)*100 > dp*50
		&& (int)me->query_skill("yiyang-zhi", 1) > 200 
		&& me->query("neili") >= 2000 
		&& me->query("family/family_name")=="大理段家")
	{
		message_vision(HIY "\n只见$N剑交左手,右手急运内功将一阳指力贯注在"NOR+weapon->query("name")+NOR HIY",对着$n补了一剑!\n" NOR, me, target);
		me->add_temp("apply/speed", power/3);
		me->add_temp("apply/damage", power/2);
		me->add_temp("apply/attack", power/2);
		target->add_temp("apply/defense", -power/5);
		target->add_temp("apply/dodge", -power/5);
		target->add_temp("apply/parry", -power/5);
		COMBAT_D->do_attack(me, target, weapon);
		target->add_temp("apply/defense", power/5);
		target->add_temp("apply/dodge", power/5);
		target->add_temp("apply/parry", power/5);
		me->add_temp("apply/speed", -power/3);
		me->add_temp("apply/damage", -power/2);
		me->add_temp("apply/attack", -power/2);
		me->add("neili", -500);
	}
	me->start_busy(a-random(4));
	me->add("neili", -200);
	me->add("jingli", -50);
	return 1;
}
Example #28
0
int perform(object me, object target)
{
	object weapon;
	int speed, damage, hand;

	weapon = me->query_temp("weapon");

	if( !target && me->is_fighting() ) target = offensive_target(me);

	if( !target
	||  !target->is_character()
	||  !me->is_fighting(target) )
		return notify_fail("落英神剑掌和兰花拂穴手的搭配攻击只能对战斗中的对手使用。\n");
	if( me->query("gender") != "女性")
		return notify_fail("你不是女儿身,跟这一招的优雅姿态有点格格不入。\n");

	if( objectp(weapon))
		return notify_fail("你必需先放下武器。\n");

	if( me->query_temp("luoying_lanhua") )
		return notify_fail("你已经使出了落英神剑掌和兰花拂穴手的搭配攻击!\n");
	
	if( me->query_skill("lanhua-fuxue",1) < 90 )
		return notify_fail("你的兰花拂穴手修为不足。\n");

	if( me->query_skill("luoying-shenjian",1) < 90 )
		return notify_fail("你的落英神剑掌修为不足。\n");

	if( me->query_skill("bitao-xuangong", 1) < 100 )
		return notify_fail("你的碧涛玄功修为不足,无法同时施展落英神剑掌和兰花拂穴手!\n");

	if( me->query_skill_mapped("force") != "bitao-xuangong")
		return notify_fail("你必需先运使碧涛玄功!\n");
	if( me->query_skill_mapped("strike") != "luoying-shenjian")
		return notify_fail("你所施展的掌法并非落英神剑掌,如何能与兰花拂穴手搭配?\n");

	if( me->query("max_neili") <= 1000 )
		return notify_fail("你的内力修为不足!\n");

	if( me->query("neili") <= 400 )
		return notify_fail("你的内力不够!\n");

	if( me->query("jingli") <= 400 )
		return notify_fail("你的精力不够!\n");

	damage = (me->query_skill("lanhua-fuxue",1) + me->query_skill("luoying-shenjian",1))/6;
	hand = (me->query_skill("hand",1)+me->query_skill("strike",1) )/6;
	speed = (me->query_skill("hand",1)+me->query_skill("strike",1) )/200;
	me->add("neili", -80);
	me->add("jingli", -80);

	
	//命中率增加
	me->add_temp("apply/speed", speed);
	me->add_temp("apply/attack", damage);
	me->add_temp("apply/damage", damage/2);

	me->set_temp("luoying_lanhua", 1); 	

	message_vision(HIY"\n$N突然变招,使出「落英神剑掌」来,掌影飘忽於四方八面,或五虚一实,或八虚一实,真如桃林中狂风忽起、万花齐落一般,妙在姿态飘逸,宛若翩翩起舞。\n"NOR, me,target);

	if(me->is_fighting(target) ){
	COMBAT_D->do_attack(me, target, me->query_temp("weapon"));
	}

	message_vision(HIC"\n但见$N指化为掌,掌化为指,「落英神剑掌」与「兰花拂穴手」交互为用,当真是掌来时如落英缤纷,指拂处若春兰葳蕤,不但招招凌厉,而且丰姿端丽。\n"NOR, me,target);

	if(me->is_fighting(target) ){
	COMBAT_D->do_attack(me, target, me->query_temp("weapon"));
	}

	me->set_temp("fuxue", 1); 
	me->start_busy(1);

	call_out("checking", 1, me, weapon,speed,damage);

	return 1;
}
Example #29
0
File: ziqi.c Project: mudchina/sjsh
int cast(object me, object target)
{
	string msg;
	int damage, ap, dp;
	int extradam;
	if( !target ) target = offensive_target(me);

	if((int)me->query_skill("spells") < 20 )
		return notify_fail("你的法术不够高!\n");

	if( !target
	||	!target->is_character()
	||	target->is_corpse()
	||	target==me)
		return notify_fail("你要对谁施展氤氲紫气?\n");

	if((int)me->query("mana") < 100 )
		return notify_fail("你的法力不够!\n");

	if((int)me->query("sen") < 100 )
		return notify_fail("你的精神没有办法有效集中!\n");

	me->add("mana", -25);
	me->receive_damage("sen", 20);

	if( random(me->query("max_mana")) < 20 ) {
		write("你失败了。\n");
		return 1;
	}

	msg = HIM "$N口中喃喃地念著咒文,左手一挥,手中聚起一团紫气射向$n!\n\n" NOR;

	ap = me->query_skill("spells");
	extradam = ap/2;
	ap = ( ap * ap /100 * ap / 4 ) * (int)me->query("sen") ;
	dp = target->query("combat_exp");
	if( random(ap + dp) > dp ) {
		damage = (int)me->query("max_mana") / 10 + random((int)me->query("eff_sen") / 20) + random(extradam);
		damage -= (int)target->query("max_mana") / 30 + random((int)me->query("eff_sen") / 15);
		if( damage > 0 ) {
			msg +=  MAG "结果「嗤」地一声,紫气从$p身上透体而过,拖出一条长长的七彩光气,光气绕了\n"
					"回转过来又从$N顶门注入$P的体内!\n" NOR;
			me->receive_heal("sen", target->receive_damage("sen", damage, me));
			target->receive_wound("sen", damage/3, me);
			me->improve_skill("pansi-dafa", 1, 1);
		} else
			msg += HIB"结果「嗤」地一声,紫气从$p身上透体而过,无声无息地钻入地下!\n"NOR;
	} else
		msg += "但是被$n躲开了。\n";

	message_vision(msg, me, target);
	if( damage > 0 ) COMBAT_D->report_status(target);

	if( !target->is_fighting(me) ) {
		if( living(target) ) {
			if( userp(target) ) target->fight_ob(me);
			else 				target->kill_ob(me);
		}
		me->kill_ob(target);
	}

	me->start_busy(2);
	return 1;
}
Example #30
0
File: hh.c Project: mudchina/sjsh
int perform(object me, object target)
{
	string msg, str;
	int mydf;
	int ap, dp, pp;
	int youcps, mycor, mystr, youstr;
	int damage_bonus, damage, wound;
	int delay;
	object ob;

	if( !target ) target = offensive_target(me);

	if( !target
	||	!target->is_character()
	||	!me->is_fighting(target) )
		return notify_fail("不在战斗中,舍什么身?\n");

	mydf=(int)me->query_skill("dragonfight",1);
	if(mydf<100) 
		return notify_fail("你的修为不够深,还不能领悟舍身技的精髓。\n");
                if(me->query("family/family_name")!="东海龙宫")
                return notify_fail("你非龙族,不能用此招!\n");

	mydf=(int)me->query_skill("dragonforce",1);
	if(mydf<100) 
		return notify_fail("你的修为不够深,还不能领悟舍身技的精髓。\n");
 if(environment(me)!=environment(target))
     notify_fail("你要攻击的人不在这里。\n");
	if((int)me->query("force")<500) return
	    notify_fail("你的内力不够了。\n");

	msg = CYN "$N右掌挥出,斩向$n的左肩,\n";
	mycor=me->query_cor();
	youcps=target->query_cps();
	ob=target->query_temp("weapon");
	str="右手";
	if(objectp(ob)) str="手中的"+ob->query("name");
	ap=COMBAT_D->skill_power(me, "unarmed", SKILL_USAGE_ATTACK);
	dp=COMBAT_D->skill_power(target,"dodge", SKILL_USAGE_DEFENSE);
	dp/=2;	
	pp=COMBAT_D->skill_power(target,"unarmed", SKILL_USAGE_DEFENSE);
	pp/=2;
	if(objectp(ob)) pp/=2;
	mystr=me->query_str();
	youstr=me->query_str();
	damage_bonus=mystr*(100+me->query("force_factor"))/100;

	if( random(youcps) < 15 || random(ap+dp)>dp) {
		msg += "$n想用"+str+"挡开,不料却被$N一把抓住。\n";
		msg += "$N顺势上步,使出了「舍身技」!\n\n" NOR;
		msg += CYN "$N左脚铲向$n右腿膝盖,";
		if(random(ap+pp)>pp) {
			msg += "结果正铲在$n的小腿上。\n" NOR;
			damage=calculate_damage(me, target, 100, damage_bonus);
			wound=random(damage-(int)target->query_temp("apply/armor"));
			if(damage>0) {
				target->receive_damage("kee", damage, me);
				if(wound>0) target->receive_wound("kee", wound, me);
				msg+=COMBAT_D->damage_msg(damage, "内伤");
			}
		}
		else msg+="结果被$n提腿挡开了。\n" NOR;
		msg += CYN "\n紧跟着$N收左脚,提左膝撞向$n的软肋,\n";
		msg += "同时右手曲肘撞向$n的面门,";
		if(random(ap+pp)>pp) {
			msg += "结果正中$n。\n" NOR;
			damage=calculate_damage(me, target, 120, damage_bonus);
			wound=random(damage-(int)target->query_temp("apply/armor"));
			if(damage>0) {
				target->receive_damage("kee", damage, me);
				if(wound>0) target->receive_wound("kee", wound, me);
				msg+=COMBAT_D->damage_msg(damage, "内伤");
			}
		}
		else msg+="结果被$n挡开了。\n" NOR;
		msg += CYN "\n$N接着顺势用右手抓住$n右臂,半转身将$n摔了出去,";
		if(random(ap+pp)>pp) {
                        msg += "结果$n一跟头摔在地上。\n" NOR;
                        damage=calculate_damage(me, target, 150, damage_bonus);
			wound=random(damage-(int)target->query_temp("apply/armor"));
                        if(damage>0) {
                                target->receive_damage("kee", damage, me);
				if(wound>0) target->receive_wound("kee", wound, me);
                                msg+=COMBAT_D->damage_msg(damage, "内伤");
                        }
                }
                else msg+="结果被$n一个踉跄,却没摔倒。\n" NOR;
		message_vision(msg, me, target);
		msg+=COMBAT_D->report_status(target, 0);
	} else {
		msg += "可是$p看破了$P的企图,向后越开。\n" NOR;
		message_vision(msg, me, target);
	}
	delay = random(6)+2;
	me->start_busy(delay);
	me->add("force", -300);

	return 1;
}