[原创]网游强化装备的随机数研究
发表时间:2011-04-26 作者:酱烤甜虾 编辑:微波 来源:网络
先说明一下啊,这绝对是在聚仙论坛首发(转载请注明出处~),这封测也结束了,没啥可做的,就写写东西给大家看着玩哈~网上有很多文章,讨论在强化装备时,成功率高的方法.猜测的成分过大,也有一些经验之谈.我这篇文章,是从浅显的技术角度,和一些发生概率较高的假设下,做出
先说明一下啊,这绝对是在聚仙论坛首发(转载请注明出处~),这封测也结束了,没啥可做的,就写写东西给大家看着玩哈~ 代码:int __cdecl rand ( (摘自c运行时库rand.c) 现在我来讲一下,如何在这几个假设下,估算出装备成功概率. return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );直接翻译,就是返回这样一个值:它是用"上次"得出的返回值乘以214013后再加2531011,然后把结果转为二进制后右移16位,最后取后15 位的值.没懂,没关系,我们从中可以得出结论. 第一,随机数只和"上次"的值有关,如果你知道"上次"的值,你就可以算出本次的值!第二,ptd->_holdrand这个数,每差1,rand()值将会差大约3-4. 那么"上次"的值如何得到呢?假如服务器刚刚开启, 它认为"上次"是几呢?幸运的,在很多程序中,这个值其实就是服务器开启的时间与1970年1月1日0时0分0秒的差(单位:秒)! 那么最关键的问题来了,我们如何知道服务器开启的时间,精确到秒?! 如果服务器得到一个开启时间,并开始一次次计算随机值,那么所有这些值其实都是固定的,rand()第一次是38,第二次62,第三次.... 如果我们知道服务器准确的开启时间,那么我们就可以知道第一次强化概率是38,第二次是62... 我们现在需要一个工具,它在服务器维护结束之前,启动运行,并认为之后每一秒服务器都有可能开启,计算以这一秒为"上次"的所有rand()值的序列. 如7点5分0秒(38,62...)7点5分1秒(11,89...).然后,我们尽快登入游戏,尽可能 在周围无人的情况下,自己占用这台服务器的这个运算单元 , 也就是只有你一个人在那里做强化(如假设2)!连续强化5次左右,以你成功和失败的过程,与这个工具之前计算出的各个数集作比较.如果某游戏(如:聚仙) 能告知你当前条件下成功率的值,你就能很快得出服务器的开启时间!举例,你成功和失败分别是:成功,成功,失败,失败,成功.游戏中强化界面显示你每次成 功率分别为100,100,45,45,20.刚好你工具中有一组数吻合,为95,88,46,77,19.(不过要注意,100%的时候,有的程序是不 进行一次rand()的,因为100%成功,随机数是多少都是成功,还算它干嘛- -) 于是 找到了服务器开启时间并按照工具中对应的rand()值序列,你就能够知道服务器这个运算单元下一次rand()的结果 ,如果某游戏界面显示你本次成功率为70%,而工具告诉你,下次服务器会返回80,那么你就拿个烂装备去顶一次吧. 从技术角度研究出这个方法.这个方法也不是100%成功,不是万金油.我只是在假设情况下哈...还有 提醒一下游戏策划,最好别把每次强化的概率显示出来.除非你们不是我说的这种随机数取法.否则还是挺危险的. 各位加我为好友吧。大家一起聊技术,一起玩聚仙~ |
聚仙资讯及文章仅代表发表厂商及作者观点,不代表叶子猪本身观点!