前言

本文仅限于学习和公益教育之目的,任何使用行为请遵守相关法律法规及版权方授权协议,切勿用于违法和盈利用途;以下内容以及资源均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。

原神是米哈游开发的动作角色扮演游戏,具有动漫风格的开放世界环境,采用基于抽卡的基本免费及道具收费制。建议大家支持正版游戏,本文提供的搭建方法仅用于学习和公益教育之目的,请您在搭建前务必确保完全知悉可能会面临的法律风险。

本文所提供的搭建方法,是基于GitHub开发者提供的Grasscutter项目。该项目使用Java重写的后端逻辑代码,所以严格意义上来讲并不是后端源代码泄露。主要是破解了原神Protobuf的网络通信协议,然后通过代理让游戏端连接到指定的Grasscutter服务器,故搭建后可能无法完全实现正版的功能。所以再次还要呼吁大家支持正版游戏!

资源下载

本站暂不提供打包文件和服务端的分享、转存服务,建议在GitHub开源项目Grasscutter中自行下载

GitHub

资源备份

资源备份

🔮以下内容均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。♻️您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。🔔本站非常重视著作权,假如侵犯您的权益,💌请附上相关证明材料发送邮件到 admin@fhf.tw。⭕️如果您已阅读并同意本站的《免责声明》,请在下方编辑框输入I Agree

访问码:

部署环境

环境要求

🔴Windows 64-bit(Windows 10建议Version 20H2+,Windows Server建议2016+,最低2012 R2,旧版本可能出现不兼容的问题)
🟠JDK17
🟡Python 3.8+
🟢MongoDB(如果服务器性能较差,安装时建议取消勾选Install MongoDB Compass;后续需要管理数据库可以使用Robo 3T等工具;Windows 10以下的系统只兼容4.2-的版本)
🔵Mitmproxy(用于流量代理,也可以使用Fiddler等工具)
🟣Notepad++【可选】:Notepad++是文本编辑器,用于编辑配置文件
⚫️7-Zip【可选】:7-Zip是一个开放源码的数据压缩程序,用于解压服务端
✅请确保服务端端口TCP443 TCP54321 UDP22102未被其他程序占用;如在服务器上架设,则还需确保后两个端口在防火墙(安全组)白名单策略中。以上所需的服务端文件及环境工具均可在上文所提供的入口进行下载,也可以自行从官方渠道下载

安装环境

请将环境所需的工具提前下载好,在上文提供的网盘内./服务端/环境与工具目录下的所有文件,安装位置建议保持默认。总共四个文件

注意:Windows10以下的操作系统在安装MongoDB的时候只能使用4.4.20及以下版本!MongoDB安装时建议不勾选Install MongoDB Compass(如果安装时勾选这项功能,可能需要更久的安装时间)

JDK17


JDK17的安装路径建议保持默认,否则可能需要自行调整服务端配置文件。操作系统中如果存在多个Java版本,建议自行调整环境变量或者更换服务端适配的Java版本

JDK17安装示例图

Python 3.8+


Python安装示例图

Mitmproxy


Mitmproxy安装示例图

MongoDB


注意:Windows10以下的操作系统在安装MongoDB的时候只能使用4.4.20及以下版本!MongoDB安装时建议不勾选Install MongoDB Compass(如果安装时勾选这项功能,可能需要更久的安装时间)

MongoDB安装示例图

部署服务端

启动代理

1.解压./服务端/full-grasscutter-dev-#xxx.zip服务端文件,并进入该文件夹

2.运行文件夹内的proxy.bat,如果您不希望其他主机连接到服务端,可以删除该文件中的--set block_global=false参数;或者您想在其他端口运行代理,右键编辑此文件修改54321为您期望的端口即可,如果留空则默认会监听8080端口,一般情况下保持默认即可,这里设置的端口就是客户端连接代理所用的端口;如果设置为常见端口可能存在被攻击的风险

3.运行proxy.bat后,命令提示符窗口提示Proxy server listening at http://*:54321表示代理已经启动成功!

连接代理并安装证书

1.设置代理,打开开始-设置-网络和Internet-代理,如果是服务端在本地搭建就填写127.0.0.1,如果您是连接服务器则填写服务器公网IP

Android/iOS/iPad OS连接代理方法

Android:设置-WLAN-详情(连接WLAN网络右侧“i”)-代理,选择手动,填写主机名和端口

iOS/iPad OS:设置-无线局域网-详情(连接Wi-Fi右侧蓝色“i”)-HTTP代理,选择手动,填写服务器IP和端口

2.设置好代理后,需要下载证书。打开浏览器访问http://mitm.it,选择您客户端对应操作系统的证书进行下载,如果一切顺利会出现下图页面。之后在对应客户端中安装证书即可

🔴此证书需要下发给客户端所在设备进行安装,服务器IP地址更换后需要重新下载安装证书。🟢如果服务端和客户端都在本机,则不用手动安装证书,代理会自动安装。
🟠如果进入证书下载页面提示:If you can see this, traffic is not passing through mitmproxy.则说明代理没有成功配置,建议重新检查代理的设置情况!
🟡注意:如连接服务器代理,中国大陆的服务器可能会因为备案问题被阻断访问。需要在服务器先下载证书,再拷贝到其他设备上进行安装。

Windows安装证书方法

下载好证书之后,需要将证书进行安装。双击打开证书文件-储存位置选择本地计算机-文件名保持默认-密码留空-证书储存选择将所有的证书都放入下列储存-浏览-选择受信任的根证书颁发机构-下一页-完成

Android安装证书方法

