Anye
Anye
Published on 2024-01-27 / 35 Visits
1
0

幻兽帕鲁部署,你想知道的一切

致谢

感谢 嘉钰寒山雨(腾讯云选购服务器:微信:mumuxi1019)大佬的安装脚本及教程。

问题解答 在文章最下方,常见问题可参考解决。如有疑问,可发送在评论区。

windows端

脚本分析

一键安装

源代码

param (
    [switch]$EnableAutoRestart,
    [int]$ServerPort
)

$ErrorActionPreference = "Stop"

# 定义要检查的进程名称
$ProcessNames = @("PalServer", "PalServer-Win64-Test-Cmd")
foreach ($ProcessName in $ProcessNames) {
    if (Get-Process $ProcessName -ErrorAction SilentlyContinue) {
        Write-Host "$ProcessName is already running."
        exit
    }
}

# 初始化安装目录
$DirectoryPath = "C:\Program Files\PalServer\"
if (-not (Test-Path -Path $directoryPath)) {
    New-Item -ItemType Directory -Path $directoryPath | Out-Null
}

# 下载安装 C++ 运行库
Write-Host "Start download vc_redist.x64.exe..."
$VcUrl = "https://aka.ms/vs/17/release/vc_redist.x64.exe"
$VcOutput = "C:\Program Files\PalServer\vc_redist.x64.exe"
Invoke-WebRequest -Uri $VcUrl -OutFile $VcOutput
Write-Host "Installing vc_redist.x64.exe..."
Start-Process -FilePath $VcOutput -Args '/install', '/quiet', '/norestart' -Wait
Remove-Item -Path $VcOutput

# 下载安装 DirectX 支持库
Write-Host "Start download dxwebsetup.exe..."
$DxUrl = "https://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe"
$DxOutput = "C:\Program Files\PalServer\dxwebsetup.exe"
Invoke-WebRequest -Uri $DxUrl -OutFile $DxOutput
$retryCount = 0
do {
    Write-Host "Installing dxwebsetup.exe... $retryCount"
    $process = Start-Process -FilePath $DxOutput -ArgumentList '/Q' -PassThru
    $hasExited = $process.WaitForExit(180000) # 等待3分钟
    if (-not $hasExited) {
        $process | Stop-Process -Force
    }
    $retryCount++
} while ($retryCount -lt 3 -and -not $hasExited)
Remove-Item -Path $DxOutput

# 下载 Steamcmd
Write-Host "Start download steamcmd.zip..."
$StUrl = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip"
$StOutput = "C:\Program Files\PalServer\steamcmd.zip"
$StUnzipPath = "C:\Program Files\PalServer\steam\"
Invoke-WebRequest -Uri $StUrl -OutFile $StOutput
Expand-Archive -LiteralPath $StOutput -DestinationPath $StUnzipPath -Force
Remove-Item -Path $StOutput

# 运行 SteamCMD 更新服务器
Write-Host "Running steamcmd.exe..."
Set-Location -Path $StUnzipPath
Start-Process ".\steamcmd.exe" -ArgumentList "+login anonymous +app_update 2394010 validate +quit" -Wait

# 设置开机自启动
Write-Host "Setting scheduled task..."
$TaskName = "PalServerAutoStart"
$TaskDescription = "Automatically starts PalServer on system startup and restarts on failure."
$TaskExecutable = "C:\Program Files\PalServer\steam\steamapps\common\PalServer\PalServer.exe" 
if ($PSBoundParameters.ContainsKey('ServerPort')) {
    Write-Host "ServerPort is set to $ServerPort"
    $TaskArguments="-port=$ServerPort"
    $TaskAction = New-ScheduledTaskAction -Execute $TaskExecutable -Argument $TaskArguments
} else {
    $TaskAction = New-ScheduledTaskAction -Execute $TaskExecutable
}
$TaskTrigger = New-ScheduledTaskTrigger -AtStartup
$TaskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

