本文转载于GenshinTJ - 荼蘼博客 (tomys.top)给自己留个备用坑,以备参考,自己看的。
本文档没有一句废话!错过任何一个字均可能导致搭建失败,请知悉
如您有联机需求,推荐点我购买腾讯云轻量服务器,新用户 168 一年配置足够 20 人同时在线
如果您没有基础的 IT 知识和 / 或利用搜索引擎的能力甚至不懂提问的艺术,请现在放弃搭建的想法并关闭此文档
此文档中所用到的文件均可在 荼蘼云盘 下载,云盘下载慢请避开晚高峰稍后再试或使用 国内分流 (由 @果 提供) 或加群去群文件下载
(123 网盘镜像被恶意举报至封禁,荼蘼云盘 暂时只提供美国单节点下载;欢迎大佬提交国内高速镜像)
分享文件说明
./服务端/环境
文件夹下为安装环境所用文件./服务端/卡池顺序.xlsx
卡池列表,用于修改卡池时参照 id./服务端/full-grasscutter-x-xxx_TomyJan.7z
服务端整合包,x 和 xxx 分别为分支和版本号./服务端/up-grasscutter-x-xxx_TomyJan.7z
服务端升级包,仅从我的整合包相邻版本升级才可用./服务端/GMHandbook_FullLang_Script-x.x.x.zip
游戏内各物品 (全语言) 与 id 的对照表及生成脚本./我的私服专用/ys_tj.cer
我的私服用的证书,玉女无瓜请忽略./我的私服专用/genshintj-ca-cert-module.zip
我的私服专用的 Android CA 证书 Magisk 模块,您可参照此模块制作您自己私服的模块./米哈游代理转向密码1.zip
用于在无法设置系统代理的 Windows 设备上设置代理./Handbook_CHS-x.x.x.txt
游戏内各物品 (简中) 与 id 的对照表./AlwaysTrustUserCerts.zip
用于信任用户证书的 Magisk 模块./genshin-impact-patched.apk
免 root 可玩私服的国际服客户端
本服务端支持 PC/iOS 端中国官服 / 国际服,Android 等其他客户端仅支持国际服
建议收藏此文档以便获取更新
部署服务端
环境要求
Windows x64 (建议 WS2016 + 最低 WS2012R2,过老版本不保证兼容性;Linux 自行解决:如果你真的有自信用 Linux 搭建我相信你用不着看这篇文档)
Java17 (其他版本)
MongoDB (建议安装时注意左下角,取消勾选 Compass,网络不好可能会卡进度,取消后可使用 Robo 3T 等工具来管理数据库;Win10 以下的系统只兼容 4.2 - 版本)
Python3.8+
Mitmproxy (本教程使用此工具演示,也可使用 Fiddler 等流量代理工具)
私服服务端 在上方 荼蘼云盘 下载,已经打包好,即点即用
7-zip 用于解压极限压缩的服务端(压缩后约 131MB,压缩前约 1.21GB)
确保服务端端口 TCP443
TCP54321
UDP22102
均未被其他程序占用;如服务端与客户端分开在两台机子,则还需确保后两个端口在防火墙白名单策略中
运行服务器
启动服务端
解压服务端,并进入 grasscutter
文件夹
如果您按照我的教程部署,直接双击 run.bat
即可运行服务端;如果安装了其他版本的 java 或者修改了安装位置,请自行修改此文件后再启动,启动前请确保 MongoDB
在运行中
启动后控制台无任何报错(即输出的日志全为 info 没有 warn 及以上),且最后输出 Game Server started on port 22102
字样即为启动成功,有报错请参照本文档最后一章处理
服务端不可直接关闭,需输入指令 stop 后再退出;若不小心关闭,在 任务管理器 中找到 Java 相关进程杀掉即可
启动代理
双击运行 proxy.bat
,如果您不希望其他主机连接到服务端,删除此脚本中的 --set block_global=false
即可;如果希望在其他端口运行代理,右键编辑此文件修改 54321
为你期望的端口即可,如果删除此参数则默认监听 8080
端口,不要使用常见端口避免被攻击,此端口即为客户端系统代理所用端口
代理可直接关闭窗口以停止运行
出现 Proxy server listening at http://*:54321
即为启动成功
注意,如果您的服务器性能过低,此代理程序可能会假死,手动重启即可
获取证书
前往服务端的 设置-网络-代理-手动设置代理
,设置为 127.0.0.1:54321
后,使用浏览器访问 http://mitm.it
并选择相应证书下载,此证书需要下发给客户端所在机器安装,注意服务器 IP 更换后需要重新下载安装证书
如果服务端和游戏都跑在本机,不用手动安装证书,代理会自动安装
注意:这一步服务端开启代理只是为了便于下载证书 (当然你也可以直接去这里复制 %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer
),下载完后请关闭服务端的系统代理,否则无法正常连接服务端
创建账号
需要使用文末的 account
指令在控制台创建账号才可以登录,当然你也可以根据下节更改配置从而允许不存在的账号自动注册
自定义配置
config.json
server.dispatch.bindAddress
server.game.bindAddress
为监听的本地地址,建议保持0.0.0.0
server.dispatch.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
items
,items
成员有物品 iditemId
数量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
为是否启用体力系统
其他不在此赘述
修改卡池
卡池配置文件为 .\data\Banners.json
,其中
gachaType=200,scheduleId=893
的为常驻池gachaType=301,scheduleId=903
的为角色 UP 池gachaType=302,scheduleId=903
的为武器 UP 池gachaType=400,scheduleId=913
的为角色 UP 池 2
多卡池:增加 gachaType
为非以上四个值的成员即可,注意客户端只识别以上四个 gachaType
值,添加的其他卡池不会显示类型
本站整合包默认为万达桃三 UP 及前两者专武 (专武封面为前者,是客户端内置资源,无法修改)
rateUpItems1
为 UP 五星,rateUpItems2
为 UP 四星,对应 id 在 Handbook_CHS.txt
中可以找到
需修改 prefabPath
previewPrefabPath
titlePath
中的 A0**
为对应的卡池 id(在 卡池顺序.xlsx
中)
costItem
为抽卡耗费的货币名称,223
为纠缠之缘,224
为相遇之缘(修改可能会引发 bug)
sortId
为卡池排序,越大越靠前
beginTime
endTime
为卡池开始 / 结束的 10 位时间戳
softPity
最少几次出 hardPity
最多几次出 eventChance
歪的概率 % ,如果没有这三个成员自己加上即可
bannerType
为 STANDARD
表示常驻池,EVENT
表示角色 UP 池,WEAPON
表示武器 UP 池 (这个参数貌似只是看的)
注意开启太多卡池会容易报错,修改完建议使用工具检查语法是否正确
更新服务端
只需 stop
服务端,替换 grasscutter.jar
后启动服务端即可,网盘将不定时更新经过测试的包体
网盘中 up 开头的 7z/jar 即为更新包,若跨版本更新您可能需要下载全量包 (full 开头) 或者前往项目地址补齐资源文件
连接服务器
首次连接需要安装证书
Windows 下载 并双击打开相应服务器的证书 -> 安装证书 -> 本地计算机 -> 放入下列…-> 浏览 -> 受信任的根证书颁发机构 -> 完成
Android 下载 pem 格式证书,root 并解锁 system 分区后手动复制到 /system/etc/security/cacerts
并重命名为 c8750f0d.0
即可 (如果安装多个私服的证书,依次把文件命名为 c8750f0d.1
c8750f0d.2
… 即可);如果不能解锁系统分区可参照网盘中我的私服专用的模块制作自己私服的 CA 证书模块,或者安装信任用户证书的模块后直接在 Android 系统设置中安装为用户证书即可
(待测试)无 root 的安卓可尝试直接下载安装用户证书 (分别安装 CA 和 WLAN 证书) 后使用网盘版本游戏客户端
iOS 下载证书后复制到手机并打开点击安装即可,安装完打开系统设置信任刚才安装的证书
其他操作系统不提供安装证书教程
之后直接如此操作即可进入
- 修改前先打开游戏客户端检查并完成更新
- Windows:前往
设置-网络-代理-手动设置代理
设置代理,服务器 / 端口 按照自己所要连接私服的服务端配置填写,关闭请勿将代理服务器用于本地地址
,清空请勿对以下条目...
编辑框的内容,填写完确定并开启代理,完成后暂时不要关闭页面
Android:前往系统设置-WLAN
设置当前连接 WiFi 的代理,或前往移动网络-APN
修改 APN 设置,修改前请自行备份避免出错,完成后暂时不要清后台
iOS:WiFi 类似于 Android,移动网络无法修改 APN - 修改完成后启动 国服官服 / 国际服客户端 ,用户名 + 密码 (密码随便填) 即可登录,登录后进入最后白屏加载界面即可关掉代理,务必尽快关闭代理:长时间代理,你流量全走服务器,你电脑和服务器都累,而且还可能会被服务商 ban 机!
每次登录都需要如此操作!开启代理再运行游戏便进入私服,不开启代理运行游戏就是官服
Tip:
- 如果使用的是 国服客户端,启动后有弹窗 (仅 Win) 且登录页面标题为
HOYOVERSE
而不是miHoYo
即代表成功连接私服;国际服客户端服务器选择界面如只有一个服务器 (默认为GenshinTJ
)(或者没出现服务器选择页面) 而不是 Asia 等四个则成功连接到私服 - Windows 如果无法使用系统代理,请尝试使用云盘中的 米哈游代理转向 软件 (易语言开发,报毒属正常现象)
常见问题
传送?
任意标点,类型选择钓鱼点,并点击确认即可传送至目标上空;传送后不会自动关闭地图,手动关闭地图即可看到;可以通过修改标点名称以传送到不同高度,缺省值 300
如何去金苹果?
眼睛稍微往上挪那么一内内看,金苹果地图没亮不用管,传就是了
尘歌壶
目前看起来去不了
角色 id
每个角色都有两个 id,长 id 100000xx
只用在 givec
命令中,短 id 10xx
用在其他各处;另外大部分角色各种 id 都是对应的,比如命星 id 为 11xx
,卡池标题和封面为 A0xx
控制台指令
游戏登陆后默认有一个名为 Server
的好友,此为游戏控制台,可向其发送指令;当然,你也可以在服务端控制台窗口中输入指令;注意部分指令仅可在其中一种途径使用
注意:
- 游戏内发送指令均需加上前缀
!
或/
- 请注意, 使用
|
隔开的指令 / 变量代表两者皆可,使用<>
括起来的变量必需,使用[]
括起来的变量可省略 (省略后如 UID 则为你自己,数量 / 等级等则为 1) - 指令只有使用下方
permission
指令授权后,相应用户才可使用
示例:如要给用户 UID 114514 原石 x1919810,查阅得知用法 give|g [player] <itemId|itemName> [amount]
,原石 id 201
,则可直接控制台输入 g 114514 201 1919810
/ give 114514 201 1919810
;或者游戏内聊天发送 /g 114514 201 1919810
/ !g 114514 201 1919810
,直接给当前用户的话也可省略 uid
也可使用 GrasscutterCommandGenerator (仅 Win) 或网页工具 GrasscutterTools 生成指令
以下指令列表不定时更新,可能不全,可能过时,请前往 官方文档 查看
关于各种 id 都在 Handbook_CHS-x.x.x.txt
, 文本编辑器 (推荐 VS Code
等,Win 自带记事本无法完全搜索内容) 打开后 Ctrl+F 即可搜索
命令 | 用法 | 权限节点 | 说明 |
---|---|---|---|
account | account <create|delete> < 用户名 > [uid] | 通过指定用户名和 uid 增删账户,仅服务端可用 | |
broadcast | b|broadcast <消息内容> | server.broadcast | 给所有玩家发送公告 |
coop | coop <uid> < 目标 uid> | server.coop | 强制某位玩家进入指定玩家的多人世界 |
changescene | scene|changescene <场景 ID> | player.changescene | 切换到指定场景,仅客户端可用 |
clear | clear <all|wp|art|mat> [UID] | player.clearinv | 删除所有未装备及未解锁的圣遗物 (art) 或武器 (wp) 或材料 (mat) 或者所有 (all), 包括五星,仅客户端可用 |
drop | d|drop <物品 ID | 物品名称> [数量] | server.drop | 在指定玩家周围掉落指定物品,仅客户端可用 |
enterdungeon | enterdungeon <地牢 ID> | player.enterdungeon | 进入某个地牢,仅客户端可用 |
give | g|give [uid] < 物品 ID | 物品名称 > [数量] [等级] [精炼等级] | player.give | 给予指定玩家一定数量及等级的物品 (精炼等级仅适用于武器) |
givechar | givec|givechar <uid> < 角色 ID> [等级] | player.givechar | 给予指定玩家对应角色 |
giveart | gart|giveart [uid] < 圣遗物 ID> < 主属性 ID> [< 副属性 ID>[,< 次数 >]]… [等级] | player.giveart | 给予玩家指定属性的圣遗物 |
giveall | givea|giveall [uid] [数量] | player.giveall | 给予指定玩家全部物品 |
godmode | godmode [uid] | player.godmode | 保护你不受到任何伤害 (依然会被击退),仅客户端可用 |
heal | h|heal | player.heal | 治疗队伍中所有角色,仅客户端可用 |
help | help [命令] | 均可使用 | 显示帮助或展示指定命令的帮助 |
kick | k|kick <uid> | server.kick | 从服务器中踢出指定玩家 (WIP) |
killall | killall [uid] [场景 ID] | server.killall | 杀死指定玩家世界中所在或指定场景的全部生物 |
list | list | 列出在线玩家 | |
permission | permission <add|remove> < 权限节点 > | * | 添加或移除玩家的权限 |
position | pos|position | 获取当前坐标,仅客户端可用 | |
reload | reload | server.reload | 重载服务器配置 |
resetconst | resetconst [all] | player.resetconstellation | 重置当前角色的命座,重新登录即可生效,仅客户端可用 |
restart | restart | 重启服务端 | |
say | say <uid> < 消息 > | server.sendmessage | 作为服务器发送消息给玩家 |
setfetterlevel | setfetterlvl|setfetterlevel <好感等级> | player.setfetterlevel | 设置当前角色的好感等级,仅客户端可用 |
setstats | stats|setstats <属性> < 数值 > | player.setstats | 直接修改当前角色的面板,仅客户端可用 |
setworldlevel | setworldlvl|setworldlevel <世界等级> | player.setworldlevel | 设置世界等级 (重新登录即可生效),仅客户端可用 |
spawn | spawn <实体 ID> [数量] [等级] | server.spawn | 在你周围生成实体,仅客户端可用 |
stop | stop | server.stop | 停止服务器 |
talent | talent <天赋 ID> < 等级 > | player.settalent | 设置当前角色的天赋等级,仅客户端可用 |
teleport | tp|teleport [@playerUid] <x> <y> <z> [sceneId] | player.teleport | 传送玩家到指定坐标 |
tpall | player.tpall | 传送多人世界中所有的玩家到自身地点,仅客户端可用 | |
unlocktower | player.tower | 解锁深渊全部层,仅客户端可用 | |
weather | w|weather <天气 ID> < 气候 ID> | player.weather | 改变天气,仅客户端可用 |
命令 | 用法 | 权限节点 | 说明 |
命令列表
常见故障
注意:如果您严格按照本教程部署连接,那么不应当出现任何错误,错误均为您没有正确配置导致,故此处仅稍微列出部分常见故障,不出意外的话以下这段又臭又长的文字基本帮不到你
部署服务器
服务端启动报错
如下图报错表示 443 端口被占用,请检查 (很多情况是 VMWare Web 服务器等 占用);如确实无法接触占用请尝试修改 config.json
中的端口,同时修改 proxy_config.py
中的端口
类似于下图报错说明你的 Java 版本与核心需求不一致 (或核心本身有问题),请自行更换适配 Java 版本或换核心
服务端下不了证书
没有正确配置代理;存在其他代理软件;打开的是 https
而不是 http
命令行窗口报错
自行百度 / 翻译解决啊问我干嘛问我也不带图我怎么知道你报什么错
端口被占用
cmd 运行以下指令查看占用端口的进程
netstat -aon|findstr "端口号"
输出行末的数字为进程 pid,使用以下指令杀掉进程
taskkill /t /f /pid 进程pid
如果杀不掉并且显示是 xx 的子进程的话,杀掉 xx 这个 pid 即可
连接服务器
4206 错误
此类错误大多数情况为代理未正确配置,可尝试
仔细检查代理端 / 服务端所有配置
重启代理端 / 重启服务器
开启代理后运行游戏,检查服务端和代理的日志,如果代理中
- 没有
mihoyo.com
/hoyoverse.com
子域的请求或者没刷新任何日志,则为客户端代理配置错误 - 有
mihoyo.com
/hoyoverse.com
子域的请求,但报TLS handshake failed
,则为客户端未安装对应服务端的证书,或服务端不能连接到相应域名 - 有
mihoyo.com
/hoyoverse.com
子域的请求,但报拒绝连接等错误,可能是服务端网络问题导致无法连接米哈游服务器
如果代理没有报错,则应为服务端问题,检查服务端配置或者更新服务端
如仍无法解决,可尝试以下操作:
- 关闭代理正常启动游戏检查更新完后再次开代理进入游戏
- 修改
config.json
中server.dispatch.accessAddress
为dispatchcnglobal.yuanshen.com
另外,据经验此问题可能是 凉心云 的锅,建议跑路去 良心云 吧
如仍无法解决请去烧一炷香把,虔诚点儿
登陆账号提示网络错误 / 网络超时
确认配置无误可尝试修改 config.json
中 server.dispatch.accessAddress
为 dispatchcnglobal.yuanshen.com
然后进一遍游戏,如果能进去,就可以将此配置还原
点击登录转圈然后没反应
如果点击后服务端日志有成功登录的提示,关掉登录窗口即可进入游戏 (手机版特供 bug)
如无,请检查服务端代理是否正确运行,是否假死 (尝试重启)
502 / 4301 / 无法连接服务器
绝对是你没正确配置,自行检查
登陆后检查更新失败
如果代理日志中有 mihoyo.com
/ hoyoverse.com
子域的请求,但报拒绝连接等错误,可能是服务端网络问题导致无法连接米哈游服务器
开启代理后还是登录了官服
有其他代理冲突;服务端没有正确运行
4201
检查是否正确安装并信任证书
-9203
一般为代理问题,已知 iOS 使用小火箭会存在此问题
卡检查更新
尝试正常进游戏一次后再连代理进;检查服务端网络问题,如确实没问题请尝试重启代理端 / 更换代理端口 / 重启服务器
进门后连接超时
放通 UDP 22102 。。。或者你眼瞎只改了一个 ip。。。
进门白屏
你乱改数据库改出问题了,或者服务端系统有什么大病不兼容 Java
关于
版权声明
本文转载于GenshinTJ - 荼蘼博客 (tomys.top)给自己留个备用坑,以备参考,自己看的。
本私服端基于开源项目 Grasscutter ,请不要乱提 issue
本文档部分内容基于 Grasscutter Wiki 、 虚之亚克洛 OTOOBLOG 及 虚冇的避风港
任何使用行为请遵守相关法律法规及版权方授权协议
Comments NOTHING