Example #1
0
int main(object me, string arg)
{
	object ob;
	string old_status, new_status;
	int my_level, ob_level, level;

	if( me!=this_player(1) ) return 0;

	if( !arg || sscanf(arg, "%s %s", arg, new_status)!=2 )
		return notify_fail("指令格式:promote <使用者> <等级>\n");

	if( wiz_level(new_status) < 0 ) return notify_fail("没有这种等级。\n");

	if( !objectp(ob = present(arg, environment(me))) 
	||	!userp(ob) )
		return notify_fail("你只能改变使用者的权限。\n");

        if( wiz_level(me) < wiz_level(new_status) )
                 return notify_fail("你没有这个权力。");

	old_status = wizhood(ob);

	seteuid(getuid());
	if( !(SECURITY_D->set_status(ob, new_status)) )
		return notify_fail("修改失败。\n");

	message_vision("$N将$n的权限从 " + old_status + " 改为 " + new_status + " 。\n", me, ob);
	seteuid(getuid());
	ob->setup();

	return 1;
}
Example #2
0
int valid_leave(object obj, string dir){
	if (userp(obj) && random(20)) {
		obj->move(this_object());
		return notify_fail("");
	}
	return 1;
}
Example #3
0
void init()
{
        if( !previous_object()
        ||      !userp(previous_object()) )
                return;
      call_out( "fire_wound", 6,previous_object());
}
Example #4
0
int perform(object me, object target)
{
 string msg;
 int extra; 
 object weapon;
 if(me->is_busy())
  return notify_fail("你现在没空!!\n");
 extra = me->query_skill("springrain-blade",1);
 if ( extra < 120 && userp(me)) 
        return notify_fail("你的春雨刀法不够纯熟。\n");
 if( !target ) target = offensive_target(me);
 if( !target
        ||      !target->is_character()
        ||      !me->is_fighting(target) )
                return notify_fail("[当时明月]只能对战斗中的对手使用。\n");
        me->add_temp("apply/attack",extra*2);
        me->add_temp("apply/damage",extra);
        weapon = me->query_temp("weapon");
        msg = HIC  "$N轻叹一声,随手挽了个刀花,"+ weapon->name()+"斜斜挥出,却是『春雨刀法』中的精髓之式「当时-明-月-」!\n" NOR;
        message_vision(msg,me,target);
        msg = HIC"              当   "HIY"             曾\n" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        msg = HIC"              时   "HIY"             照\n" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        msg = HIC"              明   "HIY"             彩\n" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        msg = HIC"              月   "HIY"             云\n" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        msg = HIC"              在   "HIY"             归\n" NOR;
        COMBAT_D->do_attack(me,target, TYPE_PERFORM,msg);
        me->start_busy(3);
        me->add_temp("apply/attack",-extra*2);
        me->add_temp("apply/damage",-extra);
        return 1;
}    
Example #5
0
int cast(object me, object target)
{
	object soldier;
	int	spells,lvl,i;

	if(userp(me))
		return notify_fail("你所选用的武功中没有这种必杀技。。\n");

    if(me->query("class")!="taoist")
		return notify_fail("只有三清宫的弟子才能够使用三清道术。\n");

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

	if( !me->is_fighting() )
		return notify_fail("只有战斗中才能召唤天将!\n");
    if( me->query_temp("max_guard") > MAX_GUARD )
		return notify_fail("你已经召唤太多天兵鬼卒了!\n");

	lvl=me->query_skill("necromancy",1);

	message_vision("$N喃喃地念了几句咒语。\n", me);
	
	seteuid(getuid());
	if(random(spells) > (spells/2))
		soldier = new("/obj/npc/heaven_soldier");
	else
Example #6
0
int target_perform(object me, object target)
{
    string msg;
    int extra,i,j,lmt,damages,bell;
    object weapon;
    object *enemy;
            
    extra = me->query_skill("sharen-sword",1);
    weapon = me->query_temp("weapon");
    if(extra <= 162)
    {
        damages = extra/4;
        msg = HIY"$N"+HIY"凶性大发,手中的"+ weapon->name()+
            HIY"狂风暴雨般地向$n"+HIY"卷来! " NOR;
        message_vision(msg,me,target);
        me->add_temp("apply/attack",damages);
        me->add_temp("apply/damage",damages*2);
    }
    else
    {
        if (me->query("class")=="assassin") damages = extra/3;
                else {damages = extra/4;}
        
        msg = HIY"$N"+HIY"杀气大盛,只见"NOR+ weapon->name()+
            HIY"疾风骤雨般地向$n"+HIY"全身各大要穴刺到! " NOR;
        message_vision(msg,me,target);
        me->add_temp("apply/attack",damages);
        me->add_temp("apply/damage",damages*2);
    }
    lmt = random(5)+3;
    if (extra>160 && lmt<5) lmt=5;
         
    for(i=1;i<=lmt;i++)
    {
        msg =  HIR "第"+chinese_number(i)+"剑!" NOR;
        COMBAT_D->do_attack(me,target,TYPE_PERFORM,msg);  
    }
    
    me->add_temp("apply/attack",-damages);
    me->add_temp("apply/damage",-damages*2);
    bell = lmt*5-5;
    if (userp(me)) me->add("bellicosity",-bell);
    if (userp(me)) me->add("bellicosity",-bell);
    if (me->query_busy()<4) 
                me->start_busy(4);
    return 1;
} 
Example #7
0
int cast(object me, object target)
{	
	int extra,my_exp;
	extra=me->query_skill("kwan-yin-spells",1);
	my_exp=me->query("combat_exp");
	
	if(userp(me))
		return notify_fail("你所选用的武功中没有这种必杀技。。\n");
	
	if(me->query("class")!="lama")
		return notify_fail("只有大昭寺的弟子才能使用真言。\n");
	
	if(extra<60) 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==target)
		return notify_fail("真言法术不能用在自己身上。\n");

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

	message_vision(
		HIR "$N身、口、意与佛成为一体,面色庄重,沉声念道“唵”! \n"NOR,
			me, target );
	
	extra=extra*extra*100;
	
	if(my_exp/2+random(my_exp)*3/2+random(extra)>target->query("combat_exp"))
	{
		message_vision(RED"$n只觉得心头好象被重锤一击,灵魂似乎要离窍而去。 \n\n"NOR,me,target);
		target->receive_wound("gin", 10 + (int)me->query_skill("spells")*3 + random(2)*75,me);
	        COMBAT_D->report_status(target);
        	COMBAT_D->win_lose_check(me,target,1);
	}
	else
		message_vision(RED"$n只觉得心头一紧,急忙凝气护心。 \n"NOR,me,target);

	if (userp(me)) me->add("mana", -400);
	me->set("mana_factor", 0);
	me->start_busy(3);
	return 1;
}
Example #8
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/hanwang-qingdao/ying"))
                return notify_fail("你所使用的外功中没有这种功能。\n");

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

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

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

        if (me->query_skill("hanwang-qingdao", 1) < 80)
                return notify_fail("你的韩王青刀修为不够,难以施展" YING "。\n");

        if (me->query("neili") < 100)
                return notify_fail("你目前的内力不足,难以施展" YING "。\n");

        if (me->query_skill_mapped("blade") != "hanwang-qingdao")
                return notify_fail("你没有激发韩王青刀,难以施展" YING "。\n");

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

        msg = HIC "霎时只见$N" HIC "手中" + weapon->name() +
              HIC "一振,顿时幻出重重刀影,将$n" HIC "团团裹住!\n" NOR;

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

        if (ap / 2 + random(ap) > dp)
        {
                damage = ap / 3 + random(ap / 3);
                me->start_busy(1);
                me->add("neili", -80);
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 20,
                                           HIR "只听$p" HIR "一声惨嚎,一股血柱自" HIR
                                           "血色刀影中激射而出!\n" NOR);
        } else
        {
                me->add("neili", -40);
                me->start_busy(3);
                msg += CYN "可是$n" CYN "淡淡一笑,浑然不将$N"
                       CYN "重重刀影放在眼中,随意将之架开。\n" NOR;
        }
        message_combatd(msg, me, target);

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

        if (userp(me) && ! me->query("can_perform/yingzhua-gong/chumo"))
                return notify_fail("你还没有受过高人指点,无法施展「荡妖除魔」。\n");
                
        if (! target)
        {
                me->clean_up_enemy();
                target = me->select_opponent();
        }

        if (! target || ! me->is_fighting(target))
                return notify_fail("「荡妖除魔」只能在战斗中对对手使用。\n");

        skill = me->query_skill("yingzhua-gong", 1);

        if (skill < 135)
                return notify_fail("你的鹰爪功等级不够,不会使用「荡妖除魔」!\n");

        if (me->query("neili") < 250)
                return notify_fail("你的真气不够,无法运用「荡妖除魔」!\n");
 
        if (me->query_skill_mapped("claw") != "yingzhua-gong") 
                return notify_fail("你没有激发鹰爪功,无法使用「荡妖除魔」!\n");

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

        msg = HIY "$N" HIY "微微一笑,双掌缓缓的向$n" HIY "抓出,此招"
              "看上去也平平无奇,并无多少精妙变化!\n" NOR;
 
        ap = ap_power(me, "claw") + me->query_skill("force");
        dp = dp_power(target, "dodge") + me->query_skill("parry");
        
        if (ap / 2 + random(ap) > dp)
        {
                me->add("neili", -200);
                damage = da_power(me, "claw");
                msg += COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 45,
                                           HIR "不知怎么的,$p" HIR "却偏偏躲不开$P"
                                           HIR "这一抓,结果被抓了个正中,不由得闷"
                                           "哼一声,退了几步。\n" NOR);
                me->start_busy(2);
        } else
        {
                msg += CYN "可是$p" CYN "没有轻视$P" CYN
                       "这一抓,连忙招架,顺势跃开,没有被$P"
                       CYN "得手。\n" NOR;
                me->add("neili",-40);
                me->start_busy(3);
        }
        message_combatd(msg, me, target);

        return 1;
}
Example #10
0
int main(object me, string arg)
{
    	int gin_cost=30, atman_gain;
    	string magic_skill;
    
    	seteuid(getuid());
    
    	if (userp(me))
    		return notify_fail("��ָ���ѱ�exerciseȡ������help exercise \n");
    		
    	if(environment(me)->query("no_fight"))
        	return notify_fail("�㲻�������������С�\n");
    	if( me->is_fighting() )
        	return notify_fail("ս��Ҳ��һ�����У������ܺ�����������ͬʱ���С�\n");
    	if( me->is_busy() )
        	return notify_fail("����һ��������û����ɣ��������С�\n");
    
    	if( arg && !sscanf(arg, "%d", gin_cost) )
        	return notify_fail("��Ҫ�����پ������У�\n");
    
    	if( gin_cost < 10 ) return notify_fail("������Ҫ�� 10 �㾫�����ܽ������С�\n");
    
    	if( (int)me->query("gin") < gin_cost )
        	return notify_fail("�����ھ������㣬�޷�����������\n");
    
    	if( (int)me->query("kee") * 100 / (int)me->query("max_kee") < 70 )
        	return notify_fail("����������״��̫���ˣ��޷����о��񣡣���Ѫֵ������70%���ϣ�\n");
    
    	if( (int)me->query("sen") * 100 / (int)me->query("max_sen") < 70 )
        	return notify_fail("�����ھ���״��̫���ˣ��޷������Լ������飡������ֵ������70%���ϣ�\n");
    
    	write("����ϥ�����������۾���ʼ����˼����\n");
    	me->start_busy(1);
    	me->add("gin", -gin_cost);
    
    	// This function ranged from 1 to 15 when gin_cost = 30
    	atman_gain = gin_cost * ((int)me->query_skill("magic")/10 + (int)me->query_int() ) / 30;
    	atman_gain = (atman_gain + random(atman_gain))/5;
    
    	if( atman_gain < 1 ) {
        	write("������һ��С��ȴ˯���ˡ�\n");
        	return 1;
    	}
    
    	me->add("atman", atman_gain );
    
    	if( (int)me->query("atman") > (int)me->query("max_atman") * 2) {
        	if( (int)me->query("max_atman") >= ((int)me->query_skill("magic", 1) +
             					me->query_skill("magic")/5) * 5 ) {
            		write("�����һ��������ת��ͷ�ǵ���Ҫ�ѿ�һ�����ƺ������������Ѿ�������ƿ����\n");
        		me->set("atman", 2*me->query("max_atman"));	
        	} else {
            		write("�����������ˣ�\n");
            		me->add("max_atman", 1);
            		me->set("atman", me->query("max_atman"));
        	}
        }	
    	return 1;
}
Example #11
0
int perform(object me, object target) 
{ 
        object weapon; 
        string msg; 
        int ap, dp; 
        int damage; 

        if (userp(me) && ! me->query("can_perform/wuxiang-zhi/wuse"))
                return notify_fail("你还没有受过高人指点,无法施展「无色无相」。\n");
                        
        if (! target) target = offensive_target(me); 
        
        if (! target || ! me->is_fighting(target)) 
                return notify_fail("「无色无相」只能在战斗中对对手使用。\n"); 
         
        if (me->query_temp("weapon") || 
            me->query_temp("secondary_weapon")) 
                return notify_fail("你必须空手才能使用「无色无相」!\n"); 
         
        if (me->query_skill("force") < 100) 
                return notify_fail("你的内功的修为不够,不能使用这一绝技!\n"); 
        
        if (me->query_skill("wuxiang-zhi", 1) < 150) 
                return notify_fail("你的无相指修为不够,目前不能使用「无色无相」!\n"); 
         
        if (me->query("neili") < 400) 
                return notify_fail("你的真气不够,无法使用「无色无相」!\n"); 
         
        if (me->query_skill_mapped("finger") != "wuxiang-zhi") 
                return notify_fail("你没有激发大力无相指,不能使用「无色无相」!\n"); 
         
        msg = HIY "$N" HIY "聚起全身功力,汇聚于右指,纵身而上," 
              HIY "向$n扑去,同时一指划出,如同流星一般击向$n" + HIY "!\n" NOR; 
         
        ap = ap_power(me, "finger") + me->query_skill("force");
        dp = dp_power(target, "parry") + target->query_skill("dodge");
         
        if (ap / 2 + random(ap) > dp) 
        { 
                damage = da_power(me, "finger");
                me->add("neili", -200); 
         
                msg += HIR "只见$p" HIR "一声惨叫,已被点中胸口要穴," 
                       "$p" HIR "只觉得胸口气血汹涌,全身气血" 
                       "倒流,哇的一声吐出一口鲜血,苦不堪言!\n" NOR;
		msg += COMBAT_D->do_damage(me, target, REMOTE_ATTACK, damage, 70); 
                me->start_busy(2);
        } else 
        { 
                me->add("neili", -100); 
                me->start_busy(3); 
                msg += CYN "可是$p" CYN "看破了$N" CYN "的企图,轻轻" 
                       CYN "向后飘出数丈,躲过了这一致命的一击!\n"NOR; 
                me->start_busy(3);
        } 
        message_combatd(msg, me, target); 
         
        return 1; 
}
Example #12
0
int perform(object me, object target)
{
        object weapon;
        string msg;

        if (userp(me) && ! me->query("can_perform/damo-jian/sanjue"))
                return notify_fail("你还没有受过高人指点,无法施展「达摩三绝剑」。\n");
 
        if (! target) target = offensive_target(me);

        if (! target || ! me->is_fighting(target))
                return notify_fail("「达摩三绝剑」只能在战斗中对对手使用。\n");

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

        if (me->query_dex() < 30)
                return notify_fail("你的身法不够,目前还不能使用这项绝技!\n");

        if (me->query_skill("force") < 200)
                return notify_fail("你的内功的修为不够,不能使用这一绝技!\n");

        if (me->query_skill("dodge") < 200)
                return notify_fail("你的轻功修为不够,不能使用达摩三绝剑!\n");
 
        if (me->query_skill("sword") < 200)
                return notify_fail("你的剑法修为不够,目前不能使用达摩三绝剑!\n");

        if (me->query("neili") < 150)
                return notify_fail("你的真气不够,不能使用达摩三绝剑!\n");

        if (me->query_skill_mapped("sword") != "damo-jian")
                return notify_fail("你没有激发达摩剑,不能使用达摩三绝剑!\n");

        msg = HIC "$N" HIC "使出达摩剑的绝技「达摩三绝剑」,身法陡然加快!\n" NOR;
        message_combatd(msg, me);

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

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

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

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

        // Back
        me->add_temp("apply/attack", -600);

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

        return 1;
}
Example #13
0
int check_damage(object me, object target, int time)
{
    int ap,dp,damage,success;

    if (!target
    ||  !me
    ||  environment(me) != environment(target)) {
        remove_call_out("check_damage");
        return 1;
    }

    ap = (int)me->query_skill("spells");
    ap = ap*ap*ap/10;
    ap = ap+(int)me->query("combat_exp");

    dp = (int)target->query_skill("spells");
    dp = dp*dp*dp/10;
    dp = dp+(int)target->query("combat_exp");

    damage = (int)me->query("max_mana")/10 - random((int)target->query("max_mana")/10);

    success=1;

    if (damage < 0) success = 0;
    if (random(ap+dp) < dp) success = 0;
    if ((int)me->query("mana") < 30) success = 0;
    if ((int)me->query("kee")  < 30) success = 0;
    if (environment(me)->query("no_fight")
    || environment(me)->query("no_magic")) success = 0;

    if (success) {
message_vision(HIB"\n「啪」地一团蓝色火焰在$N脚下燃起,如鬼魅缠身,将$N拢在中央。\n"NOR, target);
        target->receive_damage("kee", random(damage));
        target->receive_wound("kee", damage/3);
        COMBAT_D->report_status(target);
        me->receive_damage("kee", 25);
        me->add("mana", -25);
        me->start_busy(2);
    } else {
        tell_room(environment(target), "\n四周点点磷火飘荡着………\n");
    }

    time--;

    if (time) {
        call_out("generate_msg", 4, me);
        call_out("check_damage", 8, me, target, time);
    }

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

    return 1;
}
Example #14
0
void init()
{
	if(userp(this_player()))
	{
//	remove_call_out("attack");
	call_out("attack",1,this_player());
	}
}
Example #15
0
void init ()
{
    remove_call_out ("initing");

    if(userp(this_player())) {
      call_out ("initing",2+random(60));
    }
}
Example #16
0
int valid_leave(object me, string dir)
{
	if(!userp(me)&&dir=="eastdown"&&me->query("home")==1) 	{
	tell_room(__DIR__"guandao2",RED"\n只听得土匪大声叫骂:下次再敢来,老子把你给剁成肉泥!!\n"NOR);
	return 0;
	}
	return 1;
}
Example #17
0
int main(object me, string arg)
{
	object obj, old_target;

	if( me->is_busy())
		return notify_fail("你上一个动作还没有完成!\n");
	if( environment(me)->query("no_ansuan") )
		return notify_fail("这里禁止战斗。\n");
	if( environment(me)->query("no_fight") )
		return notify_fail("这里禁止战斗。\n");
	if( !arg || !objectp(obj = present(arg, environment(me))))
		return notify_fail("你想攻击谁?\n");
	if( !obj->is_character() )
		return notify_fail("看清楚一点,那并不是生物。\n");
	if( obj->is_fighting(me) )
		return notify_fail("加油!加油!加油!\n");
	if( !living(obj) || obj->query_temp("noliving") )
		return notify_fail(obj->name() + "已经无法战斗了。\n"); 
	if(obj==me) return notify_fail("你不能攻击自己。\n");

	if( userp(obj) && (object)obj->query_temp("pending/fight")!=me )
	{
		message_vision("\n$N对着$n说道:" + RANK_D->query_self(me) + me->name() + ",领教" + RANK_D->query_respect(obj) + "的高招!\n", me, obj);
		if( objectp(old_target = me->query_temp("pending/fight")) )
			tell_object(old_target, YEL + me->name() + "取消了和你比试的念头。\n" NOR);
		me->set_temp("pending/fight", obj);
		tell_object(obj, YEL"如果你愿意和对方进行比试,请你也对" + me->name() + "("+(string)me->query("id")+")"+ "下一次 fight 指令。\n" NOR);
		write(YEL"由于对方是由玩家控制的人物,你必须等对方同意才能进行比试。\n" NOR);
		return 1;
	}
	if( obj->query("can_speak") )
	{
		message_vision("\n$N对着$n说道:" + RANK_D->query_self(me) + me->name() + ",领教" + RANK_D->query_respect(obj) + "的高招!\n", me, obj);
		notify_fail("看起来" + obj->name() + "并不想跟你较量。\n");
		if( !userp(obj) && !obj->accept_fight(me) ) return 0;

		me->fight_ob(obj);
		obj->fight_ob(me);
	} else {
		message_vision("\n$N大喝一声,开始对$n发动攻击!\n\n", me, obj);
		me->fight_ob(obj);
		obj->kill_ob(me);
	}

	return 1;
}
Example #18
0
int valid_leave(object who,string dir)
{
        if(userp(who) && random(5))        {
                who->move(this_object());
                return notify_fail("");
        }
        return 1;
}   
Example #19
0
void init(){
    	
    	object me;
	if (userp(me=this_player()))
		me->apply_condition("underwater",10);
    	add_action("do_dive", "dive");
    	add_action("do_smile","smile");
}
Example #20
0
void init()
{       
        object me=this_player();
        if (userp(me))
                call_out("letgo",15,this_player());     
//      remove_call_out("letgo");
                
} 
Example #21
0
void init()
{
	::init();
	if( !previous_object()
	||	!userp(previous_object())
	||	wizardp(previous_object()) ) return;
	call_out( "death_stage", 3, previous_object(), 0 );
}
Example #22
0
int valid_leave(object obj, string dir){
        if (userp(obj) && dir=="south") {
                obj->delete_temp("block_msg/all",1);
                tell_object(obj,HIG"你终于走出了那漆黑的尽头,可以依稀辨认出周围的情况。\n"NOR);
                return 1;
                }
        return 1;
} 
Example #23
0
int main(object me, string arg)
{
    string targetname, fabaoname;
    object obj, *inv, target, obj2,old_env, fabao;
    int i, amount;
    mixed no_get;

    if( !wizardp(me) && environment(me)->query("no_magic") )
	return notify_fail("这里禁止祭法宝。\n");
    if( !arg ) return notify_fail("你要祭哪样法宝?\n");

    // Check if correct format is followed
    if( sscanf(arg, "%s on %s", fabaoname, targetname)>2 )
	return notify_fail("指令格式 : ji <法宝名称> [on <目标>]\n");

    // Check if both a fabao and a target is specified.
    // if so, then check 1. whether the player own's the fabao,
    // and 2. check whether the target is in the same environment.
    if( sscanf(arg, "%s on %s", fabaoname, targetname)==2 )
    {
	fabao=present(fabaoname, me);
	if(!fabao) return notify_fail("你没有 "+fabaoname+" 这样法宝。\n");
	target = present(targetname, environment(me));
	if (me->is_busy() && !fabao->query("no_busy"))
	    return notify_fail("你上一个动作还没有完成,无暇分身祭法宝。\n");
	if(!target) return notify_fail("这里没有 " + targetname + "。\n");
	if(target==me)
	    return notify_fail("对自己祭法宝?\n");
	
	// forbid to kill a player whose mudage <16 .here is added by vikee :P
	if(me->query("combat_exp")<50000 && userp(target))
		return notify_fail("自己功夫没练好,就想杀人?\n"); //here is modified by vikee
   
	if(me->query("daoxing")<10000 && userp(target))
  		return notify_fail("自己功夫没练好,就想杀人?\n");//here is modified by vikee

	return fabao->ji(targetname);
	
}
    fabao=present(arg, me);
    if(!fabao) return notify_fail("你没有" + arg +"这样法宝。\n");
    if (me->is_busy() && !fabao->query("no_busy"))
	return notify_fail("你上一个动作还没有完成,无暇分身祭法宝。\n");

    return fabao->ji();
}
Example #24
0
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int damage;

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

        if (! target)
        {
                me->clean_up_enemy();
                target = me->select_opponent();
        }

        if (! target || ! me->is_fighting(target))
                return notify_fail(HENG "只能对战斗中的对手使用。\n");
 
        if (! objectp(weapon = me->query_temp("weapon")) ||
            (string)weapon->query("skill_type") != "blade")
                return notify_fail("你所使用的武器不对,难以施展" HENG "。\n");

        if ((int)me->query_skill("baisheng-daofa", 1) < 150)
                return notify_fail("你百胜刀法还不到家,难以施展" HENG "。\n");

        if (me->query_skill_mapped("blade") != "baisheng-daofa")
                return notify_fail("你没有激发百胜刀法,难以施展" HENG "。\n");

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

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

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

        ap = ap_power(me, "blade") + me->query_str() * 5;
        if (me->query("character") == "光明磊落" || me->query("character")=="国土无双")
        {
                msg = HIR "$N" HIR "嗔目大喝,杀气凛然而起,手持" + weapon->name() +
                      HIR "义无反顾的猛然横扫$n" HIR ",全然不顾生死,浩气怅然!\n" NOR;
                ap += ap * 1 / 4;
        } else
                msg = HIR "$N" HIR "狂提内劲,将全身力道灌注于" + weapon->name() +
                      HIR "之上疾斩劈出,“唰”的一声扫向$n" HIR "而去!\n" NOR;

        dp = dp_power(target, "force")  + target->query_str() * 5;
        damage = 0;
        if (ap / 2 + random(ap) > dp)
        {
                damage = da_power(me, "blade");
                me->add("neili", -350);
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 50,
                                           (: final, me, target, ap, dp :));
                me->start_busy(2);
        } else 
