文字MUD游戏论坛-天下泥潭群英会-水泊梁山  

返回   文字MUD游戏论坛-天下泥潭群英会-水泊梁山 > 西游之旅 > 『 巫师天下 』

『 巫师天下 』 学习如何挂MUD,如何制作MUD。讨论如何管理好一个MUD,做好一个巫师。

发表新主题 回复
推荐  
LinkBack 主题工具 主题评分 显示模式
旧 2007-06-11   #1
中级会员
级别:6 | 在线时长:131小时 | 升级还需:9小时级别:6 | 在线时长:131小时 | 升级还需:9小时级别:6 | 在线时长:131小时 | 升级还需:9小时
 
orical 的头像
 
注册: 02年11月04日
帖子: 56
声望力: 22
声望: 19 orical 初领妙道
精华: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月发布的版本,在小熊泥苑下载的.供大家参考,各个不同的站点,数据可能会有偏差.如果有疏漏之处,欢迎指正.谢谢.

全部人生,不过是为了创造几件刻骨铭心的往事而已!
帅哥 orical 当前离线  
+20 两梁山币
回复时引用此帖

旧 2007-06-11   #2
中级会员
级别:6 | 在线时长:131小时 | 升级还需:9小时级别:6 | 在线时长:131小时 | 升级还需:9小时级别:6 | 在线时长:131小时 | 升级还需:9小时
 
orical 的头像
 
注册: 02年11月04日
帖子: 56
声望力: 22
声望: 19 orical 初领妙道
精华:2
现金:15两梁山币
资产:365两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

补充说明,各位玩家想自己建站的话,修改上述文件里面的参数就可以影响到cast juanbi的命中率和伤害值了.
帅哥 orical 当前离线  
回复时引用此帖
旧 2007-06-12   #3
初级会员
级别:4 | 在线时长:70小时 | 升级还需:5小时
 
mudfanmudfan 的头像
 
注册: 05年04月18日
帖子: 44
声望力: 0
声望: 10 mudfanmudfan 闻道则喜
现金:5两梁山币
资产:5两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

这也要隐藏?看看写的什么
mudfanmudfan 当前离线  
回复时引用此帖

旧 2007-06-14   #4
初级会员
级别:1 | 在线时长:7小时 | 升级还需:8小时
 
vir007 的头像
 
注册: 07年04月28日
帖子: 10
声望力: 0
声望: 10 vir007 闻道则喜
现金:14两梁山币
资产:14两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

gfjdghkjhgkhjlkj;kjl;sfdg
vir007 当前离线  
回复时引用此帖
旧 2007-06-15   #5
初级会员
级别:1 | 在线时长:13小时 | 升级还需:2小时
 
tanxia111 的头像
 
注册: 07年05月29日
帖子: 18
声望力: 0
声望: 10 tanxia111 闻道则喜
现金:41两梁山币
资产:41两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

继续看,刚看完chaofeng的
tanxia111 当前离线  
回复时引用此帖
旧 2007-08-05   #6
正式会员
级别:2 | 在线时长:21小时 | 升级还需:9小时级别:2 | 在线时长:21小时 | 升级还需:9小时
 
chidabian 的头像
 
注册: 07年07月31日
帖子: 9
声望力: 0
声望: 10 chidabian 闻道则喜
现金:-1两梁山币
资产:-1两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

情赐教begbegbegb eg
chidabian 当前离线  
回复时引用此帖

旧 2007-08-06   #7
黄金会员
黄金会员一级会员
级别:2 | 在线时长:22小时 | 升级还需:8小时级别:2 | 在线时长:22小时 | 升级还需:8小时
 
karateka 的头像
 
注册: 07年07月10日
来自: 长安
帖子: 284
声望力: 19
声望: 27 karateka 初领妙道
现金:5两梁山币
资产:555两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

fasfdasdf asf asd
帅哥 karateka 当前离线  
回复时引用此帖
旧 2007-08-08   #8
初级会员
级别:1 | 在线时长:7小时 | 升级还需:8小时
 
ralf 的头像
 
注册: 06年06月30日
帖子: 39
声望力: 0
声望: 10 ralf 闻道则喜
现金:85两梁山币
资产:85两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

学习学习 ,谢谢
ralf 当前离线  
回复时引用此帖
旧 2007-08-09   #9
黄金会员
黄金会员一级会员
级别:2 | 在线时长:22小时 | 升级还需:8小时级别:2 | 在线时长:22小时 | 升级还需:8小时
 
karateka 的头像
 
注册: 07年07月10日
来自: 长安
帖子: 284
声望力: 19
声望: 27 karateka 初领妙道
现金:5两梁山币
资产:555两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

帅哥 karateka 当前离线  
回复时引用此帖

旧 2007-08-14   #10
初级会员
级别:7 | 在线时长:157小时 | 升级还需:23小时级别:7 | 在线时长:157小时 | 升级还需:23小时级别:7 | 在线时长:157小时 | 升级还需:23小时级别:7 | 在线时长:157小时 | 升级还需:23小时
 
fpower 的头像
 
注册: 04年09月26日
来自: 上海
帖子: 19
声望力: 0
声望: 11 fpower 闻道则喜
现金:28两梁山币
资产:28两梁山币
致谢数: 0
获感谢文章数:1
获会员感谢数:1
回复: 【原创】西游记2000源码分析-大雪山-cast juanbi

看看了。。。。。。。。。。。。。。
帅哥 fpower 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


发帖规则
不可以发表主师
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用


相似的主题
主题 主题作者 论坛 回复 最后发表
无底洞 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


所有时间均为格林尼治时间 +9, 现在的时间是 09:34.


Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1