通过可视化界面及 REST 接口管理幻兽帕鲁专用服务器,基于 SAV 存档文件解析及 RCON 实现
并且花了很漫长且枯燥的时间去做了国际化...
目前移动端适配良好,可查看下面 功能截图
当然深色模式也安排得妥妥的~
基于 Level.sav
存档文件解析实现的功能:
- 完整玩家数据
- 玩家帕鲁数据
- 公会数据
基于官方提供的 RCON 命令(仅服务器可用的)实现功能:
- 获取服务器信息
- 在线玩家列表
- 踢出/封禁玩家
- 游戏内广播
- 平滑关闭服务器并广播消息
工具额外提供的功能:
- 白名单管理
- 自定义 RCON 命令并执行
本工具使用 bbolt 单文件存储,将 RCON 和 Level.sav 文件的数据通过定时任务获取并保存,提供简单的可视化界面和 REST 接口和便于管理与开发。
由于维护开发人员较少,虽有心但力不足,欢迎各前端和后端甚至数据工程师来提交 PR!
Note
如果您需要幻兽帕鲁服务器&工具搭建交流,或者需要闭源付费定制功能开发,如:多服务器管理、服务器注入反作弊、可视化修改存档等,请加群或 QQ 交流
pal-zh.mp4
Caution
游戏服务器 v0.1.5.0 版本中,PalWorldSettings.ini 中的 RCONPort 和 RCONEnable 不生效
请在 ./PalServer.sh
(Linux) 或 PalServer.exe
(Windows) 后添加 -RCONPort=25575 来开启
需要开启服务器的 RCON 功能,如果你的私服教程有写更好,没有的话,修改 PalWorldSettings.ini
文件
也就是修改游戏内各种倍数、概率的那个文件,里面最后的位置有如下:
AdminPassword=...,...,RCONEnabled=true,RCONPort=25575
请先关闭服务器再作修改,你需要设置一个 AdminPassword,然后将 RCONEnabled
和 RCONPort
填写如上,再重启服务器即可。
请确保前提 开启私服 RCON
解析
Level.sav
存档的任务需要在短时间(<20s)耗费一定的系统内存(1GB~3GB),这部分内存会在执行完解析任务后释放,因此你至少需要确保你的服务器有充足的内存。
这里默认为将 pst 工具和游戏服务器放在同一台物理机上,在一些情况下你可能不想要它们部署在同一机器上:
- 需要单独部署在其它服务器
- 只需要部署在本地个人电脑
- 游戏服务器性能较弱不满足,采用上述两种方案之一
请参考 pst-agent 部署教程 或 从 k8s-pod 同步存档
30s 部署私服 + 管理工具,拒绝复杂步骤
首先点击以下按钮一键部署帕鲁私服:
然后点击以下按钮一键部署 palworld-server-tool:
请在以下地址下载最新版可执行文件
# 下载 pst_{version}_{platform}_{arch}.tar.gz 文件并解压到 pst 目录
mkdir -p pst && tar -xzf pst_v0.5.7_linux_x86_64.tar.gz -C pst
-
打开目录并允许可执行
cd pst chmod +x pst sav_cli
-
找到其中的
config.yaml
文件并按照说明修改。关于其中的
decode_path
,一般就是解压后的 pst 目录加上sav_cli
,如果不知道绝对路径,在终端执行pwd
即可# WebUI 设置 web: # WebUI 管理员密码 password: "" # WebUI 访问端口 port: 8080 # 是否开启使用 HTTPS TLS 访问 tls: false # TLS Cert 如果开启使用 HTTPS 请输入证书文件路径 cert_path: "" # TLS Key 如果开启使用 HTTPS 请输入证书密钥文件路径 key_path: "" # 若开启 HTTPS 访问请填写你的 HTTPS 证书绑定的域名 eg. https://yourdomain.com public_url: "" # RCON 相关设置 rcon: # RCON 的地址和端口 address: "127.0.0.1:25575" # 服务 端设置的 RCON AdminPassword password: "" # RCON 通信超时时间,推荐 <= 5 timeout: 5 # 定时向 RCON 服务获取玩家在线情况的间隔,单位秒 sync_interval: 60 # sav_cli Config 存档文件解析相关配置 save: # 存档文件路径 path: "/path/to/your/Pal/Saved" # Sav_cli Path 存档解析工具路径,一般和 pst 在同一目录 decode_path: "/path/to/your/sav_cli" # Sav Decode Interval Sec 定时从存档获取数据的间隔,单位秒,推荐 >= 120 sync_interval: 120 # Automation Config 自动化管理相关 manage: # 玩家不在白名单是否自动踢出 kick_non_whitelist: false
./pst
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:75 | Starting PalWorld Server Tool...
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:76 | Version: Develop
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:77 | Listening on http://127.0.0.1:8080 or http://192.168.1.66:8080
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:78 | Swagger on http://127.0.0.1:8080/swagger/index.html
若需要后台运行(关闭 ssh 窗口后仍运行)
# 后台运行并将日志保存在 server.log
nohup ./pst > server.log 2>&1 &
# 查看日志
tail -f server.log
kill $(ps aux | grep 'pst' | awk '{print $2}') | head -n 1
请通过浏览器访问 http://127.0.0.1:8080 或 http://{局域网 IP}:8080
云服务器开放防火墙及安全组后也可以访问 http://{服务器 IP}:8080
Warning
初次打开会显示空白没有内容,请等待第一次 sav 存档同步完成再访问
如果你的服务器配置足够且性能良好,你可以试着将 save.sync_interval
改短一点
解压 pst_v0.5.7_windows_x86_64.zip
到任意目录(推荐命名文件夹目录名称为 pst
)
找到解压目录中的 config.yaml
文件并按照说明修改。
关于其中的 decode_path
,一般就是解压后的 pst 目录加上 sav_cli.exe
你也可以直接鼠标右键——“属性”,查看路径和文件名,再将它们拼接起来。(存档文件路径和工具路径同理)
Warning
请不要直接将复制的路径粘贴到 config.yaml
中,而是需要在所有的 '\' 前面再加一个 '\',像下面展示的一样
还有比较重要的是,请确保 config.yaml
文件为 ANSI 编码,其它编码格式将会导致路径错误等问题!!
# WebUI 设置
web:
# WebUI 管理员密码
password: ""
# WebUI 访问端口
port: 8080
# 是否开启使用 HTTPS TLS 访问
tls: false
# TLS Cert 如果开启使用 HTTPS 请输入证书文件路径
cert_path: ""
# TLS Key 如果开启使用 HTTPS 请输入证书密钥文件路径
key_path: ""
# 若开启 HTTPS 访问请填写你的 HTTPS 证书绑定的域名 eg. https://yourdomain.com
public_url: ""
# RCON 相关设置
rcon:
# RCON 的地址和端口
address: "127.0.0.1:25575"
# 服务 端设置的 RCON AdminPassword
password: ""
# RCON 通信超时时间,推荐 <= 5
timeout: 5
# 定时向 RCON 服务获取玩家在线情况的间隔,单位秒
sync_interval: 60
# sav_cli Config 存档文件解析相关配置
save:
# 存档文件路径
path: "C:\\path\\to\\your\\Pal\\Saved"
# Sav_cli Path 存档解析工具路径,一般和 pst 在同一目录
decode_path: "C:\\path\\to\\your\\sav_cli.exe"
# Sav Decode Interval Sec 定时从存档获取数据的间隔,单位秒,推荐 >= 120
sync_interval: 120
# Automation Config 自动化管理相关
manage:
# 玩家不在白名单是否自动踢出
kick_non_whitelist: false
这里有两种方式可以在 Windows 下运行
-
start.bat(推荐)
找到解压目录下的
start.bat
文件,双击运行 -
按下
Win + R
,输入powershell
打开 Powershell,通过cd
命令到下载的可执行文件目录.\pst.exe
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:75 | Starting PalWorld Server Tool...
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:76 | Version: Develop
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:77 | Listening on http://127.0.0.1:8080 or http://192.168.31.214:8080
2024/01/31 - 22:39:20 | INFO | palworld-server-tool/main.go:78 | Swagger on http://127.0.0.1:8080/swagger/index.html
看到上述界面表示成功运行,请保持窗口打开
请通过浏览器访问 http://127.0.0.1:8080 或 http://{局域网 IP}:8080
云服务器开放防火墙及安全组后也可以访问 http://{服务器 IP}:8080
Warning
初次打开会显示空白没有内容,请等待第一次 sav 存档同步完成再访问
如果你的服务器配置足够且性能良好,你可以试着将 save.sync_interval
改短一点
只需要一个容器,将游戏存档目录映射至容器内,与游戏服务器在同一物理主机上运行。
注意:使用交换分区,可能导致程序性能下降,建议仅在内存不足时使用
docker run -d --name pst \
-p 8080:8080 \
-m 256M --memory-swap=4G `# 可选参数 设置可用内存为256M 交换分区为4G` \
-v /path/to/your/Pal/Saved:/game \
-e WEB__PASSWORD="your password" \
-e RCON__ADDRESS="172.17.0.1:25575" \
-e RCON__PASSWORD="your password" \
-e SAVE__PATH="/game" \
-e SAVE__SYNC_INTERVAL=120 \
jokerwho/palworld-server-tool:latest
最重要的是需要 -v 到游戏存档文件(Level.sav)所在目录,将其映射到容器内的 /game 目录
如果需要持久化 pst.db
文件:
# 先创建文件,避免被识别为目录
touch pst.db
然后在 docker run -v
中增加 -v ./pst.db:/app/pst.db
设置各环境变量,与 config.yaml
基本相似,表格如下:
Warning
注意区分单个和多个下划线,若需修改最好请复制下表变量名!
变量名 | 默认值 | 类型 | 说明 |
---|---|---|---|
WEB__PASSWORD | "" | 文本 | Web 界面的管理员模式密码 |
WEB__PORT | 8080 | 数字 | 若非必要不建议修改,而是更改容器映射端口 |
RCON__ADDRESS | "127.0.0.1:25575" | 文本 | RCON 服务对应的地址,可以用容器网络 172.17.0.1:25575 |
RCON__PASSWORD | "" | 文本 | 服务器配置文件中的 AdminPassword |
RCON__TIMEOUT | 5 | 数字 | 单个请求 RCON 服务的超时时间 |
RCON__SYNC_INTERVAL | 60 | 数字 | 请求 RCON 服务器同步玩家在线数据的间隔 |
SAVE__PATH | "" | 文本 | 游戏存档所在路径 请务必填写为容器内的路径 |
SAVE__DECODE_PATH | "/app/sav_cli" | 文本 | |
SAVE__SYNC_INTERVAL | 600 | 数字 | 同步玩家存档数据的间隔 |
MANAGE__KICK_NON_WHITELIST | false | 布尔 | 当检测到玩家不在白名单却在线时自动踢出 |
需要两个容器,分别是 palworld-server-tool
和 palworld-server-tool-agent
适用于:
- 需要单独部署在其它服务器
- 只需要部署在本地个人电脑
- 游戏服务器性能较弱不满足,采用上述两种方案之一
注意:使用交换分区,可能导致程序性能下降,建议仅在内存不足时使用
docker run -d --name pst-agent \
-p 8081:8081 \
-v /path/to/your/Pal/Saved:/game \
-e SAV_FILE="/game" \
jokerwho/palworld-server-tool-agent:latest
需要 -v 到游戏存档文件(Level.sav)所在目录,将其映射到容器内的 /game 目录
变量名 | 默认值 | 类型 | 说明 |
---|---|---|---|
SAV_FILE | "" | 文本 | 游戏存档所在路径 请务必填写为容器内的路径 |
docker run -d --name pst \
-p 8080:8080 \
-e WEB__PASSWORD="your password" \
-e RCON__ADDRESS="游戏服务器IP:25575" \
-e RCON__PASSWORD="your password" \
-e SAVE__PATH="http://游戏服务器IP:Agent端口/sync" \
-e SAVE__SYNC_INTERVAL=120 \
jokerwho/palworld-server-tool:latest
如果需要持久化 pst.db
文件:
# 先创建文件,避免被识别为目录
touch pst.db
然后在 docker run -v
中增加 -v ./pst.db:/app/pst.db
Warning
注意区分单个和多个下划线,若需修改最好请复制下表变量名!
变量名 | 默认值 | 类型 | 说明 |
---|---|---|---|
WEB__PASSWORD | "" | 文本 | Web 界面的管理员模式密码 |
WEB__PORT | 8080 | 数字 | 若非必要不建议修改,而是更改容器映射端口 |
RCON__ADDRESS | "127.0.0.1:25575" | 文本 | RCON 服务对应的地址,一般为游戏服务器 IP:25575 |
RCON__PASSWORD | "" | 文本 | 服务器配置文件中的 AdminPassword |
RCON__TIMEOUT | 5 | 数字 | 单个请求 RCON 服务的超时时间 |
RCON__SYNC_INTERVAL | 60 | 数字 | 请求 RCON 服务器同步玩家在线数据的间隔 |
SAVE__PATH | "" | 文本 | pst-agent 所在服务地址,格式为 http://{游戏服务器 IP}:{Agent 端口}/sync |
SAVE__DECODE_PATH | "/app/sav_cli" | 文本 | |
SAVE__SYNC_INTERVAL | 600 | 数字 | 同步玩家存档数据的间隔 |
MANAGE__KICK_NON_WHITELIST | false | 布尔 | 当检测到玩家不在白名单却在线时自动踢出 |
从 v0.5.3 开始,支持无需 agent 同步集群内游戏服务器存档。
请确保 pst 所使用的 serviceaccount 具有 "pods/exec" 权限!
只需要更改 SAVE__PATH
环境变量即可,格式如下:
SAVE__PATH="k8s://<namespace>/<podname>/<container>:<游戏存档目录>"
比如:
SAVE__PATH="k8s://default/palworld-server-0/palworld-server:/palworld/Pal/Saved
由于游戏服务器创建 Level.sav 文件的时间、位置(包含 HASH)在初次都不确定,您只需要指向 Saved 目录级别即可,程序会自动扫描
当 pst 与游戏服务器在同一 namespace 下时,您可以省略它:
SAVE__PATH="k8s://palworld-server-0/palworld-server:/palworld/Pal/Saved
从 v0.5.3 开始,支持无需 agent 同步容器内游戏服务器存档
当你的 pst 本体是通过运行二进制文件部署时,只需要修改 config.yaml
中的 save.path
即可:
save:
path: "docker://<container_name_or_id>:<游戏存档目录>"
比如:
save:
path: docker://palworld-server:/palworld/Pal/Saved
# or
save:
path: docker://04b0a9af4288:/palworld/Pal/Saved
如果 pst 本体是通过 Docker 单体部署的,那么你需要修改 SAVE__PATH
环境变量,并且将 Docker 守护进程挂载至 pst 容器内
- 挂载守护进程
在原来的 docker run
命令中,增加一行 -v /var/run/docker.sock:/var/run/docker.sock
- 修改环境变量
更改 SAVE__PATH
环境变量,格式如下:
SAVE__PATH="docker://<container_name_or_id>:<游戏存档目录>"
比如:
SAVE__PATH="docker://palworld-server:/palworld/Pal/Saved"
#or
SAVE__PATH="docker://04b0a9af4288:/palworld/Pal/Saved"
Warning
如果在运行后看到如 Error response from daemon: client version 1.44 is too new. Maximum supported API version is 1.43
的报错,是因为你当前 docker engine 使用的 Docker API 版本较低,这时候请再增加一个环境变量:
-e DOCKER_API_VERSION="1.43" (你的 API 版本)
由于游戏服务器创建 Level.sav 文件的时间、位置(包含 HASH)在初次都不确定,您只需要指向 Saved 目录级别即可,程序会自动扫描
- palworld-save-tools 提供了存档解析工具实现
- palworld-server-toolkit 提供了存档高性能解析部份实现
- PalEdit 提供了最初的数据化思路及逻辑
- gorcon 提供的 RCON 请求/接收基础能力
根据 Apache2.0 许可证 授权,任何转载请在 README 和文件部分标明!任何商用行为请务必告知!