Example #25
0
int perform(object me, object target)
{
        object weapon;
        string msg, skill;
        int i;

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

        if (! target)
        {
                me->clean_up_enemy();
                target = me->select_opponent();
        }

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

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

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

        skill = weapon->query("skill_type");

        if (me->query_skill_mapped(skill) != "duanjia-jian")
                return notify_fail("你现在没有激发段家剑,难以施展" LIAN "。\n");

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

        if ((int)me->query("neili") < 300)
                return notify_fail("你现在的真气不够,难以施展" LIAN "。\n");
        
        if (! living(target))
                return notify_fail("对方都已经这样了,用不着这么费力吧?\n");

        msg = HIY "$N" HIY "深吸一口气,脚下步步进击,稳重之极,手中的" +
              weapon->name() + HIY "使得犹如飞龙一般,缠绕向$n" HIY "!\n" NOR;
        message_combatd(msg, me, target);

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

        for (i = 0; i < 5; i++)
        {
                if (! me->is_fighting(target))
                        break;
                if (random(5) == 0 && ! target->is_busy())
                        target->start_busy(1);
                COMBAT_D->do_attack(me, target, weapon, 0);
        }

        me->start_busy(1 + random(5));
        return 1;
}
Example #26
0
int main(object me, string arg)
{
    	int sen_cost=30, mana_gain;
    
    	seteuid(getuid());
	
	if (userp(me))
    		return notify_fail("��ָ���ѱ�exerciseȡ������help exercise \n");
	
    	if(environment(me)->query("no_fight"))
        	return notify_fail("�㲻����������ڤ˼��\n");
    	if( me->is_fighting() ) return notify_fail("ս����ڤ˼����������\n");
    	if( me->is_busy() )
        	return notify_fail("����һ��������û����ɣ�����ڤ˼��\n");
    
    	if( arg && !sscanf(arg, "%d", sen_cost) )
        	return notify_fail("��Ҫ�����پ���ڤ˼��\n");
    
    	if( sen_cost < 10 ) return notify_fail("������Ҫ�� 10 �㡸�񡹲���ڤ˼��\n");
    
    	if( (int)me->query("sen") < sen_cost )
        	return notify_fail("�����ھ���̫���ˣ�����ڤ˼������ʧ����Զ�Ѳ�������\n");
    
    	if( (int)me->query("kee") * 100 / (int)me->query("max_kee") < 70 )
        	return notify_fail("����������״��̫���ˣ��޷����о��񣡣���Ѫֵ������70%���ϣ�\n");
    
    	if( (int)me->query("gin") * 100 / (int)me->query("max_gin") < 70 )
        	return notify_fail("����������״��̫�����ˣ��޷�����ڤ˼��״̬��������ֵ������70%���ϣ�\n");
    
    	write("����ϥ����������ڤ˼��һ�����\n");
    
    	me->add("sen", -sen_cost);
    	me->start_busy(1);
    // This function ranged from 1 to 15 when sen_cost = 30
    	mana_gain = sen_cost * ((int)me->query_skill("spells")/10 
                            + (int)me->query_spi() ) / 30;
    	mana_gain = (mana_gain + random(mana_gain))/5;
    
    	if( mana_gain < 1 ) {
        	write("���ǵ��������۾���ֻ��������һƬ�հס�\n");
        	return 1;
    	}
    
    	me->add("mana", mana_gain );
    
    	if( (int)me->query("mana") > (int)me->query("max_mana") * 2) {
        	if( (int)me->query("max_mana") >=  ((int)me->query_skill("spells", 1) +
             			me->query_skill("spells")/5) * 5 ) {
            		write("���Ȼ��������һƬ���ң��ƺ������������Ѿ�����ƿ����\n");
            		me->set("mana", 2*me->query("max_mana"));
        	} else {
            		write("��ķ�������ˣ�\n");
			me->add("max_mana", 1);
			me->set("mana", me->query("max_mana"));
        	}
    	}	
    	return 1;
}
Example #27
0
int perform(object me, object target)
{
        int damage;
        string msg;
        int ap, dp;

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

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

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

        if (objectp(me->query_temp("weapon")))
                return notify_fail("你必须空手才能使用" JIN "。\n");

        if ((int)me->query_skill("canhe-zhi", 1) < 160)
                return notify_fail("你的参合指修为有限,难以施展" JIN "。\n");

        if (me->query_skill_prepared("finger") != "canhe-zhi")
                return notify_fail("你现在没有准备使用参合指,难以施展" JIN "。\n");

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

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

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

        msg = HIY "$N" HIY "双手合十,微微一笑,颇得拈花之意。食指并中指"
              "轻轻一弹,顿时一屡罡气电射而出,朝$n" HIY "袭去。\n" NOR;  

        ap = me->query_skill("canhe-zhi", 1) + me->query("level") * 20 + 
             me->query_skill("force") +
             me->query_skill("martial-cognize", 1);
        dp = target->query_skill("buddhism", 1) + target->query("level") * 20 + 
             target->query_skill("force") +
             target->query_skill("martial-cognize", 1);
        me->start_busy(3);

        if ((int)target->query_skill("buddhism", 1) >= 200
            && random(5) == 1)
        {
                me->add("neili", -400);
                me->start_busy(4);
                msg += HIY "但见$n" HIY "也即脸露笑容,衣袖轻轻一拂,顺势"
                       "裹上,顿将$N" HIY "的指力消逝殆尽。\n" NOR;
        } else
        if (ap * 2 / 3 + random(ap) > dp)
        { 
                damage = da_power(me, "finger");
                me->add("neili", -400);
                msg += COMBAT_D->do_damage(me, target, UNARMED_ATTACK, damage, 75,
                                           (: final, me, target, damage :));
        } else
Example #28
0
int curse(object me, object target)
{
	int skill, i, mod, duration;
	int time;
	object* inv;

	if( me->query("class") != "wolfmount" ) {
		return notify_fail("只有狼山弟子才能使用『摄心咒』\n");
	}
	skill = me->query_skill("wolf-curse", 1);	
	if( (skill < 200 || me->query_skill("cursism", 1) < 200) && userp(me) || me->query_skill("summonwolf", 1) < 260 ) {
		return notify_fail("『摄心咒』需要200级天狼血咒和降头术,260级唤狼术!\n");
	}
	// duration = 5mins.
	duration = me->query("timer/pfm/wm_mindcurse") + 300 - time();
	if( duration > 0 ) {
		return notify_fail("『摄心咒』极耗元神,需要"+duration+"秒钟后才能再次运用。\n");
	}
	if( !target ) {
		target = offensive_target(me);
	}
	if( !target || !target->is_character() || !me->is_fighting(target) ) {
		return notify_fail("『摄心咒』只能对战斗中的对手使用。\n");
	}
	if( target->query_temp("mesmerize") || target->is_busy() ) {
		return notify_fail("对方已经在失魂落魄或忙乱中了,快抓紧时间进攻吧。\n");
	}
	mod = COMBAT_D->can_busy(me, target, "wolf-curse");	
	if( !mod ) {
		return notify_fail(HIW"此人功力深湛,不会被此咒法摄魂的。\n"NOR);
	}

	if( userp(target) ) {
		time = 10;
	} else {
		time = 10 + F_ABILITY->check_ability(me, "3_shexin_add", 3) * 2;
	}
	// Mesmerize timer, 无论成败都出现
	me->set("timer/pfm/wm_mindcurse", time());
	target->set_temp("busy_timer/wolf-curse", time());
	message_vision(HIB"\n$N突然发出沁人毛髓的啸叫,如同发狂的猛兽般欺身扑向$n!\n\n" NOR, me, target);

	// Quite high rate of success
	if( COMBAT_D->do_busy_attack(me, target, "wolf-curse/mindcurse", "step", 300, mod) ) {
		message("vision",HIR""+me->name()+HIR"的眼睛突然现出一片腥红之色,"+target->name()+HIR"的眼神与之一碰,当即呆立当场!\n"NOR, environment(me), ({target,me}));
Example #29
0
int valid_leave(object me, string dir)
{
	if (dir == "southup" && userp(me))
	{
		me->receive_damage("jing", 30);
		me->receive_damage("qi", 30);
	}
	return 1;
}
Example #30
0
File: give.c Project: mudchina/fy4
int main(object me, string arg) {
        string target, item;
        object obj, who, *inv, obj2;
        int i, amount; 
        if(!arg) {
                return notify_fail("你要给谁什麽东西?\n");
        } 
        if(sscanf(arg, "%s to %s", item, target)==2 || sscanf(arg, "%s %s", target, item)==2 );
        else {
                return notify_fail("你要给谁什麽东西?\n");
        } 
        if(!objectp(who = present(target, environment(me)))) {
                return notify_fail("这里没有这个人。\n");
        } 
        if(who->query_temp("is_unconcious"))
                return notify_fail("此人现在无法接受你的物件。\n"); 
        if(!living(who)) {
                return notify_fail("这里没有这个人。\n");
        } 
        if(me == who) {
                return notify_fail("你左手要给右手东西吗?\n");
        } 
        if(sscanf(item, "%d %s", amount, item)==2) {
                if( !objectp(obj = present(item, me)) )
                   return notify_fail("你身上没有这样东西。\n");
                if( obj->query("no_drop") && userp(who))
                        return notify_fail("这样东西不能随便给人。\n");
                if( !obj->query_amount() )
                        return notify_fail( obj->name() + "不能被分开给人。\n");
                if( amount < 1 )
                        return notify_fail("东西的数量至少是一个。\n");
                if( amount > obj->query_amount() )
                        return notify_fail("你没有那麽多的" + obj->name() + "。\n");
                else if( amount == (int)obj->query_amount() )
                        return do_give(me, obj, who);
                else {
                        obj->set_amount( (int)obj->query_amount() - amount );
                        obj2 = new(base_name(obj));
                        obj2->set_amount(amount);
                        if(!do_give(me, obj2, who)) {
                                obj->set_amount( (int)obj->query_amount() + amount );
                                return 0;
                        }
                        return 1;
                }
        } else if(item=="all") {
                inv = all_inventory(me);
                for(i=0; i<sizeof(inv); i++) {
                        do_give(me, inv[i], who);
                }
                return 1;
        } else {
                if(!objectp(obj = present(item, me)))
                        return notify_fail("你身上没有这样东西。\n");
                return do_give(me, obj, who);
        }
}