个人页不再对别人显示为零
打开另一位玩家的个人页,无论他玩了多少,都看不到对局、胜场、卡牌或连胜。这些数字每一个都在错误的数据行上统计。

通俗版
个人页是 opolyx 上唯一为展示给别人而存在的页面,而它一直在悄悄地骗人。等级和经验是真实的,因为它们本就公开——但对局数、胜场、胜率和连胜对除你以外的所有人都显示为零,下方的卡牌收藏也一片空白。一个身后有两百场对局的玩家,在整个站点其他人眼里就像从没坐上过牌桌。
现在这四个数字对任何观看者都是真实的,收藏也会显示该玩家真正拥有的卡牌。这些计数还与排行榜一致——排行榜在同一周里因为同样的原因被修好。
卡牌收藏是隐形时间最久的部分。卡牌在获胜时以及到达里程碑等级时掉落,是 opolyx 上最接近可以炫耀之物的东西,而这个架子自上线之日起对任何访客都是空的——于是收藏存在的唯一意义,恰恰是它唯一做不到的事。
技术细节
这四个数字都来自在访客自己的浏览器里逐行统计。对公开数据来说这没问题,对这里的其他一切来说却是错的:对局相关的表只会返回你参与过的对局,库存也只会返回你自己的物品。于是浏览器提了一个诚实的问题,得到了关于错误对象的诚实答案,又把它当作关于另一个人的事实打印出来。对陌生人而言,「你的对局里我参与过几场」的正确答案确实是零。
连胜是最后被发现的,有用的教训也在这里。此前的一次排查已经注意到访客看到的对局列表被截断了——却停在了那里,没有继续追到那个由该列表算出来的数字。连胜正是在这些被截断的行上做的循环,所以它在站点每一个个人页上都读作零,包括那些正处于长连胜中的玩家。一次返回不全的读取会毒害它下游的一切,而不只是它直接显示的东西。
| 一个真实个人页,访客视角 | 此前 | 现在 |
|---|---|---|
| 对局 / 胜场 / 胜率 | 0 / 0 / 0% | 15 / 8 / 53% |
| 连胜 | 0 | 3 |
| 卡牌收藏 | 空 | 7 张卡牌 |
总数现在来自在对局计分时维护的公开计数器,而卡牌和连胜各自来自一个只回答关于某一位玩家的某一个问题、别的什么都不做的小函数。把底层数据表向所有人开放会更省事,也会糟糕得多:那会连带暴露未来的每一件库存物品,以及每一场私人对局的名单。对局列表本身仍然只属于你——它只是不再声称你从未玩过。