# 设置任务失败后的重启策略,失败后等待 1 分钟,最多尝试 3 次
$RestartInterval = New-TimeSpan -Minutes 1
$RestartCount = 3
$TaskSettings = New-ScheduledTaskSettingsSet -RestartInterval $RestartInterval -RestartCount $RestartCount
Register-ScheduledTask -TaskName $TaskName -Description $TaskDescription -Action $TaskAction -Trigger $TaskTrigger -Principal $TaskPrincipal -Settings $TaskSettings -Force | Out-Null

if ($PSBoundParameters.ContainsKey('EnableAutoRestart') -and $EnableAutoRestart) {
    Write-Host "Install auto_restart_on_high_memory"
    iex (irm 'https://pal.pet/pal-server/Windows/auto_restart_on_high_memory.ps1')
}

# 运行 PalServer
Write-Host "Running PalServer.exe..."
Start-ScheduledTask -TaskName $TaskName
Write-Host "PalServer deploy success!"

分析

  1. 参数定义

  • $EnableAutoRestart:一个开关参数,用于启用或禁用自动重启功能,若不提供,默认为 false

  • $ServerPort:整数参数,用于指定服务器端口。

  1. 检查进程是否已运行

  • 通过 Get-Process 检查指定的进程名称是否已经在运行,如果已经运行,则输出消息并退出脚本。

  1. 初始化安装目录

  • 检查并创建安装目录。

  1. 下载并安装 C++ 运行库

  • 从官网下载 vc_redist.x64.exe,然后使用 Start-Process 启动安装,安装参数包括 /install, /quiet, /norestart

  • 删除下载的安装文件。

  1. 下载并安装 DirectX 支持库

  • 从指定的URL下载 dxwebsetup.exe,然后使用 Start-Process 启动安装,安装参数包括 /Q

  • 安装过程中,通过循环等待最多3次,每次等待3分钟。

  • 删除下载的安装文件。

  1. 下载并安装Steamcmd

  • 从指定的URL下载 steamcmd.zip,然后使用 Expand-Archive 解压到指定目录。

  • 删除下载的压缩文件。

  1. 运行SteamCMD更新服务器

  • 切换到 SteamCMD 的目录,然后使用 Start-Process 启动更新服务器的命令。

  1. 设置开机自启动

  • 创建一个定时任务,以在系统启动时运行 PalServer。

  • 如果提供了 $ServerPort 参数,则将端口号作为参数传递给 PalServer。

  • 设置任务失败后的重启策略,等待1分钟,最多尝试3次。

  1. 安装自动重启脚本

  • 如果启用了自动重启功能,则通过执行远程脚本安装一个名为 auto_restart_on_high_memory.ps1 的脚本。

  1. 运行PalServer

  • 使用 Start-ScheduledTask 启动之前创建的定时任务,开始运行 PalServer。

一些变量

  1. 安装路径变量

  • $DirectoryPath:PalServer 的安装目录路径, C:\Program Files\PalServer\

  • $StUnzipPath:Steamcmd 解压后的路径,即 C:\Program Files\PalServer\steam\

  1. 下载位置变量

  • $VcUrl:Visual C++ 运行库 vc_redist.x64.exe下载地址

  1. 本地文件路径变量

  • $VcOutput:下载的 Visual C++ 运行库的保存路径,C:\Program Files\PalServer\vc_redist.x64.exe

  • $DxOutput:下载的 DirectX 支持库的保存路径,C:\Program Files\PalServer\dxwebsetup.exe

  • $StOutput:下载的 Steamcmd 客户端的保存路径,C:\Program Files\PalServer\steamcmd.zip

一键更新

源代码

$TaskName = "PalServerAutoStart"
$ProcessName = "PalServer-Win64-Test-Cmd"

if (Get-Process -Name $ProcessName -ErrorAction SilentlyContinue) {
    Stop-Process -Name $ProcessName -Force
    Start-Sleep -Seconds 1
}

& "C:\Program Files\PalServer\steam\steamcmd.exe" +login anonymous +app_update 2394010 validate +quit
Start-ScheduledTask -TaskName $TaskName

