📄 taiji-quan.c
字号:
int valid_enable(string usage) { return usage=="unarmed" || usage=="parry"; }int valid_learn(object me){ if (me->query_temp("weapon") || me->query_temp("secondary_weapon")) return notify_fail("练太极拳必须空手。\n"); if ((int)me->query_skill("taiji-shengong", 1) < 20) return notify_fail("你的太极神功火候不够,无法学太极拳。\n"); if ((int)me->query("max_neili") < 100) return notify_fail("你的内力太弱,无法练太极拳。\n"); return 1;}string query_skill_name(int level){ int i; for(i = sizeof(action)-1; i >= 0; i--) if(level >= action[i]["lvl"]) return action[i]["skill_name"];}/* ----------------mapping query_action(object me, object weapon){ return action[random(sizeof(action))];}-------------------*/mapping query_action(object me, object weapon){ int i, level; string msg; level = (int) me->query_skill("taiji-quan",1);msg = random(2)==1?HIW"只见$N虚灵顶劲、涵胸拔背、松腰垂臀、沉肩坠肘,双手抱了个太极式的圆圈,纯以意行太极,已达形神合一,心动气动的境界,\n结果使出了太级拳中的"NOR:HIW"刹时间$N悟到了太极拳旨中“似松非松,将展未展,劲断意不断”的精微奥妙之处,使出一招犹如行云流水,潇洒无比。\n结果使出了太级拳中的"NOR;msg = msg + order[random(13)] + taijin[random(14)] + NOR; if ( level > 250 && random(level) > 200 && random(10)>5) return ([ "action" : msg, "force" : 500, "dodge": 100, "damage": 500, "parry": 100, "damage_type" : random(2)==1?"瘀伤":"内伤", ]); if (random(me->query_con()) > 25 && random(20) >= 15 && level > 200 && me->query("neili") > 600){ me->add("neili", -30); return ([ "action": HIW"$N左掌阳,右掌阴,目光凝视$n,两掌向$p慢慢合拢,竟是凝重如山,却又轻灵似羽!"NOR, "force" : 500, "dodge" : 200, "damage" : 250, "damage_type" : "内伤", "skill_name" : "阴阳决", "lvl" : 200, ]); } if (random(me->query_con()) > 25 && random(20) >= 15 && level > 200 && me->query("neili") > 600){ me->add("neili", -30); return ([ "action": HIW"$N左掌阳,右掌阴,目光凝视$n,两掌向$p慢慢合拢,竟是凝重如山,却又轻灵似羽!"NOR, "force" : 500, "dodge" : 200, "damage" : 250, "damage_type" : "内伤", "skill_name" : "阴阳决", "lvl" : 200, ]); } for(i = sizeof(action); i > 0; i--) if(level > action[i-1]["lvl"]) return action[NewRandom(i, 5, level/5)];}int practice_skill(object me){ if ((int)me->query("qi") < 30) return notify_fail("你的体力太低了。\n"); if ((int)me->query("neili") < 20) return notify_fail("你的内力不够练太极拳。\n"); me->receive_damage("qi", 25); me->add("neili", -10); return 1;}string perform_action_file(string action){ return __DIR__"taiji-quan/" + action;}int ob_hit(object ob, object me, int damage){ object wp1,weapon; string msg; int p,j,skill, neili, neili1; wp1 = ob->query_temp("weapon"); weapon = ob->query_temp("weapon"); skill = me->query_skill("taiji-quan", 1); neili = me->query("neili"); neili1 = ob->query("neili"); if( random(me->query("combat_exp")) > ob->query("combat_exp")/3 && !ob->is_busy() && me->query_skill_mapped("parry") == "taiji-quan" && me->query_skill_mapped("unarmed") == "taiji-quan" && skill > 200) { msg = HIG"$p只觉上盘各路已全处在$P双掌的笼罩之下,无可闪避,无可抵御,只得运劲于背,硬接他这一掌,同时右臂紧挥,只盼两人各受一招,成个两败俱伤之局。\n"NOR; if(random(20) >= 13 && me->query("neili") > 600){ msg += HIR"不料$N双手一圈,如抱太极,一股雄浑无比的力道组成了一个旋涡,只带得$p在原地急转七八下,如转陀螺,如旋纺锤,好容易使出“千斤坠”之力定住身形,却已满脸胀得通红,狼狈万状!\n"NOR; ob->receive_damage("qi", me->query_skill("taiji-quan", 1)*2); ob->receive_damage("jing", me->query_skill("taiji-quan", 1)/3); if( !ob->is_busy() ){ ob->start_busy(2+random(2));} me->add("neili", -20); } else { if( !me->is_busy() ){ me->start_busy(1+random(2));} msg += HIY"$N但觉气息微窒,当下一招“斜飞势”,将$N力量引偏,自己也退开两步。\n"NOR;} message_vision(msg, me, ob); return 1; } if(me->query("combat_exp") > ob->query("combat_exp")/2 && me->query_skill_mapped("unarmed") == "taiji-quan" && me->query_skill_mapped("parry") == "taiji-quan" && me->query_skill("taiji-shengong", 1) > 50 && neili > 100 && skill > 50 && living(me) && !ob->query("env/invisibility") && random(10) >= 3) { if(wp1) msg = "$N双手连划,太极圆圈在$n的"+wp1->name()+"上一绕,"; else msg = "$N双手划弧,连连打出太极圆圈,";if (damage>50){ if(neili >= neili1 + damage){ if( weapon ) msg = "$N伸手一拍震开了$n的"+weapon->name()+",顺势一转,借力打力一掌按在$p下肋!\n"; else msg = "$N左手一划,套住$n,右掌顺势一推,借力打力将$p的劲力全数倒翻回去!\n"; msg += "结果$n的力道被太极拳借力打力反击回来!\n", ob->receive_damage("qi", damage/2+ob->query("jiali")*2, me); ob->receive_wound("qi", ob->query("jiali"), me);} p = ob->query("qi")*100/ob->query("max_qi"); msg += damage_msg(damage/2, "震伤"); msg += "( $n"+eff_status_msg(p)+" )\n"; j = -8000; } else if(neili >= neili1/2+random(neili1/2)+random(damage)){ if( weapon ) msg = "$N身形一转,一掌以四两拨千斤之巧劲从旁拍开了$n递近身的"+weapon->name()+"!\n"; else msg = "$N左手一划,右掌一转,以四两拨千斤之巧劲将$n的力道卸在一旁!\n"; msg += "结果$n的力道被太极拳借力打力卸在一旁!\n", j = -8000; } else if(neili > neili1/2+damage){ if( weapon ) msg = "$N情急之下,四两拨千斤一下拍在$n递近身的"+weapon->name()+"之旁,卸掉了$p一部分劲力!\n"; else msg = "$N连忙双手一加,以四两拨千斤之巧劲将$n的力道卸掉了一部分!\n"; msg += "结果$n的力道被太极拳借力打力卸掉了一部分!\n", j = -(damage/3+random(damage)); } else{ if( weapon ) msg = "$N集中生智,用借力打力之法使身体微侧,让"+weapon->name()+"劲力稍减!\n"; else msg = "$N慌忙用借力打力之法靠上,想要卸掉一部分劲力!\n"; msg += "结果$n的力道被太极拳借力打力卸掉了一小半!\n", j = -damage/3; } message_vision(msg, me, ob); return j; } }mixed hit_ob(object me, object victim, int damage_bonus){ string msg; int j,damage; j = me->query_skill("taiji-quan", 1); if( damage_bonus < 100 ) return 0; if(random(20) >= 13 && !victim->is_busy() && j > 120 && me->query("neili") > victim->query("neili") && me->query_skill_mapped("parry") == "taiji-quan" && me->query_skill("taiji-shengong", 1) > 50 && me->query_skill_mapped("unarmed") == "taiji-quan" && me->query("neili") > 600 && me->query("max_neili") > 1200 && j > random(victim->query_skill("dodge",1))){ switch(random(4)){ case 0 : msg = YEL"$N运起引字诀,粘连粘随,右掌已搭住$n左腕,巧劲随即发出!\n"NOR; damage = damage_bonus/3 + random(damage_bonus)/4;if (damage < 10) damage=10; victim->receive_wound("qi", damage/5); me->add("neili", -damage/10); break; case 1 : msg = YEL"$N运起挤字诀,双手一圈,如抱太极,一股雄浑无比的力道组成了一个旋涡!\n"NOR; damage = damage_bonus/3 + random(damage_bonus)/4;if (damage < 10) damage=10; victim->receive_wound("qi", damage/5); me->add("neili", -damage/10); break; case 2 : msg = YEL"$N运粘起字诀,双手弧划,左圈右围,一个跟着一个,太极圆圈连连发出!\n"NOR; damage = damage_bonus/4 + random(damage_bonus)/5; if ((int)victim->query("jing")<=damage+10) { victim->set("jing",10); } else { victim->receive_damage("jing", damage); } if (!victim->is_busy()){ victim->start_busy(1); } me->add("neili", -20); break; case 3 : msg = YEL"紧接着$N运起太极拳中粘、引、挤、按等招式,想将$n身子带歪!\n"NOR; damage = damage_bonus/3 + random(damage_bonus)/4; if (damage < 10) damage=10; victim->receive_wound("qi", damage/5); me->add("neili", -damage/10); break; } switch(random(4)){ case 0 : msg += HIR"结果$n身不由主的向前一冲,跨出几步,方始站定。\n"NOR; break; case 1 : msg += HIR"结果$n身不由主的在原地急转了七八下,如转陀螺,如旋纺锤!\n"NOR; break; case 2 : msg += HIR"登时便套得$n跌跌撞撞,身不由主的立足不稳,犹如中酒昏迷。\n"NOR; break; case 3 : msg += HIR"$n想使出千斤坠之力定住身形,却已满脸胀得通红,身不由己,狼狈万状。\n"NOR; break; } message_vision(msg, me, victim); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -