关于在石器随机函数的BUG
这个BUG一直存在,而且很早就有人利用过,只是一直不明显,或者说没人发现。最近貌似爆发的挺多的,主要影响的有转宠这块,具体怎么利用并不太清楚,大意就是利用某个操作可以让这个函数的随机值都是最大数。然后转出来的宠都是极品档的(已证实该是虚假的)。
石器代码里随机函数定义如下:
按照C语言随机函数rand()出来的都是伪随机数,会出现在1秒之内出现的数都是同一个数,但具体用什么方法让这个随机函数100%出现最大值就不得而知了。针对这种情况,我们可以自行写一个函数来代替这个函数。#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
int Rand(int x, int y) { int a = 0; srand((unsigned)time(NULL)); //读取系统时间,产生一个种子数值 a = rand() % (y+1) + x; //产生随机数 return a; }随便写了一个,作为参考,这里还是有问题,用(unsigned)time(NULL)做随机种子是以秒的形式,在for和while循环里都是以毫秒执行的,可能还是会出现问题,这个只提供作为参考。