分析

  1. if (Get-Process -Name $ProcessName -ErrorAction SilentlyContinue):通过 Get-Process 命令检查指定名称的进程是否正在运行。-ErrorAction SilentlyContinue 表示如果发生错误(例如找不到进程),则不显示错误信息。

  2. 如果进程正在运行,执行以下操作:

  • Stop-Process -Name $ProcessName -Force:强制停止进程。

  • Start-Sleep -Seconds 1:暂停脚本执行 1 秒,确保进程完全停止。

  1. & "C:\Program Files\PalServer\steam\steamcmd.exe" +login anonymous +app_update 2394010 validate +quit:使用 & 运算符运行 SteamCMD 命令来更新 PalServer。+login anonymous 表示匿名登录,+app_update 2394010 validate +quit 是 SteamCMD 的参数,用于更新 PalServer 。

  2. Start-ScheduledTask -TaskName $TaskName :启动进程。

自动云/本地备份(采用Webdav)

源代码

$sourceFolderPath = "C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved"  #   需要备份的文件夹路径
$backupfilespath = "C:\backup"    #   备份文件存放路径
$waitTimeInSeconds = 1 * 60 * 60	# 备份间隔时间,单位:秒
$webdavUrl = "" #   WebDAV 服务器地址
$webdavUsername = ""   #   账号
$webdavPassword = ""   #   密码

if (-not (Test-Path -Path $backupfilespath -PathType Container)) {
    New-Item -ItemType Directory -Path $backupfilespath | Out-Null
    Write-Host "已创建备份文件夹: $backupfilespath"
}

function Upload-FileToWebDAV {
    param(
        [string]$WebDAVUrl,
        [string]$Username,
        [string]$Password,
        [string]$LocalFilePath,
        [string]$RemoteFilePath
    )
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("${Username}:${Password}")))
    $headers = @{
        Authorization = "Basic $base64AuthInfo"
    }
    try {
        $uploadResponse = Invoke-WebRequest -Uri "$WebDAVUrl$RemoteFilePath" -Method Put -InFile $LocalFilePath -Headers $headers -UseBasicParsing
        Write-Host "上传成功. 响应: $($uploadResponse.StatusCode)"
    } catch {
        Write-Host "上传失败. 错误: $_"
    }
}
while ($true) {
    $currentDateTime = Get-Date
    $formattedCurrentTimeStamp = $currentDateTime.ToString("yyyyMMdd_HHmmss")
    $zipFileName = $backupfilespath + "\backup_" + $formattedCurrentTimeStamp + ".zip"
    Compress-Archive -Path $sourceFolderPath -DestinationPath $zipFileName
    $remoteFilePath = "/backup_" + $formattedCurrentTimeStamp + ".zip"
    $uploadParams = @{
        WebDAVUrl      = $webdavUrl
        Username       = $webdavUsername
        Password       = $webdavPassword
        LocalFilePath  = $zipFileName
        RemoteFilePath = $remoteFilePath
    }
    Upload-FileToWebDAV @uploadParams
    for ($i = $waitTimeInSeconds; $i -gt 0; $i--) {
        $minutes = [math]::floor($i / 60)
        $seconds = $i % 60
        Write-Host -NoNewline "等待 $($minutes) 分钟 $($seconds) 秒..."
        Start-Sleep -Seconds 1
        Write-Host -NoNewline "`r"
    }
    Write-Host "备份完成。上传到 WebDAV 完成。等待下一次备份..."
}

分析

该 PowerShell 脚本是用于定期备份指定文件夹并将备份文件上传到 WebDAV 服务器的自动化脚本。

  1. $sourceFolderPath = "C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved":定义需要备份的文件夹路径。

  2. $backupfilespath = "C:\backup":定义备份文件存放路径。

  3. $waitTimeInSeconds = 1 * 60 * 60:定义备份间隔时间,单位为秒,这里设置为1小时。

  4. $webdavUrl$webdavUsername$webdavPassword:定义 WebDAV 服务器的地址、账号和密码。

  5. 使用 Test-Path 检查备份文件夹是否存在,如果不存在,则创建。

  6. 定义 Upload-FileToWebDAV 函数,用于上传文件到 WebDAV 服务器。

  7. 使用 while ($true) 进入一个无限循环,执行以下操作:

  • 获取当前日期时间,并格式化成 yyyyMMdd_HHmmss 形式,用于生成备份文件名。

  • 使用 Compress-Archive 压缩指定文件夹到一个备份文件。

  • 构建备份文件的远程路径。

  • 调用 Upload-FileToWebDAV 函数上传备份文件到 WebDAV 服务器。

  • 使用 for 循环等待指定的备份间隔时间,每秒输出等待信息。

  • 完成一次备份后输出信息,并继续下一轮循环。

