本文仅供学习交流,严禁用于商业用途,侵权联系或评论我删除

Rain Kavik's Blog

Grasscutter-Linux服务端搭建

Grasscutter-常见问题

RainKavik-Drive(国内网盘)

OneDrive(备用网盘)

解压密码均为:rainkavik.com

服务端安装

准备工作:

本文使用的是2.8的服务端进行搭建示范(支持三端),以下所有文件都能在我的个人网盘找到。

如果你是小白,请在进行环境安装之前,重启一次电脑,把后台奇奇怪怪的软件关掉(新服务器忽略)。

碰到问题请转到 Grasscutter-常见问题

服务器(本地)环境文件(所有服务端通用):

文件下载路径:RainKavik-Drive(国内网盘)/环境及工具

1.网盘路径下有两个 mongodb,根据自己的系统版本下载对应版本。
2.“mitmproxy”软件的作用是使用证书连接服务器(如果只是打算在 WindowsAndroid两端进行游玩,可以选择不进行安装,IOS必须要安装该软件)。
3.MongoDB安装时,“Install MongoDB Compass(数据库管理)”选项建议取消勾选,加快安装速度;可以不取消。
4.以上所有软件安装位置和配置都是用默认配置和默认路径安装即可。

服务端下载:

文件下载路径:RainKavik-Drive(国内网盘)/服务端和客户端/2.8

完整服务端:full-grasscutter-dev-xxx.zip

升级包:ota-grasscutter-dev-xxx.zip

小白直接下full开头的完整包即可(最新核心不支持IOS,注意区分版本),下载解压至常用位置。

运行服务端:

解压完成,得到以下文件:

proxy.bat如果你没有安装mitm,无需启动(原因看最上面环境那里)

出现 Proxy server listening at http://*:54321 即为启动成功

proxy.bat启动成功示例图

修改config.json(本地运行跳过,服务器和局域网必须更改)

这里只写一些简单项,更详细的配置修改我会放在文末。

推荐使用 网盘/环境及工具/可选安装/npp.8.4.2(配置文件编辑).exe打开,记事本也可以。

必改:"accessAddress": "127.0.0.1"

必改:"accessAddress": "127.0.0.1"

config里面有两个 127.0.0.1,都需要改成你的服务器公网IP或局域网IPv4地址。

IPv4地址获取:任务管理器-性能-以太网(WIFI)-右下角就显示

修改完成保存关闭

注意:如果你的 config.json有中文字体,需要把编码改为 AMSI格式

启动 run.bat

显示 服务器已在端口443上启动游戏服务器已在端口22102上启动即可开服完整,显示其他请看常见问题。

run.bat启动成功示例图

放行端口(本地和局域网跳过此步)

登录你的服务器管理后台-防火墙-添加防火墙规则

TCP443(Windows和Android免证书登录端口)

UDP22102(游戏数据交互)

TCP54321(证书连接端口)

注意:有个别服务器可能还需要在系统界面防火墙放行端口。

WIN+R打开运行,输入 wf.msc,在入站规则选项最右侧,新建规则-端口,添加以上三个端口。

出站规则不需要更改,默认全开。

完成以上,服务端安装运行到此结束,接下来是客户端安装教程。

客户端安装

客户端下载

自行从官网下载客户端本体。(2.8.5自行查看频道或者dc内的链接)

补丁下载:网盘/服务端和客户端/Windows补丁

注意:必须下载对应版本的补丁包,2.8=2.8!

下载完成后打开解压至 YuanShen_data客户端文件夹,提示覆盖即可完成补丁升级操作。

补丁升级示例

Windows连接服务器:

这里一共提供两种方法,任选其一(小白推荐第一种)。

Genshin代理助手(无需安装 mitmproxy)

下载地址:网盘/代理软件/Genshin代理助手.zip

地址:本机搭建填写 127.0.01 服务器搭建填写 服务器公网IP 端口 443

填写完成-启动代理

mitmproxy证书

1.服务器运行 proxy.bat

启动成功示例图请看上面

2.设置代理

服务器打开 设置-网络和lnternet-代理-手动设置代理服务器

填写 127.0.0.1 端口 54321

保存

  1. 证书下载

挂好代理以后用系统自带浏览器打 http://mitm.it ,选择你系统的证书进行下载 (绿色按钮)

注意:服务器 IP 更换后需要重新下载安装证书!

如果成功挂上代理,应该是如下图所示:

如果提示:"If you can see this, traffic is not passing through mitmproxy." 则说明代理没有成功挂上。

下载完成后记得关闭服务器的系统代理!

4.证书发送

把你下载的证书通过复制粘贴的方式(仅使用Windows的远程桌面有效)粘贴到你的本机。

当然,其他方法都可以,因为IOS也需要证书,所以想IOS游玩的话,这一步是没办法跳过的

5.证书信任

双击打开下载的证书 -> 安装证书 -> 本地计算机 -> 将所有的证书都放入下列储存-> 浏览 -> 受信任的根证书颁发机构 -> 完成
如要求密码直接留空白即可!

客户端连接

双击打开 YuanShen.exe,启动客户端

使用 Genshin代理助手,登录界面为国际服

使用 mitmproxy证书,登录界面为国服

在服务器 run.bat运行窗口输入以下语法进行账户注册

语法:account create 登录账号 UID
例如:account create rainkavik 10000

