The TMC App - The Modding Community

尚未发布

TMC 应用

一款跨平台的服务器浏览器模组管理器,运行在你自己的机器上——因此它能做到网站在物理上做不到的两件事:从你的网络去 ping 服务器,以及把模组放进你的游戏目录。

Windows Linux macOS Android 稍后 iOS 稍后

我们首先瞄准的是桌面端——Windows、Linux 和 macOS。移动端会在它们落地之后跟上。无论哪一边都是同一套 Rust、Tauri 2 与 React 代码库,而且目前没有任何一个已经发布。

应用尚未发布,也还没做好。 任何平台上都没有可下载的东西,这里的一切今天都无法安装——本页描述的是目前已经构建出来的部分。在它成型的过程中,源码是公开的。

TMC — Server Browser Live
Filter by game, map, players…
  • Rust — Vanilla Main Procedural 183/200 24ms
  • Garry's Mod — DarkRP rp_downtown_v4c 96/128 41ms
  • Minecraft — SkyFactory Overworld 72/100 63ms
  • Valheim — Northlands Meadows 8/10 88ms
示意图——真正的浏览器会实时查询这些服务器。
服务器浏览器

真实的延迟,真实的在线人数

网站只能告诉你我们的扫描器最后一次看到的情况,而且是从扫描器所在的位置看到的。当它想做得更准时,它其实是在凭地理位置猜测——用你的浏览器或 IP 地址推断出的大致位置,去和服务器的位置比较——而那同样是猜测:它描述的是地图上的一条直线,而不是你的数据包真正走的路线,更不是此刻的网络状况。应用会从你的设备发出游戏自己的查询包——所以在线人数是当前的,延迟也是你真正会得到的那个数。悉尼的玩家和法兰克福的玩家看同一台服务器会得到不同的数字,而只有运行在他们自己机器上的程序才能对各自说出实情。

Rust — Main | 2x | Weekly Wipe
2 秒前查询 · 直接来自服务器

Procedural Map · 4500

在线玩家 142 / 200
你的延迟 23 ms
一般
最近 20 次测量
21 ms 58 ms

从你的设备发出的 Ping

延迟是在你所在的位置测得的,而不是在扫描器所在的位置,并且每台服务器都有滚动历史,让你分得清一次抖动是服务器还是你的线路。

逐个游戏的实时查询

原生支持十三种查询协议——应用直接询问服务器并读取回复,而不是复述一小时前的扫描结果。

与网站完全一致的筛选

浏览筛选逐字段镜像网站的实现,因此你在浏览器里做过的搜索在这里含义相同。两者可能产生分歧时,以网站为准。

同样隐藏那些服务器

处于处罚状态的服务器——跳转农场和虚假在线人数——会在服务端被剔除,这样应用就不会成为唯一还在展示它们的界面。

延迟图表

行内一条迷你折线,页面上一张完整图表,再加一条覆盖近期测量的延迟阶梯。两个轴都有边界,数据保存在设备本地。

内置 RCON

在同一个应用里管理你自己的服务器:SourceFrostbite 控制台,密码在设备上加密保存,永不上传。
原生支持的协议
A2SMinecraftMinecraft SLPQuake IIIGameSpy 1GameSpy 2GameSpy 3GameSpy 4SA-MPFiveMFrostbiteTeamSpeak 3Hytale (Nitrado)

某台服务器用哪种协议、该问哪个端口,都来自我们自己的扫描器使用的同一份清单——不存在第二份可能跑偏的数据源。

管理你自己的服务器
应用中已有

面向 SourceFrostbite 服务器的 RCON 控制台,密码在设备上加密保存,永不上传。

  • 计划中

    在服务器上安装与管理模组——就是沙盒已经对游戏目录做的那套暂存与部署,只不过指向一台你自己运营的机器。

  • 计划中

    真正的服务器控制台视图:实时输出、回滚查看与命令历史,而不是一次只发一条命令。

  • 计划中

    在应用中编辑配置与启动设置,并在覆盖某个文件之前先为它做好备份。

  • 计划中

    更多 RCON 方言,让 Source 与 Frostbite 不再是唯一能连上的服务器。

计划就是计划——这四项都还没有实现。它们和其他东西一样待在路线图上,等真正做好了,本页会写成“应用中已有”。

模组管理器

部署配置,无需复制任何文件

沙盒就是其他管理器所说的配置档或实例:一组有名字的模组,拥有自己的加载顺序、自己的部署方式和自己的启动设置。模组只暂存一次,随后链接进游戏目录,因此在配置之间切换是一次链接操作,而不是重新下载——而且无论哪种方式,游戏目录都能恢复原状。

策略 游戏目录 开销
复制 被修改 一份完整副本
硬链接 链接指针
符号链接 链接指针
USVFS Windows 完全不动

USVFS 仅限 Windows 且默认关闭——它只是告诉游戏模组就在那里,而完全不往游戏目录写入任何东西。

先暂存,再部署

文件先解包到沙盒中,只有在你部署时才镜像进游戏——所以没下完的东西绝不会出现在游戏目录里。

一本账,让撤销真正可用

