主题: 五庄观 zouxiao源码解读
查看单个帖子
旧 2008-07-10   #1
bogao
黄金会员
黄金会员二级会员
级别:3 | 在线时长:35小时 | 升级还需:15小时级别:3 | 在线时长:35小时 | 升级还需:15小时级别:3 | 在线时长:35小时 | 升级还需:15小时
 
bogao 的头像
 
注册: 08年07月03日
来自: 中国
帖子: 300
声望力: 20
声望: 66 bogao 略通道行
积分:24
精华:4
现金:32两梁山币
资产:10399两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
zouxiao源码解读

这两天看到很多人讨论zouxiao,就献个丑,翻出xyj2000的源码给大家翻译一下。听说总站的源码已经升级了,但我想多少还能对各位有点借鉴作

用。

首先来看使用条件

if (!weapon || weapon->query("music/type") != "xiao")
return notify_fail("你手里的家伙吹不出调子。\n");

if (me->query_skill_mapped("force")!="zhenyuan-force")
return notify_fail("只有用镇元神功才能运力吹箫。\n");

if (me->query_skill("xiaofeng-sword",1)<50)
return notify_fail("你的晓风残月剑还得再练练。\n");

if (me->query_skill("zouxiao",1)<60)
return notify_fail("你奏箫的功夫还不够,再好好练练吧。\n");

if (target->query_skill("literate",1)<50)
return notify_fail("对他吹箫?还不如对牛弹琴呢。\n");

if((int)me->query("force") < 200 )
return notify_fail("你的内力还不到火候。\n");

if((int)me->query("kee") < 200 )
return notify_fail("你的体力已经不够了!\n");

if((int)me->query("sen") < 200 )
return notify_fail("你无法集中精力!\n");

这段代码的意思是,首先,你要拿萧来perform这个(拿个棒子来吹箫是不是太搞笑了),然后,你的force必须是zhenyuan-force,这里你的

zhenyuan-force必须是enable force上的,跟perform hammer,perform staff不一样(这两个要

求你有zhenyuan-force 80级就行了,不用enable上)。然后晓风残月剑要至少50级,zouxiao要至少60级。下面就是比较关键的了,对方(对,

就是你攻击的对象)的读书识字必须大等于50级,这就是为什么这个zouxiao不能灭妖,li或

者yuan的妖怪统统是文盲,没有读书识字技能,当然不知道现在总站有没有改这个,我估计不会改。所以其实这个perform主要用来搞玩家的。最

后几个就是你用这个技能的时候内力,精神和气血要大于200。



然后是判断命中与否的代码。

使用者的数据
ap =(int)me->query_skill("xiaofeng-sword", 1)+(int)me->query_skill("zouxiao", 1);
ap = ap * ap * ap /10;
ap = ap + (int)me->query("combat_exp");

这段话意思是 攻击者的数据 ap=(xiaofeng-sword级别+zouxiao级别)*(xiaofeng-sword级别+zouxiao级别)*(xiaofeng- sword级别+zouxiao级别

)/10+武学。 (其实就是3次方除10,没法打3次方,就写的长了点)

受害者的数据
dp = (int)target->query_skill("parry")
+(int)target->query_skill("literate")
+(int)target->query_skill("zouxiao")
+(int)target->query_skill("fuqin")
+(int)target->query_skill("spells");
dp = dp * dp * dp /10;
dp = dp + (int)target->query("combat_exp");


这里多谢kimmina兄提醒,(int)target->query_skill("parry")和(int)target->query_skill("parry",1)是不一样的,前者是skills有效级别

,后者是skills级别.比如所有级别都是200级,并且enable parry qianjun-bang了,那么第一个命令得到300,第二个得到200.在龙宫云房里面

lianwu就是这样,是(int)target->query_skill("dodge"),所以要enable dodge none再lianwu,否则就高了。那么zouxiao和literate没有东西

可以enable,所以只是1/2. 再次感谢kimmina兄提醒。


这段话意思是 受害者的数据 dp=(parry有效级别+lieterate有效级别+zouxiao有效级别+fuqin有效级别+spells有效级别)的3次方/10+武学。 这

里fuqin应该是抚琴,估计是刚开始作这个游戏的时候想加进去,后来没加的,放在这里可以忽略了。

然后开始判断

if( random(100*ap/dp) < 20 )
{
msg += HIW "$n冲着你鄙意的冷笑道:就这点本事,也来贻笑大方?"
+"$N顿时羞愧难当。\n"NOR;
message_vision(msg, me, target);
me->start_busy(3+random(5));
}

当从1到(100*ap/dp)这个范围中产生一个随机数小于20的时候,最悲惨的事情发生了,对方啥事没有,自己要busy3秒加上1到5中间的一个随机