部署

一键安装

iex (irm 'https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Windows/install.ps1')

一键更新

iex (irm 'https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Windows/update.ps1')

启动PalServer服务

Start-ScheduledTask -TaskName "PalServerAutoStart"

关闭PalServer服务

Stop-Process -Name "PalServer-Win64-Test-Cmd" -Force

各重要文件

  • 存档ID配置位置

C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved\Config\WindowsServer\GameUserSettings.ini

中的 DedicatedServerName

  • 配置文件

C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved\Config\WindowsServer\PalWorldSettings.ini
  • 存档

C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved\SaveGames\0\
  • 云服务器默认登录名

Administrator

Ubuntu/Debian 端

脚本分析

一键安装

源代码

#!/bin/bash

enable_zram=false
enable_auto_restart=false
server_port=""

for arg in "$@"
do
    case $arg in
        --enable-zram)
        enable_zram=true
        ;;
        --enable-auto-restart)
        enable_auto_restart=true
        ;;
        --server-port=*)
        server_port="${arg#*=}"
        ;;
    esac
done

steam_user=steam
log_path=/tmp/pal_server.log
sudo rm /tmp/pal_server.log

if getent passwd "$steam_user" >/dev/null 2>&1; then
    echo "User $steam_user exists."
else
    echo "User $steam_user does not exist.Adding $steam_user ..."
    sudo useradd -m -s /bin/bash $steam_user
fi

steam_user_path=~steam
exec_start="$steam_user_path/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS"

# Apply arguments
if [ "$enable_zram" = true ]; then
    echo "Enabling Zram..."
    wget -O  - "https://pal.pet/pal-server/Ubuntu/zram.sh" --no-check-certificate | sh
fi

if [ "$enable_auto_restart" = true ]; then
    echo "Enabling auto restart on high memory usage..."
    wget -O  - "https://pal.pet/pal-server/Ubuntu/auto_restart_on_high_memory.sh" --no-check-certificate | sh
fi

if [ ! -z "$server_port" ]; then
    echo "PAL server port set to $server_port"
    exec_start="$exec_start -port=$server_port"
fi



echo "Installing SteamCMD..."

sudo add-apt-repository multiverse -y > $log_path
sudo dpkg --add-architecture i386 >> $log_path
sudo apt update -y >> $log_path
sudo apt-get remove needrestart -y >> $log_path

echo steam steam/license note '' | sudo debconf-set-selections
echo steam steam/question select "I AGREE" | sudo debconf-set-selections
sudo apt install steamcmd -y >> $log_path


steamcmd_path=$(which steamcmd)

if [ -z "$steamcmd_path" ]; then
    echo "Error: Install SteamCMD failed"
    exit 1
else
    echo "Install SteamCMD successfully"
fi

sudo -u $steam_user mkdir -p $steam_user_path/.steam/sdk64/ >> $log_path
echo "Downloading palServer..."
sudo -u $steam_user $steamcmd_path +login anonymous +app_update 1007 validate +quit >> $log_path
sudo -u $steam_user $steamcmd_path +login anonymous +app_update 2394010 validate +quit >> $log_path

sudo cp $steam_user_path/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so $steam_user_path/.steam/sdk64/

systemd_unit=pal-server
cat <<EOF > $systemd_unit.service
[Unit]
Description=$systemd_unit.service

[Service]
Type=simple
User=$steam_user
Restart=on-failure
RestartSec=30s
ExecStart=$exec_start

[Install]
WantedBy=multi-user.target
EOF

