MushRog

为封闭测试做准备

2026年10月15日 arquiteturadesignbastidores

机器翻译,尚未审校。

我们开始着手让游戏能交给外面的人玩。这些东西在战斗画面里一点都看不到,但正是它们把朋友间的测试和真正的测试区分开:掉线后能回来、能管理聊天、能度量发生了什么。

为什么

我们自己的美术要到 2027 年 4 月才开始,在那之前,测试需要的、又不依赖美术的事情都可以先做完。所以我们重新整理了路线图:现在有一个专门的测试阶段和一个专门的界面阶段,都排在美术之前。

怎么运作

如果你在房间中途掉线,你的队伍会在那里停 60 秒。游戏每 2 秒自动尝试重连,连上之后,你会回到同一个房间、同一支队伍,不用重新输入密码。我们故意在洞穴里把一个 bot 的连接断掉来测试,也通过互联网对着测试服务器测过。伤害、击中和房间清空的提示现在走一个保证送达的通道;以前,在互联网上丢一个包,可能就让一个伤害数字消失了。

聊天有葡萄牙语、英语和俄语的脏话过滤,能识别重音和 “l33t”。连续重复的消息会被拦下,10 分钟内三次违规会被禁言 10 分钟。可以通过点玩家或者输入 /denunciar nome motivo 来举报,举报会带上对方最近的几条消息作为上下文。团队有通过聊天使用的 GM 命令:禁言、封禁、踢出、公告、生成邀请码和发放物品。被封禁的人在尝试登录时会看到原因和截止时间。

服务器可以在注册时要求邀请码,测试就是这样封闭起来的。使用旧版本游戏的人会收到提示和下载新版的地址,而不是莫名其妙地掉线。

服务器还会记录我们做平衡需要的数据,不含名字、邮箱和 IP:大家玩多久、第二天和第二周是否回来、用了哪些反应、切换了多少次角色、每天开多少个宝箱。这会告诉我们钥匙是不是给得太小气或者太松。为了测负载,我们在测试服务器的城镇里放了 50 个 bot。每个大约用 2 KB/s,服务器用了 117 MB 内存,机器几乎没什么感觉。

最后,我们把整个界面完整过了一遍,这成了路线图的第 4 阶段:用更少的画面进入游戏,一个带有角色、技能、背包、地图和日程的栏,一本想看随时可以翻的手册而不是强制教程,以及手机上手指大小的按钮。

下一步

进入房间之前先组好队、每周的地下城词缀,以及英文翻译。

变更

  • feat(net): 60 s reconnection with session tokens

    Login hands out a session token. When a connection drops inside a room the team stays parked as a ghost for 60 s; the client retries every 2 s for up to 60 s and resumes with the token instead of the password, landing back in the same room with the same team, or in the city with the team it had. A new login kicks the stale session instead of refusing with already_online. Peer timeouts are 4 to 10 s on both ends so drops are noticed quickly. The network test drops bot1 inside the Toca and checks it returns to the same team. Protocol 14.

  • feat(server): moderation, GM commands, invites and telemetry

    Moderation (server/moderation.gd): whole-word chat filter per language with accent and leetspeak folding, repeat blocking, automatic 10-minute mute after three hits, mutes and bans with audit, player reports with the reported player's last chat lines as context, admin accounts, and a token bucket against command floods that kicks after five strikes. GM commands over chat (/gm ajuda): kick, mute, ban, unban, announce, invite codes, reports, give items, gold or essence. data_dir/server.json holds invite_only and the admin usernames; registration takes an invite code when the beta is closed. Banned accounts get the reason and the end date at login. Outdated clients are told to download the new version instead of being dropped silently. Telemetry (server/telemetry.gd): pseudonymized JSON Lines per day with sessions, room runs, reactions and swaps per run, chests, gacha, trades, market, cooking and a CCU sample every minute; tools/telemetry_report.py prints DAU, D1/D7 retention, CCU, clear rates, reaction share and the key economy. Protocol 15.

  • fix(net): room events on a reliable channel

    Events rode in the same unreliable packet as the binary tick, so any lost packet over the internet dropped damage numbers, casts and room banners. The tick stays unreliable; events go reliable and only when there are any. The server flushes stdout on print so journald shows the log. The network bot waits 1.5 s for the cast, enough for a real round trip. Protocol 16.

  • docs: client UX review and the two new roadmap phases

    docs/fluxo-do-cliente.md reviews the client flow (login to first room, bottom bar, panels, onboarding, touch) and lists a 35-item backlog. The roadmap now has phase 3 (ready for the beta, current) and phase 4 (interface and first session) before own art, on the site and in the design doc.

← 返回开发日志