Grasscutter 心得之【开设独立区服】

本文内容均为原创,意在学习交流,请勿用于非法用途,切记切记!

首先,感谢 @盐焗星球 @潇 @tanger 提供服务器用于测试。

如果你在阅读本文过程中遇到任何问题,或有更好的想法,可以加博主VX,方便更好的交流。

  • 关于如何调出客户端的选服界面

    打开 config.json 拖到最后,找到

    "dispatch": {
        "regions": [],
        "defaultName": "Grasscutter"
    }

    进行如下修改

    "dispatch": {
        "regions": [
            {
            "Name": "任意英文服务器名",
            "Title": "客户端选服界面所要显示的标题",
            "Ip": "IP地址",
            "Port": 端口(注意没有双引号哦)
            },
            {
            "Name": "任意英文服务器名(不能与上面的一样)",
            "Title": "客户端选服界面所要显示的标题",
            "Ip": "IP地址",
            "Port": 端口
            }
        ],
        "defaultName": "Grasscutter"
    }

    需要格外注意的是:

    1. regions 中的内容至少存在两项才可以调出客户端选服界面;
    2. 客户端所见区服进入后实际仍是同一个区。

接下来就是重头戏啦!

  • 关于如何设置独立区服

    还是打开 config.json 进行如下修改

    "server": {
        ……(省略部分内容)
        "collection": "server"
        },
        "game": {
        ……
        "collection": "game1"
        }
    }

    "game": {
        ……
        "bindPort": 22101
        ……
    }

    "regions": [
        {
        "Name": "game1",
        "Title": "一区",
        "Ip": "127.0.0.1",
        "Port": 22101
        },
        {
        "Name": "game2",
        "Title": "二区",
        "Ip": "127.0.0.1",
        "Port": 22102
        }
    ]

    将整个 Grasscutter 服务器所在的文件夹复制一份(为了节约空间,可以使用 mklink/ln 命令,这里不再展开),对新复制文件夹中的 config.json 作如下修改

    "game": {
        ……
        "collection": "game2"
    }

    "server": {
        ……
        "runMode": "GAME_ONLY",
        ……
    },
    "game": {
        ……
        "bindPort": 22102
        ……
    }

万事俱备,只欠东风!

在 Grasscutter 源码中打开 DatabaseManager.java 文件,找到
public static Datastore getAccountDatastore() {
	if(SERVER.runMode == ServerRunMode.GAME_ONLY) {
		return dispatchDatastore;
	} else {
		return gameDatastore;
	}
}
改为
public static Datastore getAccountDatastore() {
	return dispatchDatastore;
}
继续往下
if(SERVER.runMode == ServerRunMode.GAME_ONLY) {
	MongoClient dispatchMongoClient = MongoClients.create(DATABASE.server.connectionUri);
	……
}
改为
//if(SERVER.runMode == ServerRunMode.GAME_ONLY) {
	MongoClient dispatchMongoClient = MongoClients.create(DATABASE.server.connectionUri);
	……
//}
重新编译后替换上面两个文件夹中的 jar 程序,赶紧 run 一下看看效果!

本文仅针对单机架设而言,聪明的你肯定想到了将dispatchServer、dbServer、gameServer分开部署,具体怎么实现,留个课后作业!

posted @ 2022-07-10 00:12  aSaneMan  阅读(1565)  评论(1)    收藏  举报