1. 1. 前言
  2. 2. 下载安装 Python
  3. 3. 下载安装 Java
  4. 4. 下载安装 Mongodb
    1. 4.1. 下载
    2. 4.2. 开启 Mongodb
  5. 5. 配置 Python
  6. 6. 构建 Grasscutter
    1. 6.1. 拉取项目
    2. 6.2. 开始构建
  7. 7. 配置并开放 Grasscutter
    1. 7.1. 下载资源文件
    2. 7.2. 开放服务器
  8. 8. 将国服客户端转成国际服
  9. 9. 链接服务器
  10. 10. Grasscutter 命令(百度翻译自官方文档)
    1. 10.1. 额外功能
  11. 11. 尾语
    1. 11.1. 参考

前言

tip: 本文仅作技术分享,从而带来的任何问题我们暂不负责,若本文侵犯了贵方的权益请联系 天翔 TNXG

上一次见到关于 MitmProxy 的项目是关于明日方舟的 G 和私服,没想到这么快就轮到原神了,这还是令我有点惊讶的

不过搭建这类东西是需要点小技术的。没有技术力的还是去看别人写的博文,利用懒人包搭建罢

当然这篇博文是基于 Windows 的环境下搭建的,不负责 Linux

你需要先在电脑中安装以下软件

Python ≈ 3.8
Java ≈ 17
CMD
Mongodb

下载安装 Python

python3.8.8.exe

在这里下载安装就可以了,虽然我不太确定 py39 能不能正常使用,但我觉得应该可以()

但一定要记住让它安装环境变量

下载安装 Java

我这里提供一个 JavaJDK18 的下载地址吧:jdk-18_windows-x64_bin.exe

依旧是下载安装,但是 Java 不会给你自动配置环境变量,还需要手动配置,详细可以参考 这篇文章

下载安装 Mongodb

关于 Mongodb 下载安装我有必要详细讲下,这玩意的安装过程属实有点麻烦

但如果你是大佬,或者你的 Mongodb 服务已经在 22102 端口正常运行,请跳过这步,直接开始 构建 Grasscutter

下载

首先需要到 Mongodb 的官网 下载软件,我这里推荐使用它的 zip 存档,这方便我们稍后配置 如果大佬会配置 Mongodb 的自启或别的什么我就不说啥了,毕竟谁也不想每次开个 Mongodb 都要在安装盘里找半天

开启 Mongodb

解压刚下载的压缩包

打开 cmd,然后 cd 到刚解压的文件夹中

新建一个文件夹,用来储存我们的数据mkdir db

然后再 cd 进入 bin 文件夹,cd bin

尝试使用命令开启 Mongodbmongod --dbpath "../db",如果命令提示符中出现大量 json 数据则代表开启成功 或许开启失败也是一堆 json 数据,但我目前还没有遇见过

如果嫌每次启动都输入命令麻烦当然可以写个启动脚本

依旧是在 Mongodb 的根目录下,输入

echo cd bin > start.bat
echo mongod --dbpath "../db" >> start.bat

这两条命令会在目录下生成生成一个 start.bat 以后点击 start.bat 就可以开启 Mongodb 服务

配置 Python

这个还算比较简单,直接运行 pip install mitmproxy 就可以了

如果下载慢或者报错的话我个人推荐还是去网上搜搜pip 如何配置全局镜像源

构建 Grasscutter

拉取项目

在以上前置软件安装完成后前往 Github 下载最新的Grasscutter,当然是下载源代码(保持版本最新嘛)

当然用 git 工具直接 clone 是最简单的git clone https://github.com/Grasscutters/Grasscutter.git

首先要做的肯定是先 cd 到一个方便接下来步骤的文件夹,我就选择桌面了cd C:\Users\Administrator\Desktop\

然后直接 clone Grasscutter 的仓库,git clone https://github.com/Grasscutters/Grasscutter.git如果你是从 github 直接下载的可以直接解压,无伤大雅

尝鲜请前往 development 分支这里的更新速度是最快的

开始构建

clone 完成后再次 cd 进 Grasscutter 文件夹cd Grasscutter

运行开发者之前就给我们准备好的构建脚本gradlew.bat,然后它会自动开始下载构建需要的依赖

当这个脚本运行完成后我们接着运行gradlew jar,这一步会需要比较长的时间,请耐心等待

在以上步骤都执行完成过后会在代码的根目录出现一个 grasscutter.jar 文件,这个便是服务端了,但先别急着打开它,我们现在还缺少一些资源

配置并开放 Grasscutter

下载资源文件

我们先新建一个 Grasscutter-Server 文件夹

  • 将原本储存着代码的文件夹中的 data 文件夹、keys文件夹、resources文件夹、grasscutter.jarkeystore.p12proxy.py移动到 Grasscutter-Server 文件夹中
  • GenshinData 中的 TextMapSubtitleReadableExcelBinOutput 移动到 Grasscutter-Serverresources文件夹中
  • Grasscutter-Protos 中的 proto 移动到 Grasscutter-Serverresources文件夹中
  • gi-bin-output 中的 2.5.52/Data/_BinOutput 重命名为 BinOutput 然后移动到 Grasscutter-Serverresources文件夹中,目前原仓库已经被封禁,但是还有备份啊(大雾)gi-bin-output 备份 1gi-bin-output 备份 2

开放服务器

依旧是在 Grasscutter-Server 文件夹中,cmd 输入

