北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 7367|回复: 5

内功修炼讨论

[复制链接]
发表于 2004-6-3 10:15:55 | 显示全部楼层 |阅读模式
0.基本设想是这样的:a.所有的内功(基本&特殊)在级别大于180级之后(这里主要考虑到多隆的武功级别比较低,并且内功的修炼持续时间比较长),除了可以向师傅学习之外,还可以靠自己的修炼来提高,如果自己的级别高于师傅的级别或者没有其他东西可供钻研来提升等级的时候,那么修炼就是唯一的提高途径(某些特别设置的内功除外); b.所有的基本外功在等级不低于师傅时,可以通过和师父切磋武功来提高,切磋消耗潜能,速度比修炼快; c.所有特殊外功在任何时候都可以练习,仅受经验和基本外功的影响。
1.取消现有的dz命令,dz命令实现的增加内力功能由dazuo命令完成,dz命令实现的打通任督二脉功能,由xiulian命令完成;
2.dazuo除了可以实现内力的积累这一功能之外,同时具有少量恢复体能的效果,这一功能用于弥补部分内功不具有heal,lifeheal的效果,比专门内功的医疗功能弱,但如果配合高级别的medical技能也可能有比较好的效果(如果有必要还可以设定在打坐时可以减缓某些毒性的发作);
3.增加xiulian命令,主要用于内功的等级提升,修炼过程中如果受到干扰或者内功等级超过经验限制(或者其他的限制条件)则有可能会走火入魔;
4.qiecuo命令我没有考虑,不过我觉得最好重新写,而不要受现有的learn里面实现切磋功能部分代码的束缚。


讨论:xiulian是否耗潜能?