每个部署的文件都会连同它挤掉的东西一起记录下来。清空沙盒会把游戏目录还原成原样,包括被模组覆盖过的文件。

启动之前就看到冲突

合并后的文件树会说明每条路径由谁胜出以及哪些模组彼此冲突——在你还能调整加载顺序的时候显示,而不是等游戏崩溃之后。

你的配置,在每台机器上

沙盒的模组、顺序和启动参数会同步到你的账号,因此在第二台机器上登录即可复现。同步是按沙盒设置的,也可以干脆不开。

目录路径只留在本地

沙盒部署到哪个目录、暂存的是哪个版本,以及部署账本,都不会离开设备——它们描述的是一块硬盘,换个地方就会是错的。

它会找到你的游戏

Steam、Epic、GOG、Xbox、Ubisoft、EA 和 Battle.net 都从它们自己已经写下的信息里读取。检测只给出建议,绝不会自作主张地配置任何东西。
下载

数百个文件打造的队列

一个模组整合包不是一次下载,而是数百次;跑在家庭宽带上,跑在一台中途会被合上的笔记本上——所以应用取回的每一个字节都要走同一条队列,带有暂停续传优先级带宽限制

暂停与续传,做得正确

进度保存在目标文件旁边的分片文件里,真正的文件名只有在最后一个字节与校验和都通过之后才会出现——下游没有任何环节会拿到写了一半的文件并当成完成品。

带宽由你掌控

一个全局上限和一个单任务上限,队列运行中都可以调整,免得一个整合包把全家人的网都占满。

旧版本同样适用

因为最新版毁了你的存档而去下载旧版本,走的也是同一条队列——这恰恰是你最希望下载能暂停的时候。
插件

可扩展,却不运行任何人的代码

插件是数据,绝不是代码。没有脚本引擎,没有 WASM,也没有“运行这个程序”的步骤。安装器描述文件操作,查询插件描述一个数据包以及如何读取回复,主题描述颜色——插件能表达的一切,都是应用自己实现并自己审查的。

安装器 针对某个游戏的有序安装与卸载步骤
服务器实时查询 一个请求包,以及如何读回其中的字段
主题 一张颜色令牌映射表,采用白名单

由你批准的权限

插件会声明它需要哪些目录以及打算做什么。你会在它运行之前看到完整清单,并且批准的正是你看到的那一份。

每条路径都被关在笼子里

路径在构造上就是相对的——这个类型无法表达绝对路径——并且在处理过程中还会针对目录穿越、符号链接和 zip-slip 再次校验。

更新无法扩大权限

每个已安装的插件在启动时都会重新计算哈希。自你批准以来发生变化的插件会被禁用,并且在你重新阅读权限之前,开关拒绝把它打开。

把签名区分开

对清单文件做 Ed25519 校验,并与你自己的信任库比对。未签名受信任由你不信任的人签名是三种状态,而不是两种。
安全与隐私

WebView 只拿到数据。别的什么都没有

模组简介是不可信的文本,却被渲染在一个能调用应用的窗口里。所以凭据和文件系统都留在 Rust 一侧,界面拿到的只是数据——没有任何办法向它索取你的令牌,而且只有唯一一条命令接受路径,它只列出目录名,别无其他。

你在真正的网站上登录

应用会打开你自己的浏览器访问 moddingcommunity.com,然后等待。它从不接触你的密码,也没有内嵌的、假装是登录页的窗口。

令牌存放在系统钥匙串中

macOS 上是 Keychain,Windows 上是 Credential Manager,Linux 上是 Secret Service。短期访问令牌只保存在内存里,从不落盘。

你的服务器密码依然属于你

RCON 密码用凭据存储中的密钥在设备上加密,并且不存在任何接口会把它们发送出去。

两类设置

任何换台机器就会出错的东西——目录路径、带宽上限——都属于设备本地。只有应当跟着你走的内容才会进入账号。

一份审计记录

每一次特权操作——批准一个插件、一次部署、一次 RCON 连接——都会追加到一份可以在设置中查看的日志里。

绝不静默安装

应用会检查是否存在更新版本并告诉你。它不会自行下载或安装任何东西。
当前进度

尚不可用,也还没做好

把话说清楚:今天你无法下载或安装 TMC 应用。上面的一切描述的是目前已经构建出来的部分,而不是你能运行的东西——与其让你在一个并不存在的下载页尽头才发现,不如由我们直接告诉你。

没有可下载的东西

任何平台上都没有构建产物——没有安装程序,没有便携版,也没有商店页面。仓库在编写期间保持公开,发布消息会通过我们的 Discord 发出。

发布相关功能只读

评价、举报、订阅和沙盒会写入你的账号;上传和评论仍然是网站的职责。

它不会自我更新

应用会在有更新版本时告诉你,并在浏览器中打开下载页。真正的更新器需要签名密钥和清单接口,在两者都没有的情况下只发布客户端那一半,等于宣称一项它并不具备的能力。

桌面端优先,移动端随后

我们首先瞄准桌面三平台——WindowsLinuxmacOS——因为模组管理器要写入的游戏目录就在那里。AndroidiOS 会等到那些真正发布之后再做,而不是同时进行。