赛尔号:你是否曾因为米米号显示不全而充错账号?

赛尔号:你是否曾因为米米号显示不全而充错账号?
不知道各位是否遇到过这样悲催的情况。
新的精灵与刻印上架了,你兴致勃勃地打开个人信息面板,记下来你的米米号“1234553”。

然后,你在手机上打开了某个游戏币充值商城,准备氪个100米币痛快痛快。

接着,你将刚刚记下来的米米号非常流畅地输入到“充值账号”栏中。

最后,你付了款,系统提示你成功充值了100米币。

于是,你一直在等待米币到账。等了很久,米币数量没有变化,所以你决定刷新网页。但是,突然你发现:在登录界面上显示的米米号为“1234554321”。

这时候你才意识到,你充错号了!
这是段子吗?不,这是真事儿,而且还发生了不少类似的事情。
在百度贴吧《赛尔号吧》中,有时会出现一些充错号的贴子,比如下面这个,其中就详细地展示了类似的情况。

这个BUG很明显,就是:赛尔号游戏内个人信息界面米米号无法显示完全。

有一位网友向客服反馈了这个BUG,下面是淘米客服给出的回复。(截图来自网友“兮”)

客服给出的答复是:显示不完整是浏览器字体的问题,将字体调整为宋体后重启浏览器就可以正常显示了;登录账户中心,可以在网页中看到用户的米米号。
客服其中有一点说得非常正确:登录账户中心,可以在网页中看到用户的米米号。
所以大家在充值米币的时候,尽量使用游戏内的充值按钮弹出的网页进行充值,上面会直接自动填写你的米米号,并在右上角显示你的完整米米号。
如果是使用某些打折扣的充值商城进行充值,也一定要提前登录充值中心,查看好自己的完整米米号,核对无误后再进行充值。

即使各位注意到这篇文章中客服给出的提示,以后充值前都会核对好自己的米米号。但是,如果这个米米号显示不全的BUG不修复的话,时间一长,人数一多,总不能保证没有人再出现这样的失误。
此外,对于“显示不完整是浏览器字体的问题,将字体调整为宋体后重启浏览器就可以正常显示了”,事实真的如此吗?
首先,尝试使用“搜狗高速浏览器”进行实验。

更改选项中的设置项目,将“页面字体”设置为“宋体”。

然后登录游戏账号,打开个人面板,结果发现米米号依然无法显示完整。

对比一下:宋体是衬线字体,笔画有粗细变化,而且一般是横细竖粗,末端有装饰部分(即「字脚」或「衬线」),点、撇、捺、钩等笔画有尖端;但是游戏中显示的字体却非常平滑,而且比较粗壮,不像宋体那样纤细。

因为这个字体是游戏额外设置的字体,不是浏览器默认字体!因此,更改浏览器字体根本没用。
接着,使用IE浏览器测试一下修改字体的方法是否奏效。

同样,将IE浏览器的默认字体更改为“宋体”,个人信息面板的米米号依然无法显示完全,而且这个平滑的字体根本就不是宋体。

但是,为了保证结论的准确性,又尝试了更改“赛尔号微端”的默认字体。
这次,选择了特征比较明显的站酷酷黑体。这种字体的数字比较扁平方正,与游戏中米米号显示的字体有着很大的区别,一眼就能分辨出来。

我在这篇文章中提到过,目前版本的赛尔号微端是基于Electron构建的,因此可以通过调整Electron的设置来调整赛尔号微端的内容。

来到安装赛尔号微端的目录,找到目录下的seer文件夹,使用代码编辑器或者记事本程序打开main.js。

在webPreferences模块儿中输入如图所示的代码,这些代码可以设置Electron的默认字体。

这个是Electron的开发者文档,图中部分就是关于defaultFontFamily的介绍[1]。

将文档翻译为中文,大体含义是这样的。
defaultFontFamily 对象类型 (可选) - 为font-family设置默认字体。
standard 文本类型 (可选) - 默认值为 Times New Roman.
serif 文本类型 (可选) - 默认值为 Times New Roman.
sansSerif 文本类型 (可选) - 默认值为 Arial.
monospace 文本类型 (可选) - 默认值为 Courier New.
cursive 文本类型 (可选) - 默认值为 Script.
fantasy 文本类型 (可选) - 默认值为 Impact.
[1] Electron开发者文档网址:
https://www.electronjs.org/docs/api/browser-window
写好代码,并保存文件,重启赛尔号微端,确实发现某些字体发生了变化。
比如,输入账号的这个界面,米米号那一栏文本的字体确实发生了改变。
这是原版的样子。