sudo mv $systemd_unit.service /usr/lib/systemd/system/
echo "Starting palServer..."
sudo systemctl enable $systemd_unit
sudo systemctl restart $systemd_unit
sudo systemctl -l --no-pager status $systemd_unit

if systemctl --quiet is-active "$systemd_unit"
then
    echo -e "\nPalServer is running successfully, enjoy!"
else
    echo -e "\nThere were some problems with the installation, please check the log $log_path."
fi

echo "Installing zram..."
sudo apt-get install zram-config -y
sudo systemctl start zram-config.service

分析

  1. enable_zramenable_auto_restart 是用于设置是否启用Zram和自动重启的标志。

  2. server_port 用于存储服务器端口号。

  3. 通过命令行参数解析用户提供的选项,例如 --enable-zram 启用Zram,--enable-auto-restart 启用自动重启,--server-port=xxx 设置服务器端口号。

  4. 设置一些变量,如 Steam 用户、日志路径等。

  5. 检查是否存在 Steam 用户,如果不存在则创建。

  6. 设置 PalServer 的执行路径和参数。

  7. 根据用户提供的选项,执行相应的操作,比如启用 Zram 和自动重启。

  8. 安装 SteamCMD,添加 multiverse 存储库,更新系统,安装SteamCMD,并验证安装是否成功。

  9. 下载 PalServer 并安装所需的依赖项。

  10. 创建 systemd 服务单元,以便启动 PalServer 。

  11. 将服务单元移动到系统目录,并启用、重启 PalServer 服务。

  12. 检查 PalServer 服务是否成功启动,并输出相应的消息。

  13. 安装 zram-config ,该工具用于配置和启动 zram 服务。

  14. 启用 zram 来提高系统的性能。

一键更新

源代码

#!/bin/bash

steamcmd_path=$(which steamcmd)
steam_user=steam
systemd_unit=pal-server
sudo -u $steam_user $steamcmd_path +login anonymous +app_update 2394010 validate +quit

sudo systemctl restart $systemd_unit
sudo systemctl -l --no-pager status $systemd_unit

if systemctl --quiet is-active "$systemd_unit"
then
    echo -e "\nPalServer is running successfully, enjoy!"
else
    echo -e "\nThere were some problems with the installation."
fi

分析

  1. steamcmd_path=$(which steamcmd): 这一行使用 which 命令来找到 steamcmd 的路径,并将其赋给变量 steamcmd_path

  2. steam_user=steam: 这一行定义了 Steam 服务器使用的用户名,赋给变量 steam_user

  3. systemd_unit=pal-server: 这一行定义了 systemd 单元的名称,赋给变量 systemd_unit

  4. sudo -u $steam_user steamcmd_path +login anonymous +app_update 2394010 validate +quit: 这一行使用 sudosteam 用户身份执行 steamcmd 命令,该命令登录匿名用户,更新 Steam App ID 为 2394010 的游戏服务器,并验证更新。

  5. sudo systemctl restart $systemd_unit: 这一行使用 systemctl 命令重启指定的 systemd 单元。

  6. sudo systemctl -l --no-pager status $systemd_unit: 这一行使用 systemctl 命令查看指定 systemd 单元的状态,并输出状态语句。

部署

一键安装

wget -O - https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Ubuntu/install_and_zram.sh|sh

一键更新

wget -O - https://pal-server-1251810746.cos.accelerate.myqcloud.com/pal-server/Ubuntu/update.sh | sh

服务状态查看

sudo systemctl status pal-server

启动服务

sudo systemctl start pal-server

停止服务

sudo systemctl stop pal-server

各重要文件

  • 配置文件

/home/steam/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

  • 存档位置

/home/steam/Steam/steamapps/common/PalServer/Pal/Saved/SaveGames/0/

配置文件相关

配置含义