[附]xiulian.c 代码如下:

  1. // xiulian.c

  2. inherit F_CLEAN_UP;

  3. #include
  4. #include

  5. int exercising();
  6. int halt_exercise();

  7. int main(object me, string arg)
  8. {
  9.     string force;
  10.     int force_jibie;

  11.     seteuid(getuid());

  12.     if ( !stringp(force = me->query_skill_mapped("force") ))
  13.             force = "force";

  14.     if ( me->is_busy() )
  15.         return notify_fail("你现在正忙着呢。\n");

  16.     if ( me->is_fighting() )
  17.         return notify_fail("战斗中忌练内功,否则会走火入魔。\n");

  18.     if(me->query_skill("force", 1) < 180)
  19.             return notify_fail( "你基本内功等级太低,还无法自行修炼!\n");
  20.     force_jibie = me->query_skill( force, 1 );
  21.     if ( force_jibie < 180 )
  22.         return notify_fail( "你内功等级太低,还无法自行修炼!\n");

  23. //这个函数用于控制某些只能通过特殊手段学习,或者是想限制学习的最高级别的内功
  24. //需要用到时单独添加在相应的内功文件中即可
  25.     if ( SKILL_D( force )->invalid_xiulian(me) )
  26.         return notify_fail("这门内功无法通过自行修炼来提升。\n");

  27.         if( (int)me->query("qi") < me->query("max_qi") * 9 / 10)
  28.                 return notify_fail("你现在的气太少了,无法产生内息运行全身经脉。\n");

  29.         if( (int)me->query("jing") * 100 / (int)me->query("max_jing") < 90 )
  30.                 return notify_fail("你现在精不够,无法控制内息的流动!\n");


  31.         write( HIY"你开始修炼" + to_chinese(force) + "。\n"NOR );

  32.     me->set_temp("pending/exercise", 1);
  33.     me->set_temp("exercise_cost", 200);
  34.     message_vision("$N盘膝坐下,紧闭双目,开始修炼内力。\n", me);
  35.     write(HIW"你心中存想,缓缓催动体内气息运行周天。\n"
  36.       "只觉体内一股热气直透上来,你进入了一种玄妙的境界......\n"NOR);
  37.     me->start_busy( "exercising", "halt_exercise" );
  38.     return 1;
  39. }

  40. int exercising()
  41. {
  42.     object me = this_player();
  43.     string using_force;
  44.     int skill_gain, gift_gain;
  45.     int exercise_cost;
  46.     int force, max_force, exp, myint, mykar, mycon, level, max_zouhuo;

  47.     exercise_cost = me->query_temp("exercise_cost");
  48.     if ( !stringp(using_force = me->query_skill_mapped("force") ))
  49.             using_force = "force";

  50.     level = (int)me->query_skill( using_force, 1 );

  51.     exp = me->query("combat_exp");
  52.     force = me->query( "neili" );
  53.     max_force = me->query( "max_neili" );

  54.     myint=me->query("int");
  55.     mykar=me->query("kar");
  56.     mycon=me->query("con");

  57.         if ( random( 10 ) > 8 )
  58.                tell_object( me,HIW"......你的内息在体内沿着经脉要穴不断运转,感觉你的内力\n"+
  59.         "        正在不断的凝集......\n\n"NOR );
  60.         else if ( random( 5 )<1)
  61.                tell_object( me,
  62.                 HIC"......你只觉天地之精慢慢渗入体内,在百会、人中、神阕、丹田、会阴、命门、玉枕等要穴\n"+
  63.         "        间不住流转,然后散之于四肢体骸......\n\n"NOR);

  64. //修炼过程中受到攻击,有可能走火入魔
  65.         if(me->is_fighting() && !random(10))
  66.         {
  67.                 switch ( random( 4 ) )
  68.                 {
  69.                 case 0 :
  70.                         tell_object(me, HIY "你觉得内息有些混乱。\n" NOR );
  71.                         break;
  72.                 case 1 :
  73.                         tell_object(me, HIY "你感觉到内力有失控的迹象。\n" NOR );
  74.                         break;
  75.                 case 2 :
  76.                         tell_object(me, HIY "你觉得有些胸闷头痛,心里很烦躁。\n" NOR );
  77.                         break;
  78.                 case 3:
  79.                         tell_object(me, HIR "由于你在战斗中强行修炼内功,你走火入魔了!\n" NOR );
  80.                         me->set("max_neili", max_force * 6 / 7);
  81.                         me->set("eff_neili", me->query("eff_neili") * 6 / 7);
  82.                         log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/7));
  83.                         me->set_temp("pending/exercise", 0);
  84.                         return 0;
  85.                         break;
  86.                 }
  87.         }

  88. //某些时候有可能大幅度进步
  89.     if ( !random( 20 ) )
  90.     {
  91.         skill_gain = random( myint + mykar )  + 1;
  92.         if ( !random( 40 ) ) skill_gain += sqrt( max_force );
  93.         me->improve_skill( using_force, skill_gain );
  94.     }


  95. //有可能打通任督二脉
  96.           if(!me->query("renduermai") && (random(mykar + myint + mycon)/3 > (20 + random(10))))
  97.         {
  98.                 tell_object( me, HIC"你突然觉得体内的真气流动不同寻常,体内任督二脉\n"
  99.                         "似欲喷薄而出......\n\n"NOR );
  100.                           if( (level - 300) / 100 + random(1000) > 998)
  101.                 {
  102.                         tell_object( me, HIW"终于,你体内的真气冲破十二重楼,完全汇交融合为一体,只觉得全身\n"
  103.                                 "内力充盈,你的任督二脉已经被打通了!\n"NOR );
  104.      message( "channel:" + "rumor",HIM + "【江湖传闻】"+me->query("name")+"打通任督二脉!\n\n"NOR,users());
  105.                       me->add("int",1 + random(2));
  106.                       me->add("per",1 + random(2));
  107.                       me->add("con",1 + random(2));
  108.                       me->add("dex",1 + random(2));
  109.                       me->add("kar",1 + random(2));
  110.                       me->add("str",1 + random(2));
  111.                         me->set("renduermai",1);
  112.                 log_file("static/datong",sprintf(" %s(%s) 于%s,打通任督二脉!\n", me->query("name"),me->query("id"),ctime(time())));
  113.                         me->set_temp("pending/exercise", 0);
  114.                         return 0;
  115.                 }
  116.         }


  117.     if ( exercise_cost >= 10 )
  118.     {
  119.         /*内功修炼的进度跟悟性、根骨、内功级别、最大内力有关*/
  120.         //计算方法影响成长速度需要仔细研究
  121.         gift_gain = random(myint + mycon) + 1;
  122.         skill_gain = (force + max_force) / 100;
  123.         if(skill_gain < 1) skill_gain = 1;
  124.         skill_gain = gift_gain * skill_gain;
  125.         me->improve_skill(using_force, skill_gain/200 );

  126.         me->add_temp( "exercise_cost", -5 );
  127.         return 1;
  128.     }
  129.         me->set_temp("pending/exercise", 0);
  130.         message_vision( HIG"$N将散入经脉的真气收回丹田,深深吸了口气,站了起来。\n"NOR, me );

  131. //用经验来限制走火?
  132.         max_zouhuo = level * level * level /10  ;
  133.             if ( exp < max_zouhuo )
  134.         {
  135.             switch ( random( 4 ) )
  136.             {
  137.             case 0 :
  138.                 write( HIY "你觉得内息有些混乱。\n" NOR );
  139.                 break;
  140.            case 1 :
  141.                 write( HIY "你感觉到内力有失控的迹象。\n" NOR );
  142.                 break;
  143.             case 2 :
  144.                 write( HIY "你觉得有些胸闷头痛,心里很烦躁。\n" NOR );
  145.                 break;
  146.             default :
  147.                 break;
  148.             }
  149.             if ( !random( sqrt(sqrt(max_zouhuo - exp)) ))
  150.             {
  151.                 tell_object(me, RED "你觉得体内的真气突然失去控制,蹿入全身各处经脉,\n"
  152.                         "你浑身如针刺一般,痛苦之至。\n" NOR);
  153.                 tell_object(me,HIR "\n你因强行修炼内力,控制不住自己的内息,走火入魔了。\n"NOR );
  154.                 me->unconcious();
  155.                 me->set_skill(using_force, level - 1);
  156.                 me->set_skill("force", me->query_skill("force", 1) - 1);
  157.                 me->set("max_neili", max_force * 4 / 5);
  158.                 me->set("eff_neili", me->query("eff_neili") * 4 / 5);
  159.                 me->set("neili", max_force);
  160.                 log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/5));
  161.                 return 0;
  162.             }
  163.         }
  164.         return 0;

  165. }

  166. int halt_exercise()
  167. {
  168.     object me = this_player();
  169.     int force, max_force, jibie;
  170.     string using_force;

  171.     if ( !stringp(using_force = me->query_skill_mapped("force") ))
  172.             using_force = "force";

  173. //    tell_object(me, HIC"你强行将体内运行的真气压回丹田,站起身来。\n"NOR );
  174. //halt命令里面已经有类似的话,此句注释
  175.     if ( !random( 30 ))
  176.     {
  177.                 tell_object(me, RED "你觉得体内的真气突然失去控制,蹿入全身各处经脉,\n"
  178.                         "你浑身如针刺一般,痛苦之至。\n" NOR);
  179.                 tell_object(me,HIR "\n你因强行修炼内力,控制不住自己的内息,走火入魔了。\n"NOR );
  180.                 log_file("static/zouhuo",sprintf(" %s(%s) 走火入魔于%s,共失去%d点内力\n", me->query("name"),me->query("id"),ctime(time()),me->query("max_neili")*1/5));
  181.                 me->unconcious();
  182.                 me->set_skill(using_force, me->query_skill(using_force, 1) - 1);
  183.                 me->set_skill("force", me->query_skill("force", 1) - 1);
  184.                 me->set("max_neili", me->query("max_neili") * 4 / 5);
  185.                 me->set("eff_neili", me->query("eff_neili") * 4 / 5);
  186.                 me->set("neili", me->query("max_neili"));
  187.                 return 0;
  188.     }
  189.     return 1;
  190. }



  191. int help(object me)
  192. {
  193.     write( @HELP

  194. 靠自己的运气练功达到提高内功修为的目的。
  195. 所修炼的内功级别必须大于180级。
  196. 修练时你的精神、体能的值都必须大于 90%。

  197. HELP
  198.     );
  199.     return 1;
  200. }
