热血传奇: 攻击力与隐藏属性的终极讨论

作者: 沙迦2少 2012-10-31 我要投稿专区首页

此文章由17173.com独家发表,转载请注明出处

  最近看了不少关于攻击力计算还有攻击上下限的讨论,我也来灌点水。姑且不讨论私服里的设置跟盛大的设置是否不同,单单从数据的设置上来反推算法。

  首先是数据的最小有效值问题。大家都知道,传奇中显示的各项属性参数都是整数,作为一个网络游戏,浮点数的传送肯定要占用比整数大的带宽,数量如此巨大的玩家,这样的开销是不能忽视的。所以,传奇肯定是对有效数位进行了缩减,不可能是自然的浮点数,哪怕是精确到小数点后1位也不太可能。但是单独使用整数,又会使游戏的随机性降低,譬如如果攻击为1-2的情况,只会有两种情况,不是1,就是2,概率各为50%,这样会大大降低可玩性,这时我注意到一个线索,就是HP值,虽然HP在传奇的显示中也是整数,可不知道大家注意过没有,一个法师,28级以后,升一级HP增加值为6,然而下一级HP增加7,如此循环,直到35级,在此增加值的情况下,多增加1,采用如此交错增加值从算法上看是无必要,也是无意义的。因此,我假设HP每增加1级升6.5,也就是数据的最小有效值是0.5,只是显示时进行取整操作罢了。还拿1-2来举例,虽然只增加了新的项1.5,但是装备组合起来,整体的可能项会呈指数增加,想必学过概率的人都晓得。而从数据传输上来说,传送最小有效值0.5的数值,只需要数值乘以2就可以得到整数,而2进制数乘以2的操作就是数据左移1位,效率是非常高的。也许会有人问,为什么不采取0.25,0.125这样的最小有效值,可以在使用循环移位的情况下不减少每字长所能表示的数值,但是,软件开销必然增大,事实上的传奇采用什么样的最小有效值,在于传奇中软件开销与执行效率的折衷策略,而目前所得到的信息,只能推论出最小有效值为0.5。

  其次就是上、下限的问题,很多人认为下限必然大于上限,这种想法只是出于日常逻辑上考虑的,然而,上、下限其实只是说明了一个可能的取值范围,跟具体值的大小没有关系,如同数学中的极值问题,极小值大于极大值是很正常的。

  现在就来推出我的计算公式。因为攻击是随机性的,所以必然首先要产生一个随机数R,R的取值是0-1,因为传奇程序是用delphi编译的,至于使用什么样的函数很多人都该很清楚,我只熟悉VC++,故此处不做讨论;而影响攻击的当前值大小的因素就是幸运值L了,按照大众说法,每增加1幸运,攻击增大10%,反之,每增加1诅咒,攻击减小10%,就目前而言,姑且认为幸运最大10,诅咒最大10,则L的取值范围就是-10≤L≤10 且L为整数,当诅咒时L为负,幸运时,L为正。现在就得到了一个随机因子C=R+L×10%,现在需要作出判断,当C≥1时取C=1,当C≤0时取C=0,若0

  现在用这个公式来讨论罗刹的问题,罗刹:B=15,T=0。如果罗刹没有幸运,应该与青铜斧的效果相同,如果诅咒10,那么罗刹每次攻击肯定是15,想必应该有人测试过。同样对于攻击2-0的项链也是相同的,在没有诅咒或者幸运时,2-0与0-2肯定是没有区别的。这个公式无论针对单个装备,或者叠加起来计算整体的攻击都是有效的,因为考虑到软件执行效率问题,服务器端肯定只会考虑整体,而不会去计算单个的装备攻击的。而对于特殊攻击,譬如说半月,刺杀,烈火,只需要乘以一个相应的攻击系数,就可以得到,道术攻击,魔法攻击类同。

  最后,这个公式已经完全假定没有所谓隐藏属性问题,即使我不做试验,也不相信会有隐藏属性这样的无稽之谈,因为每个属性都显示出来的,如果还有没显示的属性,那么对于服务器,每个人的属性数据就会增加一倍,别说隐藏属性只是针对某几种的,譬如AC,DC,如果你想写出高效的算法,就会明白为什么数据会增加1倍了,而又因为属性数据是随时变化的,也就是说服务器开销要增加1倍,你认为运营商是希望每个服务器拥有2500个玩家,而每个玩家有隐藏属性,还是希望服务器可以支持5000个玩家,而每个玩家没有隐藏属性?呵呵,这其中的差别,恐怕不用我说了。

 相关论坛】   【打印本页】  

::::::::::参阅:游戏同类文章
::::::::::相关精彩文章

::::::::热门新闻关注::::::::