1.biomes-game是什么?
一款基于MIT协议开源沙盒 MMORPG。游戏中可建造、采集、玩迷你游戏等等,所有操作均可通过浏览器完成。它主要使用React框架,前后端用 Typescript 和 WebAssembly 编写。
2.如何本地体验?
配置:MBP M3 16G内存
要在本地运行 Biomes,需要有 64GB 内存。
(1)安装Node版本管理器(https://github.com/nvm-sh/nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
# Restart console
nvm install v20
nvm use v20
(2)安装 yarn
npm install -g yarn
(3)在克隆代码库之前安装 Git LFS,否则二进制文件将包含错误内容
// Ubuntu
sudo apt-get install git-lfs
// or MacOS
brew install git-lfs
(4)安装Python版本>=3.9,<=3.10
conda create -n biomes-game python=3.10 -y
conda activate biomes-game
(5)安装 clang 版本 >= 14
(6)安装 Bazel
npm install -g @bazel/bazelisk
(7)克隆代码库
git clone https://github.com/ill-inc/biomes-game.git & cd biomes-game
(8)运行 git lfs pull
以确保 LFS 文件是最新的
git lfs pull
(9)安装python依赖
pip install -r requirements.txt
(10)安装Redis 7.0.8
curl -s https://download.redis.io/releases/redis-7.0.8.tar.gz | tar xvz -C ${HOME} \
&& make -j`nproc` -C ${HOME}/redis-7.0.8 \
&& sudo make install -C ${HOME}/redis-7.0.8 \
&& rm -rf ${HOME}/redis-7.0.8
编译错误fix方法:https://chatgpt.com/share/34e05d01-7e61-44c2-9350-3c4669bb84dd
(11)更改配置
在biomes.config.dev.yaml添加以下内容禁用 Discord Web Hooks:
discordHooksEnabled: false
(12)启动并访问
./b data-snapshot run
访问:http://localhost:3000
3.框架是什么?
基于微服务,便于扩展。
-
当玩家加载游戏时,他们会从
web
服务器加载客户端。 -
然后,客户端从
asset
服务器加载资源,并与sync
服务器建立连接以获取玩家位置本地的 ECS 数据。 -
玩家的交互主要将 ECS 事件发送到
logic
服务器,但也可以调用web
、chat
、oob
和 map。 -
server交互主要通过 ECS 更新转发给玩家,这些更新通过
sync
服务器同步到客户端 -
其他服务器不是直接由玩家驱动的,但对通过
sync
服务器类似地同步的 ECS 组件进行了更改。一个例子是newton
独立于任何玩家交互移动掉落的物品。trigger
、task
、newton
、anima
和gaia
都属于该模式。
在本地运行时,您可以通过指定服务器名称来指定您感兴趣运行的服务器子集,即 ./b web trigger
。服务器将自动启动它们依赖的任何服务器以正确运行。
服务列表如下:
(1)Web服务
-
基于 NextJS 的 Web 服务器
-
为所有 API 端点、主启动页面和管理站点提供服务
-
无状态服务
(2)Logic服务
-
为玩家举办高级活动,通常是那些编辑地形的活动
大多数玩家事件都会通过ECS创建逻辑服务器事件。
逻辑服务器事件由 server/logic/events/all.ts
中的 ECS 事件处理程序定义
如果您打算修改或添加面向玩家的游戏交互或逻辑,这可能是开始的地方。
(3)Asset服务
-
只是 Web 服务器的另一个副本
-
不同层的服务器因为运行Python而具有不同的特性
-
生成玩家网格
(4)Trigger服务
-
监听 Firehose,并有一个基于时间的处理器 - 两者都是触发器的输入
-
触发器产生游戏更新,它们:
-
解锁食谱
-
处理任务进展
-
处理过期/冻结/超时
-
(5)Chat服务
-
使用分布式锁来维护单个实例
-
将聊天消息分发到同步服务器
-
处理聊天的发布-订阅提要以保证分发和存储
-
围绕 DM 发布消防事件
(6)Task服务
-
处理长期存在的异步任务
-
与 Firestore 交互,生成游戏事件,与加密货币交互
-
API 是间接的,您可以通过在 Firestore 中创建任务来安排任务
(7)Sync服务
-
客户端的 WebSocket 接入
-
维护整个世界的副本作为副本,将其相关部分提供给连接到它的客户端
-
代表客户发布游戏活动
(8)OOB服务
-
用于直接在带外为各个实体提供服务的同步服务器的副本
-
用于将远程数据加载到客户端
(9)Newton服务
-
处理掉落物、它们的物理特性以及它们何时被拾起
(10)Anima服务
-
处理世界上 NPC 的 AI,被分片,因此每个服务器仅处理一个子集
(11)Map服务
-
定期生成地图的自上而下的世界渲染
(12)Replica服务
-
为了消除直接影响游戏的扇出成本,任何需要世界副本的人都应订阅副本层
-
维护世界的副本,直接订阅世界
-
支持当前游戏API的订阅部分
(13)Gaia服务
盖亚权威地控制着游戏中所有“自然”的游戏模拟:
-
灯光
-
淤泥蠕变
-
植物生长和再生
-
农业
(14)Redis / Redis Bridge
-
世界数据的主要存储,并能够在其上提供交易。
-
组件将 Redis 中发生的更新映射到 Firehose,一次只有一个 Bridge 运行。
(15)ETCD
-
使用正在运行的 etcd 服务器维护分布式锁