首先,程序开发里面,写一个抽卡的随机程序非常简单,java里面一个random()函数就可以搞定。但这种随机是真正的随机。事实看来,SSR的随机并不是这么简单。
我认为,写SSR抽卡函数的组,一定添加了其他影响因素,其中比较经典,流行的就是:
a. 根据你的日常上线时间决定概率。当大家登陆自己服务器账号的时候,都会显示上次登陆是几天前,这个时间用一个数据库来记录很容易。上线时间越不频繁,出SSR的几率越大。
b. 整点抽卡,半夜抽卡。从计算机科学的角度来看,时间是一个服务器所掌握的,而抽卡出SSR的函数是由单独独立的程序所掌握的。一个抽卡函数,如果想要通过服务器时间调整爆率,这个访问时间是很大的,运行速度也会很慢。最关键的是,抽卡函数一定是被封装起来的,程序接口处加入时间这一元素,使得这个函数要实时返回服务器时间,实时把服务器时间转化成抽奖概率,也就是说,24小时这个函数要始终不间断的工作,这是不可能的。
c. 月见黑被高速公鹿中断。抽卡次数被记录下来很容易,所以月见黑被SSR恶意中断也是绝对有可能的,这个程序不难写,不排除网易有故意的嫌疑。
d. 非洲脸,欧洲脸。我认为,建号当初,附加这方面属性也并不是件难事。每个账号都由数据库存储,账号ID(注意,是你账号对应的那串数字,不是用户名)在数据库里叫做主键,这个东西就相当于你的身份证号码,无论你如何改名,如何整容,如何改生日,你的身份证号码不会改变。建号的时候,只要在账号数据里面加上一个“出卡概率”,在这个概率的基础上,通过上文提到的因素来做加减乘除(或者更复杂的计算)。但总体来讲,基础概率不会有太大变化,所以,氪不改命,有时候你得信。
第一点暂时就想到这么多,仅供参考。
伪代码大概这样吧,这里写java的伪代码:
public double chouKa(date, time, probability){ Date date = new Date();//记录登陆时间 Time time = new Time();//记录抽卡次数 date = read(Database(date));//从数据库里读登陆时间 time = read(Database(time)); SSR_gailv = probability - 0.1 * chuli(date) + 0.2 * chuli2(time); return SSR_gailv; }
2. 说一下御魂爆率
一个御魂一共有5种属性,每种属性又有几种数值。这5种用链,数组,或者map存储。每个御魂的强化属性并非一出生就确定。这里拿链表举例子,我并不知道网易底层到底用的什么结构,个人感觉会用链表,因为可以节约地址空间。当一个新御魂产生的时候,会产生1到5个不同的结点,每个结点里面存储了属性,数值。当御魂等级达到特定等级,会产生新的结点。这里面想给御魂的属性添加概率也是简单的一比,并没有什么玄学一说,纯是看概率的事情。至于针对某个人的脸(非洲脸,欧洲脸),个人认为不太可能,因为御魂的数量庞大,种类很多,如果每次都要访问数据库里存储你“脸”的数据,访问量太大了,不可能。所以,同志们,肝吧,肝可以改命。
下面简单写个伪代码:
class Node(){ public string shuxing; public int dengji; public Node(shuxing,yuhun){ this.shuxing = shuxing; this.yuhun = yuhun; } } public Yuhun(){ public LinkedList yuhun(){ List yuhun = new LinkedList(); for(int i = 0; i < random(); i++){ yuhun.add(Node(shuxing,y