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 = ({ });
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); }
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); }
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; }
void create() { if(clonep(this_object())) { destruct(this_object()); return notify_fail("CAN NOT CLONE STARNDARD OBJECT!\n"); } }
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; }
int valid_learn(object me) { if( (int)me->query_skill("spells",1) < 20 ) return notify_fail("你的法术修为还不够高深,无法学习仙风云体术。\n"); return 1; }
int practice_skill(object me) { return notify_fail("降龙心法只能用学的,或是从运用(exert)中增加熟练度。\n"); }
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; }
int valid_learn(object me) { if ( me->query("age") <= 20 ) return notify_fail("你现在还太小,不能学习基本赌技。\n"); return 1; }
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"); }
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("���Ѿ�������[32m���Ǻ��ķ�[0m�ˡ�\n"); if(me->query_temp("white")) return notify_fail("���Ѿ�������[37m�������ķ�[0m�ˡ�\n"); if(me->query_temp("nine")) return notify_fail("���Ѿ�������[35m����ϼ�ķ�[0m�ˡ�\n"); if(me->query_temp("gen")) return notify_fail("���Ѿ���ʹ��[35m�������ķ�[0m�ˡ�\n"); if(me->query_temp("ice")) return notify_fail("���Ѿ�����ת[37m��ѩ���ķ�[0m�ˡ�\n"); if(me->query_temp("black")) return notify_fail("���Ѿ�������[30m������[0m�ˡ�\n"); if(me->query_temp("bluesea")) return notify_fail("���Ѿ��ڴ���[34m���[0m�ھ��ˡ�\n"); if(me->query_temp("goldsun")) return notify_fail("���Ѿ���ǿ��[33m����[0m�ھ��ˡ�\n"); if(me->query_temp("blood")) return notify_fail("���Ѿ��ڴ߹�[31mѪ��[0m�ھ��ˡ�\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; }
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; }
int valid_learn(object me) { if( me->query("combat_exp") <= 5000000 ) return notify_fail("你的武功修为还不够高深,无法学习高级纵跃闪躲之术。\n"); return 1; }
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; }
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); }
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"); }
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; }
int fail_song() { return notify_fail("You do not know that song.\n"); }
int valid_leave(object me, string dir) { if (check_dirs(me, dir)) return notify_fail("��ȶ��˻��أ�����ɮ�ࡣ\n"); return ::valid_leave(me, dir); }
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"); }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
int practice_skill(object me) { return notify_fail("金刚不坏功只能用学的。\n"); }
int valid_learn(object me) { if ((int)me->query("max_force") < 1000) return notify_fail("你的内力不够。\n"); return 1; }