本文章仅供个人使用,这个是我的一个学习docker的项目笔记
原神启动
grasscutter割草机官方项目地址:https://github.com/Grasscutters/Grasscutter
官方 Wiki 文档:https://github.com/Grasscutters/Grasscutter/wiki
安装docker
开篇我们来介绍一下我们搭建元神私服所要采用的大工具,我们后面的项目都是基于此进行部署的】
什么是docker?
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。
Docker使用沙箱机制,容器之间不会有任何接口。它基于轻量级虚拟化技术,整个项目基于Go语言开发,并采用了Apache 2.0协议。Docker可以将应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源。
通过容器,可以实现方便快速并且与平台解耦的自动化部署方式,无论部署时的环境如何,容器中的应用程序都会运行在同一种环境下。Docker包括镜像、容器、仓库,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是web应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。
如需更多与Docker有关的信息,建议访问Docker官网进行了解。
docker的一些基础命令
#docker pull 镜像名:tag
# 拉取nginx最新镜像
docker pull nginx:latest
#查看镜像
docker images
# 运行nginx容器 --name 指定容器名 -v 指定映射关系 -d 后台运行容器 -it 标准输入并且打开终端 容器要混行的时候必须要给他指定一个初始命令才行,要不然运行不起来
docker run -dit --name mynginx -v /root/html:/usr/share/nginx/html nginx:latest
# 删除镜像
docker rmi 镜像名
# 删除所有镜像
docker rmi -f `docker images -qa`
#删除容器
docker ps #查看到你想要删除的容器id
docker rm -f 容器id # -f 指定强制删除 我不管你运行不运行 我是管理员,我让你死你就得死。
docker rm -f `docker ps -qa` #删除所有的容器不管你死活。
# 从主机拷贝文件到容器里面
docker ps # 查看容器id
docker cp [文件] [容器名:/目录] #拷贝本机文件内容到容器内部
# 查看容器的内部ip
docker ps
docker inspect [容器id]
我们的原神私服采用的是docker部署的,docker部署的好处就是隔离性很强,各个容器之间互不影响。docker是基于软件层面的隔离,虚拟机是基于硬件物理层面的隔离,但是一台服务器上面只能运行一个操作系统,但是可以运行无数个docker容器,容器里面可以放不同的服务,游戏私服,网盘,个人博客,靶场都行。这就是容器的好处。
话不多说,我们直接上代码安装docker吧
[root@docker-server ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #获取docker-ce源
[root@docker-server ~]# yum install docker-ce -y #安装docker-ce
[root@docker-server ~]# systemctl enable --now docker #开机自启动
割草机环境安装
我们下载的是github上面开源的割草机服务端
然后官方文档说需要两个开发环境一个是mongodb,一个是java
所以我们现在开始安装这两个环境同样是用docker的形式拉去镜像然后进行部署,好了,话不多说,我们直接上源码。
安装mongodb
docker pull mongo # 拉取MongoDB镜像,默认拉取的是最新版
mkdir -p /mydocker/mongodb/data #创建数据目录
# -it指定终端指定标准输入 --name 容器名 -v指定映射目录
docker run -itd --name mongodb -v /mydocker/mongodb/data:/data/db mongo
安装jdk17
这边我们安装grasscutter割草机,这个割草机同样是服务器运行环境,首先我们要先拉取python镜像,然后在python上面运行割草机grasscutter,然后在里面我们安装jdk17的环境,后面有用,暂时还用不到
docker pull python
docker run -itd --name grasscutter -p 22102:22102/udp -p 444:444/tcp python
docker ps # 查看容器运行情况
此处创建容器时映射的 22102 和 444 端口,是为了后续搭建 Grasscutter 私服保留的。
22102(UDP)是游戏服务器(GameServer)端口,用来处理一些传送、伤害数值计算等信息,如果是在服务器部署的话记得在安全组放开这个端口的 UDP 协议,防止出现 4206 错误无法进入游戏。我们需要放行22102的服务器端口
iptables -A INPUT -p udp --dport 22102 -j ACCEPT
444 (TCP) 是用来处理登录、游戏更新的端口 (DispatchServer),默认的 443 大概率被占用,可以更换成自己喜欢的,本文使用 444。
iptables -A INPUT -p tcp --dport 444 -j ACCEPT
进入容器
docker exec -it grasscutter /bin/bash
#安装一些环境和工具
apt-get update #更新apt-get
apt-get install -y vim
apt-get install -y wget
# 安装jdk17
apt install openjdk-17-jdk -y
服务端部署
喜欢折腾的玩家看这里,如果不喜欢折腾我在请继续读下去,我在后面放了傻瓜包,一键部署。哈哈哈,来吧开始
折腾版
下载仓库文件
下载割草机 Grasscutter 仓库文件(Code -> Download ZIP):
https://github.com/Grasscutters/Grasscutter
git clone https://github.com/Grasscutters/Grasscutter
这边可能需要梯子,尽力而为吧,做不了就用傻瓜包来搞
这里建议将左上角 stable 分支改为 development 分支再下载,此分支更新频率高,包含更多大世界新特性
将文件放至服务器任意目录(如根目录 / Grasscutter)解压,进行下一步处理
下载 resources 资源文件
从另一个仓库下载资源:https://github.com/Koko-boya/Grasscutter_Resources
git clone https://github.com/Koko-boya/Grasscutter_Resources
mv Grasscutter_Resources /Grasscutter/resources
`
将文件夹改名为 resources,放入上个步骤的目录 / Grasscutter / 中。注意,原版割草机仓库中并不包含 resources 文件夹。
下载 jar 启动文件
我给到了你们三种方式的jar文件下载地址,任意选一个吧,选个下载速度快的,当然如果你是大佬,你也可以选择自己构建哈哈
①从自动构建下载 development 版本:
https://nightly.link/Grasscutters/Grasscutter/workflows/build/development/Grasscutter.zip
②从 releases 下载:https://github.com/Melledy/Grasscutter/releases
③stable 版本自动构建下载:
https://nightly.link/Grasscutters/Grasscutter/workflows/build/stable/Grasscutter.zip
④也可以自己尝试构建:https://github.com/Grasscutters/Grasscutter#Building
下载好了之后我们先把他导入到/root目录下
最终配置应该如以上 我标红的是必须要有的文件,其他都无所谓,可以删掉。然后用docker cp Grasscutter grasscutter:/Grasscutter
拷贝到docker容器里面,最后进入到docker容器里面
docker exec -it grasscutter /bin/bash
cd /Grasscutter
java -jar grasscutter-1.7.4.jar
root@genshin_grasscutter:/Grasscutter# java -jar grasscutter-1.7.4.jar
04:11:25 <INFO:Grasscutter> Loading Grasscutter...
04:11:25 <INFO:Grasscutter> 正在启动 Grasscutter...
04:11:25 <INFO:Grasscutter> 游戏版本:4.0.0
04:11:25 <INFO:Grasscutter> Grasscutter 版本:1.7.4-5ebad71e9
04:11:26 <INFO:ResourceLoader> 正在加载 resources...
04:11:35 <INFO:ResourceLoader> 完成加载 resources
04:11:36 <INFO:HttpServer> [Dispatch] Dispatch 服务器启动于 你的ip:666
04:11:36 <INFO:GameServer> Grasscutter 是免费开源软件,遵循 AGPL-3.0 license。
如果你是付费购买的,那你已经被骗了。
项目地址:https://github.com/Grasscutters/Grasscutter
04:11:36 <INFO:GameServer> 游戏服务器启动于 你的ip:22102
04:11:36 <INFO:Grasscutter> 加载完成!输入 "help" 查看命令列表
> account aaa 10001 #创建账号和密码
#如果出现如上 说明我们的割草机搭建成功了a
傻瓜包
这边我整合好了服务端的傻瓜包 直接导入你的割草机服务器里面就好了
地址如下:
整合包(3.1.5仅服务端):https://github.com/snoobi-seggs/nahida_seggs
服务端文件结构
Grasscutter
├── keystore.p12
├── grasscutter.jar
└── resources
├── BinOutput
├── ExcelBinOutput
├── Readable
├── Subtitle
└── TextMap
很显然我们在github上下载的一大堆没用的东西,我们按照我上面给的这个目录可以进行删减。
配置config文件
grasscuter文件的目录下的结构大概是这个样子的
接下来我们需要编辑一下config.json 配置文件
写什么呢?这边我也给到了你
把原本里面的文件删除然后copy新的文件进去即可,当然你们也可以来我的云服务器玩
{
"folderStructure": {
"resources": "./resources/",
"data": "./data/",
"packets": "./packets/",
"scripts": "./resources/Scripts/",
"plugins": "./plugins/"
},
"databaseInfo": {
"server": {
"connectionUri": "mongodb://localhost:27017", //【localhost替换为mongodb容器内部IP】
"collection": "grasscutter"
},
"game": {
"connectionUri": "mongodb://localhost:27017", //【localhost替换为mongodb容器内部IP】
"collection": "grasscutter"
}
},
"language": {
"language": "zh_CN",
"fallback": "en_US",
"document": "EN"
},
"account": {
"autoCreate": true,
"defaultPermissions": [],
"maxPlayer": -1
},
"server": {
"debugLevel": "NONE",
"runMode": "HYBRID",
"http": {
"bindAddress": "0.0.0.0",
"accessAddress": "服务器公网IP",
"bindPort": 444,
"accessPort": 0,
"encryption": {
"useEncryption": true,
"useInRouting": true,
"keystore": "./keystore.p12",
"keystorePassword": "123456"
},
"policies": {
"cors": {
"enabled": false,
"allowedOrigins": [
"*"
]
}
},
"files": {
"indexFile": "./index.html",
"errorFile": "./404.html"
}
},
"game": {
"bindAddress": "0.0.0.0",
"accessAddress": "服务器公网IP",
"bindPort": 22102,
"accessPort": 0,
"loadEntitiesForPlayerRange": 100,
"enableScriptInBigWorld": false,
"enableConsole": true,
"gameOptions": {
"inventoryLimits": {
"weapons": 2000,
"relics": 2000,
"materials": 2000,
"furniture": 2000,
"all": 30000
},
"avatarLimits": {
"singlePlayerTeam": 5,
"multiplayerTeam": 6
},
"sceneEntityLimit": 1000,
"watchGachaConfig": false,
"enableShopItems": true,
"staminaUsage": true,
"energyUsage": false,
"resinOptions": {
"resinUsage": false,
"cap": 160,
"rechargeTime": 480
},
"rates": {
"adventureExp": 1.0,
"mora": 1.0,
"leyLines": 1.0
}
},
"joinOptions": {
"welcomeEmotes": [
2007,
1002,
4010
],
"welcomeMessage": "Welcome to \u003ccolor\u003dred\u003eGenshin!",
"welcomeMail": {
"title": "Welcome to Genshin",
"content": "Hi there!\r\nFirst of all, welcome to Ghenshin!",
"sender": "aila",
"items": [
{
"itemId": 13509,
"itemCount": 1,
"itemLevel": 1
},
{
"itemId": 201,
"itemCount": 99999,
"itemLevel": 1
}
]
}
},
"serverAccount": {
"avatarId": 10000029,
"nameCardId": 210001,
"adventureRank": 60,
"worldLevel": 8,
"nickName": "Server-aila",
"signature": "Welcome to Genshin"
}
},
"dispatch": {
"regions": [],
"defaultName": "Genshin"
}
},
"version": 3
}
查看mongodb 容器内部ip
配置文件config.json里面有个mongodb的容器内部ip地址,可以用如下地址进行查看
docker ps #查看mongodb的容器id
docker inspect [mongodb id]|grep "IP*"
运行grasscutter割草机服务器
#在容器内部里面
cd /grasscutter
java -jar grasscutter-1.2.3-dev.jar
如果出现以上情况说明服务端搭建成功了,之后的客户端网上很多教程有教怎么搞的我这边就不再过多赘述了。
我放上几个链接,你们自己去看吧
一些用的到的链接
全部客户端链接
https://github.com/kyou-nase/GI-Download-Library
Grasscutter-资源统计
(一个很有用的资源整合项目):https://github.com/Yuer-QAQ/Awesome-Grasscutter
客户端工具
我这边用的fiddler进行流量的转发
Fiddler 官网下载:https://www.telerik.com/fiddler/fiddler-classic
命令指令
传统方式的命令执行,是在进入游戏后进入会话列表,添加会话用户找到 Server 用户并添加,就可以发送 “/ 命令” 的方式来执行指令。
当然,这种方法效率有些低,我们可以使用 @jie65535 制作的命令生成器:
https://github.com/jie65535/GrasscutterCommandGenerator
可以方便地生成命令供粘贴使用。
进一步,这个工具还可以通过插件的方式远程执行指令,更加快捷:
服务端插件:https://github.com/jie65535/gc-opencommand-plugin
管理员命令指令
05:09:26 <INFO:CommandHandler> 可用命令:
05:09:26 <INFO:CommandHandler> account - 创建或删除账号
用法:account create <username> [<UID>]
用法:account delete <username>
用法:account create <username> <password> [<UID>]
用法:account resetpass <username> <password>
所需权限:无
05:09:26 <INFO:CommandHandler> achievement - 达成、撤销成就或设置成就进度
用法:am @<UID> (grant|revoke) <achievementId>
用法:am @<UID> progress <achievementId> <progress>
用法:am @<UID> grantall
用法:am @<UID> revokeall
别名:am
所需权限:player.achievement (对其他玩家使用这个命令还需要权限 player.achievement.others)
05:09:26 <INFO:CommandHandler> announce - 向所有在线玩家发送公告,或者管理服务器的公告
用法:a <content>
用法:a refresh
用法:a (tpl|revoke) <templateId>
别名:a
所需权限:server.announce
05:09:26 <INFO:CommandHandler> ban - 封禁玩家
用法:ban @<UID> [<time> [<reason>]]
所需权限:server.ban
05:09:26 <INFO:CommandHandler> clear - 从你的背包中删除所有未装备且已解锁的物品,包括稀有物品
用法:clear @<UID> (all|wp|art|mat) [lv<max level>] [r<max refinement>] [<max rarity>*]
所需权限:player.clearinv (对其他玩家使用这个命令还需要权限 player.clearinv.others)
05:09:26 <INFO:CommandHandler> coop - 强制传送指定玩家到他人的世界。如果没有指定玩家,则会使你进入多人游戏状态
用法:coop @<UID> [<host UID>]
所需权限:server.coop (对其他玩家使用这个命令还需要权限 server.coop.others)
05:09:26 <INFO:CommandHandler> cutscene - 播放过场动画
用法:c @<UID> [<cutsceneId>]
别名:c
所需权限:player.cutscene (对其他玩家使用这个命令还需要权限 player.cutscene.others)
05:09:26 <INFO:CommandHandler> debug - 🇺🇸Useful debugging commands for developers.
用法:debug /debug
所需权限:grasscutter.command.debug
05:09:26 <INFO:CommandHandler> enter_dungeon - 进入指定秘境
用法:dungeon @<UID> <dungeonId>
别名:enterdungeon dungeon
所需权限:player.enterdungeon (对其他玩家使用这个命令还需要权限 player.enterdungeon.others)
05:09:26 <INFO:CommandHandler> entity - 编辑现存实体的属性
用法:entity @<UID> <configId gadget> [state<state>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>]
用法:entity @<UID> <configId monster> [ai<aiId>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>]
所需权限:server.entity
05:09:26 <INFO:CommandHandler> give - 向你或指定的玩家给予物品。比如可以给予全部武器,角色和/或材料,也可以给予自定义圣遗物
用法:g @<UID> (<itemId>|<avatarId>|all|weapons|mats|avatars) [lv<level>] [r<refinement>] [x<amount>] [c<constellation>] [sl<skilllevel>]
用法:g @<UID> <artifactId> [lv<level>] [x<amount>] [<mainPropId>] [<appendPropId>[,<times>]]...
别名:g item giveitem
所需权限:player.give (对其他玩家使用这个命令还需要权限 player.give.others)
05:09:26 <INFO:CommandHandler> group - 更改 group 的加载
用法:gr @<UID> (refresh) [<groupId>] [<suiteId>]
别名:gr
所需权限:player.group (对其他玩家使用这个命令还需要权限 player.group.others)
05:09:26 <INFO:CommandHandler> heal - 治疗当前队伍的角色
用法:h @<UID>
别名:h
所需权限:player.heal (对其他玩家使用这个命令还需要权限 player.heal.others)
05:09:26 <INFO:CommandHandler> help - 发送帮助信息或显示指定命令的信息
用法:help [<command>]
所需权限:无
05:09:26 <INFO:CommandHandler> info - 生成问题排除用的 debug 信息
用法:info /info
别名:troubleshoot helpme
所需权限:无
05:09:26 <INFO:CommandHandler> kick - 从服务器内踢出指定玩家
用法:kick @<UID>
别名:restart
所需权限:无 (对其他玩家使用这个命令还需要权限 server.kick)
05:09:26 <INFO:CommandHandler> killall - 杀死所有怪物
用法:killall @<UID> [<sceneId>]
所需权限:server.killall (对其他玩家使用这个命令还需要权限 server.killall.others)
05:09:26 <INFO:CommandHandler> killCharacter - 杀死玩家当前角色
用法:kill @<UID>
别名:suicide kill
所需权限:player.killcharacter (对其他玩家使用这个命令还需要权限 player.killcharacter.others)
05:09:26 <INFO:CommandHandler> language - 显示或切换当前语言
用法:lang [<language code>]
别名:lang
所需权限:无
05:09:26 <INFO:CommandHandler> list - 查看所有玩家
用法:list [uid]
别名:players
所需权限:无
05:09:26 <INFO:CommandHandler> permission - 添加或移除指定玩家的权限
用法:permission @<UID> add <permission>
用法:permission @<UID> remove <permission>
用法:permission @<UID> clear
用法:permission @<UID> list
所需权限:permission
05:09:26 <INFO:CommandHandler> position - 获取所在位置和旋转信息
用法:pos @<UID>
别名:pos
所需权限:无
05:09:26 <INFO:CommandHandler> quest - 添加或完成任务
用法:q @<UID> (add|finish|running|talking|debug|triggers|grouptriggers) [<questId>]
用法:q @<UID> dungeons
别名:q
所需权限:player.quest (对其他玩家使用这个命令还需要权限 player.quest.others)
05:09:26 <INFO:CommandHandler> reload - 重载配置文件和数据
用法:reload
所需权限:server.reload
05:09:26 <INFO:CommandHandler> resetConst - 重置当前角色的命之座,执行命令后需重新登录以生效
用法:resetConst @<UID> [all]
别名:resetconstellation
所需权限:player.resetconstellation (对其他玩家使用这个命令还需要权限 player.resetconstellation.others)
05:09:26 <INFO:CommandHandler> resetShopLimit - 重置指定玩家的商店刷新时间
用法:resetshop @<UID>
别名:resetshop
所需权限:server.resetshop (对其他玩家使用这个命令还需要权限 server.resetshop.others)
05:09:26 <INFO:CommandHandler> sendMail - 向指定用户发送邮件。此命令的用法会根据撰写阶段而改变
用法:sendMail (<userId>|all) [<templateId>]
用法:sendMail help
所需权限:server.sendmail
05:09:26 <INFO:CommandHandler> sendMessage - 向玩家以服务器的身份发送消息。如果没有指定目标,则向服务器的全部玩家发送
用法:b <message>
别名:say sendservmsg sendservermessage b broadcast
所需权限:server.sendmessage (对其他玩家使用这个命令还需要权限 server.sendmessage.others)
05:09:26 <INFO:CommandHandler> setConst - 为当前活跃角色设置命座等级
用法:setConst @<UID> <constellation level> [all]
别名:setconstellation
所需权限:player.setconstellation (对其他玩家使用这个命令还需要权限 player.setconstellation.others)
05:09:26 <INFO:CommandHandler> setFetterLevel - 设置当前角色的好感度等级
用法:setfetterlvl @<UID> <level>
别名:setfetterlvl setfriendship
所需权限:player.setfetterlevel (对其他玩家使用这个命令还需要权限 player.setfetterlevel.others)
05:09:26 <INFO:CommandHandler> setProp - 设置账号的状态。比如可以通过此命令启用 GodMode,也可以解锁深渊或更改纪行等级
可更改的状态列表(不区分大小写):GodMode(上帝模式)|UnlimitedStamina(无限体力)|UnlimitedEnergy(无限能量)|TowerLevel(深渊)|WorldLevel(世界等级)|BPLevel(纪行等级)|SetOpenState(设置开放状态)|UnsetOpenState(取消开放状态)|UnlockMap(解锁地图)
查看 PlayerProperty enum 以获得其他数值,格式为 PROP_MAX_SPRING_VOLUME -> max_spring_volume
用法:prop @<UID> <prop> <value>
别名:prop
所需权限:player.setprop (对其他玩家使用这个命令还需要权限 player.setprop.others)
05:09:26 <INFO:CommandHandler> setSceneTag - 设置特定于账户的场景标签。这可以控制诸如石头挡住门、建筑物可见以及其他(通常与任务相关)影响世界可见度的事物。
用法:tag @<UID> <add|remove|unlockall|reset> <sceneTagId>
别名:tag
所需权限:player.setscenetag (对其他玩家使用这个命令还需要权限 player.setscenetag.others)
05:09:26 <INFO:CommandHandler> setStats - 设置当前角色的属性
可更改的属性列表:hp(生命值)|maxhp(最大生命值)|def(防御力)|atk(攻击力)|em(元素精通)|er(元素充能效率)|crate(暴击率)|cdmg(暴击伤害)|cdr(冷却缩减)|heal(治疗加成)|heali(受治疗加成)|shield(护盾强效)|defi(无视防御)
元素增伤:epyro(火)|ecryo(冰)|ehydro(水)|egeo(岩)|edendro(草)|eelectro(雷)|ephys(物理)
元素抗性:respyro(火)|rescryo(冰)|reshydro(水)|resgeo(岩)|resdendro(草)|reselectro(雷)|resphys(物理)
用法:stat @<UID> [set] <stat> <value>
用法:stat @<UID> (lock|freeze) <stat> [<value>]
用法:stat @<UID> (unlock|unfreeze) <stat>
别名:stats stat
所需权限:player.setstats (对其他玩家使用这个命令还需要权限 player.setstats.others)
05:09:26 <INFO:CommandHandler> sound - 播放声音
用法:sound @<UID> [<audioname>] [<x><y><z>]
别名:audio
所需权限:player.sound (对其他玩家使用这个命令还需要权限 player.sound.others)
05:09:26 <INFO:CommandHandler> spawn - 在你附近生成实体
用法:s @<UID> <itemId> [x<amount>] [blk<blockId>] [grp<groupId>] [cfg<configId>] [<x> <y> <z>] [<rotX> <rotY> <rotZ>]
用法:s @<UID> <gadgetId> [x<amount>] [state<state>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>] [blk<blockId>] [grp<groupId>] [cfg<configId>] [<x> <y> <z>] [<rotX> <rotY> <rotZ>]
用法:s @<UID> <monsterId> [x<amount>] [lv<level>] [ai<aiId>] [maxhp<maxhp>] [hp<hp>(0 for infinite)] [atk<atk>] [def<def>] [blk<blockId>] [grp<groupId>] [cfg<configId>] [<x> <y> <z>] [<rotX> <rotY> <rotZ>]
别名:drop s
所需权限:server.spawn (对其他玩家使用这个命令还需要权限 server.spawn.others)
05:09:26 <INFO:CommandHandler> stop - 停止服务器
用法:stop
别名:shutdown
所需权限:server.stop
05:09:26 <INFO:CommandHandler> talent - 设置当前角色的天赋等级
用法:talent @<UID> set <talentId> <level>
用法:talent @<UID> (n|e|q|all) <level>
用法:talent @<UID> getid
所需权限:player.settalent (对其他玩家使用这个命令还需要权限 player.settalent.others)
05:09:26 <INFO:CommandHandler> team - 手动修改你的队伍
用法:team @<UID> add <avatarId,...>
用法:team @<UID> (remove|set) [index|first|last|index-index,...]
所需权限:player.team (对其他玩家使用这个命令还需要权限 player.team.others)
05:09:26 <INFO:CommandHandler> teleport - 改变指定玩家的位置
用法:tp @<UID> <x> <y> <z> [sceneId]
别名:tp
所需权限:player.teleport (对其他玩家使用这个命令还需要权限 player.teleport.others)
05:09:26 <INFO:CommandHandler> teleportAll - 将你世界中的所有玩家传送到你所在的位置
用法:tpall @<UID>
别名:tpall
所需权限:player.tpall (对其他玩家使用这个命令还需要权限 player.tpall.others)
05:09:26 <INFO:CommandHandler> trialAvatarActivity - 控制试用角色的活动。可以切换秘境和奖励的状态
用法:taa @<UID> change <scheduleId>
用法:taa @<UID> toggleDungeon <index(start from 1)|all>
用法:taa @<UID> toggleReward <index(start from 1)|all>
别名:taa
所需权限:player.trialavataractivity (对其他玩家使用这个命令还需要权限 player.trialavataractivity.others)
05:09:26 <INFO:CommandHandler> unban - 取消玩家的封禁
用法:unban @<UID>
所需权限:server.ban
05:09:26 <INFO:CommandHandler> unlockall - 为玩家解锁全部开放状态
用法:unlockall @<UID>
所需权限:player.unlockall (对其他玩家使用这个命令还需要权限 player.unlockall.others)
05:09:26 <INFO:CommandHandler> weather - 更改天气 ID 和气候类型
天气 ID 可以在 ./Resources/ExcelBinOutput/WeatherExcelConfigData.json 中找到
气候类型:sunny(晴天), cloudy(多云), rain(雨), thunderstorm(雷雨), snow(雪), mist(雾)
用法:w @<UID> weather [<weatherId>] [<climateType>]
别名:w
所需权限:player.weather (对其他玩家使用这个命
注意:本文章仅仅是个人使用,算是我自己的一个笔记。严禁通过这种形式赚钱或者非法意义的盈利。
docker是个好东西,可以用来搭建个人博客,隔离性很强,而且轻量化,一个docker容器占用的系统资源和空间也很小。
客户端配置
本篇使用国服客户端登录私服
安装证书
第一次进入服务器必须要安装证书,之后进入可直接跳过安装证书步骤
使用xftp等软件将下载的.p12证书传输到本机中
双击证书,选择本地计算机
无脑下一步
选择所有证书都放入下列存储,并点击浏览,再选择受信任的根证书颁发机构
设置代理
到设置->网络->代理->手动设置代理根据实际情况填写代理IP地址以及端口,端口默认为22102将“请勿对以下列条目开头的地址使用代理服务器。若有多个条目,请使用英文分号(;)来分割”处的内容删除,并将“请勿将代理服务器用于本地地址”的勾取消。
也可以使用ondrive里的米哈游代理转向.exe(易语言编写,报毒很正常,如果杀软报毒了添加信任即可)软件设置代理,也是一样根据实际情况填写代理IP地址以及端口。
开启代理进入的便是私服,不开启代理进入的便是官服。
原神启动!!!
启动前请确保客户端已经更新完成!!!
先开代理后进游戏!!!
登录界面出现HOYOVERSE即代表成功连上私服
用户名输入你之前创建的用户名,密码随便填写即可(请记住自己设置的密码)。
进门白屏后请立即关闭代理!!!
接下来就是过场动画了
之后就可以愉快的玩耍啦!!!
Comments 9 条评论
博主 wumao︎ bury⚕
万里哥写的好棒呀
博主 Fool is me
学习中 大佬 为啥拉取仓库速度那么慢啊 都跑了一天了
博主 可乐
虽然看不懂 不过感觉挺牛逼的哈哈哈
博主 Try your best
膜拜大佬 学习中
博主 竹青影
原神 启动 好棒的文章 宝藏
博主 微雨
膜拜大佬
博主 oSYEcIJnhpwsR
@微雨 这是一条私密评论
博主 oSYEcIJnhpwsR
这是一条私密评论
博主 万 里
又不懂的可以加我QQ:762679280 目前还在上学 不一定有时间回复