-
- // 这是书剑打坐命令主函数的一部分:
- msg = SKILL_D(force)->exercise_msg(me);
- if (!msg || undefinedp(msg["start_my_msg"]))
- write("你坐下来运气用功,一股内息开始在体内流动。\n");
- else
- write(msg["start_my_msg"]);
- me->set_temp("pending/exercise", 1);
- me->set_temp("exercise_cost", exercise_cost);
- if (!msg || undefinedp(msg["start_other_msg"]))
- tell_room(environment(me),
- me->name() + "盘膝坐下,开始运功打坐。\n", ({ me }));
- else
- tell_room(environment(me),
- msg["start_other_msg"], ({ me }));
- me->start_busy((: exercising :), (:halt_exercise:)); //这里开始打坐过程,通过exercising的返回值来看是否继续start_busy.
- //halt_exerciset, 是halt的时候调用的。
-
- //下面是exercising函数:
- int exercising(object me)
- {
- string force;
- mapping msg;
- int exercise_cost = (int)me->query_temp("exercise_cost"); //你dazuo花的气血;
- int neili_gain = 1 + (int)me->query_skill("force") / 10 //本次打坐所能获得的内力,和北侠一样,是enable/10;
- // int max = (me->query_skill("force") * me->query("con")*2/3) + (me->query_skill("beiming-shengong", 1)*20);
- //if players wanna get max_neili after force*10, the only way is drugs, quests and age :)
- // yes, add some max_neili each year they grow up :)
- // yuj please fix it if i made any mistake :)
- int max = me->query_skill("force")*8 + me->query("combat_exp")/1000;
- if (neili_gain > exercise_cost) neili_gain = exercise_cost; //如果内力增加值>dazuo所花气血,内力增加值=dazuo所花气血
- me->receive_damage("qi", neili_gain); //扣掉dazuo所花气血
- me->add("neili", neili_gain); //内力增加
- me->set_temp("exercise_cost", exercise_cost -= neili_gain); //重新计算dazuo所花气血,扣掉之前的内力增加值
- force = me->query_skill_mapped("force");
- if (force) msg = SKILL_D(force)->exercise_msg(me);
- if (exercise_cost > 0) { //判断dazuo气血,大于0则继续busy
- if (msg && !undefinedp(msg["exec_my_msg"]))
- tell_object(me, msg["exec_my_msg"]);
- if (!random(3) && msg && !undefinedp(msg["exec_other_msg"]))
- tell_room(environment(me), msg["exec_other_msg"], ({me}));
- return 1;
- } //判断dazuo气血,不大于0则结束busy,结束dazuo
-
- //下面是结束dazuo
-
- me->delete_temp("pending/exercise");
- if (!msg || undefinedp(msg["end_my_msg"]))
- tell_object(me, "你运功完毕,站了起来。\n");
- else
- tell_object(me, msg["end_my_msg"]);
- if (!msg || undefinedp(msg["end_other_msg"]))
- tell_room(environment(me),
- me->name()+"运功完毕,站了起来。\n", ({me}));
- else
- tell_room(environment(me),
- msg["end_other_msg"], ({me}));
- if (me->query("neili") < me->query("max_neili") * 2)
- return 0;
- if (me->query("max_neili") >= max){
- tell_object(me, "你的内力修为已经无法靠打坐来提升了。\n");
- me->set("neili", me->query("max_neili") * 2);
- return 0;
- }
- me->set("neili", me->add("max_neili", 1));
- tell_object(me, "你的内力修为增加了!\n");
- return 0;
- }
-
复制代码
1)从上面我们可以看出,打坐内功有效等级/10的整数倍都很高效:1)有网络延迟时,dazuo多倍会好点,2)网络良好,还怕超过内力上限2倍多的浪费,dazuo一倍好。
因为dazuo的恢复时start_busy来控制的,而start_busy又调用set_heart_beat(),所以,假设系统的心率是齐的,楼主说的dazuo那部分应该有道理。
2)至于爬塔,我觉得主要有两个方面:你的网络延时和NPC的心跳。
见面就kill的NPC应该是在init()定义了auto_kill, 即见面就杀,但是perform通过一个叫chat()的函数控制,通过参数chat_combat_msg 100拉设置100%每个心跳发perform。
所以,你的网络延迟很高,肯定被先手,你的网络延迟够好的话,基本就是拼人品了。看你的perform命令是否先于npc的心跳。
3)关于指令堆积,应该和心跳没有关系。
系统判断你单位时间内输入的指令数量大于单位时间最大许可指令数量,给你警告,屏蔽指令而已。 |