数这么长时间。

然后
else if( random(100*ap/dp) < 40 )
{
msg += HIW "可$n冲耳不闻,不为所动。\n"NOR;
message_vision(msg, me, target);
me->start_busy(random(3));
}

当从1到(100*ap/dp)这个范围中产生一个随机数大于20而小于40的时候,次悲惨的事情发生了,对方啥事没有,自己busy 1到3秒中间的一个随

机数。

else
{
target->receive_damage("sen",damage,me);
msg += HIW "$n听了箫声,心中莫名其妙的感到一阵酸楚,悲从中来,泪水正涔涔落下。\n"NOR;
message_vision(msg, me, target);
COMBAT_D->report_status(target);
target->start_busy(5+random(5));
me->start_busy(random(3));
}

当从1到(100*ap/dp)这个范围中产生一个随机数大于40的时候,不悲惨的事情发生了,对方受到精神伤害(伤害多少一会再说)并且busy5秒加

上1到5秒之间一个随机数这么长时间。然后自己busy 1到3秒中间的一个随机数

伤害对方的精神多少跟技能有关,是(xiaofeng-sword级别+zouxiao级别)*(xiaofeng-sword级别+zouxiao级别)/300。


然后是我的一点分析或感想。

首先是关于伤害的感想,(xiaofeng-sword级别+zouxiao级别)*(xiaofeng-sword级别+zouxiao级别) /300,这个是打对方多少精神,大家可以注

意一下,这个是个二次函数。虽然在刚开始的时候很低,但是随着你级别的提高,伤害提高的

越来越快,,而且没上限。(说句题外话,摄气决加攻击的exert就有上限)。但是人物的精神除了年龄的增长加的精神以外,其他的跟法力有关

,我记得是法力/4,但是这不是重点,重点是精神随级别的增长是一次函

数,在级别达到一定高度以后,伤害随级别增长的速度远远大于精神增长的速度,也就是说,在很高级别的情况下,用这个,基本可以一击必杀

。举个例子,但你xiaofeng-sword 和zouxiao达到1000级,那么伤害是13333,同级别的精神

大概是6,7千左右,中了就死。

然后是关于命中
除去fuqin技能不提,对方有4个技能加在一起,parry,literate,zouxiao,spells。

首先不考虑wzg内战,对方没zouxiao,那么对方也要考虑3个技能级别parry,literate,spells,在低级的时候对攻击方是很不利的,这里假设两个

对战的武学正好是级别要求的下限,就是级别的3次方/10,所有级别大家都一样x级(我没有

用具体数字是因为这样的成功率计算跟级别具体数字没关系,这样 ap=(x+x)*(x+x)*(x+x)/10+x*x*x/10(这个是武学,级别要求下限=9*(x^3)/10

,dp=(1.5x+0.5x+1.5x)*(1.5x+0.5x+1.5x)*(1.5x+0.5x+1.5x)/10+x*x*x/10=43.875*(x^3)/10 (这里看不懂的自己把x随便换

成个数,100,200就明白了),100*ap/dp=20.5, 在看上面的判断,就是说,不可能成功。

那么在高级时候呢,因为不会有疯子把literate升到400以上吧,这里假设个悟性25的对手,他为了节约潜能和带天师法冠,所以只学了140的

literate,但是你们其他级别已经达到1000级,武学还是级别要求下限,这样ap=9E8

(900000000),dp=2993444000, 100*ap/dp=30,不能成功。

至于wzg内战,大家可以加进去自己算算,同级别的不管是多少级,成功率都趋于零。

关于这个技能的busy。

这个技能的busy不同fengbo和pozhan,那两个如果对手正在busy,就不能使用,而如果对手也有busy技能,在那边不停的用,一旦busy时间过了,

对方先用出来还是你先用出来就得看网络了。但是zouxiao不一样,不管对方有没有在busy

,都可以busy对方,就是说,如果能保证成功率,可以一直busy下去,而且每次都伤对方精神,这样不用别的什么技能也能busy对方到死。


综上,我的意见就是,zouxiao,就是个低级没用,高级恐怖的东西。所以新手开始悟性比较低的时候,没必要在这上面浪费潜能,等高级了再学

就可以了。


这个绝对原创啊,斑竹看在我写了这么多冬冬的分上,加点威望吧。

还有对什么perform感兴趣的,可以点播啊,我为了那个ningxie-force的帖子声望当真是求望若渴啊。




咦,为什么改正错误以后,这个技能的成功率低成这样了,大家再帮看看吧,哪里不对我马上改过来。

此帖于 2008-07-10 12:18 被 bogao 编辑. 原因: 被提醒
帅哥 bogao 当前离线  
回复时引用此帖