2007-06-11 | #1 |
中级会员
注册: 02年11月04日
帖子: 56
声望力: 22
声望:
19
精华:2
现金:15两梁山币
资产:365两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
【原创】西游记2000源码分析-大雪山-cast juanbi
西游记2000源码分析-大雪山-cast juanbi orical-2007-06 注意: 所有分析都是基于小熊泥苑下载的xyj2000 2000年4月份的版本,仅供参考以及交流,由于个人水平有限,疏漏难免,欢迎大家指正. 主题: 雪山卷鼻 源文件路径: ..\xyj2000\world\daemon\class\yaomo\xueshan\dengxian-dafa\juanbi.c 主函数cast() int cast(object me, object target) { string msg; string tar_spells,tar_dodge; int ap,dp,dg,damage; if( !target ) target = offensive_target(me); if( !target || !target->is_character() || target->is_corpse() || target==me) return notify_fail("你要对谁用扭转乾坤?\n"); if (!target->is_fighting(me)) return notify_fail("只有在战斗中才能使用扭转乾坤!\n"); if((int)me->query("kee") < 100 ) ///体力(气血)大于等于100 return notify_fail("你体力不足,用不了扭转乾坤!\n"); if((int)me->query("force") < 100 ) ///内力大于等于100 return notify_fail("你须运足内力才能使用扭转乾坤!\n"); if((int)me->query_skill("dengxian-dafa", 1) < 40 ) ///dengxian-dafa等级大于等于40 return notify_fail("你的登仙大法还不够纯熟。\n"); if((int)me->query("mana") < 300 ) ///法力大于等于300 return notify_fail("你的法力不足以变作神象伤敌!\n"); msg = HIW"\n$N趁$n不备,怒吼一声,转瞬间化作一只黄牙老象," +"伸出蛟龙般的鼻子向$n卷去!\n" NOR; ///ap为dengxian-dafa等级+法术等级/2,即自己的法术有效等级 ap=(int)me->query_skill("dengxian-dafa", 1) +(int)me->query_skill("spells", 1)/2; ////下面三句话其实就是在判断目标的有效法术等级,用dp变量保存 tar_spells=target->query_skill_mapped("spells"); ///取得目标enable的特殊法术 //如果目标没有enable特殊法术,dp为目标法术等级/2 if (! tar_spells) dp=(int)target->query_skill("spells", 1)/2; else dp=(int)target->query_skill("spells", 1)/2 //否则,dp为目标有效法术等级 +(int)target->query_skill(tar_spells, 1); ///判断目标有效轻功等级,用dg变量保存 tar_dodge=target->query_skill_mapped("dodge"); if (! tar_dodge) dg=(int)target->query_skill("dodge", 1)/2; else dg=(int)target->query_skill("dodge", 1)/2 +(int)target->query_skill(tar_dodge, 1); ///如果目标有效法术等级不为零,重新赋值dp,加上随机值.如果dp为0,则赋值dp为100 if (dp!=0) dp=100*ap/dp/3+random(100*ap/dp)/2; else dp=100; //如果目标有效轻功等级不为零,重新赋值dg,加上随机值.如果dg为0,则赋值dg为100 if (dg!=0) dg=100*ap/dg/3+random(100*ap/dg)/2; else dg=100; ///damage计算 damage=me->query("max_mana")/20+1; ///damage初值为最大法力/20+1 damage=(me->query("mana_factor")+me->query("str")+random(damage))*2; ///damage为(法力加成+力量+随机damage)*2 if (dp<30) ///dp<30,会被目标抓住鼻子,busy时间很长 { msg += HIW "不料$n早有准备,扭转身形轻舒猿臂一把抓住了$N的鼻子!\n" +"$N疼得一声闷哼,身不由己的被$n拖了过去!\n"NOR; message_vision(msg, me, target); me->add("kee", -(int)me->query("str")*2); me->start_busy(30-dp+random(10)); ////此处为自己busy时间 } else if (dp<60 && dp>30) ///dp在30和60之间,被目标挡开,自己busy 1到3 { msg += HIW "$n连忙扭转身形运转神功将$N的长鼻荡开。\n"NOR; message_vision(msg, me, target); me->start_busy(1+random(2)); } else if (dg<50) ///dg小于50,被目标躲开,自己busy 1到3,目标busy 0到3 { msg += HIW "$n纵身向后一跃,闪过了这一击。\n"NOR; message_vision(msg, me, target); me->start_busy(1+random(2)); target->start_busy(random(3)); } else ///打中目标,自己busy 0到2,目标busy 1到4 { msg += HIW "$n促不击防,被$N的长鼻高高卷起,$N用力一甩," +"$n如断了线的风筝般飞了出去!\n"NOR; message_vision(msg, me, target); target->receive_damage("kee",damage,me); me->start_busy(random(2)); target->start_busy(1+random(3)); COMBAT_D->report_status(target); } me->add("force", -30); ///耗费30的法力和30的内力 me->add("mana", -30); target->kill_ob(me); return 1; } 一. 使用条件分析 1. 体力(气血) >= 100 2. 当前内力值 >= 100 3. dengxian-dafa等级 >= 40 4. 当前法力值 >= 300 每次耗费法力和内力各30. 二. 成功率分析 juanbi的成功率主要决定于自己的有效法术等级,目标的有效法术等级和目标的有效轻功等级,计算公式如下: dp=100*ap/dp/3+random(100*ap/dp)/2 dg=100*ap/dg/3+random(100*ap/dg)/2 从源码知道,当 dp >= 60 并且 dg >= 50 时,目标必定被打中;否则要么挡开,要么躲开,甚至被抓住鼻子,很容易busy到死. 三. 伤害值分析 juanbi的伤害取决于臂力(str),最大法力值,法力加成值三个因素,计算公式如下: damage=me->query("max_mana")/20+1; ///damage初值为最大法力/20+1 damage=(me->query("mana_factor")+me->query("str")+random(damage))*2; ///damage终值为(法力加成+力量+随机damage)*2 举例说明,如果ID的臂力30,ID最大法力700,同时enchant 35,那么 初值damage=700/20+1=36 终值damage=(35+30+random(36))*2=130+2*random(36) 就是说在我们预设的条件下,damage最少为130点,最多为202点.随着最大法力值的提高以及法力加成值的提高,damage也会提高. 四. 实例分析 实例1: 灭妖任务 妖怪的武功等级是以玩家的最高武功等级为基数拷贝过来的,难度逐步递增.10个妖怪为一轮(有说9个妖怪为一轮的,而我看源码应该是10个怪一轮,请高手确认),第一个妖怪的武功等级为80%*玩家最高武功等级,每完成一个灭妖任务,妖怪的武功等级增加5%,最后一个妖怪的武功等级为125%*玩家最高武功等级.如果玩家武功等级为0,则妖怪最高武功等级为1.以下计算按照玩家武功等级能够cast juanbi,并且技能平均. 计算公式: dp=100*ap/dp/3+random(100*ap/dp)/2 dg=100*ap/dg/3+random(100*ap/dg)/2 举例计算如下(所有计算都按照小数点后两位四舍五入计算): 1.1 第一个灭妖任务, ap/dp=1/0.8=1.25, ap/dg=1/0.8=1.25 dp = 100*1.25/3 + random(100*1.25)/2 = 41.67 + random(125)/2 即dp最少为41.67,dp > 30,被抓住鼻子的几率为0. 要使dp >= 60,则random(125)/2 >= 18.33,即random(125) >= 36.66,概率为70.67%,就是说juanbi对于第一个灭妖任务,命中率为70.67%.(不考虑dg的情况下) dg的计算公式一样: dg = 100*1.25/3 + random(100*1.25)/2 = 41.67 + random(125)/2 当dg < 50时,被目标躲开,此时random(125)/2 < 8.33,即random(125) < 16.66,概率为13.33%.就是说在不考虑dg时,命中率70.67%,考虑到dg,这70.67%里面还有13.33%的概率被躲开,即躲开概率为9.42%,命中率为61.25%. 即对第一个灭妖任务,被抓住鼻子的几率为0,被挡开的几率为29.33%,被躲开的几率为9.42%,命中率为61.25%. 1.2 第五个灭妖任务,ap/dp=1, ap/dg=1 dp = 100*1/3 + random(100*1)/2 = 33.33 + random(100)/2 即dp最少为33.33,dp > 30,肯定不会被抓住鼻子. 要使dp >= 60,则random(100)/2 >= 26.67,即random(100) >= 53.34,概率为46.66%,就是说juanbi对于第五个灭妖任务,命中率只有46.66%.有53.34%的几率被目标挡开.(不考虑dg的情况下) dg的计算公式一样: dg = 100*1/3 + random(100*1)/2 = 33.33 + random(100)/2 当dg < 50时,被目标躲开,此时random(100)/2 < 16.67,即random(100) < 33.34,概率为33.34%.就是说在不考虑dg时,命中率46.66%,考虑到dg,这46.66%里面还有33.34%的概率被躲开,即躲开概率为15.56%,命中率为31.1%. 即对第五个灭妖任务,被抓住鼻子的几率为0,被挡开的几率为53.34%,被躲开的几率为15.56%,命中率为31.1%. 1.3 第十个灭妖任务,ap/dp=1/1.25=0.8, ap/dg=1/1.25=0.8 dp = 100*0.8/3 + random(100*0.8)/2 = 26.67 + random(80)/2 当dp < 30时,被抓住鼻子,此时random(80)/2 < 3.33,即random(80) < 6.66,概率为8.33%. 要使dp >= 60,则random(80)/2 >= 33.33,即random(80) >= 66.66,概率为16.68%,就是说juanbi对于第十个灭妖任务,命中率只有16.68%.被挡开几率为(1-8.33%-16.68%)=74.99%.(不考虑dg的情况下) dg的计算公式一样: dg = 100*0.80/3 + random(100*0.80)/2 = 26.67 + random(80)/2 当dg < 50时,被目标躲开,此时random(80)/2 < 23.33,即random(80) < 46.66,概率为58.33%.就是说在不考虑dg时,命中率16.68%,考虑到dg,这16.68%里面还有58.33%的概率被躲开,即躲开概率为9.73%,命中率为6.95%. 即对第十个灭妖任务,被抓住鼻子的几率为8.33%,被挡开的几率为74.99%,被躲开的几率为9.73%,命中率为6.95%. 综上所述,juanbi对于灭妖任务来说不适用.对付最开始的一两个妖怪命中率还勉强可以,当妖怪的等级和自己一样时,命中率只有31.1%,被挡开的几率53.34%,此时busy时间为1到3.到最后一个妖怪时,命中率仅仅6.95%,比被抓住鼻子的几率8.33%都还低,被挡开的几率74.99%,用juanbi基本等于自杀. 实例2: NK小西天小童 小西天小童分为两种,一种武功等级70级,一种武功等级80级,都没有特殊武功. 计算公式: dp=100*ap/dp/3+random(100*ap/dp)/2 dg=100*ap/dg/3+random(100*ap/dg)/2 以下计算基于玩家武功等级50,技能平均.(所有计算都按照小数点后两位四舍五入计算) 1.1 对于70级小童 小童的法术有效等级dp=35,轻功有效等级dg=35. 玩家的法术有效等级ap=75. 根据公式: dp = 100*75/35/3+random(100*75/35)/2 = 71.43+random(214.29)/2 dp至少为71.43,即dp > 60,命中率为100%.dg计算公式相同,dg至少为71.43,dg > 50,目标肯定无法躲开. 即对70级小童,命中率100%. 1.2 对于80级小童 小童的法术有效等级dp=40,轻功有效等级dg=40. 玩家的法术有效等级ap=75. 根据公式: dp = 100*75/40/3+random(100*75/40)/2 = 62.5+random(187.5)/2 dp至少为62.5, 即dp > 60,命中率为100%.dg计算公式相同,dg至少为62.5, dg > 50,目标肯定无法躲开. 即对80级小童,命中率100%. 同样的道理,可以计算出玩家40级dengxian-dafa时,juanbi对于NK小童的命中率,如下: 1.3 对于70级小童,玩家40级dengxian-dafa,技能平均 小童的法术有效等级dp=35,轻功有效等级dg=35. 玩家的法术有效等级ap=60. 根据公式: dp = 100*60/35/3+random(100*60/35)/2 = 57.14+random(171.43)/2 dp至少为57.14, 即dp > 30,被抓住鼻子的几率为0. 要使dp > 60,则random(171.43)/2 > 2.86,即random(171.43) > 5.72,概率为96.66%,即命中率为96.66%.由于dg计算公式相同,dg至少为57.14, dg > 50,目标肯定无法躲开. 即对70级小童,命中率96.66%,挡开几率3.44%. 1.4 对于80级小童,玩家40级dengxian-dafa,技能平均小童的法术有效等级dp=40,轻功有效等级dg=40. 玩家的法术有效等级ap=60. 根据公式: dp = 100*60/40/3+random(100*60/40)/2 = 50+random(150)/2 dp至少为50, 即dp > 30,被抓住鼻子的几率为0. 要使dp > 60,则random(150)/2 > 10,即random(150) > 20,概率为86.67%,即命中率为86.67%.由于dg计算公式相同,dg至少为50, dg >= 50,目标肯定无法躲开. 即对80级小童,命中率86.67%,挡开几率13.33%. 综上所述,juanbi对于NK小童命中率很高,40级的时候就可以NK小童保持至少86%的命中率.50级时,NK小童命中率100%.所以dengxian-dafa用juanbi来NK小童是大家都推荐的. 总结:juanbi的命中率跟自己的有效法术等级,目标的有效法术等级和有效轻功等级有关系,当目标的武功有效等级和自己相近时,juanbi的效果不好,当目标武功有效等级比自己高时,用juanbi很危险.用juanbi来NK小童十分有效,40级dengxian-dafa就可以比较安全的NK小童,50级时,juanbi对NK小童命中率100%. 再次说明,此分析仅针对xyj2000 2000年4月发布的版本,在小熊泥苑下载的.供大家参考,各个不同的站点,数据可能会有偏差.如果有疏漏之处,欢迎指正.谢谢. |
全部人生,不过是为了创造几件刻骨铭心的往事而已!
|
|
+20 两梁山币
|
2007-06-11 | #2 |
中级会员
注册: 02年11月04日
帖子: 56
声望力: 22
声望:
19
精华:2
现金:15两梁山币
资产:365两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
补充说明,各位玩家想自己建站的话,修改上述文件里面的参数就可以影响到cast juanbi的命中率和伤害值了.
|
|
2007-06-12 | #3 |
初级会员
注册: 05年04月18日
帖子: 44
声望力: 0
声望:
10
现金:5两梁山币
资产:5两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
这也要隐藏?看看写的什么
|
|
2007-06-14 | #4 |
初级会员
注册: 07年04月28日
帖子: 10
声望力: 0
声望:
10
现金:14两梁山币
资产:14两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
gfjdghkjhgkhjlkj;kjl;sfdg
|
|
2007-06-15 | #5 |
初级会员
注册: 07年05月29日
帖子: 18
声望力: 0
声望:
10
现金:41两梁山币
资产:41两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
继续看,刚看完chaofeng的
|
|
2007-08-05 | #6 |
正式会员
注册: 07年07月31日
帖子: 9
声望力: 0
声望:
10
现金:-1两梁山币
资产:-1两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
情赐教begbegbegb eg
|
|
2007-08-06 | #7 |
黄金会员
注册: 07年07月10日
来自: 长安
帖子: 284
声望力: 19
声望:
27
现金:5两梁山币
资产:555两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
fasfdasdf asf asd
|
|
2007-08-08 | #8 |
初级会员
注册: 06年06月30日
帖子: 39
声望力: 0
声望:
10
现金:85两梁山币
资产:85两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
学习学习 ,谢谢
|
|
2007-08-09 | #9 |
黄金会员
注册: 07年07月10日
来自: 长安
帖子: 284
声望力: 19
声望:
27
现金:5两梁山币
资产:555两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
|
|
2007-08-14 | #10 |
初级会员
注册: 04年09月26日
来自: 上海
帖子: 19
声望力: 0
声望:
11
现金:28两梁山币
资产:28两梁山币
致谢数: 0
获感谢文章数:1
获会员感谢数:1 |
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi
看看了。。。。。。。。。。。。。。
|
|
添加到书签 |
|
|
相似的主题 | ||||
主题 | 主题作者 | 论坛 | 回复 | 最后发表 |
无底洞 cast bianfu | zhangj | 『 梁山论剑 』 | 1 | 2013-09-12 15:54 |
cast lianhua | Odysseus | 『 梁山论剑 』 | 4 | 2013-09-12 15:48 |
雪山 cast juanbi分析笔记 | liccry | 『 梁山论剑 』 | 15 | 2009-06-16 22:25 |
【原创】【总站】cast baxian 的一个有趣的想法 | lvhulu | 『 梁山论剑 』 | 11 | 2006-08-26 17:46 |
雪山 从code 看juanbi | dalang | 『 梁山论剑 』 | 2 | 2002-11-25 08:26 |