|
0.基本设想是这样的:a.所有的内功(基本&特殊)在级别大于180级之后(这里主要考虑到多隆的武功级别比较低,并且内功的修炼持续时间比较长),除了可以向师傅学习之外,还可以靠自己的修炼来提高,如果自己的级别高于师傅的级别或者没有其他东西可供钻研来提升等级的时候,那么修炼就是唯一的提高途径(某些特别设置的内功除外); b.所有的基本外功在等级不低于师傅时,可以通过和师父切磋武功来提高,切磋消耗潜能,速度比修炼快; c.所有特殊外功在任何时候都可以练习,仅受经验和基本外功的影响。
1.取消现有的dz命令,dz命令实现的增加内力功能由dazuo命令完成,dz命令实现的打通任督二脉功能,由xiulian命令完成;
2.dazuo除了可以实现内力的积累这一功能之外,同时具有少量恢复体能的效果,这一功能用于弥补部分内功不具有heal,lifeheal的效果,比专门内功的医疗功能弱,但如果配合高级别的medical技能也可能有比较好的效果(如果有必要还可以设定在打坐时可以减缓某些毒性的发作);
3.增加xiulian命令,主要用于内功的等级提升,修炼过程中如果受到干扰或者内功等级超过经验限制(或者其他的限制条件)则有可能会走火入魔;
4.qiecuo命令我没有考虑,不过我觉得最好重新写,而不要受现有的learn里面实现切磋功能部分代码的束缚。
讨论:xiulian是否耗潜能?
[附]xiulian.c 代码如下:
- // xiulian.c
- inherit F_CLEAN_UP;
- #include
- #include
- int exercising();
- int halt_exercise();
- int main(object me, string arg)
- {
- string force;
- int force_jibie;
- seteuid(getuid());
- if ( !stringp(force = me->query_skill_mapped("force") ))
- force = "force";
- if ( me->is_busy() )
- return notify_fail("你现在正忙着呢。\n");
- if ( me->is_fighting() )
- return notify_fail("战斗中忌练内功,否则会走火入魔。\n");
- if(me->query_skill("force", 1) < 180)
- return notify_fail( "你基本内功等级太低,还无法自行修炼!\n");
- force_jibie = me->query_skill( force, 1 );
- if ( force_jibie < 180 )
- return notify_fail( "你内功等级太低,还无法自行修炼!\n");
- //这个函数用于控制某些只能通过特殊手段学习,或者是想限制学习的最高级别的内功
- //需要用到时单独添加在相应的内功文件中即可
- if ( SKILL_D( force )->invalid_xiulian(me) )
- return notify_fail("这门内功无法通过自行修炼来提升。\n");
- if( (int)me->query("qi") < me->query("max_qi") * 9 / 10)
- return notify_fail("你现在的气太少了,无法产生内息运行全身经脉。\n");
- if( (int)me->query("jing") * 100 / (int)me->query("max_jing") < 90 )
- return notify_fail("你现在精不够,无法控制内息的流动!\n");
- write( HIY"你开始修炼" + to_chinese(force) + "。\n"NOR );
- me->set_temp("pending/exercise", 1);
- me->set_temp("exercise_cost", 200);
- message_vision("$N盘膝坐下,紧闭双目,开始修炼内力。\n", me);
- write(HIW"你心中存想,缓缓催动体内气息运行周天。\n"
- "只觉体内一股热气直透上来,你进入了一种玄妙的境界......\n"NOR);
- me->start_busy( "exercising", "halt_exercise" );
- return 1;
- }
- int exercising()
- {
- object me = this_player();
- string using_force;
- int skill_gain, gift_gain;
- int exercise_cost;
- int force, max_force, exp, myint, mykar, mycon, level, max_zouhuo;
- exercise_cost = me->query_temp("exercise_cost");
- if ( !stringp(using_force = me->query_skill_mapped("force") ))
- using_force = "force";
- level = (int)me->query_skill( using_force, 1 );
- exp = me->query("combat_exp");
- force = me->query( "neili" );
- max_force = me->query( "max_neili" );
- myint=me->query("int");
- mykar=me->query("kar");
- mycon=me->query("con");
- if ( random( 10 ) > 8 )
- tell_object( me,HIW"......你的内息在体内沿着经脉要穴不断运转,感觉你的内力\n"+
- " 正在不断的凝集......\n\n"NOR );
- else if ( random( 5 )<1)
- tell_object( me,
- HIC"......你只觉天地之精慢慢渗入体内,在百会、人中、神阕、丹田、会阴、命门、玉枕等要穴\n"+
- " 间不住流转,然后散之于四肢体骸......\n\n"NOR);
- //修炼过程中受到攻击,有可能走火入魔
- if(me->is_fighting() && !random(10))
- {
- switch ( random( 4 ) )
- {
- case 0 :
- tell_object(me, HIY "你觉得内息有些混乱。\n" NOR );
- break;
- case 1 :
- tell_object(me, HIY "你感觉到内力有失控的迹象。\n" NOR );
- break;
- case 2 :
- tell_object(me, HIY "你觉得有些胸闷头痛,心里很烦躁。\n" NOR );
- break;
- case 3:
- tell_object(me, HIR "由于你在战斗中强行修炼内功,你走火入魔了!\n" NOR );
- me->set("max_neili", max_force * 6 / 7);
- me->set("eff_neili", me->query("eff_neili") * 6 / 7);
- log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/7));
- me->set_temp("pending/exercise", 0);
- return 0;
- break;
- }
- }
- //某些时候有可能大幅度进步
- if ( !random( 20 ) )
- {
- skill_gain = random( myint + mykar ) + 1;
- if ( !random( 40 ) ) skill_gain += sqrt( max_force );
- me->improve_skill( using_force, skill_gain );
- }
- //有可能打通任督二脉
- if(!me->query("renduermai") && (random(mykar + myint + mycon)/3 > (20 + random(10))))
- {
- tell_object( me, HIC"你突然觉得体内的真气流动不同寻常,体内任督二脉\n"
- "似欲喷薄而出......\n\n"NOR );
- if( (level - 300) / 100 + random(1000) > 998)
- {
- tell_object( me, HIW"终于,你体内的真气冲破十二重楼,完全汇交融合为一体,只觉得全身\n"
- "内力充盈,你的任督二脉已经被打通了!\n"NOR );
- message( "channel:" + "rumor",HIM + "【江湖传闻】"+me->query("name")+"打通任督二脉!\n\n"NOR,users());
- me->add("int",1 + random(2));
- me->add("per",1 + random(2));
- me->add("con",1 + random(2));
- me->add("dex",1 + random(2));
- me->add("kar",1 + random(2));
- me->add("str",1 + random(2));
- me->set("renduermai",1);
- log_file("static/datong",sprintf(" %s(%s) 于%s,打通任督二脉!\n", me->query("name"),me->query("id"),ctime(time())));
- me->set_temp("pending/exercise", 0);
- return 0;
- }
- }
- if ( exercise_cost >= 10 )
- {
- /*内功修炼的进度跟悟性、根骨、内功级别、最大内力有关*/
- //计算方法影响成长速度需要仔细研究
- gift_gain = random(myint + mycon) + 1;
- skill_gain = (force + max_force) / 100;
- if(skill_gain < 1) skill_gain = 1;
- skill_gain = gift_gain * skill_gain;
- me->improve_skill(using_force, skill_gain/200 );
- me->add_temp( "exercise_cost", -5 );
- return 1;
- }
- me->set_temp("pending/exercise", 0);
- message_vision( HIG"$N将散入经脉的真气收回丹田,深深吸了口气,站了起来。\n"NOR, me );
- //用经验来限制走火?
- max_zouhuo = level * level * level /10 ;
- if ( exp < max_zouhuo )
- {
- switch ( random( 4 ) )
- {
- case 0 :
- write( HIY "你觉得内息有些混乱。\n" NOR );
- break;
- case 1 :
- write( HIY "你感觉到内力有失控的迹象。\n" NOR );
- break;
- case 2 :
- write( HIY "你觉得有些胸闷头痛,心里很烦躁。\n" NOR );
- break;
- default :
- break;
- }
- if ( !random( sqrt(sqrt(max_zouhuo - exp)) ))
- {
- tell_object(me, RED "你觉得体内的真气突然失去控制,蹿入全身各处经脉,\n"
- "你浑身如针刺一般,痛苦之至。\n" NOR);
- tell_object(me,HIR "\n你因强行修炼内力,控制不住自己的内息,走火入魔了。\n"NOR );
- me->unconcious();
- me->set_skill(using_force, level - 1);
- me->set_skill("force", me->query_skill("force", 1) - 1);
- me->set("max_neili", max_force * 4 / 5);
- me->set("eff_neili", me->query("eff_neili") * 4 / 5);
- me->set("neili", max_force);
- log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/5));
- return 0;
- }
- }
- return 0;
- }
- int halt_exercise()
- {
- object me = this_player();
- int force, max_force, jibie;
- string using_force;
- if ( !stringp(using_force = me->query_skill_mapped("force") ))
- using_force = "force";
- // tell_object(me, HIC"你强行将体内运行的真气压回丹田,站起身来。\n"NOR );
- //halt命令里面已经有类似的话,此句注释
- if ( !random( 30 ))
- {
- tell_object(me, RED "你觉得体内的真气突然失去控制,蹿入全身各处经脉,\n"
- "你浑身如针刺一般,痛苦之至。\n" NOR);
- tell_object(me,HIR "\n你因强行修炼内力,控制不住自己的内息,走火入魔了。\n"NOR );
- log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/5));
- me->unconcious();
- me->set_skill(using_force, me->query_skill(using_force, 1) - 1);
- me->set_skill("force", me->query_skill("force", 1) - 1);
- me->set("max_neili", me->query("max_neili") * 4 / 5);
- me->set("eff_neili", me->query("eff_neili") * 4 / 5);
- me->set("neili", me->query("max_neili"));
- return 0;
- }
- return 1;
- }
- int help(object me)
- {
- write( @HELP
- 靠自己的运气练功达到提高内功修为的目的。
- 所修炼的内功级别必须大于180级。
- 修练时你的精神、体能的值都必须大于 90%。
- HELP
- );
- return 1;
- }
复制代码 |
|