示例#1
0
文件: _freeze.c 项目: ehershey/pd
int cmd_freeze(string str) {
    object tp, ob;
    int attack, wisdom, skip, which, i, frozen, level, x;
    string what, *strengths, *weaknesses, oi;
    object *inv;

   if (!spell()) {
      write("What?\n");
      return 1;
   }
    this_player()->set_magic_round();
    tp = this_player();
    level = (int)tp->query_level();
    if(tp->query_ghost()) {
        notify_fail("Your voice is hollow.\n");
        return 0;
    }

    if((string)tp->query_subclass() != "wizard" && tp->query_subclass() !=
"druid" && tp->query_subclass() != "sorceror") {
      write("You mumble in confusion.");
      say(tp->query_cap_name()+" mumbles in confusion.", tp);
      return 1;
    }
    if (this_player()->query_disable())
      return notify_fail("You are busy.\n");

    if(level < 8) {
      notify_fail("You are not sufficiently trained in the "
                  "magical arts to cast this spell.\n");
      return 0;
    }
    if(environment(tp)->query_property("no magic")) {
        notify_fail("Something seems to be blocking your concentration.\n");
        return 0;
    }
    if(tp->query_casting()) return 1;
    if((int)tp->query_mp() < 20) {
        notify_fail("Too low on magic power.\n");
        return 0;
    }
    if(!str) {
        ob = (object)tp->query_current_attacker();
        if(!ob) {
            notify_fail("Freeze what?\n");
            return 0;
        }
    }
    else {
        ob = present(str, environment(tp));
        if(!ob) {
            sscanf(str, "%s %d", what, which);
            inv = all_inventory(environment(tp));
            for(i=0, skip = 0; i<sizeof(inv) && !ob; i++) {
                if(inv[i]->id(what)) {
                    skip++;
                    if(skip == which) ob = inv[i];
                }
            }
            if(!ob) {
                notify_fail("No "+str+" here!\n");
                return 0;
            }
        }
    }
    if(!living(ob)) {
        notify_fail(ob->query_cap_name()+" is not alive!\n");
        return 0;
    }
    if(ob == tp) {
        notify_fail("Not a very intelligent thing to do.\n");
        return 0;
    }
    if(ob->is_player() && !interactive(ob)) {
        notify_fail("You cannot attack link-dead players.\n");
        return 0;
    }
    if(ob->query_property("no cold")) {
        notify_fail(sprintf("%s is immune to cold attacks.\n", 
          ob->query_cap_name()));
        return 0;
    }
    if(!this_player()->kill_ob(ob)) {
        write(ob->query_cap_name()+" can't be attacked by you yet.");
       return 1;
    }
    attack = (int)tp->query_skill("magic attack")*2/3 + (int)tp->query_stats("wisdom");
    wisdom = (int)ob->query_stats("wisdom")/2 + (int)ob->query_skill("magic attack")/3;
    attack -= wisdom;
    attack *= 3/2;
    weaknesses = (string *)ob->query_property("weakness");
    if (!pointerp(weaknesses))
        weaknesses = ({ });
示例#2
0
文件: alias.c 项目: cosin/XYJ
string process_input(string str)
{
	string *args, cmd, argstr;
	int i, j, count, curr_time;

	if (userp(this_object()) && (this_object()->query_temp("block_msg/all")
		|| !living(this_object()) ) )
		return "";

	notify_fail("什么?\n"); // default fail messages.
	                         // for both gb and big5 environment.
	                         // need to be set here. otherwise big5 
	                         // will not show it correctly.
	                         // mon 5/12/98
	       
	reset_eval_cost();
	// added by mon 5/18/98 to clear up eval_counter.
	// it seems that if one input many commands in a raw,
	// then the eval_counter is not cleared in time, and
	// thus causing Too long evaluation error.

	str = CONVERT_D->input(str,this_object());

// by mon 7/19/97. command counting.
        cmd_cnt++;
	if(cmd_cnt>100) {  //threshold for how many commands can be
	                  //input every few seconds.(determined below)
          curr_time=time();
	  if(curr_time-last_time<5) {
	    if(cmd_cnt1==0){
	      cmd_cnt2=cmd_cnt/(curr_time-last_time+1);
	      write("你一次输入太多命令了。\n");
            }
            cmd_cnt1++;
	    if(cmd_cnt1>30) cmd_cnt1=0;
            last_time=curr_time; 
	     //in case of flooding, has to wait a few
	     //seconds without input to be able to
	     //input again.
	    return "";  //flooding detected. ignore input.
          } else {
	    cmd_cnt2=cmd_cnt/(curr_time-last_time+1);
            last_time=curr_time;
	    cmd_cnt=0;
	    cmd_cnt1=0;
	  }
        }

	// mon 10/10/98 removed the following checks
	// since it is easy to work around this and no
	// real effect.
	/*
	if( str==last_input && strlen(str)==0 ) {
		repeat_cnt++;
		if( repeat_cnt > MAX_REPEAT ) {
			tell_object( this_object(),
		"\n\n忽听一声惨叫,从你脑门上爬下一只害虫,飞也似地逃走了。\n"+
		"\n一边跑一边恨恨地道:原来是个机器人,牙都给崩掉了...\n\n");
command("rumor 忽听一声惨叫,从"+this_player()->name()+
        "脑门上爬下一只害虫,飞也似地逃走了。 ");
command("rumor 害虫一边跑一边恨恨地道:原来是个机器人,牙都给崩掉了...");
         this_player()->set("sen",-1);
         command("quit");
		}
	} else {
		repeat_cnt = 0;
		last_input = str;
	}
	*/

	if( str[0]=='!' ) {
		if( pointerp(history) && sizeof(history) ) {
			if( sscanf(str, "!%d", i) ) {
			        if(i<0) i=0;
			        else i=i%HISTORY_BUFFER_SIZE;
				str = (string)history[(HISTORY_BUFFER_SIZE + last_cmd - i) % HISTORY_BUFFER_SIZE];
			}  else
				str = history[last_cmd];
			if(!str) return "";
		} else
			return ""; 
	} else {
		if( !pointerp(history) ) history = allocate(HISTORY_BUFFER_SIZE);
		last_cmd = (last_cmd + 1) % HISTORY_BUFFER_SIZE;
		history[last_cmd] = str;
	}

	if( mapp(alias) ) {

		if( !undefinedp(alias[str]) )
			return replace_string( alias[str], "$*", "" );

		if( sscanf(str, "%s %s", cmd, argstr)==2 && !undefinedp(alias[cmd]) ) {
			cmd = replace_string( alias[cmd], "$*", argstr );
			args = explode(argstr, " ");
			if( (j = sizeof(args)) )
				for(i=0; i<j; i++)
					cmd = replace_string( cmd, "$" + (i+1), args[i] );
			return cmd;
		}
	}

	return (string)ALIAS_D->process_global_alias(str);
}
示例#3
0
文件: give.c 项目: mudchina/fy3
int main(object me, string arg)
{
	string target, item;
	object obj, who, *inv, obj2;
	int i, amount;
	mixed no_give;

      if(this_player()->is_busy())
      return notify_fail("你正忙着呢...\n");
      
	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");
	
       who = LOGIN_D->find_body(target);
       if(wizardp(me) && who && !wizardp(who))
              return notify_fail("你不能给玩家任何东西。\n");

	if(!objectp(who = present(target, environment(me))) || !living(who))
		return notify_fail("这里没有这个人。\n");
	
	if( me == who )  {
                  write("Ok.\n");
                  return 1;
         }
       if(who->query_temp("block_msg/all"))
                 return notify_fail(who->name()+"现在不能接受你给的东西。\n");
   
	if( who->query("env/no_accept")&& wiz_level(me)<=wiz_level(who))
		return notify_fail("看样子,"+who->query("name")+"并不想接受你的东西。\n");

       
	if(sscanf(item, "%d %s", amount, item)==2) {
		if( !objectp(obj = present(item, me)) )	
			return notify_fail("你身上没有这样东西。\n");
		if( obj->query("no_drop") )
			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);
			return do_give(me, obj2, who);
		}
	}

	if(arg=="all") {
		inv = all_inventory(me);
		for(i=0; i<sizeof(inv); i++) {
			do_give(me, inv[i], who);
		}
		write("Ok.\n");
		return 1;
	}

	if(!objectp(obj = present(item, me)))
		return notify_fail("你身上没有这样东西。\n");
		
	if( no_give=obj->query("no_give") )
return notify_fail( stringp(no_give) ? no_give : "这样东西不能随意丢弃。\n");
return do_give(me,obj,who);
}
示例#4
0
文件: xiaohun.c 项目: heypnus/xkx2001
int perform(object me, object target)
{
        string msg;
	int damage;
	object weapon,ob;
	int skill, jiali, my_rate, your_rate;

	skill = me->query_skill("xiaohun-zhang",1);
	jiali=(int)me->query("jiali");
	weapon = me->query_temp("weapon");

	if(me->is_busy())
		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("spouse/id"))
		return notify_fail("你有娇妻陪伴左右,终是领悟不到「黯然消魂」其中的妙境。\n");

	if (me->query_temp("weapon") || me->query_temp("secondary_weapon"))
		return notify_fail("「黯然消魂」只能空手使用。\n");

	if( (int)me->query_skill("yunu-xinjing", 1) < 150 )
		return notify_fail("你的玉女心经修为不够,不会使用「黯然消魂」。\n");

	if( me->query_skill_mapped("force") != "yunu-xinjing" )
		return notify_fail("你所用的并非玉女心经,使不出「黯然消魂」!\n");

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

	if( (int)me->query("neili") < 1000 )
                return notify_fail("你的真气不够!\n");

        if( (int)me->query_skill("xiaohun-zhang",1) < 150 )
                return notify_fail("你的黯然消魂掌火候不够,无法使用「黯然消魂」!\n");

	if( jiali < 50 )
	 return notify_fail("「黯然消魂」的威力全系于个人内力,你掌上不带内力怎能使出?\n");

	if(me->query("married_times"))
        msg = CYN "\n$N深深思念自己的妻子,哀痛欲绝之际不禁潸然泪下。\n" NOR;
	if(!me->query("married_times"))
        msg = CYN "\n$N深深思念自己的爱人,渐渐心若止水。\n" NOR;

	msg += WHT "$N大喝一声:“黯然消魂掌”!所有的悲愤与哀怨随掌劲倾泻而出,顿时天地间一片苦涩!\n"NOR;

	damage = random( me->query_skill("force") + me->query_skill("strike") + me->query("jiali") )*( 1 + random(me->query("jiajin")/5) ) ;
	if( me->query("eff_qi",1) < me->query("max_qi",1)/2 )
	damage = damage * 2;
	if( me->query("eff_qi",1) < me->query("max_qi",1)*2/3 )
	damage = damage * 2 / 3;

	if( random( me->query("combat_exp") ) > random( target->query("combat_exp")/2 ) || !living(target) )
	{
/*
		damage = random( me->query_skill("force") + me->query_skill("strike") + me->query("jiali") )*( 1 + random(me->query("jiajin")/5) ) ;
		if( me->query("eff_qi",1) < me->query("max_qi",1)/2 )
		damage = damage * 2;
		if( me->query("eff_qi",1) < me->query("max_qi",1)*2/3 )
		damage = damage * 2 / 3;
*/

		if(damage > 4000) damage = 4000;
		me->add("neili", -jiali*2 - 500 );
		me->add("jingli", -me->query("jiajin")/2);

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

		msg += HIR"\n$n还在反应之即,猛听得砰然一声大响,正中胸口。\n"NOR;

		msg += NOR;
		me->start_busy(2+random(2));
	}
	else if( random( me->query("combat_exp")*2 ) > random( target->query("combat_exp") )
				&&  random(target->query_skill("dodge")) < random( me->query_skill("strike") )  )

	{

		damage = damage / 2;

		if(damage > 2500) damage = 2500;

		me->add("neili", -jiali*2  - 500);
		me->add("jingli", -me->query("jiajin")/2);

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

		msg += HIR"\n$n连忙发力抵抗,哪知此招蕴藏着无尽的悲怨,「砰」一声$n被震出数丈。\n"NOR;

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

		if(damage < 1000) damage = 1000;

		me->add("neili", -jiali*2  - 500);
		me->add("jingli", -me->query("jiajin")/2);

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

		msg += HIR"\n$p知道此掌不可招架,身行刚转,只觉得后心一震!\n"NOR;

		msg += NOR;
		target->add( "neili", -damage/4 );
		me->start_busy(2+random(2));
  }
  else {
	 msg += HIG"\n$n知道此掌不可招架,身行一转,逃出了$N的攻击范围。\n\n"NOR;
	 me->add("neili", -jiali*2 );
	 me->add("jingli", -me->query("jiajin") );
	 me->start_busy(2 + random(2));
	 message_vision(msg+"\n", me, target);
	 return 1;
  }

  message_vision(msg+"\n", me, target);
  COMBAT_D->report_status(target);
  return 1;
}
示例#5
0
文件: waist.c 项目: mudchina/fy4
void create() {
        if(clonep(this_object())) {
                destruct(this_object());
                return notify_fail("CAN NOT CLONE STARNDARD OBJECT!\n");
        }
} 
示例#6
0
文件: liu.c 项目: mudchina/nitan3
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int damage;

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

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

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

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

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

        if (me->query_skill("liuyue-jian", 1) < 120)
                return notify_fail("你的流月剑舞修为不够,难以施展" LIU "。\n");

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

        if (me->query_skill_mapped("sword") != "liuyue-jian")
                return notify_fail("你没有激发流月剑舞,难以施展" LIU "。\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);
                
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 45,
                                           HIR "$n" HIR "顿时目瞪口呆,一个不慎,被$N"
                                           HIR "精妙的剑招刺中,鲜血飞溅!\n" NOR);
                me->start_busy(2);
        } else
        {
                me->add("neili", -60);
                
                msg += CYN "可是$p" CYN "并不慌乱,收敛心神,轻轻格挡开了$P"
                       CYN "的剑招。\n" NOR;
                me->start_busy(3);
        }
        message_combatd(msg, me, target);

        return 1;
}
示例#7
0
int valid_learn(object me)
{
        if( (int)me->query_skill("spells",1) < 20 )
        return notify_fail("你的法术修为还不够高深,无法学习仙风云体术。\n");
        return 1;
}
示例#8
0
int practice_skill(object me)
{
        return notify_fail("降龙心法只能用学的,或是从运用(exert)中增加熟练度。\n");
}
示例#9
0
文件: dan.c 项目: mudchina/nitan3
int perform(object me, object target)
{
        object weapon,weapon2;
        int damage,i;
        string msg,str;
        int ap, dp;

        if (! target)
        {
                me->clean_up_enemy();
                target = me->select_opponent();
        }
        
        if (! target || ! me->is_fighting(target))
                return notify_fail("「飞龙斩」只能对战斗中的对手使用。\n");
 
        if(me->query_skill_mapped("cuff") != "feilong--cuff") 
                return notify_fail("你没有用飞龙神拳,无法使用「飞龙斩」绝招!\n");

        if (me->query_skill_prepared("cuff") != "feilong--cuff")
                return notify_fail("你没有准备使用飞龙神拳,无法施展「飞龙斩」绝招。\n");

        if (objectp(weapon = me->query_temp("weapon")) ||
            objectp(weapon = me->query_temp("handing")) )
                return notify_fail("你必须空着双手才能使用掌法绝招。\n");

        if ((int)me->query_skill("feilong--cuff", 1) < 200)
                return notify_fail("你的飞龙神拳不够娴熟,不会使用「飞龙斩」。\n");
                                
        if ((int)me->query_skill("force") < 300)
                return notify_fail("你的内功修为不够高。\n");
                        
        if( (int)me->query("neili") < 800 )
                return notify_fail("你现在内力太弱,不能使用「飞龙斩」。\n");
                        
        msg = HIR "\n$N" HIR "突然绕到$n" HIR "身后,双拳猛的击向$n" HIR "的后腰!\n" NOR;

        ap = me->query_skill("cuff") + me->query_skill("force");
        ap += me->query("jiali");
        ap += me->query("jianu");
        
        damage = ap*2 + random(ap);
        damage += me->query("jiali");

        if (living(target))
                dp = target->query_skill("dodge",1) + target->query_skill("parry",1);
        else
                dp = 0;

        dp = dp*3/2;

        weapon2 = target->query_temp("weapon");
        
        if (ap / 2 + random(ap) > dp)
        {
                me->add("neili", -damage/2);

                msg += HIR "\n只听“咔嚓”一声闷响!$n" HIR "喷出一口鲜血,软塌塌的摇摇欲坠……\n" NOR;
                target->receive_damage("qi",damage,me);
                target->receive_wound("qi",damage/2 + random(damage/2),me);
		str = COMBAT_D->status_msg((int)target->query("qi") * 100 /(int)target->query("max_qi"));
		msg += "($n"+str+")\n";
                
                target->start_busy(1+random(2));
                me->start_busy(3+random(2));
        } else 
        {
                msg += HIR "\n哪知$n" HIR "早有准备,身形一展,轻易的化解了这招!\n" NOR;
                me->add("neili", -100);
                me->start_busy(3);
                if (target->is_busy())
                        target->start_busy(1);
        }
        message_combatd(msg, me, target);

        return 1;
}
示例#10
0
文件: gambling.c 项目: aricxu/xkx100
int valid_learn(object me)
{
	if ( me->query("age") <= 20 )
		return notify_fail("你现在还太小,不能学习基本赌技。\n");
	return 1;
}
示例#11
0
文件: cast.c 项目: mudchina/sjsh
int main(object me, string arg)
{
	string spells, spl, trg;
	object target;
	
	seteuid(getuid());

        if((int)me->query_temp("no_cast")==1)
	        return notify_fail("你现在不能用魔法!\n");

	if( me->is_busy() )
		return notify_fail("( 你上一个动作还没有完成,不能念咒文。)\n");

	if( !wizardp(me) && environment(me)->query("no_magic") )
		return notify_fail("这里不准念咒文。\n");
		
	if( !arg ) return notify_fail("指令格式:cast <法术> [on <目标>]\n");
	if( sscanf(arg, "%s on %s", spl, trg)==2 ) {
		target = present(trg, environment(me));
		if( !target ) target = present(trg, me);
		if( !target ) return notify_fail("这里没有 " + trg + "。\n");
		
		if(!valid_kill(me,target,0)) return 0;

//add by yudian for prevent pk

set_to_killer(me,target);
        if(me->query("combat_exp")<250000 && userp(target))
                return notify_fail("自己功夫没练好就想杀人?\n");

        if(me->query("daoxing")<200000 && userp(target))
                return notify_fail("自己功夫没练好就想杀人?\n");  

        if(userp(target) && target->query("age")<17)
                return notify_fail("本站暂时保护新手。\n");

//        if( userp(target) && (int)me->query("nopk") || (int)target->query("nopk"))
//        	return notify_fail(HIG"已经受到保护,不能杀人?\n"NOR);	

		if( userp(me) && userp(target) && 
		    target->query_temp("netdead") )
		   return notify_fail("对方正在断线中,不能对其施法。\n");
	} else {
		spl = arg;
		target = 0;
	}

	spl = replace_string( spl, " ", "_");

	if( stringp(spells = me->query_skill_mapped("spells")) ) {
	        int nocast;
		notify_fail("你所学的法术中没有这种功能。\n");
		nocast=(int)SKILL_D(spells)->cast_spell(me, spl, target);
		//cast_spell should return an integer as the no_cast time.
		if (!nocast) 
		  nocast=(int)SKILL_D("spells")->cast_spell(me, spl, target);
                if (nocast) {
                  me->set_temp("no_cast", 1);
		  //each cast should return an integer which is
		  //the no_cast time fot this cast.
		  //also, in each cast, can set busy or no_move
		  //time individually.   --mon 8/24/97
		  call_out("destruct_flag", nocast, me);
		  return 1;
		}
		return 0;
		}
		
	return notify_fail("你请先用 enable 指令选择你要使用的咒文系。\n");
}
示例#12
0
int exert(object me, object target)
{
skill=this_player()->query("functions/green/level");
        if(userp(me))
        return notify_fail("����� mixforce��\n");
if(me->query("class")!="prayer")
          return notify_fail("���ְҵ�޷�ʹ�ô˼��ܡ�\n");
        if( (string)me->query_skill_mapped("force")!= "superforce")
         return notify_fail("���������ʹ�û����ķ����ܷ���������\n");
        if( target != me ) return notify_fail("��ֻ���û����ķ���������������\n");
        if (me->query_skill("superforce",1) < 250)
            return notify_fail("��Ļ����ķ��ȼ����㣬��Ҫ 250 ����\n");
        if (me->query("force") < 750+skill*5)
            return notify_fail("��������������޷�ʹ�������档\n");
        if( (int)me->query("max_force") < 2500 )
        return notify_fail("���������������,�޷�����������������\n");
        if(me->query_temp("green")) return notify_fail("���Ѿ������ˡ�\n");
        if(me->query_temp("purple")) return notify_fail("���Ѿ����������Ǻ��ķ��ˡ�\n");
        if(me->query_temp("white")) return notify_fail("���Ѿ��������������ķ��ˡ�\n");
        if(me->query_temp("nine")) return notify_fail("���Ѿ�����������ϼ�ķ��ˡ�\n");
        if(me->query_temp("gen")) return notify_fail("���Ѿ���ʹ���������ķ��ˡ�\n");
        if(me->query_temp("ice")) return notify_fail("���Ѿ�����ת��ѩ���ķ��ˡ�\n");
        if(me->query_temp("black")) return notify_fail("���Ѿ��������������ˡ�\n");
        if(me->query_temp("bluesea")) return notify_fail("���Ѿ��ڴ�����׺��ھ��ˡ�\n");
        if(me->query_temp("goldsun")) return notify_fail("���Ѿ���ǿ�������ھ��ˡ�\n");
        if(me->query_temp("blood")) return notify_fail("���Ѿ��ڴ߹�Ѫ���ھ��ˡ�\n");

        me->set_temp("green",1);
        message_vision(
        HIC "$N��������ķ���ʮ��"HIG"[������]"HIC"��ɲʱ��ջ谵�����Ƿ�����ȫ������������������dz������������!!\n" NOR,me);
        me->add_temp("apply/force", 100);
        me->add_temp("apply/unarmed", 100);
        me->add_temp("apply/parry", 100);
        me->add_temp("apply/stick", 100);
        me->add_temp("apply/move", -50);
        me->add_temp("apply/dodge", -50);
        call_out("remove_effect", skill, me);
        if( me->is_fighting() ) me->start_busy(1);
        return 1;
}
示例#13
0
int exert(object me, object target, int amount)
{
	int lvl,duration,exp_recovered;
	object obj;
	object drug1,drug2;
	string n1="白阳点灯",n2="茵生草",n3="十圣金丹";

	amount = 50;	  // 50%
	duration = 3600;  // 60 min

	lvl = me->query_skill("divineforce",1);	
	if( lvl < 100) 	return notify_fail("『"+n1+"』需要100级的破邪心经。\n");

	if (me->query("class")!="demon")
		return notify_fail("只有魔教弟子才能运转『"+n1+"』。\n");
	
	if (!(drug1 = present("yincao",me)) || !(drug2 = present("jindan",me)) )
		return notify_fail("使用『"+n1+"』需有"+n2+"、"+n3+"两物为引。\n");

	if (!drug1->query("is_drug") || !drug2->query("is_drug"))	// 假货?
		return notify_fail("使用『"+n1+"』需有"+n2+"、"+n3+"两物为引。\n");
	
	if (me->query("force") < 800)	// 100,400,800,1300,1900.
		return notify_fail("你的真气不足。\n");
	
	if (!target) target=me;
	
	if(!objectp(obj = present(target, environment(me))))
			return notify_fail("这里没有这个人。\n");
	if (!obj->is_character() || obj->is_corpse() )
			return notify_fail("看清楚一点,那并不是活物。\n");
	if( !obj->is_ghost())
		return notify_fail(n1+"不能用在活人身上。\n");
	if( !userp(obj))
		return notify_fail(n1+"只能用在玩家身上。\n");		
	if( (int)target->query("death/time")+ duration  < time())
		return notify_fail("太晚了,他的肉身已经消失,救不活了。(死亡时间需在"+(duration/60)+"分钟内)\n");
    if (!obj->query("env/revive"))
      	return notify_fail("此人不愿意被人复生。(需要对方Set revive 1)\n"); 

	exp_recovered=obj->query("death/exp_lost");
	exp_recovered=exp_recovered/100*amount;

    drug1->add_amount(-1);
    drug2->add_amount(-1);

	message_vision(HIW"$N深深吸了口气,运起真气将物引融化,施起『"+n1+"』。\n"NOR, me);	
	me->add("force", -800 );

	if (target!= me) 
		message_vision(HIW"$N一掌拍在$n背心,淡淡的烟气从$N顶上腾起...\n"NOR, me,target);

	target->add("combat_exp", exp_recovered);
	target->set("death/time",0);
	target->set("death/exp_lost",0);
	target->reincarnate();
	message_vision( HIW "$N浑身剧烈地颤抖着,忽然间一道光芒注入$N的顶门。\n",target);
	message_vision( HIR "$N复活了!!\n"NOR,target);
	me->start_busy(3);
	return 1;
}
示例#14
0
int valid_learn(object me)
{
	if( me->query("combat_exp") <= 5000000 )
		return notify_fail("你的武功修为还不够高深,无法学习高级纵跃闪躲之术。\n");
	return 1;
}
示例#15
0
文件: LEIYAN.C 项目: mudchina/sjsh
int perform(object me, object target)
{
        string msg, tparryskill, str;
        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("leiyan-sword",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 < 150) 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")< 500)
                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(HIM"$N人剑合一,放出手中"+weapon->name()+HIM"化作一条彩虹,竟使出了峨嵋山雷炎剑绝学--『"HIW"雷炎飞虹"HIM"』!\n\n" NOR,me,target);        
     message_vision(HIC"$N飞身而起,身法之快追上握住"+weapon->name()+HIC",只见无数剑影闪过。\n"NOR,me);
     message_vision(HIM"剑影随着彩虹直上云霄,『"HIW"雷炎飞虹"HIM"』含劲欲发!\n\n"NOR,me);
     if (random(myexp)>(int)(texp/10) && random(myforce) > (int)(tforce/3)) 
        {
             msg = HIR"$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情神一聚,知道天玑之中暗藏无限杀机。侧身闪过了这招『"HIM"雷炎飞虹"HIW"』\n\n"NOR;
            message_vision(msg, me, target);
        }


     message_vision(HIM"$N身形转动,原来还有后招,转眼间又杀出一剑!\n" NOR,me,target);
     message_vision(HIM"这一招『"HIW"雷炎再现"HIM"』比刚才那招更快,好像要一鼓作气,斩妖除魔!\n\n" NOR,me,target);
     if(random(myexp)>(int)(texp/10)&& random((int)(myskill + myskill1*3/2))>(int)((tparryb+tparryh)/2))
     {msg = HIR"$n还没有招架住刚才的攻势,就看杀招袭来竟不知所措!\n"
        "被$N的"+weapon->name()+HIR"刺的遍体鳞伤,突出一口鲜血!\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(HIM"$N突然收住身形,回步而立,撤锏于背后,无招胜有招,无形胜有形。\n"NOR,me);
          message_vision(HIM"这一招正是天玑剑的精华,尽在『"HIW"雷炎万怒"HIM"』!\n\n"NOR,me);
if(random(myexp)>(int)(texp/2))
{msg = HIR"$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);

                     if (target->query("eff_kee")<0 || !living(target))  
{str=target->name()+"被"+""HIW""+me->name()+""HIM""+"用峨嵋山的绝招『"HIW"雷炎万怒"HIM"』杀死了。听说此招失传多年!";
        message("channel:rumor",HIM"【"HIW"空穴来风"HIM"】某人:"+str+"\n"NOR,users());
                       }

     }
else{
         msg = HIW"$n看破了这招的虚实,将计就计,假装冲上前,却在$N出剑的一瞬间腾空跃开,回手竟反攻一招!\n\n"NOR;
            message_vision(msg, me, target);
        COMBAT_D->do_attack(target, me, tweapon);

                     if (target->query("eff_kee")<0 || !living(target))  
{str=target->name()+"被"+""HIW""+me->name()+""HIM""+"用峨嵋山的绝招『"HIW"雷炎万怒"HIM"』杀死了。听说此招失传多年!";
        message("channel:rumor",HIM"【"HIW"空穴来风"HIM"】某人:"+str+"\n"NOR,users());
	               }

        }
        
        me->start_busy(3);
        
     
        return 1;
}
示例#16
0
int valid_leave(object me, string dir)
{
	if ( present("zixia xianzi") && dir == "south" && present("qingxia xianzi") && present("erlang zhenjun"))
		           return notify_fail("等他们打完了再走吧.\n");
    return ::valid_leave(me, dir);
}
示例#17
0
文件: yaolaoban.c 项目: mudchina/fy3
int do_convert(string arg)
{
	string from, to;
	int amount, bv1, bv2;
	object from_ob, to_ob;
	object me;
	
	if (query_temp("busy"))
		return notify_fail("这就去拿帐本,请稍候。\n");

	me = this_player();

	if (!arg || sscanf(arg, "%d %s to %s", amount, from, to) != 3)
	{
		return notify_fail("命令格式:huan <数量> <货币> to <新货币单位>\n");
	}

	from_ob = present(from + "_money", me);
	to_ob = present(to + "_money", me);

	if (!to_ob && file_size("/obj/money/" + to + ".c") < 0)
	{
		return notify_fail("你想换成什么?\n");
	}
	if (!from_ob)
	{
		return notify_fail("你身上没有带这种钱。\n");
	}
	if (amount < 1)
	{
		return notify_fail("你想白赚啊?\n");
	}
	if ((int)from_ob->query_amount() < amount)
	{
		return notify_fail("你带的" + from_ob->query("name") + "不够。\n");
	}
	
	bv1 = from_ob->query("base_value");
	if (!bv1)
	{
		return notify_fail("这样东西不值钱。\n");
	}

	bv2 = to_ob ? to_ob->query("base_value") : call_other("/obj/money/" + to, 
"query", "base_value" );
	
	if (bv1 < bv2)
		amount -= amount % (bv2 / bv1);	

	if (amount == 0)
	{
		return notify_fail("这些" + from_ob->query("name") + "不够换。\n");
	}

	// allowed to convert now
	set_temp("busy", 1);	
	remove_call_out("enough_rest");
	call_out("enough_rest", 5);

//	from_ob->add_amount(-amount);

	if (!to_ob) {
		to_ob = new("/obj/money/" + to);
		to_ob->set_amount(amount * bv1 / bv2);
		if( !to_ob->move(me))
			return notify_fail("你身上装不下这么多钱。\n");
	}
示例#18
0
文件: chblk.c 项目: aricxu/xkx100
int main(object me, string arg)
{
	object ob;
	int i;
	string who, ch_name, str;
	
	if (!arg)
	{
		tell_object(me,"目前所有公共频道的情况如下:\n");
		for (i = 1;i < sizeof(blocks_name);i ++)
		{
			str = "  ";
			str += ch_str[blocks_name[i]];
			str += "频道:  ";
			if (CHANNEL_D->query_block("all")) str += "关闭";
			else str += CHANNEL_D->query_block(blocks_name[i])?"关闭":"打开";
			str += "\n";
			tell_object(me,str);
		}	
		return 1;
	}

	if (sscanf(arg, "%s %s", who, ch_name) != 2)
	{
		ch_name = "";
		if (sscanf(arg, "%s", who) != 1)
		{
			return notify_fail("<Syntax>: unchblk <player id> <channel name>\n");
		}
	}
	//关闭所有玩家的频道
	ob = LOGIN_D->find_body(who);
	if (ch_name == "")
	{
		if ( !ob && (member_array(who, blocks_name) == -1))
			return notify_fail("你无法关闭此频道或此人不在线!\n");
		else if ( !LOGIN_D->find_body(who)) {
			CHANNEL_D->set_block(who, 1);
			CHANNEL_D->do_channel(me, "sys", ch_str[who] + "频道关闭了。\n");
			return 1;
		}		
	}
	if (!ob) return notify_fail("此人不在线!\n");
	if (wizardp(ob)) return notify_fail("不能关闭巫师的频道。\n");

	//如果不带频道名,则返回该玩家所有频道情况
	if (ch_name == "" || ch_name == " ") 
	{	
		for (i = 1;i <sizeof(blocks_name);i ++) 
			if ( ob->query("chblk_on") ||
				ob->query("chblk_" + blocks_name[i]) )
				tell_object(me, (string)ob->query("name") + "的" + ch_str[blocks_name[i]] + "频道是关闭的。\n");
		if (!(ob->query("chblk_on") ||
			ob->query("chblk_rumor") ||
			ob->query("chblk_chat") ||
			ob->query("chblk_xkx") ||
			ob->query("chblk_sing") ||
			ob->query("chblk_family") ||
			ob->query("chblk_party"))) 
		{
			tell_object(me,(string)ob->query("name")+"没有被关闭的频道。\n");
		} 
	}
	else
		if ( member_array(ch_name, blocks_name) != -1)
		{
			if (ch_name == "all")
			{
				if ( ob->query("chblk_on"))
					tell_object(me, (string)ob->query("name") + "的所有频道已经是关闭的。\n");
				else
				{
					ob->set("chblk_on",1);
					tell_object(me, (string)ob->query("name") + "的所有频道被关闭了。\n");
				}	
			}
			else
				if ( ob->query("chblk_" + ch_name) )
				{
					 tell_object(me, (string)ob->query("name")+"的" + ch_str[ch_name] + "频道已经是关闭的。\n");
				}
				else
				{
					ob->set("chblk_" + ch_name, 1);
					tell_object(me, (string)ob->query("name")+"的" + ch_str[ch_name] + "频道被关闭了。\n");
				}
		}
		else 
		{
			return notify_fail("<Syntax>: chblk <player id> <channel name>\n");
		}
		
	return 1;
}
示例#19
0
int fail_song() {
   return notify_fail("You do not know that song.\n");
}
示例#20
0
文件: bagua6.c 项目: aricxu/xkx100
int valid_leave(object me, string dir)
{
	if (check_dirs(me, dir))
		return notify_fail("��ȶ��˻��أ�����ɮ�ࡣ\n");
	return ::valid_leave(me, dir);
}
示例#21
0
文件: cast2.c 项目: guolisen/xyj_x
int main(object me, string arg)
{
	string spells, spl, trg;
	object target;
	
	seteuid(getuid());

        if((int)me->query_temp("no_cast")==1)
	        return notify_fail("你现在不能用魔法!\n");

	if( me->is_busy() )
		return notify_fail("( 你上一个动作还没有完成,不能念咒文。)\n");

	if( me->is_ghost() )
		return notify_fail("你现在不能用魔法!\n");

	if( !wizardp(me) && environment(me)->query("no_magic") )
		return notify_fail("这里不准念咒文。\n");

	if( !arg ) return notify_fail("指令格式:cast <法术> [on <目标>]\n");
	if( sscanf(arg, "%s on %s", spl, trg)==2 ) {
		target = present(trg, environment(me));
		if( !target ) target = present(trg, me);
		if( !target ) return notify_fail("这里没有 " + trg + "。\n");
		
	// modified by xfile@bjxyj
	// There were some peaceful casts should be valid in any case.
	if( !valid_kill(me,target,0) && member_array( spl, peaceful_cast ) == -1 )
		return 0;

		if( userp(me) && userp(target) && 
		    target->query_temp("netdead") )
		   return notify_fail("对方正在断线中,不能对其施法。\n");
	} else {
		spl = arg;
		target = 0;
	}

	spl = replace_string( spl, " ", "_");

	if( stringp(spells = me->query_skill_mapped("spells")) ) {
	        int nocast;
		notify_fail("你所学的法术中没有这种功能。\n");
		nocast=(int)SKILL_D(spells)->cast_spell(me, spl, target);
		//cast_spell should return an integer as the no_cast time.
		if (!nocast) 
		  nocast=(int)SKILL_D("spells")->cast_spell(me, spl, target);
                if (nocast) {
                  me->set_temp("no_cast", 1);
		  //each cast should return an integer which is
		  //the no_cast time fot this cast.
		  //also, in each cast, can set busy or no_move
		  //time individually.   --mon 8/24/97
		  call_out("destruct_flag", nocast, me);
		  return 1;
		}
		return 0;
		}
		
	return notify_fail("你请先用 enable 指令选择你要使用的咒文系。\n");
}
示例#22
0
文件: jing.c 项目: mudchina/nitan3
int perform(object me, object target)
{
        int damage;
        string msg;
        object weapon;
        int ap, dp, wn;

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

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

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

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

        if ((int)me->query_skill("guyue-chan", 1) < 80)
                return notify_fail("你孤月铲法不够娴熟,难以施展" JING "。\n");

        if (me->query_skill_mapped("staff") != "guyue-chan")
                return notify_fail("你没有激发孤月铲法,难以施展" JING "。\n");

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

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

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

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

        wn = weapon->name();

        msg = HIW "$N" HIW "怒喝一声,将手中的" + wn + HIW "挥舞得呼呼做响,"
              "猛然间向$n" HIW "砸去。\n" NOR;

        ap = me->query_skill("staff");
        dp = target->query_skill("dodge");

        if (ap / 2 + random(ap) > dp)
        {
                damage = ap / 2 + random(ap / 2);
                damage += random(damage / 3);
                msg += COMBAT_D->do_damage(me, target, WEAPON_ATTACK, damage, 30,
                                           HIR "$n" HIR "只觉眼花缭乱,想闪避已不及,"
                                           "被" + wn + HIR "打中胸口,顿时喷出一口鲜"
                                           "血。\n" NOR);
                me->start_busy(3);
                me->add("neili", -80);
        } else
        {
                msg += CYN "$n" CYN "见$N" CYN "这招刚猛无比,不敢硬接,只得\n" 
                       "侧身一跳才躲过这招。\n"NOR;
                me->start_busy(4);
                me->add("neili", -200);
        }

        message_combatd(msg, me, target);
        return 1;
}
示例#23
0
文件: chanrao.c 项目: heypnus/xkx2001
int perform(object me, object target)
{
	string msg, attack_skill, dodge_skill;
	int ap, dp, wp, rate;
	int whip, dodge, busy_time, random_factor;
	object weapon, weapon2;
	mapping prepare;

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

	if( !target || !target->is_character() || !me->is_fighting(target) )
		return notify_fail("只能在战斗中施展「缠绕」。\n");

	if( !living(target) )
		return notify_fail("你现在不必使用「缠绕」。\n");

	if( (weapon = me->query_temp("weapon"))->query("skill_type") != "whip" )
		return notify_fail("你手中并无趁手的兵器,如何施展「缠绕」?\n");

	if( me->query_temp("yield") )
		return notify_fail("你不出招,何以「缠绕」?\n");

	if( me->query_temp("jiuyin_chanrao/"+target->name()) )
		return notify_fail(target->name() +"已经被缠绕在鞭圈中了。\n");

	if( (whip = (int)me->query_skill("whip")) < 300 )
		return notify_fail("你的鞭法不够娴熟,施展不出「缠绕」。\n");

	if( me->query("neili") <= 500 )
		return notify_fail("你现在的内力不足以抖鞭成圈!\n");

	if( me->query("jingli") <= 300 )
		return notify_fail("你现在的体力不足以抖鞭成圈!\n");

	me->add("neili", -150);
	me->add("jingli", -80);

	msg = HIG"\n$N突然间$W"HIG"抖动,绕成一个个大大小小的圈子,眼看要将$n裹在其间。\n"NOR;

	ap = COMBAT_D->skill_power(me, "whip", SKILL_USAGE_ATTACK);
	if( ap < 1 ) ap = 1;

	dp = COMBAT_D->skill_power(target, "dodge", SKILL_USAGE_DEFENSE);
	if( dp < 1 ) dp = 1;

        if( random(ap + dp) < dp )
        {
		dodge_skill = target->query_skill_mapped("dodge");
		if( !dodge_skill ) dodge_skill = "轻功";
		else dodge_skill = to_chinese(dodge_skill);

		if( dp > ap*2 )
			msg += CYN"$p瞧出厉害,当下施展"+ dodge_skill +"向後滑出丈许,脱出$W"CYN"所绕的鞭圈范围。\n"NOR;
		else if( dp < ap*2/3 )
			msg += CYN"$p心下大骇,急忙竭尽全力施展"+ dodge_skill +",好不容易从$W"CYN"所绕的鞭圈中脱出。\n"NOR;
		else	msg += CYN"$p心下一惊,立时提气纵跃,施展"+ dodge_skill +"自$W"CYN"所绕的鞭圈之中脱困而出。\n"NOR;

		me->start_busy(1+random(3));
	}
	else
	{
		msg += WHT"$p$w"WHT"上劲力被$P这么一带,登时身不由主,连转了几个身";

		if( objectp(weapon2 = target->query_temp("weapon")) )
		{
			ap = (int)me->query("neili") / 10
				+ whip + (int)me->query_skill("force");
			dp = (int)target->query("neili") / 10
				+ (int)target->query_skill("parry")
				+ (int)target->query_skill("force");

			switch( weapon2->query("skill_type") )
			{
				case "bow"    : wp = 1; break;
				case "whip"   : wp = 1; break;
				case "sword"  : wp = 2; break;
				case "hook"   : wp = 2; break;
				case "blade"  : wp = 2; break;
				case "pike"   : wp = 3; break;
				case "stick"  : wp = 3; break;
				case "club"   : wp = 3; break;
				case "staff"  : wp = 4; break;
				case "axe"    : wp = 5; break;
				case "hammer" : wp = 5; break;
				default       : wp = 3; break;
			}
			rate = 11/8;
			if( (ap>=dp) && ((random(ap-dp)+wp)*rate > wp) ) 
			{
				msg += ",$w"WHT"脱手上扬。\n"NOR;
				weapon2->unequip();
				weapon2->move(environment(target));
				target->reset_action();
			}
			else msg += "。\n"NOR;
		}
		else msg += "。\n"NOR;

		target->start_busy(2);
		target->set_temp("guarding", 0);

		if( !me->query_temp("guarding") )
                	me->set_temp("guarding", 1);

		dodge = target->query_skill("dodge");
		busy_time = (int)whip/8 - (int)dodge/10 + 1;
		if( busy_time < (int)whip/60 ) busy_time = (int)whip/60;
		if( busy_time > (int)whip/20 ) busy_time = (int)whip/20;
		if( wizardp(me) ) tell_object(me, sprintf("\nbusy time: %d, ", busy_time));

		random_factor = busy_time/5;
		if( random_factor > 6 ) random_factor = 6;
		if( random_factor < 2 ) random_factor = 2;
		switch( random(2) )
		{
			case 0 : busy_time += random(random_factor); break; 
			case 1 : busy_time -= random(random_factor); break;
		}
		if( wizardp(me) )
			tell_object(me, sprintf("random factor: %d, new busy time: %d", random_factor-1, busy_time));

		me->delete_temp("jiuyin_chanrao");
		me->add_temp("jiuyin_chanrao/"+target->name(), busy_time);

		remove_call_out("jiuyin_chanrao");
		call_out("jiuyin_chanrao", 1, me, target, weapon);
	}
	msg = replace_string(msg, "$W", weapon->name());
	if( objectp(weapon2) )
		msg = replace_string(msg, "$w", weapon2->name());
	else 
	{
		prepare = target->query_skill_prepare();
		if( !prepare ) prepare = ([]);

		switch( sizeof(prepare) )
		{
			case 0: attack_skill = "unarmed"; break;
			case 1: attack_skill = (keys(prepare))[0]; break;
			case 2: attack_skill = (keys(prepare))[random(2)]; break;
		}
		switch( attack_skill )
		{
			case "strike" :	msg = replace_string( msg, "$w", "掌" ); break;
			case "cuff" :	msg = replace_string( msg, "$w", "拳" ); break;
			case "claw" :	msg = replace_string( msg, "$w", "爪" ); break;
			case "finger" :	msg = replace_string( msg, "$w", "指" ); break;
			case "hand" :	msg = replace_string( msg, "$w", "手" ); break;
			case "kick" :	msg = replace_string( msg, "$w", "脚" ); break;
			default :	msg = replace_string( msg, "$w", "拳脚" ); break;
		}
	}
	message_vision(msg, me, target);
	return 1;
}
示例#24
0
int exert(object me, object target)
{
	int sp, dp;
	int dmg;

	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) < 60 )
		return notify_fail("你的化功大法功力不够,不能吸取对方的内力!\n");

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

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

	if( (int)me->query("neili") >= (int)me->query("max_neili") * 2 )
		return notify_fail("你吸取的内力充塞全身,无法再吸取内力!\n");

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

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

	message_vision(
		HIW "$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 )
	{
		message_vision(
			HIR "$N顿觉膻中微痛,如同被尖针刺了个小孔,全身内力如水银般循孔飞泄而出!\n\n" NOR,
			target );

		tell_object(me, HIG "你觉得" + target->name() + "的内力自手掌源源不绝地流了进来。\n" NOR);

		if ((int)target->query("neili") > (int)me->query_skill("force"))
		{
			target->add("neili", -1*(int)me->query_skill("force") );
			me->add("neili", 2*((int)me->query_skill("force")));
		}else{
			me->add("neili", 2*(int)target->query("neili"));
			target->set("neili", 0);
		}
		
		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("force")/7 );
		me->add("jingli", -5);

		COMBAT_D->report_status(target);

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

	return 1;
}
示例#25
0
文件: feng.c 项目: mudchina/nitan3
int perform(object me, object target)
{
        object weapon;
        string msg;
        int ap, dp;
        int i, attack_time;

        if (userp(me) && ! me->query("can_perform/longcheng-shendao/feng"))
                return notify_fail("你没有受到高人指点,不会施展" FENG "。\n");

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

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

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

        if ((int)me->query_skill("longcheng-shendao", 1) < 120)
                return notify_fail("你的龙城神刀不够娴熟,难以施展" FENG "。\n");

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

        if (me->query_skill_mapped("blade") != "longcheng-shendao")
                return notify_fail("你没有激发龙城神刀,难以施展" FENG "。\n");

        if (me->query("neili") < 270)
                return notify_fail("你目前的真气不够,难以施展" FENG "。\n");

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

        msg = HIC "$N" HIC "大喝一声,施出绝招「" HIW "风雨交加" HIC "」手"
              "中的" + weapon->name() + HIC "如雨点一般向$n" HIC "打去,$n" HIC 
              "如同小舟一般在刀雨中漂泊不定。\n" NOR;

        attack_time = 3;

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

        attack_time += random(ap / 40);

        if (attack_time > 7)
                attack_time = 7;

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

        if (ap / 2 + random(ap) > dp)
        {
                msg += HIR "$n" HIR "见$P" HIR "这招来势汹涌,势不可"
                      "挡,被$N" HIR "攻得连连后退。\n" NOR;
        } else
        {
                msg += CYN "$n" CYN "见$N" CYN "这几刀来势迅猛无比,毫"
                       "无破绽,只得小心应付。\n" NOR;
        }

        message_combatd(msg, me, target);

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

                COMBAT_D->do_attack(me, target, weapon, 20);
        }

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

        return 1;
}
示例#26
0
int
cmd_demote(string arg)
{
    string              domain, target;
    object              tmp, myLink, targetLink;
    int                 myLev, targetLev;

    if (!arg || sscanf(arg, "%s %s", target, domain) < 2) {
	notify_fail("Usage: demote <name> <domain>\n");
	return 0;
    }
    if (member_array(domain, DOMAIN_LIST) == -1) {
	notify_fail("No such domain.\n");
	return 0;
    }
    tmp = previous_object();
    if (!interactive(tmp))
	return 0;
    //no security hole here...
      myLink = (object) tmp->query_link();
    myLev = member_array(
		      (string) DOMAIN_D->query_domain_level(myLink, domain),
			 LEVEL_LIST);
 /* If the command giver is an admin...well, let them do whatever. */
    if (adminp(geteuid(myLink)))
	myLev = sizeof(LEVEL_LIST);
    if (myLev < MIN_SPONSOR_LEVEL) {
	notify_fail(
		    "You must be at least " +
		    LEVEL_LIST[MIN_SPONSOR_LEVEL] +
		    " level in the domain to demote someone.\n");
	return 0;
    }
 /*
  * Ask the finger daemon to get a link for us, so that if they are not on at
  * the time, we can still do this. 
  */
    targetLink = FINGER_D->restore_data(target);
    if (!targetLink) {
	notify_fail("No such user.\n");
	return 0;
    }
    targetLev = member_array(
		  (string) DOMAIN_D->query_domain_level(targetLink, domain),
			     LEVEL_LIST);
    if (targetLev >= myLev) {
	write((string) targetLink->CAP_NAME +
	      " is too high a level for you to demote.\n");
	return 1;
    } else if (targetLev < ENTRY_LEVEL) {
	write((string) targetLink->CAP_NAME + " is not in that domain.\n");
	return 1;
    }
    targetLev--;
    if (DOMAIN_D->set_domain(targetLink, domain,
			     LEVEL_LIST[targetLev], geteuid(myLink))) {
	tmp = find_player(target);
	if (targetLev == 1) {
	    if (tmp)
		tell_object(tmp, (string) myLink->CAP_NAME +
		       " has removed you from the " + domain + " domain.\n");
	    write("Removed from domain.\n");
	    log_file("DEMOTE_LOG", (string) myLink->CAP_NAME +
		     " removed " + capitalize(target) +
		     " from the " + domain + " domain.\n");
	} else {
	    if (tmp)
		tell_object(tmp, (string) myLink->CAP_NAME +
			    " has demoted you to " + LEVEL_LIST[targetLev] +
			    " in the " + domain + " domain.\n");
	    write("Level set to " + LEVEL_LIST[targetLev] + ".\n");
	    log_file("DEMOTE_LOG", (string) myLink->CAP_NAME +
	    " demoted " + capitalize(target) + " to " + LEVEL_LIST[targetLev] +
		     " in the " + domain + " domain.\n");
	}
    } else {
	write("Failed to set level.\n");
    }
 /*
  * This will force a save, and if the user is not on, a remove() as well. 
  */
    targetLink->clean_up();

    return 1;
}
示例#27
0
文件: zhi.c 项目: mudchina/nitan3
int perform(object me, object target)
{
        string msg;
        object weapon;
        int n;
        int skill, ap, dp, damage;

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

        skill = me->query_skill("jiuyin-shengong", 1);

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

        if (me->query_temp("weapon"))
                return notify_fail(ZHI "只能空手施展!\n");

        if (skill < 250)
                return notify_fail("你的九阴神功等级不够,无法施展" ZHI "!\n");

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

//        if (me->query_skill_prepared("finger") != "jiuyin-shengong")
        if (me->query_skill_mapped("finger") != "jiuyin-shengong")
                return notify_fail("你没有准备使用九阴神功,无法施展" ZHI "。\n");

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

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

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

        msg = HIY "$N" HIY "出手成指,随意点戳,似乎看尽了$n"
              HIY + "招式中的破绽。\n" NOR;
        if (ap / 2 + random(ap) > dp)
        {
                n = 4 + random(4);
                if (ap * 11 / 20 + random(ap) > dp)
                {
                        msg += HIY "$n" HIY "见来指玄幻无比,全然无法抵挡,慌乱之下破绽迭出,$N"
                               HIY "随手连出" + chinese_number(n) + "指!\n" NOR;
                        message_combatd(msg, me, target);
                        me->start_busy(1 + random(n));
                        while (n-- && me->is_fighting(target))
                        {
                                if (random(2) && ! target->is_busy())
                                	target->start_busy(1);

                                COMBAT_D->do_attack(me, target, 0, 0);
                        }

                        weapon = target->query_temp("weapon");
                        if (weapon && random(ap) / 2 > dp && weapon->query("type") != "pin")
                        {
                                msg = HIW "$n" HIW "觉得眼前眼花缭乱,手中的" + weapon->name() +
                                      HIW "一时竟然拿捏不住,脱手而出!\n" NOR;
                                weapon->move(environment(me));
                        } else
                        {
                                msg = HIY "$n勉力抵挡,一时间再也无力反击。\n" NOR;
                        }

                        if (! me->is_fighting(target))
                                // Don't show the message
                                return 1;
                } else
                {
                        msg += HIY "$n" HIY "不及多想,连忙抵挡,全然无法反击。\n" NOR;
			if (! target->is_busy())
                        	target->start_busy(4 + random(skill / 30));
                }
        } else
        {
                msg += HIC "不过$n" HIC "紧守门户,不露半点破绽。\n" NOR;
                me->start_busy(3 + random(2));
        }

        message_combatd(msg, me, target);
        return 1;
}
示例#28
0
int hole(string str) {
   if (!str || str != "hole") return notify_fail("Enter what?\n");
   write("You attempt to enter the hole but fall in!!!                                                                                %^RED%^SPLASH!!!%^RESET%^.");
   this_player()->move_player( ROOMS  "balra2.c");
   return 1;
}
示例#29
0
int practice_skill(object me)
{
        return 
notify_fail("金刚不坏功只能用学的。\n");
}
示例#30
0
int valid_learn(object me)
{
        if ((int)me->query("max_force") < 1000)
                return notify_fail("你的内力不够。\n");
        return 1;
}