Campofinale 系列项目部署心得
前言
Campofinale 是一个由 Team Stardust 开发的实验性本地服务器项目,为某款工厂建造类游戏提供本地服务器实现。项目使用C#编写,基于.NET框架,目前仍在积极开发中。
这里只着重讲如何部署,而且做到服务端与客户端分离。如果你只有一台机器,那么直接照着项目的README.md做即可。
服务端部署
服务端只有Campofinale本体。
编译 Campofinale
可以直接去那边下预编译包,下第一个出现的7z后缀文件然后找个地方解压就行。
装完就跳过这一部分吧。
安装.NET SDK,项目推荐使用8.0版本。
在 Windows 系统下,可以使用WinGet安装:
1 | |
对于别的系统,自己找教程吧。
你需要确保在装完之后,dotnet命令可用。下面的命令能够确认是否成功安装:
1 | |
下载并解压源码包,或者使用git克隆仓库:
1 | |
编译(参考项目中的GitHub Workflows):
1 | |
复制 / 移动二进制程序:
1 | |
这里的二进制程序目录可能有所不同,以实际为准。
安装依赖和资源
按项目说明来:
- 安装.NET Runtime,注意这个跟 SDK 有区别,二者选其一;
- 安装MongoDB,
MongoDB Server必装,同时还有个可选的 GUI 工具MongoDB Compass方便查看数据库; - 下载
Json、TableCfg和DynamicAssets。
由于涉及到可能比较敏感的仓库名称,故不提供命令示例。
mitmproxy是给客户端用的,服务端用不到。
修改配置文件
进入程序目录,先启动一次Campofinale.exe,然后找到并打开配置文件server_config.json:
1 | |
作为服务端,建议把127.0.0.1改为服务器的真实 IP,保证客户端能够访问到两个 Server 地址;同时开放涉及到的两个端口(5000和30000)。
你需要自行考虑安全性问题。我这边是用的 Tailscale,毕竟又不需要提供服务。
英语好的话,你可以随便改配置。
客户端会先访问dispatchServer进行登录和下载资源,然后服务端会返回给客户端gameServer信息,最后客户端访问gameServer成功后进入游戏。
同时,客户端会尝试和奇怪的地址通信,后面遇到了可以先忽略。
至此,服务端配置完成。
服务端指令
记得创建账号:
1 | |
客户端部署
安装相应资源
去项目 Discord 群(自己找!)找安装包,这个不单独提供;然后正常下载游戏资源即可,下完不要直接打开。
应用 Patch
去项目 Discord 群下相关文件:
launcher.exepatch.dll我是游戏Beta.exe
去游戏本体安装目录覆盖;把launcher.exe做个桌面快捷方式,好找。
以后就开launcher.exe了。
劫持并重定向相关流量
项目采用了mitmproxy方案,将本来应该和正经dispatchServer的通信转移到了咱们自己开的Campofinale服务端;然后咱们的服务端检查登录信息并下发了可用的gameServer,而这个gameServer还是咱们自己的服务端!因此重定向只需要考虑dispatchServer的地址和端口就行了。
这里其实想怎么弄都行(软路由什么的)。
你需要安装cert。一般来说,跑一遍mitmproxy之后,你的用户目录下会多出来一个新目录~/.mitmproxy,这个目录里面有需要的cert。
打开mitmproxy-ca-cert.cer,安装到受信任的根证书颁发机构存储区。不同系统做法不同。
编写相应脚本script.py:
1 | |
我平时会用uv管理Python项目,所以这里我直接用uv了:
1 | |
删了些敏感的东西,自己补上。
运行客户端
运行launcher.exe启动游戏。
邮箱:<username>@randomemailformathere.whatyouwant;密码随意。
总结
整体还算顺利,注意以下几点:
- 服务端:依赖装起来没?资源下载了没?两处 IP 和端口处理了没?
- 客户端:Patch 没?脚本修改了没?
- 注意
dispatchServer和gameServer的区别。
然鹅跑起来发现:我新手教程呢?
算了不管了。
作为一个实验性项目,Campofinale 展现了社区的技术实力。虽然功能尚未完善,但基础的游戏体验已经可以实现。期待项目的后续发展!