Difficulty=None (难度)
DayTimeSpeedRate=1.000000 (日间速度倍率)
NightTimeSpeedRate=1.000000 (夜间速度倍率)
ExpRate=1.000000 (经验倍率)
PalCaptureRate=1.000000 (伙伴捕获倍率)
PalSpawnNumRate=1.000000 (伙伴生成数量倍率)
PalDamageRateAttack=1.000000 (伙伴攻击伤害倍率)
PalDamageRateDefense=1.000000 (伙伴防御伤害倍率)
PlayerDamageRateAttack=1.000000 (玩家攻击伤害倍率)
PlayerDamageRateDefense=1.000000 (玩家防御伤害倍率)
PlayerStomachDecreaceRate=1.000000 (玩家饥饿减少速率)
PlayerStaminaDecreaceRate=1.000000 (玩家体力减少速率)
PlayerAutoHPRegeneRate=1.000000 (玩家自动血量恢复倍率)
PlayerAutoHpRegeneRateInSleep=1.000000 (睡眠中玩家自动血量恢复倍率)
PalStomachDecreaceRate=1.000000 (伙伴饥饿减少速率)
PalStaminaDecreaceRate=1.000000 (伙伴体力减少速率)
PalAutoHPRegeneRate=1.000000 (伙伴自动血量恢复倍率)
PalAutoHpRegeneRateInSleep=1.000000 (睡眠中伙伴自动血量恢复倍率)
BuildObjectDamageRate=1.000000 (建筑物受损倍率)
BuildObjectDeteriorationDamageRate=1.000000 (建筑物劣化受损倍率)
CollectionDropRate=1.000000 (收集物掉落倍率)
CollectionObjectHpRate=1.000000 (收集物体生命值倍率)
CollectionObjectRespawnSpeedRate=1.000000 (收集物体重生速度倍率)
EnemyDropItemRate=1.000000 (敌人掉落物品倍率)
DeathPenalty=All (死亡惩罚)
bEnablePlayerToPlayerDamage=False (允许玩家对玩家造成伤害)
bEnableFriendlyFire=False (允许友军伤害)
bEnableInvaderEnemy=True (允许入侵敌人)
bActiveUNKO=False (未知)
bEnableAimAssistPad=True (启用手柄瞄准辅助)
bEnableAimAssistKeyboard=False (启用键盘瞄准辅助)
DropItemMaxNum=3000 (掉落物品最大数量)
DropItemMaxNum_UNKO=100 (掉落物品最大数量_UNKO)
BaseCampMaxNum=128 (基地最大数量)
BaseCampWorkerMaxNum=15 (基地工人最大数量)
DropItemAliveMaxHours=1.000000 (掉落物品存活最长时间(小时)
bAutoResetGuildNoOnlinePlayers=False (自动重置公会无在线玩家)
AutoResetGuildTimeNoOnlinePlayers=72.000000 (无在线玩家时自动重置公会时间(小时)
GuildPlayerMaxNum=20 (公会最大玩家数量)
PalEggDefaultHatchingTime=72.000000 (伙伴蛋默认孵化时间(小时)
WorkSpeedRate=1.000000 (工作速度倍率)
bIsMultiplay=False (多人游戏)
bIsPvP=False (PvP模式)
bCanPickupOtherGuildDeathPenaltyDrop=False (可以拾取其他公会死亡惩罚掉落)
bEnableNonLoginPenalty=True (启用非登录惩罚)
bEnableFastTravel=True (启用快速旅行)
bIsStartLocationSelectByMap=True (根据地图选择起始位置)
bExistPlayerAfterLogout=False (登出后玩家仍存在)
bEnableDefenseOtherGuildPlayer=False (启用防御其他公会玩家)
CoopPlayerMaxNum=4 (合作玩家最大数量)
ServerPlayerMaxNum=32 (服务器玩家最大数量)
ServerName="" (服务器名字)
ServerDescription="" (服务器描述)
AdminPassword="" (管理员密码)
ServerPassword="" (服务器密码)
PublicPort=8211 (公共端口号)
PublicIP="" (公共IP地址)
RCONEnabled=False (启用RCON)
RCONPort=25575 (RCON端口号)
Region="" (区域)
bUseAuth=True (使用身份验证)
BanListURL="https://api.palworldgame.com/api/banlist.txt" (封禁名单URL)

配置文件在线生成

在线生成(临时开放,寒山雨大佬提供)

在线生成(Github大佬Bluefissure原作者提供,更新快,访问可能较慢)

存档相关

本地存档位置

%localappdata%\Pal\Saved\SaveGames\***************\存档ID

存档转换工具下载

tools.zip

Q&A

问:目前可以实现的转档方案?

答:首先明确几种游戏的区别:

  • 开始游戏:开房间,本机作为房主,可允许最多3人通过 加入多人游戏(邀请码) 的方式进入,称为 本地档

  • 加入多人游戏(专用服务器):包括社区服务器和自建服务器,称为:联机档

目前可以实现的转档方案:

  • 本地档联机档

  • 联机档本地档

  • 联机档迁移

问:本地档转联机档/联机档迁移后黑地图?

答:先登录一次服务器,然后退出,在文件资源管理器里输入 %localappdata%\Pal\Saved\SaveGames\,往里找 旧存档ID 文件夹里的 LocalData.sav 文件复制到 新存档ID 文件夹

问:服务器可分配至据点工作的帕鲁数量上限修改后不生效?

答:当前游戏版本中 PalWorldSettings.iniBaseCampWorkerMaxNum 修改后不生效,可使用同样的配置生成 WorldOption.sav 文件后放置到服务器steamapps/common/PalServer/Pal/Saved/SaveGames/0/.../WorldOption.sav 路径下,运行一次服务器在游戏中生效后即可删除重启服务器。

问:转档后有的帕鲁举不起来?

答:把据点的帕鲁放进背包里面,按 P 进入背包,然后按 R 丢弃该帕鲁,再按 F 捡起来,放回据点里面,这样帕鲁就可以互动了。

问:如何修改服务器端FPS限制?

答:服务器端找到路径:

  • C:\Program Files\PalServer\Palworld\Pal\Saved\Config\WindowsServer\Engine.ini (windows服务器)

  • /home/steam/Steam/steamapps/common/PalServer/Palworld/Pal/Saved/Config/LinuxServer/Engine.ini (Linux服务器)

在该文件最下面下添加(最后的数字建议填30/60/90/120)

[/Script/OnlineSubsystemUtils.IpNetDriver]

NetServerMaxTickRate=90

保存文件,重启服务器生效。

问:Linux下迁移存档成功但变成新建角色?

答:查看/home/steam/Steam/steamapps/common/PalServer/Palworld/Pal/Saved/SaveGames/ 路径下 新存档ID 文件夹及子文件的权限及权限组是否为 steam:steam ,若不是则修改。

参考命令:

sudo chown -R steam:steam /home/steam/Steam/steamapps/common/PalServer/Palworld/Pal/Saved/SaveGames/*  

问:Windows服务端如何迁移到Windows服务端?

答:在新的 Windows服务器上正常安装服务端,然后关闭服务端,复制旧的 Windows 服务器上 C:\Program Files\PalServer\steam\steamapps\common\PalServer\Pal\Saved\ 路径下的所有文件到新服务器上,再次开启服务端,即可无缝迁移。

注意!若在 PalWorldSettings.ini 设置了服务器 IP 的需要修改为的新的服务器 IP 。

问:转档工具如何使用?

答:改转档工具为 Github 项目 xNul/palworld-host-save-fix 可以修复在迁移转档过程中导致的创建新用户问题。

命令:

python fix-host-save.py <uesave.exe> <save_path> <new_guid> <old_guid> <guild_fix>

<uesave.exe> - uesave.exe 的路径

<save_path> - 保存文件夹的路径

<new_guid> - 新服务器上玩家的 GUID

<old_guid> - 旧服务器上玩家的 GUID

<guild_fix> - True 或 False,是否修复[公会错误]

示例:

python fix-host-save.py "C:\Users\John\.cargo\bin\uesave.exe" "C:\Users\John\Desktop\my_temporary_folder\2E85FD38BAA792EB1D4C09386F3A3CDA" 6E80B1A6000000000000000000000000 00000000000000000000000000000001 False


Comment