返回客户端输入你注册的账号,密码可随便填

进到游戏内,立即关闭代理 :长时间代理,你流量全走服务器,你电脑和服务器都累,而且还可能会被服务商 ban 机!

其他

config.json,请不要直接复制使用,作者Macye

{
  "folderStructure": {
    "resources": "./resources/",  //资源
    "data": "./data/", // 数据配置
    "packets": "./packets/", //数据包
    "scripts": "./resources/Scripts/", //资源脚本
    "plugins": "./plugins/" //插件目录
  },
  "databaseInfo": {
    "server": {
      "connectionUri": "mongodb://localhost:27017", //MongDB 服务器数据库
      "collection": "grasscutter" //MongDB数据表:默认grasscutter
    },
    "game": {
      "connectionUri": "mongodb://localhost:27017", //MongDB 服务器数据库
      "collection": "grasscutter" //MongDB数据表:默认grasscutter
    }
  },
  "language": {
    "language": "zh_CN", //当前本地语言chs
    "fallback": "en_US", //备用回退语言en
    "document": "EN" //文件语言 默认EN 可选CHS CHT 例:"document": "CHS"
  },
  "account": {
    "autoCreate": false, //登录任意账户自动创建账户 默认关闭 开启例: "autoCreate": true,
    "EXPERIMENTAL_RealPassword": false, //自动创建账户时候固定密码不再是随意密码登录(4benj哥哥写的感觉不好用)
    "defaultPermissions": [], //默认的权限组 可选例: "defaultPermissions": [player.*,server.*],
    "maxPlayer": -1 // 服务器在线最大人数 -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
}

修改卡池

如想使用全卡池,可直接将网盘中 ./原神私服/服务端/全UP池文件/Banners.json覆盖掉服务端文件夹中(前面解压的)的 .\data\Banners.json

卡池配置文件为 .\data\Banners.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 为相遇之缘(修改可能会引发 bug)

sortId 为卡池排序,越大越靠前

beginTime endTime 为卡池开始 / 结束的 10 位时间戳

softPity 最少几次出 hardPity 最多几次出 eventChance 歪的概率 % ,如果没有这三个成员自己加上即可

bannerTypeSTANDARD 表示常驻池,EVENT 表示角色 UP 池,WEAPON 表示武器 UP 池 (这个参数貌似只是看的)

注意开启太多卡池会容易报错,修改完建议使用工具检查语法是否正确

数据库鉴权(数据库加密)

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

设置管理员

打开 cmd, 运行

mongo.exe

切换到 admin 数据库

use admin

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

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

开启鉴权

打开 cmd, 输入 mongod.cfg 来编辑数据库配置文件

取消掉 security 的注释并修改为

security:   authorization: enabled

保存后,使用 net stop Mongodb net start Mongodb 重启数据库即可

注意,如此修改后还需要修改 config 中的数据库配置 connectionUri , 形如 mongodb://uname:[email protected]:port

游戏指令

推荐使用 Grasscutter Tools工具箱 (仅 Win) 或 GrasscutterTools(网页版) 等生成指令

游戏登陆后默认有一个名为 Server 的好友,此为游戏控制台,可向其发送指令

游戏内 Server好友输入示例:/give all

run.bat运行窗口输入示例:give @10001 all

更多指令请使用 GrasscutterTools工具箱查看

如果你是手机党玩家,不清楚指令,游玩别人的服务器,这里推荐两条指令

1.获得所有物品 /give all

2.获取毕业圣遗物 /give 76524 lv20 10001 999002 999001 201062,100 201091,100 989001,2 301241,120

传送?

用鱼钩(最后一个图标)在地图上标记一个点位并点击确认即可传送至目标上空;传送后不会自动关闭地图,手动关闭地图即可看到

如何去金苹果?

右下角点击切换地图选项,选择金苹果群岛,金苹果地图没亮不用管,传就是了。

角色 id

每个角色都有两个 id,长 id 100000xx 只用在 givec 命令中,短 id 10xx 用在其他各处;另外大部分角色各种 id 都是对应的,比如命星 id 为 11xx ,卡池标题和封面为 A0xx

OTA升级注意事项

旧服务端可能不支持该功能,请前往网盘更新!

如果你是刚刚安装的服务端,请直接无视这一部分。

OTA升级文件下载地址在RainKavik-Drive中,请根据提示下载指定文件以及按照指定步骤操作!

OTA内容均可还原,即使是被覆盖了您也可以通过旧文件覆盖还原回去!

OTA升级 · 更新服务端

下载网盘内 ota-grasscutter-dev#xxx_RainKavik.zip,解压后直接覆盖原完整包即可!

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

若跨版本更新您可能需要下载全量包 (full 开头) 或者前往项目地址补齐资源文件

问题解答/取得支持

QQ频道二维码

If the link to join the group does not work, please send an email to contact

关于

本服务端基于开源项目 Grasscutter

本文档部分内容补充来自 Grasscutter Wiki(服务端内核) , 虚之亚克洛 OTOOBLOG(OTA升级部分),TomyJan’s BLOG(主要文章架构)。

其他方式的视频教程敬请期待!同时欢迎提交安卓录屏教程素材,谢谢。

Last modification:August 7, 2022
嘿嘿,都看完这篇文章了,给点赞赏呗