免ROOT方法:无root的Android可卸载国际服原神后使用上文资源备份站点提供的免证书自带代理的客户端(文件来源:GenshinProxy项目地址

如果您希望既玩官服又玩私服,那就需要区分大陆官服和国际服。如果您账号本身就在国际服,那直接使用上文资源备份站点中的./genshin-impact-patched.apk安装包,就可以国际官服和私服切换玩。但如果您的游戏数据在大陆官服,那就意味着您的手机上需要安装两个原神。请谨慎清除数据和卸载,避免后续重新下载。
Xposed环境请使用GenshinProxy-release.apk(需自行在GenshinProxy项目中下载)不支持EDXposed & 原版Xposed只支持LSPosed
Xposed环境请使用genshin-impact-308-lspatched.apk(可在上文资源备份站点中下载)不支持Android 9.0以下设备!

1.您可以使用上文资源备份站点中下载./genshin-impact-patched.apk安装包,首次安装请选择官方服务器,将游戏所需的资源先下载好。

2.进入后登录HOYOVERSE账号(如果没有请注册HOYOVERSE账号)只是用来下载资源文件,下载完成后退出游戏。如果您本身就玩的是国际服,那正常登录即可(注意:这里登录的是国际服的账号,不是您在服务端创建的账号!)

3.第二次启动时,选择设置,根据您服务端的信息,填写对应的服务器公网/局域网IP,并勾选跳过SSL证书检查。再清除后台启动游戏即可!(如果服务器有配置SSL证书,那就不需要勾选跳过SSL证书检查

ROOT方法:下载.pem格式证书,root并解锁system分区后手动将证书文件复制到/system/etc/security/cacerts并重命名为c8750f0d.0即可
(如果安装多个私服的证书,就需要依次把文件命名为c8750f0d.1`c8750f0d.2以此类推);如果不能解锁系统分区可参照网盘中我的私服专用`的模块制作自己私服的CA证书模块,或者安装信任用户证书的模块后直接在Android系统设置中安装为用户证书即可。

iOS/iPad OS安装证书方法


iOS:下载证书后发送到手机,直接打开点击安装即可,安装完进入系统设置信任刚才安装的证书。再打开设置-通用-关于本机-证书信任设置,将mitmproxy的开关打开即可

修改配置文件并启动服务端

1.如果您有好友联机的需求,则需要修改配置文件。进入服务端文件目录,打开config.json文件,修改"accessAddress": "127.0.0.1"这项参数,将127.0.0.1修改为您服务器的公网/局域网IP,默认仅允许本机连接。其他的参数请参考下文,根据自己的需要酌情修改。

2.运行文件夹内的run.bat,如果没有报错提示,则说明服务端已经正常运行了。

自定义配置config.json

自定义配置config.json

  • server.http.bindAddress server.game.bindAddress为监听的本地地址,建议保持0.0.0.0
  • server.http.accessAddress server.game.accessAddress为服务器的公网/内网IP(取决于您在公网/内网联机)默认为127.0.0.1即只允许本机连接
  • server.dispatch.defaultName为您的服务器名称
  • server.game.joinOptions.welcomeEmotes为进入游戏的欢迎表情 id(int 数组)
  • server.game.joinOptions.welcomeMotd为进入游戏的欢迎语
  • server.game.joinOptions.welcomeMail为进入游戏的欢迎邮件,成员有 title content sender itemsitems成员有物品id itemId,数量itemCount,等级itemLevel
  • server.game.joinOptions.serverAccount为游戏控制台的资料,成员有avatarId头像(长的角色id),nameCardId名片id,adventureRank冒险等级,worldLevel世界等级,nickName昵称,signature签名
  • account.autoCreate 为是否自动创建账号,默认为false,如修改为true,则允许登录不存在的账号时自动创建(不建议开启);
  • account.defaultPermissions为自动创建的帐号默认拥有的权限(文本型数组)
  • server.game.gameOptions.inventoryLimits为库存上限
  • server.game.gameOptions.avatarLimits为单人/联机的队伍角色数量上限
  • server.game.gameOptions.staminaUsage为是否启用体力系统

config.json参数中文注释

{
"folderStructure": {
"resources": "./resources/", //resources文件夹位置
"data": "./data/", // 数据配置
"packets": "./packets/", //数据包文件夹
"scripts": "./resources/Scripts/", //资源脚本位置
"plugins": "./plugins/" //插件目录
},
"databaseInfo": {
"server": {
"connectionUri": "mongodb://localhost:27017", //MongoDB服务器数据库
"collection": "grasscutter" //MongoDB数据库名称
},
"game": {
"connectionUri": "mongodb://localhost:27017", //MongoDB服务器数据库
"collection": "grasscutter" //MongoDB数据库名称
}
},
"language": {
"language": "zh_CN", //当前语言
"fallback": "en_US", //备用语言
"document": "EN" //文件语言
},
"account": {
"autoCreate": false, //自动创建账号 true为开启 false为关闭
"EXPERIMENTAL_RealPassword": false, //自动创建账号固定密码 true为开启 false为关闭
"defaultPermissions": [], //自动创建默认权限 例: [player.,server.]
"maxPlayer": -1 // 服务器最大在线人数
},
"server": {
"debugLevel": "NONE", //调试模式 类型说明:【"NONE","MISSING","ALL"】 NONE: 不显示调试信息,MISSING: 仅显示未知请求,ALL: 全部显示
"DebugWhitelist": [], //调试白名单
"DebugBlacklist": [], //调试黑名单
"runMode": "HYBRID", //运行模式 类型说明: 【"HYBRID","DISPATCH_ONLY","GAME_ONLY"】 HYBRID: 同时运行负载均衡服务器和游戏服务器,DISPATCH_ONLY: 仅运行负载均衡服务器,GAME_ONLY: 仅运行游戏服务器
"http": {
"bindAddress": "0.0.0.0", //监听(所有)IP地址 0.0.0.0
"accessAddress": "127.0.0.1", // 访问(本地)IP地址 127.0.0.1 可选C类IP地址:192.0.0.0 ~ 223.255.255.255
 或者 AB类地址 A:1.0.0.0 ~ 127.255.255.255 B:128.0.0.0 ~ 191.255.255.255
"bindPort": 443, //监听端口 443
"accessPort": 0, // 访问端口 自动返回
"encryption": {
"useEncryption": true, //使用加密
"useInRouting": true, //使用开启
"keystore": "./keystore.p12", //密钥路径
"keystorePassword": "123456" //密钥密码
},
"policies": { //策略
"cors": { //CORS 跨域
"enabled": false, //开关 false 关闭
"allowedOrigins": [ //允许的来源 "" 全部
""
]
}
},
"files": {
"indexFile": "./index.html", /// web 主页界面文件路径
"errorFile": "./404.html" //无法访问 web 404 界面文件路径
}
},
"game": {
"bindAddress": "0.0.0.0", //监听(所有)IP地址 0.0.0.0
"accessAddress": "127.0.0.1", // 访问(本地)IP地址 127.0.0.1
"bindPort": 22102, //监听端口 443
"accessPort": 0, // 访问端口 自动返回
"loadEntitiesForPlayerRange": 100, //玩家加载范围 据说调低40左右 降低负载 对低性能机器很友好
"enableScriptInBigWorld": false, //大世界脚本 默认false 开启true
"enableConsole": true, //启用控制台 true
"gameOptions": {
"inventoryLimits": { //库存限制
"weapons": 2000, //武器最大数量
"relics": 2000, //圣遗物最大数量
"materials": 2000, //材料最大数量
"furniture": 2000, //家具最大数量
"all": 30000 //总库存最大数量
},
"avatarLimits": { //人物上限
"singlePlayerTeam": 4, //单人队伍共限制4人
"multiplayerTeam": 4 //联机队伍共限制4人
},
"sceneEntityLimit": 1000, //玩家生成怪物上限
"watchGachaConfig": false, //监控Gacha配置修改
"enableShopItems": true, //商店开关:true
"staminaUsage": true, //体力条开关:true
"energyUsage": false, //元素充能开关:false
"resinOptions": { //树脂选项
"resinUsage": false, //树脂使用开关:false
"cap": 160, //树脂上限160
"rechargeTime": 480 //补给树脂间隔时间
},
"rates": { //爆率
"adventureExp": 1.0, //冒险EXP 1.0
"mora": 1.0, //摩拉 1.0
"leyLines": 1.0 //地脉 1.0
}
},
"joinOptions": {
"welcomeEmotes": [ //欢迎表情
2007,
1002,
4010
],
"welcomeMessage": "Welcome to a Grasscutter server.", //欢迎消息
"welcomeMail": { // 欢迎游戏
"title": "Welcome to Grasscutter!", //游戏标题
"content": "(//邮箱内容//)Hi there!\r\nFirst of all, welcome to Grasscutter. If you have any issues, please let us know so that Lawnmower can help you! \r\n\r\nCheck out our:\r\n\u003ctype\u003d\"browser\" text\u003d\"Discord\" href\u003d\"https://discord.gg/T5vZU6UyeG\"/\u003e\n",
"sender": "Lawnmower", //发件人署名
"items": [ //发送物品
{
"itemId": 13509, //id[武器] 13509 雾切之回光
"itemCount": 1, //给予数量
"itemLevel": 1 //给予等级
},
{
"itemId": 201, //id[物品] 原石
"itemCount": 99999, //给予数量
"itemLevel": 1 //给予等级
}
]
}
},
"serverAccount": { //服务器帐户好友设置
"avatarId": 10000007, //人物ID
"nameCardId": 210001, //名片ID
"adventureRank": 1, //冒险等级
"worldLevel": 0, //世界等级
"nickName": "Server", //昵称
"signature": "Welcome to Grasscutter!" //签名
}
},
"dispatch": {
"regions": [ //服务器列表区域
{
"Name":"Grasscutter",//名称
"Title":"Grasscutter", //标题
"Ip":"127.0.0.1", //IP地址默认本地127.0.0.1
"Port":"22102" //game.bindPort 22102 端口
},
{
"Name":"Grasscutters",//名称
"Title":"Grasscutter",//标题
"Ip":"127.0.0.1",//IP地址默认本地127.0.0.1
"Port":"22102"//game.bindPort 22102 端口
},
],
"defaultName": "Grasscutters" //默认加载Grasscutters 名称服务器
}
},
"version": 3 //版本 3
}

测试和维护

创建账号

在完成服务端搭建后,需要使用文末的account指令在控制台创建账号才可以登录,当然您也可以选择更改配置文件,允许不存在的账号自动注册(一般不建议开通)。创建账号方法如下,登录的密码在游戏端随便填即可:
语法格式:account create [name] [uid]
使用示例:account create zaneliu 10000

登录小技巧

进游戏之后,请务必尽快关闭代理;长时间开通代理,流量全部走的服务器,可能会有产生高额账单的风险!

1.为了避免大量占用服务器资源,在开启代理前,请先打开游戏客户端检查并完成更新
2.确保更新完毕后开启代理,前往开始-设置-网络和Internet-代理进行设置,服务器/端口按照自己所需要连接的服务端配置填写,关闭请勿将代理服务器用于本地(Intranet)地址,清空请勿对以下条目开头的地址使用代理服务器编辑框的内容,填写完后点击保存,开启代理。为了节省服务器资源之后还要关闭代理,所以开启代理后暂时不要关闭设置的页面。
3.代理开启成功后,启动客户端,使用创建好的用户名(密码随便填)即可登录,登录进入白屏加载页面后即可关闭代理。

4.无论大陆官服还是国际服,开通代理后登录页面标题一定是HOYOVERSE。如果是登录标题页面显示是miHoYo代表代理未设置成功。
5.代理设置成功后国际服登录页面是不会出现四个官方服务器的(America Europe Asia TW, HK, MO),正常是不会出现选择服务器的页面(如果只有一个GenshinTJ服务器是正常的)否则,说明代理未设置成功
6.Windows如果无法使用系统代理,请尝试使用云盘中的米哈游代理转向软件(易语言开发,报毒属于正常现象)

修改卡池

如想使用全卡池,可直接将网盘中./服务端/全UP池文件/Banners.json覆盖掉服务端文件夹中的.\data\Banners.json

卡池配置文件为.\data\Banners.json,如果需要自行调整,请展开下方收缩框
卡池配置文件参数

🔴卡池开启太多可能会导致报错,建议修改完毕后使用JSON格式化校验工具检查语法是否正确。修改后需要重启服务端才会生效!

  • gachaType=200,scheduleId=893的为常驻池
  • gachaType=301,scheduleId=903的为角色 UP 池 (多 UP: 增加gachaType为302,303,304...的成员即可)
  • gachaType=400,scheduleId=913的为武器 UP 池
    多卡池:增加gachaType为非以上四个值的成员即可,注意客户端只识别以上四个gachaType值,添加的其他卡池不会显示类型
    上文提供的整合包默认为万达桃三UP及前两者专武(专武封面为前者,是客户端内置资源,无法修改)
  • rateUpItems1为UP五星,rateUpItems2为UP四星,对应id在Handbook_CHS.txt中可以找到
    需修改prefabPath previewPrefabPath titlePath中的A0**为对应的卡池id(在卡池顺序.xlsx<span> </span>中)
  • costItem为抽卡耗费的货币名称,223为纠缠之缘,224为相遇之缘(修改可能会引发错误)
  • sortId为卡池排序,越大越靠前
  • beginTime endTime为卡池开始/结束的10位时间戳
  • softPity最少几次出,hardPity最多几次出,eventChance歪的概率%,如果没有这三项参数可以自行添加
  • bannerTypeSTANDARD表示常驻池,EVENT表示角色UP池,WEAPON表示武器UP池(这个参数是不生效的)

OTA升级

OTA升级文件在.服务端文件夹下,在操作前请务必备份好原来的数据。

下载上文资源备份站点内文件ota-grasscutter-dev#xxx.zip,解压后可以直接覆盖原完整包!若跨版本更新您可能需要下载全量包(full 开头)或者前往项目地址补齐资源文件。[/scode]

(注意:有的版本可能需要同步更新相关资源文件,会打包上传,全部覆盖即可)

数据库鉴权【重要】

MongoDB数据库默认无需密码也可访问并可以修改所有数据,故如果服务器搭建在公网,为保证数据安全,请进行以下操作

数据库鉴权

1.首先,需要设置管理员,打开命令提示符窗口,运行mongo.exe

mongo.exe

2.切换到admin数据库

use admin

3.创建一个有权限管理任何数据库的用户,其中yourusername yourpassword请替换为你欲创建的用户名和密码

db.createUser({user:"yourusername",pwd:"yourpassword",roles:[{role:"root",db:"admin"}]})

4.设置管理员用户后,开启鉴权。打开命令提示符窗口,输入mongod.cfg来编辑数据库配置文件,取消掉security的注释并修改为

security:   authorization: enabled

5.保存后,使用net stop Mongodb net start Mongodb命令重启数据库

net stop Mongodb
net start Mongodb

6.管理员用户调整完成后,需要更新config.json文件的connectionUri参数,格式mongodb://yourusername:yourpassword@host:port

Linux系统搭建教程

1.服务端准备

教程示例的操作系统是Debian 11.1,推荐使用建议Ubuntu或Debain操作系统。

服务端Grasscutter文件夹下的目录结构如下所示,想要完成配置需要先去Grasscutter仓库下载稳定版本,只取data keys grasscutter-x.x.x.jarkeystore.p12这四个文件。resources文件夹则我们手动配置,已经有现成resources文件Grasscutter_Resources,我们下载这个项目,将其下的Resources将其重命名为resources就可以了。其次就是从Grasscutter_Resources下载的Resources文件夹下的BinOutput可以删掉,然后我们自己补上这个文件仓库地址为gi-bin-output将该仓库下的2.5.52/Data/_BinOutput下载到本地后重命名为BinOutput并放入Grasscutter文件夹中的resources中即可。

服务端目录结构:

.
├── data
├── keys
├── grasscutter-x.x.x.jar
├── keystore.p12
└── resources
    ├── BinOutput
    ├── ExcelBinOutput
    ├── Readable
    ├── Scripts
    ├── Subtitle
    └── TextMap

(🔴注意:在Grasscutter仓库中下载的是发布版本,grasscutter-x.x.x.jarSource code (zip)。如果无法配置,也可以下载分享的文件,所需要的文件都是一样的)

2.Debian11环境配置

以下操作均需要管理员权限,登录终端后先运行sudo -i命令
1.更新系统依赖及部署常见软件包

apt update -y && apt upgrade -y && apt-get install -y gnupg sudo net-tools vim nano tar zip unzip p7zip-full wget curl git screen htop nload lsof telnet debian-keyring debian-archive-keyring apt-transport-https

2.安装Java17

apt install openjdk-17-jre openjdk-17-jdk

3.安装MongoDB数据库

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt-get update
apt install -y mongodb-org
systemctl enable mongod && systemctl start mongod

4.安装Mitmproxy

pip3 install mitmproxy

5.安装Supervisor

sudo apt-get install supervisor

3.服务端配置

1.将刚才处理好的压缩包上传到/root/目录下(也可以直接使用上文提供的压缩包full-grasscutter-Release-x.x.x),然后运行命令解压zip文件,打开/root/Grasscutter/目录,运行grasscutter-x.x.x.jar文件
(🔴注意:建议这一步在终端操作,如果是使用文中已经配好的文件,可以直接改config.json文件的参数。🟠运行和解压时请注意后面的版本号,按照实际的填写)

unzip Grasscutter.zip
cd Grasscutter/
java -jar grasscutter-1.1.0.jar

# 需要注意的是这里输入chs,即简体中文回车即可
The following languages mappings are available, please select one: [default: EN]
>   fr  jp  th  cht en  id  
>   ru  kr  pt  chs es  vi  
>   de  

Your choice:[EN] chs

2.当页面提示Game Server started on port 22102,说明已经初始化成功,连续两次Ctrl+C结束运行即可。
此时在Grasscutter文件夹下已经多了一个config.json文件,需要使用vim config.json命令进行编辑。配置方法详见上文,与Windows配置方法基本一致,需要修改两处IP地址。

4.代理配置

在上文提供的文件full-grasscutter-Release-x.x.x.zip当中,有proxy.pyproxy_config.py的文件,需要在root目录下,新建名为Mitmproxy的文件夹,将proxy.pyproxy_config.py剪切过去,然后修改proxy_config.py文件的REMOTE_HOST参数,填写服务器公网IP即可。

# This can also be replaced with another IP address.
USE_SSL = True
REMOTE_HOST = "服务器公网IP"
REMOTE_PORT = 443


(🔴注意:云服务器一般需要在控制台设置安全组;请确保服务端端口TCP443 TCP54321 UDP22102已添加白名单,且均未被其他程序占用

5.启动设置

在环境配置的,刚才有安装Supervisor软件,需要使用Supervisor来管理服务,通过配置文件来控制服务端程序。
1.首先执行命令cd /etc/supervisor/conf.d/,然后在此目录下创建下边的两个文件。

yuanshen.conf

[program:yuanshen]
user=root
command=nohup java -jar grasscutter-1.1.0.jar &
autorstart=true
directory=/root/Grasscutter/
autorestart=true
startsecs=5
startretries=100
redirect_stderr=true
stdout_logfile=/root/Grasscutter/logs/log.txt
stderr_logfile=/root/Grasscutter/logs/err.txt

mitmproxy.conf

[program:mitmproxy]
user=root
command=mitmdump -s proxy.py --ssl-insecure --set block_global=false --listen-port 8080
autorstart=true
directory=/root/Mitmproxy/
autorestart=true
startsecs=5
startretries=100
redirect_stderr=true
stdout_logfile=/root/Mitmproxy/log.txt
stderr_logfile=/root/Mitmproxy/err.txt

2.在配置文件完毕后,就可以尝试启动服务了

supervisorctl reload # 服务重载
supervisorctl status # 查看状态

3.如果没有报错,一般就配置完毕了,之后需要客户端下载安装证书,具体和上文步骤一致

Linux系统Docker环境搭建


以下内容来自:Rain Kavik's Blog,教程搭建环境为CentOS7

第一步:准备阶段
确保您有一个Centos7服务器,或者虚拟机! 并且您的服务器已经连上了网络。
需要在您的服务器上部署Docker,如果您还有安装Docker请跟着我做
如果您已经安装Docker请直接跳到第二步

安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
挂载Docker镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker
yum install docker-ce docker-ce-cli containerd.io
启动Docker
systemctl start docker
设置开机自启
systemctl enable docker

第二步:关闭防火墙和selinux(非必要)
如果您是购买的服务器,请到服务商防火墙配置界面(如腾讯云),设置防火墙策略!!!
逐步开放8080端口、22102端口、444端口、9001端口
一、关闭防火墙
systemctl stop firewalld.service
设置防火墙开机不自启
systemctl disable firewalld.service
查看防火墙状态
firewall-cmd --state
二、关闭selinux
vi /etc/selinux/config
把SELINUX=enable
改成SELINUX=disabled
重启服务器
reboot
开机查看selinux状态(disable为关闭)
sestatus

第三步:开始部署服务器
一、拉取镜像
docker pull evendevil66/grasscutter
可以使用docker images 查看是否拉取成功
二、设置割草机主体(主体“Grasscutter”)
1.此步操作需要您手动完成,下载服务端,并解压到/root目录下
2.如果您已解压成功,使用 可以看到目录下已经多了 目录ls /rootfull-grasscutter-"version"
3.打开服务端目录下的 编辑里面的 默认是127.0.0.1 请更改为您服务器的IP地址(一共2处,都要更改)congfig.jsonaccessAddress
三、运行拉取的镜像
docker run -dit \-v /root/grasscutter:/var/grasscutter \-p 444:444 \-p 444:444/udp \-p 22102:22102 \-p 22102:22102/udp \-p 8080:8080 \-p8080:8080/udp \-p 9001:9001 \-p 9001:9001/udp \--name grasscutter \-v /sys/fs/cgroup:/sys/fs/cgroup \--restart always \--privileged=true evendevil66/grasscutter /usr/sbin/init
第二行命令 :为你的割草机存放目录,如果你上一步操作正确,这一步就不会报错/root/full-grasscutter-"version"

测试是否成功运行
在服务器内使用浏览器输入 即可查看运行状态"你的服务器IP地址"+端口号9001
列:我的服务器IP为 浏览器输入:192.168.0.1192.168.0.1:9001

第四步:进入割草机环境
docker exec -it grasscutter /bin/bash
supervisorctl
fg grasscutter
完成以上操作就可以开始创建账号了(与Windows相同)

控制台指令

游戏登录后默认有一个名为Server的好友,您可向其发送指令;也可以在服务端控制台窗口中输入指令;注意部分指令仅可在其中一种途径当中使用

🔴游戏内发送指令均需加上前缀!/
🟠请注意,使用/隔开的指令或变量代表两者皆可,使用<>括起来的变量为必填项,使用[]括起来的变量可省略(省略后如 UID则为你自己,数量/等级等则默认为1)
🟡指令只有使用下方permission指令授权后,相应用户才可使用

🟢示例:如要给用户UID 114514原石x1919810,查阅得知用法give|g [player] <itemId|itemName> [amount],原石 id201,则可直接控制台输入g 114514 201 1919810或者give 114514 201 1919810;或者游戏内聊天发送/g 114514 201 1919810或者!g 114514 201 1919810,直接给当前用户的话也可省略UID。如果您觉得很麻烦,可以直接使用指令生成工具来帮助您生成命令,可以点击下面的入口进入。

GrasscutterTools(在线生成)GrasscutterCommandGenerator(需下载使用)

关于各种物品id都在Handbook_CHS-x.x.x.txt,文本编辑器(推荐Visual Studio Code等,系统自带记事本无法完全搜索内容)打开后Ctrl+F即可搜索

命令列表

🔴以下指令列表不定时更新,有可能出现失效的情况,推荐前往官方文档查看详细的命令列表!

命令用法权限节点可用性注释
accountaccount <create/delete> <用户名> [uid] 仅服务端通过指定用户名和uid增删账户
broadcastbroadcast <消息内容>server.broadcast均可使用给所有玩家发送公告
coopcoop <目标uid>server.coop均可使用强制某位玩家进入指定玩家的多人世界
changescenechangescene <场景ID>player.changescene仅客户端切换到指定场景
clearclear <all/wp/art/mat> [UID]player.clearinv仅客户端删除所有未装备及未解锁的圣遗物(art)或武器(wp)或材料(mat)或者所有(all),包括五星
dropdrop <物品ID/物品名称> [数量]server.drop仅客户端在指定玩家周围掉落指定物品
enterdungeonenterdungeon <地牢ID>player.enterdungeon仅客户端进入某个地牢
givegive [uid] <物品ID/物品名称> [数量] [等级] [精炼等级]player.give均可使用给予指定玩家一定数量及等级的物品 (精炼等级仅适用于武器)
givechargivechar <角色ID> [等级]player.givechar均可使用给予指定玩家对应角色
giveartgiveart [uid] <圣遗物ID> <主属性ID> [<副属性ID>[,<次数>]]... [等级]player.giveart均可使用给予玩家指定属性的圣遗物
giveallgiveall [uid] [数量]player.giveall均可使用给予指定玩家全部物品
godmodegodmode [uid]player.godmode仅客户端保护你不受到任何伤害(依然会被击退)
healhealplayer.heal仅客户端治疗队伍中所有角色
helphelp [命令] 均可使用显示帮助或展示指定命令的帮助
joinjoin [多个角色id]player.join仅客户端强制入队角色,跟config.json中的avatarLimits有关(跟队内角色数量上限有关)。用法:join 10000021 10000022
kickkick server.kick均可使用从服务器中踢出指定玩家 (WIP)
killallkillall [uid] [场景ID]server.killall均可使用杀死指定玩家世界中所在或指定场景的全部生物
listlist 均可使用列出在线玩家
permissionpermission <add/remove> <权限节点>*均可使用添加或移除玩家的权限
positionposition 仅客户端获取当前坐标
removeremove [多个角色在队伍中的序号]player.remove仅客户端强制将某个角色从当前队伍中移除。例如remove 1 2表示将1号和2号角色移除
reloadreloadserver.reload均可使用重载服务器配置
resetconstresetconst [all]player.resetconstellation仅客户端重置当前角色的命座,重新登录即可生效
restartrestart 均可使用重启服务端
saysay <消息>server.sendmessage均可使用作为服务器发送消息给玩家
setfetterlevelsetfetterlevel <好感等级>player.setfetterlevel仅客户端设置当前角色的好感等级
setstatssetstats <属性> <数值>player.setstats仅客户端直接修改当前角色的面板
setworldlevelsetworldlevel <世界等级>player.setworldlevel仅客户端设置世界等级(重新登录即可生效)
spawnspawn <实体ID> [数量] [等级]server.spawn仅客户端在你周围生成实体
stopstopserver.stop均可使用停止服务器
talenttalent <天赋ID> <等级>player.settalent仅客户端设置当前角色的天赋等级
teleportteleport [@playerUid] [sceneId]player.teleport均可使用传送玩家到指定坐标
tpall player.tpall仅客户端传送多人世界中所有的玩家到自身地点
unlocktower player.tower仅客户端解锁深渊全部层
weatherweather <天气ID> <气候ID>player.weather仅客户端改变天气

常见问题

443端口占用,报错Make sure no other process is using port 443 and try again.

如下图报错表示443端口被占用,很多情况是VMWare占用,如果是服务器建议排查IIS和Nginx、Apache等;如确实无法解除占用请尝试修改config.json中的端口,同时修改proxy_config.py中的端口(注意:一般不建议修改,iOS客户端更改端口可能出现无法连接的问题!)

运行run.bat提示:系统找不到指定路径

出现该问题建议检查Java是否被正确的安装,如果在安装Java时修改了安装路径,则需编辑run.bat文件。请将set JAVA_EXE="Java安装路径"参数指向正确的Java路径

点击run.bat后出现Error: Unable to access jarfile grasscutter-x.x.x.jar

出现此类问题请优先排查运行权限,Windows环境可以以管理员身份运行,Linux环境请将权限更改为777

Java 版本不匹配,报错:this version of the Java Runtime only recognizes class file versions up to 52.0

类似于下图报错说明您安装的Java版本与核心需求不一致(或核心本身有问题)请自行更换适配的Java版本。如果没有修改run.bat,则默认使用的Java路径为C:\Program Files\Java\jdk-17.0.2\bin\java.exe,请检查路径是否被修改或者Java文件是否完整!

无法下载证书,访问mitm.it页面提示:If you can see this,traffic is not passing through mitmproxy.

出现下图的问题,则说明代理没有配置成功。
🔴如果您在服务端建议优先排查端口是否放行,云服务器一般需要在控制台设置安全组;请确保服务端端口TCP443 TCP54321 UDP22102已添加白名单,且均未被其他程序占用

🟠未设置代理:打开开始-设置-网络和Internet-代理进行设置,服务器/端口按照自己所需要连接的服务端配置填写,关闭请勿将代理服务器用于本地(Intranet)地址,清空请勿对以下条目开头的地址使用代理服务器编辑框的内容,填写完后点击保存,开启代理。
🟡如果设备中存在其他代理软件,可能会导致您设置的代理失效,请自行检查关闭
🟢需要访问http://mitm.it,而不是https://mitm.it。下载页面并未配置证书,故需要注意访问协议

排查不到端口是被什么进程占用了,怎么办?

出现上文443端口被占用的问题,🔴很多情况是VMWare占用,如果是服务器还需要排查IIS和Nginx、Apache等;

🟠如果排查不到,可以借助命令提示符运行netstat -aon|findstr "端口号",输出行末尾的数字为进程PID,可以使用指令关闭进程taskkill /t /f /pid 进程pid。如果出现错误:无法终止PID ** (属于PID **子进程)的进程。,则可以通过任务管理器直接结束任务

🟡确实无法解除占用请尝试修改config.json中的端口,同时修改proxy_config.py中的端口(注意:一般不建议修改,iOS客户端更改端口可能出现无法连接的问题!)


Linux如何解除端口占用

1.首先查看端口占用情况,使用命令sudo lsof -i:端口号来查看,例如443端口:sudo lsof -i:443

2.找到占用程序对应PID,使用命令sudo kill PID结束占用程序,例如返回的PID值为27,则输入:sudo kill 27

3.如果没有返回结果,就说明已经结束掉了,可以使用sudo lsof -i:端口号来检查是否已经结束

客户端页面提示网络错误:无法连接服务器,请检查网络设置。错误码:4206

该故障大部分原因为代理未正确配置,🔴目前给到的解决方案建议检查客户端代理和服务端是否正确配置,仍无法解决建议重启客户端和服务端代理(🟠可以通过其他设备设置代理,排查具体是客户端还是服务端的故障)


客户端登录页面提示网络错误/网络超时

确认配置无误可尝试修改config.jsonserver.http.accessAddressdispatchcnglobal.yuanshen.com然后进一遍游戏,如果能进去,就可以将此配置还原

客户端进入游戏后提示:连接超时

产生该问题通常有两种情况:
🔴端口未放行,云服务器一般需要在控制台设置安全组;请确保服务端端口TCP443 TCP54321 UDP22102已添加白名单,且均未被其他程序占用

🟢如果修改过配置文件的端口,请检查是否有漏掉的端口参数没有修改

点击登录后,转圈然后没反应

如果点击登录后服务端日志有成功登录的提示,关掉登录窗口即可进入游戏(手机端可能会出现该情况)
如仍无法进入游戏,请检查服务端代理是否正确运行,是否请尝试重启服务端代理

客户端页面提示502/4301/无法连接服务器

请检查代理设置,服务器IP和端口是否正确的填写。服务端代理程序是否正常运行,请自行排查。
如果客户端报错-9203,一般为代理问题,已知iOS使用小火箭会存在此问题,可尝试使用https解密生成并信任证书解决。

登录后检查更新失败和页面一直在检查更新

🔴如果代理日志中有mihoyo.com/hoyoverse.com子域的请求,但报拒绝连接等错误,可能是服务端网络问题导致无法连接米哈游服务器。

🟢如果客户端页面一直在检查更新,请尝试关闭代理正常进游戏一次后再连代理进入;检查服务端网络问题,如确实没问题请尝试重启代理端/更换代理端口/重启服务器

开启代理后还是登录了官服

设备有运行其他的代理,产生冲突导致代理无法生效。否则需要排查服务端是否在正确运行

客户端页面提示:目前网络繁忙,请稍后再试(404)

出现该问题则需要检查服务端是否正常开启,如果只开启代理,没有开启服务端可能会出现该故障

客户端进入游戏后页面白屏,提示:网络响应超时,是否重新登录?

如果数据库没有正确配置可能会出现类似问题,或者服务端使用了不兼容的Java版本。如果没有重要的数据,建议重新配置最新的服务端来解决该问题。如您有修改过数据库,请优先排查数据库
如果是在Linux上搭建出现该问题可能是由于grasscutter.jar假运行,或者权限不够。建议检查accessIp是否缺少参数,gamehttp参数都需要设置,否则会导致运行权限不足。

客户端页面提示网络错误:无法连接服务器,请检查网络设置。错误码:4201

请优先检查设备的网络是否正常,是否正确安装并信任证书。其次排查客户端代理设置,服务器IP和端口是否正确的填写。

客户端页面提示网络错误:无法连接服务器,请检查网络设置。错误码:4212 4214

🟡更新服务端后如果出现以上错误,可能是由于服务端与客户端版本不匹配的情况,请优先为客户端安装补丁文件方可解决

启动服务端之后控制台乱码

汉化端可能会出现该问题,右键编辑run.bat按如下代码框修改文中代码

@echo off
chcp 936
set JAVA_EXE="C:\Program Files\Java\jdk-17.0.2\bin\java.exe"
%JAVA_EXE% -jar grasscutter.jar
pause

无法连接到MongoDB数据库,报错:Exception in monitor thread while connecting to server localhost:27017

出现该问题是由于MongoDB没有正常运行,请启动MongoDB后再开启服务端。如果仍无法解决,建议重新安装MongoDB后运行服务端

如果报错内容为Exception in thread "main" com.mongodb.MongoTimeoutException:可以尝试在任务管理器-服务中手动启动MonggoDB服务后重新运行服务端

用Linux系统搭建,我自己在GitHub下载的,proxy.py怎么配置?

请在/root/Mitmproxy目录下创建proxy.pyproxy_config.py,具体请参考下文

proxy.py

from mitmproxy import http
from proxy_config import USE_SSL
from proxy_config import REMOTE_HOST
from proxy_config import REMOTE_PORT

class MlgmXyysd_Genshin_Impact_Proxy:

    LIST_DOMAINS = [
        "api-os-takumi.mihoyo.com",
        "hk4e-api-os-static.mihoyo.com",
        "hk4e-sdk-os.mihoyo.com",
        "dispatchosglobal.yuanshen.com",
        "osusadispatch.yuanshen.com",
        "account.mihoyo.com",
        "log-upload-os.mihoyo.com",
        "dispatchcntest.yuanshen.com",
        "devlog-upload.mihoyo.com",
        "webstatic.mihoyo.com",
        "log-upload.mihoyo.com",
        "hk4e-sdk.mihoyo.com",
        "api-beta-sdk.mihoyo.com",
        "api-beta-sdk-os.mihoyo.com",
        "cnbeta01dispatch.yuanshen.com",
        "dispatchcnglobal.yuanshen.com",
        "cnbeta02dispatch.yuanshen.com",
        "sdk-os-static.mihoyo.com",
        "webstatic-sea.mihoyo.com",
        "webstatic-sea.hoyoverse.com",
        "hk4e-sdk-os-static.hoyoverse.com",
        "sdk-os-static.hoyoverse.com",
        "api-account-os.hoyoverse.com",
        "hk4e-sdk-os.hoyoverse.com",
        "overseauspider.yuanshen.com",
        "gameapi-account.mihoyo.com",
        "minor-api.mihoyo.com",
        "public-data-api.mihoyo.com",
        "uspider.yuanshen.com",
        "sdk-static.mihoyo.com",
        "abtest-api-data-sg.hoyoverse.com",
        "log-upload-os.hoyoverse.com"
    ]

    def request(self, flow: http.HTTPFlow) -> None:
        if flow.request.host in self.LIST_DOMAINS:
            if USE_SSL:
                flow.request.scheme = "https"
            else:
                flow.request.scheme = "http"
            flow.request.host = REMOTE_HOST
            flow.request.port = REMOTE_PORT

addons = [
  MlgmXyysd_Genshin_Impact_Proxy()
]

proxy_config.py(需要根据服务器公网IP地址,自行修改REMOTE_HOST的参数)

# This can also be replaced with another IP address.
USE_SSL = True
REMOTE_HOST = "服务器公网IP"
REMOTE_PORT = 443

我需要一直开着代理吗?

在成功登录游戏并开门加载完后是可以关闭代理的,但如果想回到主菜单并重新登录则请重新打开代理!

温馨提醒:进游戏之后,请务必尽快关闭代理;长时间开通代理,流量全部走的服务器,可能会有产生高额账单的风险!

怎么下载非官方的mod组件?

可以在GameBanana论坛下载对应组件:

我想官服和私服切换玩,GenshinProxy项目提供的apk支持吗?

如果您希望既玩官服又玩私服,那就需要区分大陆官服和国际服。如果您账号本身就在国际服,那直接使用上文资源备份站点中的./genshin-impact-patched.apk安装包,就可以在首页自行选择国际官服和私服进行切换。

但如果您的游戏数据在大陆官服,那就意味着您的手机上可能需要安装两个原神。请谨慎清除数据和卸载,避免后续重新下载。

GenshinProxy项目提供的apk为什么打开直接闪退?报错:原神已停止运行

上文资源备份站点所提供的的安装包仅支持Android 9.0以上的设备。您的设备不满足该条件则无法使用。

但如果有Xposed环境请安装GenshinProxy-release.apk(需自行在GenshinProxy项目中下载)不支持EDXposed & 原版Xposed只支持LSPosed

对于2.8以及2.8.5(3.0)的特别说明

目前官方已经更新3.0版本,无需进行以下操作!

应该如何为客户端安装补丁?

解压下载的补丁包,把解压的补丁文件覆盖到游戏本体文件夹即可,示例如下
任何2.8.5X版本的客户端,都可以连接Grasscutter3.0的服务端

2.8.5(3.0)大陆官服【客户端+补丁】:

2.8大陆官服【仅补丁】:

2.8.5(3.0)国际服【客户端+补丁】:

2.8国际服【仅补丁】:

客户端页面提示网络错误:无法连接服务器,请检查网络设置。错误码:4212 4214

🟡更新服务端后如果出现以上错误,可能是由于服务端与客户端版本不匹配的情况,请优先为客户端安装补丁文件方可解决

对于2.8以及2.8.5(3.0)的服务端特别说明

解压下载的补丁包,把解压的补丁文件覆盖到游戏本体文件夹即可,示例如下
任何2.8.5X版本的客户端,都可以连接full-grasscutter-3.0-Beta.X的服务端

2.8.5(3.0)大陆官服【客户端+补丁】:

2.8大陆官服【仅补丁】:

注意:进入游戏后先召唤三个须弥角色再使用giveall命令


为什么覆盖补丁后,官服无法登录?

可能会出现密码一直提示错误的情况,后续客户端更新后,建议删除Genshin Impact game目录下的所有文件,重新下载游戏文件
如果您直接在启动器的设置中进行一键修复,可能进门后仍会报错文件不完整

版权声明

本文仅限于学习和公益教育之目的,任何使用行为请遵守相关法律法规及版权方授权协议,切勿用于违法和盈利用途;本文内容以及所提供的资源均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。

文件来源①

🔮以下内容均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。♻️您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。🔔本站非常重视著作权,假如侵犯您的权益,💌请附上相关证明材料发送邮件到 admin@fhf.tw。⭕️如果您已阅读并同意本站的《免责声明》,请在下方编辑框输入I Agree

访问码:

文件来源②

🔮以下内容均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。♻️您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。🔔本站非常重视著作权,假如侵犯您的权益,💌请附上相关证明材料发送邮件到 admin@fhf.tw。⭕️如果您已阅读并同意本站的《免责声明》,请在下方编辑框输入I Agree

访问码:

文件来源③

🔮以下内容均来自于互联网,服务端基于开源项目Grasscutter;版权争议与本站无关。♻️您必须在下载后的24小时之内,从您的电脑中彻底删除相关文件。🔔本站非常重视著作权,假如侵犯您的权益,💌请附上相关证明材料发送邮件到 admin@fhf.tw。⭕️如果您已阅读并同意本站的《免责声明》,请在下方编辑框输入I Agree

访问码:

本文部分原创内容来自以下作者,本站仅做内容的转载及补充。遇到问题请优先通过本文自行排查,请不要乱提issue。如果帮助到了大家请支持以下作者:(排名不区分先后,感谢大佬给予的帮助!)

站点图标访问入口知识共享许可
最后修改:2022 年 08 月 30 日
如果您本站的内容有帮助到您,并且在您条件允许的前提下,可以打赏支持本站,赞赏将用于服务器与网站维护费用,感谢您的支持!