明日方舟中公招是玩家们获得指定的想要的干员们的一个非常好的途径,根据玩家们自己选择的各种tag可以将想要的干员的范围压缩到最小,那么下面就给大家带来明日方舟从公招bug对公招机制的分析。
前言
7月9日版本更新之际,公招系统出现了bug
更新前刷出的所有的防护和群攻tag被对调
这次的bug对于大部分玩家来说属于良性bug,防护和群攻对调后导致许多人白嫖了火神/雷蛇/艾斯黛尔
然而,更重要的是,这次bug揭露了隐藏在云端的公招算法的冰山一角
公招系统描述(了解可略过)
首先,为了解释清楚这个bug,我们需要了解一下公招系统的结构
以下内容均来自于事实,包括抓包,解包,没有任何推测的成分
1. 客户端。就是你的手机和里面安装的明日方舟。储存着少量的用户存档信息,并且每个操作都需要与服务器同步。其中有一个对照表,储存着公招tag与其id的对应关系。与服务器通讯时传输的只有tag的id而非tag本身。
2. 服务器。这里的服务器单指储存与核对用户信息的部分。储存着所有用户存档信息,玩家完成每个操作时都需与其核对/同步。关于公招,储存有tag的id,若养蛊法成立则储存有角色池内容,若积分法成立储存有保底次数内容。
3. 算法部分。算法部分包括两部分,一部分是tag的生成,另一部分是根据选择tag的干员招募。在部分理论中这两部分完全独立,在部分理论中这两部分有联系甚至完全一体。
玩家点击“开始招募”时,客户端会将玩家选择的tag根据对照表转换成id并将其传输到服务器。服务器会核对这些选择的tag是否在给出的tag内。若核对通过,服务器会储存下一轮的tag id(可能在此之前)并将其传输到客户端。客户端根据对照表将服务器发送来的tag id转换为文字tag
玩家点击“完成招募”时,服务器会将招募到的角色id传输到客户端,客户端根据另一张对照表生成招募到的角色
玩家点击“刷新”时,服务器会储存一组新的tag id(可能在此之前)并将其传输到客户端。客户端根据对照表将服务器发送来的tag id转换为文字tag
我们需要研究的是算法部分。但算法部分与服务器部分息息相关。因为使用不同的算法进行招募时,服务器需要储存的数据有所不同。
另外需要明确的一点是,全服规模定向更改服务器数据是较为困难的,人工更改需要长时间的维护。而服务器出现问题更不可能仅仅导致全服两个tag的调换。本次bug非服务器出现问题所致。
bug的详细描述
更新前已经开始的公招的结果不会受到影响,但结束后显示的标签会出现错乱(例:重装+群攻均未被划出米格鲁)
更新前留存的标签(由于标签刷新在点击“开始招募”时,收取更新前开始的招募后,出现的第一波tag也算入此类)出现对调,防护变群攻,群攻变防护,选择后可正常招募。这也是导致很多人白嫖火神雷蛇的原因
更新后刷出的新tag可正常招募
bug出现的原因及分析
首先可以明确一点:服务器储存的数据不会变动
因为bug不可能导致这种变动。而人工更改全服数据的话,考虑到方舟的玩家基数,仅仅6个小时完成版本更新+全服数据更改根本不够。
那么bug只可能是出现在服务器外了
首先就是客户端
在7月9日的更新中,客户端的tag与id的对照表出现了变化
原本防护的id是21,群攻的id是22,在更新后反了过来,防护的id变为了22,而群攻的变为了21
这可以解释更新前已开始公招显示错乱的问题:因为服务器储存的是tag的id,更新后发送给客户端的id不变,而对应的tag变了,显示自然错乱
而招募结果未受影响可以说明另一个问题:招募的结果在点击开始招募时就已经被算法生成并被服务器储存起来了,否则无法解释招募结果未变化一点
如果仅仅是客户端的id发生变化,那么显示错乱应该一直发生下去
然而并没有,更新后开始的招募并不会出现这种现象,可以招募出tag对应的干员
而事实上,客户端的tag id截至目前依然保持着更新后“错误”的样子
这说明,对调的不仅仅是客户端的id,算法中的id也进行了对调,来保证招募系统不会出现问题
而招募的结果,同样也很有意思
tag被对调的招募招募结果也同样会变化
例如更新前高资+群攻([原贴传送门])
更新后变成了高资+防护
选择高资+防护进行招募
可正常招募出星熊
例子不止这一个,诸多受bug影响的例子说明tag意义的对调可以直接影响招募结果
这些证据足够证伪先决定可招募的角色,再生成标签的理论
因为如果该理论成立,对调招募标签根本不会对结果造成任何影响,在标签生成时可招募的结果就已经确定被储存在服务器中。
而如今标签意义对调,服务器数据无变动,招募结果却发生了明显的变动
注:养蛊理论前提是先决定可招募的角色,再生成标签,该证据可直接证伪养蛊理论
结论
1. 招募结果在你点击“开始招募”时就已经确定
2. 先决定可招募的角色,再生成标签的理论不正确。标签的生成和干员的招募大概率是独立的两部分
3. 由第二点可得,养蛊理论可被证伪