java -jar grasscutter.jar -handbook你会看见在根目录下多了个 GM handbook.txt 的文件!这个文件是必须的!

然后继续执行

echo start java -jar grasscutter.jar > start.bat
echo start mitmdump -s proxy.py --ssl-insecure >> start.bat

如果 cmd 没有任何报错,恭喜你成功了,你的服务器被开放了!

现在你可以尝试使用account create 用户名 用户 id 来创建你的游戏账号,并测试服务端是否正常

将国服客户端转成国际服

可以用 Snap Genshin,关于过程可以详见 它的文档

链接服务器

设置 -> 网络和 Internet-> 代理 -> 手动设置代理 中设置代理服务器的 IP,一般来说就是127.0.0.1,端口是8080

如果代理没有作用或无法链接服务器则需要安装证书

注: mitmproxy 的 CA 证书可以从http://mitm.it 中下载它

双击来 安装根证书 或者..

确定你可以正常将流量转发到个人服务器的时候,打开游戏,在登录时你需要输入创建的用户名和任意密码即可加入服务器。

切记,使用国际服客户端

Grasscutter 命令(百度翻译自官方文档)

物品或生物 ID 可以在 GM Handbook.txt 中找到

在每个玩家的朋友列表中都有一个名为“服务器”的虚拟用户,你可以通过发送消息来使用命令。命令也适用于其他聊天室,例如私人 / 团队聊天。
要在游戏中使用命令,需要添加 /! 前缀,如 /pos

命令 用法 权限节点 可用性 注释 别名
account account <create|delete> < 用户名 > [uid] 仅服务端 通过指定用户名和 uid 增删账户
broadcast broadcast < 消息内容 > server.broadcast 均可使用 给所有玩家发送公告 b
coop coop<uid> < 目标 uid> server.coop 均可使用 强制某位玩家进入指定玩家的多人世界
changescene changescene < 场景 ID> player.changescene 仅客户端 切换到指定场景 scene
clearartifacts clearartifacts player.clearartifacts 仅客户端 删除所有未装备及未解锁的圣遗物, 包括五星 clearart
clearweapons clearweapons player.clearweapons 仅客户端 删除所有未装备及未解锁的武器, 包括五星 clearwp
drop drop < 物品 ID| 物品名称 > [数量] server.drop 仅客户端 在指定玩家周围掉落指定物品 d dropitem
give give [uid] < 物品 ID| 物品名称 > [数量] [等级] [精炼等级] 给予指定玩家一定数量及等级的物品 (精炼等级仅适用于武器) g item giveitem
givechar givechar<uid> < 角色 ID> [等级] player.givechar 均可使用 给予指定玩家对应角色 givec
giveart giveart [uid]< 圣遗物 ID> < 主属性 ID> [< 副属性 ID>[,< 次数 >]]… [等级] player.giveart 均可使用 给予玩家指定属性的圣遗物 gart
giveall giveall [uid] [数量] player.giveall 均可使用 给予指定玩家全部物品 givea
godmode godmode [uid] player.godmode 仅客户端 保护你不受到任何伤害(依然会被击退)
heal heal player.heal 仅客户端 治疗队伍中所有角色 h
help help [命令] 均可使用 显示帮助或展示指定命令的帮助
kick kick<uid> server.kick 均可使用 从服务器中踢出指定玩家 (WIP) k
killall killall [uid] [场景 ID] server.killall 均可使用 杀死指定玩家世界中所在或指定场景的全部生物
list list 均可使用 列出在线玩家
permission permission <add|remove> < 用户名 > < 权限节点 > * 均可使用 添加或移除玩家的权限
position position 仅客户端 获取当前坐标 pos
reload reload server.reload 均可使用 重载服务器配置
resetconst resetconst [all] player.resetconstellation 仅客户端 重置当前角色的命座, 重新登录即可生效 resetconstellation
restart restart 均可使用 重启服务端
say say<uid> < 消息 > server.sendmessage 均可使用 作为服务器发送消息给玩家 sendservmsg sendservermessage sendmessage
setfetterlevel setfetterlevel < 好感等级 > player.setfetterlevel 仅客户端 设置当前角色的好感等级 setfetterlvl setfriendship
setstats setstats < 属性 > < 数值 > player.setstats 仅客户端 直接修改当前角色的面板 stats
setworldlevel setworldlevel < 世界等级 > player.setworldlevel 仅客户端 设置世界等级(重新登陆即可生效) setworldlvl
spawn spanw < 实体 ID| 实体名称 > [等级] [数量] server.spawn 仅客户端 在你周围生成实体
stop stop server.stop 均可使用 停止服务器
talent talent < 天赋 ID> < 等级 > player.settalent 仅客户端 设置当前角色的天赋等级
teleport teleport [@playerUid]<x> <y> <z> [sceneId] player.teleport 均可使用 传送玩家到指定坐标 tp
tpall player.tpall 仅客户端 传送多人世界中所有的玩家到自身地点
weather weather < 天气 ID> < 气候 ID> player.weather 仅客户端 改变天气 w

额外功能

当你想传送到某个地点, 只需要在地图中创建标记, 关闭地图后即可到达目标地点上空

尾语

切勿滥用 ,给任何一个项目活下去的机会,这种东西本就不是合法的,我们自己玩玩嗨皮一把就可以了,大可不必到处宣传 我的博客是给爬虫看的

参考

深海小涛:【教程】 Grasscutter 一个动画游戏的服务器端模拟器
官方文档