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的根目录下,输入

cmd
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的文件!这个文件是必须的!

然后继续执行

cmd
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 一个动画游戏的服务器端模拟器
官方文档