这是改后的样子。

打开赛尔号微端的开发者工具,依次选中Elements——Computed——font-family选项。

在这里,的确可以看到,我们已经将浏览器默认字体调整为“站酷酷黑”了。

但是,打开个人信息面板,这里的字体依然没有任何变化。你甚至可以看到,顶端的地图名称字体已经发生了改变,但是个人信息米米号的字体并没有变化。

于是可以确定了,结论没有错。个人信息米米号的字体是游戏额外设置的字体,不是浏览器默认字体。因此,更改浏览器字体根本无法使米米号显示完整。
为了探寻原因,于是再次开启了“老家秘传超能力”。

使用Flash打开玩家个人信息界面文件,结果发现,米米号文本框这里的字体的确是“宋体”。

但是,为什么一旦到了游戏里面,就会变成其他字体呢?猜想一下,或许有可能是使用了代码在后期强制规定字体。
在玩家个人信息面板的初始化UI函数中,有这样一句代码:
CommonUI.resetUiAllTxtFont(_ui);

这句代码的作用大概是调整界面中所有文本的字体。
找到相关的函数以后,发现一句关键的代码:
if ((_loc5_ = (_loc4_ = _loc3_ as TextField).defaultTextFormat).font == "SimSun")
_loc5_.font = "_sans";

如果文本框的默认字体名称为“SimSun”(宋体),那就将该文本框的字体设置为“_sans”(无衬线字体)。
也就是说,使用了一句代码,改变了原本设置的字体“宋体”。
这个“_sans”字体是何方神圣?为什么找不到同名的字体呢?
查阅Adobe Flash开发者文档,可以看到与字体“_sans”相关的描述[2]。

图中选中文本的中文意思大概是这样的。
在字体名称集中有三个通用设备字体名称:“_sans”、“_serif”和“_typewriter”。这些名称根据播放系统映射到具体的设备字体。在使用设备字体的所有字体说明中指定此类默认名称是一种很好的做法。
[2] Flash开发者文档:
https://help.adobe.com/en_US/as3/dev/WS9dd7ed846a005b294b857bfa122bd808ea6-7ff3.html
也就是说,“_sans”指的并不是某个具体的字体,而是根据用户设备的操作系统所决定的。
一般来说,“_sans”在Windows系统下指的是Arial,而在Mac系统下指的是Helvetica。
在Flash字体选项中,有三种字体单独列出来,“_sans”就是其中之一。

这三个带下划线前缀的字体设置方法是Flash(含Animate)独有的,在PS等软件中就没有这样的设置。

设置“_sans”字体有必要吗?当然有必要,因为并不是所有的操作系统都有“Simsun”字体。而且,设置统一的无衬线字体,可以让UI更加整齐划一,简洁美观。
那么,到这里就大体了解了,使得个人信息面板米米号显示不完整的根源就是这一段代码。
最关键的是,如何解决这个问题呢?在这里,尝试了3种方法。
方法一:调整资源文件的米米号文本框宽度
原本的米米号文本框,对齐方式为“居中”,宽度为67.20。

可以将对齐方式调整为“左对齐”,并适当增加宽度。

调整文本框宽度以后,发现确实可以将米米号显示完整了,只是有点儿紧凑的感觉,有点不太整齐。

方法二:将字号统一设置为12
默认字号为14,如果将字号降低2号,将文字变小,就可以放下更多的文字了。

将文本的字号调小以后,发现确实可以将米米号显示完整了,只是文字有点儿小了,不如之前清晰了。

方法三:将字体统一设置为“SimSun”(宋体)
既然在Windows下的宋体比较纤细,那直接设置为“宋体”应该也可以显示完整。

调整字体以后,发现确实可以将米米号显示完整了,只是文字有点儿丑,并且这只是在Windows系统下的展示结果,在Mac系统下可能就不会尽如人意了(Mac系统下的SimSun字体与Windows不同)。

文中列举的3种解决方法,只能说是“抛砖引玉”了。相信游戏官方一定可以找到更优方案,就让我们一起等待游戏官方解决这个问题吧!

还有几周,赛尔号就要迎来12周年庆典了!希望赛尔号能在前进的道路上越走越远,预祝赛尔号十二周年庆典举办取得圆满成功!