复制代码
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2004-6-3 17:56:41 | 显示全部楼层

Re:内功修炼讨论

这个我以前考虑过,当时主要考虑现在的经验速度调整好之前,最好不要加这种东西,如果速度控制的不好,很可能导致一些想不到的新问题,都像yeah那样,1000级的功夫,到时候就不好办了,所以没有提出来,learn.c中的切磋的问题我也找到了,当时和icer讨论决定暂时不修正,之后icer做的一些削弱公共武功,降低一些任务的奖励等也是和这个相关的改动,notme发贴让我改的时候,我的回贴也是反对意见,没想notme工作效率这么高,一晚上就连通知都发了。

vast的想法很好,既然想做这个,就不应该再受原来的learn的影响。

我的意见还是先处理好经验增长速度,再做这个,不然修炼的速度是否考虑现有东西的影响,如果考虑的太多,难免要影响加它的意义,太慢的话,就没什么意义,不考虑现有系统是不可能的,整个系统应该是完整的。
最好能协调经验增长速度、读书、学习、练习、修炼等等的速度,这些都是相关的,可能还涉及一些其他的,例如master的等级也和这个是相关的。
控制好这些参数,意义是很大的。

就说这么多,这两天还有考试,时间比较少,你们再讨论讨论,如果加就处理好相关的问题,呵呵。另外,现在好象大家都对这个速度有意见。

[ Last edited by zoom on 2004-6-3 at 06:04 PM ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2004-6-3 23:34:42 | 显示全部楼层

Re:内功修炼讨论

把打坐通二脉的功能转移到修炼的想法很好啊,
不过dz在低等级的时候效果比dazuo好不少,可能玩家会希望保留
对修炼我觉得没必要进行级别限制,低级别的时候玩家自然会去学习的

基本武功方面切磋由于有侠客岛和领悟,都不用潜能,因此不会有人选择去切磋
另外练习时武功都可以通过激发为parry来练习
通过练习和领悟就可以提高基本武功了。
只有切磋music,读书等可能会有市场

除非把练习也改改,特殊武功激发为parry时不能练习
我把我写的 xiulian.c 贴一下
修炼时间为 (特殊内功级别/2 * 4/3 )分钟,比较长
400 级时 240 分钟长一级,可以考虑再缩短一半?


  1. // xiulian.c
  2. // 修炼特殊内功

  3. #include
  4. #include

  5. inherit F_CLEAN_UP;

  6. int main(object me, string arg)
  7. {
  8.     string skill;
  9.     int my_skill;
  10.     object where =  environment(me);

  11.     seteuid(getuid());
  12.     if(where->query("pigging")) return notify_fail("你还是专心拱猪吧!\n");
  13.     if(me->is_busy()) return notify_fail("你现在正忙着呢。\n");
  14.     if(me->is_fighting()) return notify_fail("战斗中不能练内功,会走火入魔。\n");
  15.     if(me->query("lingjiu/last_xiulian_time"))
  16.         return notify_fail("你现在正在恢复武功,没有精力研究武功。\n");
  17.     if(!(skill = me->query_skill_mapped("force")))
  18.         return notify_fail("你必须先用 enable 选择你要用的内功心法。\n");
  19.     if(!SKILL_D(skill)->valid_learn(me)) return 0;
  20.    
  21.     my_skill = me->query_skill(skill,1);
  22.     if( my_skill * my_skill * my_skill / 10 > (int)me->query("combat_exp") )
  23.         return notify_fail("由于缺乏实战经验,你无法领会更高深的武功。\n" );
  24.    
  25.     if((int)me->query("learned_points") > (int)me->query("potential") - my_skill)
  26.         return notify_fail("你的潜能不足,没法修炼!\n");
  27.    
  28.     me->set_temp("pending/xiulian", 30);
  29.     //每次消耗潜能数等于skill级别,高等级时修炼不至于太难
  30.     me->add("learned_points", my_skill);
  31.     message_vision(HIM"\n$N盘膝坐下,运起丹田之气,开始修炼"+to_chinese(skill)+"......\n\n"NOR, me);
  32.     me->start_busy("do_xiulian","halt_xiulian");
  33.     return 1;
  34. }

  35. int do_xiulian(object me)
  36. {
  37.     string skill;
  38.     int my_skill;
  39.     //防止中途换内功
  40.     if(!(skill = me->query_skill_mapped("force"))) return 0;
  41.     my_skill = me->query_skill(skill,1);
  42.    
  43.     if ( !random(7))
  44.     {
  45.         tell_object( me,
  46.         MAG"......你摧动真气沿体内经脉流动,在百会、人中、神阕、丹田、会阴、命门、玉枕等要穴\n"+
  47.         "      间不住流转,然后散之于四肢体骸......\n\n"NOR);
  48.     }
  49.     else if (!random(11))
  50.         tell_object(me,HIW"......你心中默念内功心法,缓缓催动体内气息运行周天。\n"
  51.                 "      只觉体内一股热气直透上来,你进入了一种玄妙的境界......\n\n"NOR);   
  52.         if(me->is_fighting() && !random(20) )
  53.     {
  54.                 tell_object(me, HIR "由于你在战斗中强行修炼内功,你走火入魔了!\n" NOR );
  55.         log_file("static/xiulian_zouhuo",
  56.         sprintf("%s(%s) 修炼内功走火于%s,%s等级掉一级。\n",
  57.         me->query("name"),me->query("id"),ctime(time()), to_chinese(skill) ));
  58.         me->set_skill(skill, my_skill-1);
  59.         return 0;
  60.     }
  61.         
  62.     if (me->query_temp("pending/xiulian") < 2)
  63.     {
  64.         // skill 点潜能换(skill * 0.75 + 先天根骨)点
  65.         me->improve_skill(skill, me->query("con") + random(my_skill * 3/2));
  66.         message_vision( HIG"$N从玄幻之境回过神来,顿觉内功修为增进不小。\n"NOR, me );
  67.         return 0;
  68.     }
  69.     me->add_temp("pending/xiulian", -1 );
  70.     return 1;
  71. }

  72. int halt_xiulian(object me)
  73. {
  74.     string skill;
  75.     if(!(skill = me->query_skill_mapped("force"))) return 0;
  76.    
  77.     me->delete_temp("pending/xiulian");
  78.     tell_object(me,HIR"你强行将内力纳入丹田,缓缓吐了口气,站了起来.\n"NOR);
  79.     if ( !random(30) )
  80.     {
  81.         tell_object(me,HIY"你由于强行中断修炼,不禁一阵头昏目眩......你走火了!\n"NOR);
  82.         log_file("static/xiulian_zouhuo",
  83.         sprintf("%s(%s) 修炼内功走火于%s,%s等级掉一级。\n",
  84.         me->query("name"),me->query("id"),ctime(time()), to_chinese(skill) ));
  85.         me->set_skill(skill,me->query_skill(skill,1)-1);
  86.     }
  87.     return 1;
  88. }

  89. int help(object me)
  90. {
  91.     tell_object(me,@HELP
  92.     修炼内功是后期提高特殊内功的唯一途径,修炼有可能走火,
  93. 所以最好在安全的地方修炼以避免走火。
  94. HELP
  95.     );
  96.     return 1;
  97. }
复制代码
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2004-6-3 23:48:55 | 显示全部楼层

Re:内功修炼讨论

Originally posted by zoom at 2004-6-3 05:56 PM:
这个我以前考虑过,当时主要考虑现在的经验速度调整好之前,最好不要加这种东西,如果速度控制的不好,很可能导致一些想不到的新问题,都像yeah那样,1000级的功夫,到时候就不好办了,所以没有提出来,learn.c中 ...

我觉得速度的调整没法一步到位,不可能想得完美了再推出
对于这个我是先用较慢的速度,看情况再加一点。
宁可推出来时大家都不满意,如果一开始大家就皆大欢喜,说明就太快了

我把切磋改了,是因为想给大家一个希望,心理的作用大于现实的。
因为随着侠客岛和武功,任务方面的修改,削弱了不少。
武功方面需要激发内功,使得好多武功受到限制,如果武功级别没法提高
那就会让玩家失去希望了。
另外判师的也可以看到一线曙光,可以花潜能了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2004-6-4 12:39:11 | 显示全部楼层

Re:内功修炼讨论

1.速度问题
玩家觉得慢很多时候都是因为某些参数数字化太明显了
搞得很像数字游戏
XO里面很多东西都是用文字来描述的
加上颜色来区分等级,
也就是说在某一等级范围内,看起来都是一样的
这样可能会好一些

2.dz和dazuo功能有重复,感觉不太必要

3.基本功的切磋问题,侠客岛,领悟和切磋应该各有好处
切磋既然要消耗潜能,在速度上就应该有优势

4.特殊外功,关于用parry练的问题,我觉得这个就涉及到一个,武功的编写问题了,现在基本上所有的武功都可以用在parry上,肯定有些不合理,用于招架的功夫应该和攻击的功夫有所区别,不过这个要修改工作量又大了

5.还有一个文化类功夫的问题,以前没考虑到,像literate,music,medical,poison,taoism,buddism,daoxue-xinfa这些东西用切磋来提高显然是不现实的,我认为这些功夫就只能靠学习和读书来提高,能学的最大级别一般不会(也不允许)达到很高,也没有必要很高

6.notme 的 "修炼时间为 (特殊内功级别/2 * 4/3 )分钟 "是怎么算出来的阿?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2004-6-6 01:57:59 | 显示全部楼层

Re:内功修炼讨论

修炼一次每30秒,消耗潜能为内功等级,增长大约为等级*3/4小点
要想长一级就需要(等级*4/3次)修炼,因此时间为(等级×4/3/2)分钟
400级 = 400×4/6 = 266 分钟
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-4-28 06:34 AM , Processed in 0.010130 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表