Loading... ## 前言 无论是Steam或者Xbox的Palword都仅能支持通过邀请码多人联机模式,且最大只能支持4人游玩,为了可以和朋友们爽快开黑抓怪,特别建立一个服务端来给大家游玩,并为安装的过程做个记录。 ## 一、服务器配置需求 幻兽帕鲁的服务器因为有内存泄漏问题,会随着游玩时间的增加而占用大量的内存 所以如果想保持24小时长期运行,可能需要32GB+的服务器内存。 当然,8GB-16GB也是可以开服务器的,但是可能会频繁地重启。 官方服务器要求: | 硬件 | 推荐规格 | 解释 | | :-----: | :------: | ----------------------------------------------------------------------------------------------------------- | | 处理器 | 4核心 | 有优化参数但最大支持4核心,所以再多没有意义 | | 内存 | 16GB | 建议32GB+获得更稳定的服务8G能运行,但是会频繁崩溃 | | 带宽 | 5-10Mbps | 一般来说基本没问题 | | 硬盘 | 5GB | 游戏存档比较小,目前一个世界基本只有20-30MB左右的占用考虑到服务器存档可能需要频繁备份,可以妥善考虑增大存储 | | 端口 | 8211 | 默认8211但可以通过参数自定义 | | SELinux | False | 建议关闭SELinux | 如果你是使用迷你主机或者云主机,内存配额有限,也可以采用增大SWAP虚拟内存的方式,这样即使非官方推荐的配置,也可以一定程度上保证服务器的稳定运行。(当然,还是会受限于磁盘的I/O性能) ## 二、Linux手动创建 ### 1.创建用户 ```bash # 新创建一个palworld用户 sudo useradd -m palworld # 给palworld用户设置一个密码 passwd palworld # 这一步将会需要你输入两次密码确认 # 切换到palworld用户 sudo -u palworld -s ``` ### 2.安装Steamcmd服务 ```bash # glibc.i686 libstdc++.i686 tar 依赖项目 sudo dnf install -y glibc.i686 libstdc++.i686 tar # steamcmd_linux.tar.gz 下载steamcmd的包 curl -o steamcmd_linux.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # steamcmd_linux.tar.gz 解压 tar xf steamcmd_linux.tar.gz # steamcmd.sh 运行 ./steamcmd.sh ``` #### **Ubuntu的:** ```bash sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update sudo apt install steamcmd steamcmd ``` #### **Debian的:** ```bash sudo apt update; sudo apt install software-properties-common; sudo apt-add-repository non-free; sudo dpkg --add-architecture i386; sudo apt update sudo apt install steamcmd steamcmd ``` 或者也可以移步:([SteamCMD官方安装教程](https://developer.valvesoftware.com/wiki/SteamCMD#Linux)) 如果你现在命令行当前是 `Steam>` 则成功运行 ### 3.安装Palworld专用服务器 ```bash # 使用匿名认证登录 login anonymous # 安装steamclient.so 依赖 app_update 1007 # 安装PalWorld服务器(APPID为2394010) app_update 2394010 validate # 等待下载进度条 # 退出 steamcmd quit ``` 如果安装完成并回到了 `palworld`用户,应该没有问题: ```bash #这是一段成功的输出时的样子 Update state (0x81) verifying update, progress: 99.61 (4710917917 / 4729403737) Success! App '2394010' fully installed. Steam>quit [palworld@localhost ~]$ ``` ### 4.补充steamclient.so依赖项 ````bash # 在当前用户目录下创建相关文件夹 mkdir -p /home/palworld/.steam/sdk64/ # 将steamclient.so依赖复制到相关目录 cp /home/palworld/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so /home/palworld/.steam/sdk64/steamclient.so ```` ### 5.验证服务器启动 ```bash # 转到服务器目录 cd /home/palworld/Steam/steamapps/common/PalServer # 启动服务 ./PalServer.sh ``` 如果成功,你应该会展示如下内容: ```bash # 这是成功运行服务器时的内容 Shutdown handler: initalize. Increasing per-process limit of core file size to infinity. setrlimit() failed with error 22 (Invalid argument) - Max per-process value allowed is 0 (we wanted infinity). dlopen failed trying to load: steamclient.so with error: steamclient.so: cannot open shared object file: No such file or directory [S_API] SteamAPI_Init(): Loaded '/home/palworld/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so') CAppInfoCacheReadFromDiskThread took 4 milliseconds to initialize dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory Setting breakpad minidump AppID = 2394010 [S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded. [S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded. [S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded. [S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded. ``` 如果需要停止,请多按几次 `Ctrl + C` ### 6.服务器参数 此外 `PalServer.sh` 还有可供调整的参数: | 参数 | 解释 | | :----------------------------------- | :----------------------------------------------------------------------------------------------------------- | | -port=8211 | 允许自定义以8211的端口运行 | | -players=32 | 允许服务器的最大人数 | | -EpicApp=PalServer | 在社区服务器上展示(会有陌生玩家进入) | | -useperfthreads -UseMultithreadForDS | 改进多线程 CPU 环境中的性能 最多最多 4 个线程,分配更多线程没有多大意义 | | -NoAsyncLoadingThread | 禁止异步,这些资源和元素的加载将变为同步过程,即主线程需要等待这些资源完全加载完成后,才能继续执行后续操作。 | 使用例子: ```bash # 在6666端口执行,并最大支持16个玩家,启用多线程优化 ./PalServer.sh -port=6666 -players=16 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS ``` ## 三、注册系统服务(内存崩溃重启) 一切毫无问题地启动服务器,请将其注册为 `systemd` 服务以保持其始终运行。 也是低内存服务器崩溃重启的解决方案,当然即使你达到推荐的配置也可以采用该方式。 参见本篇:([Ubuntu Systemctl 注册服务项自动管理](https://kroxitine.com/index.php/archives/136/)) ## 四、服务器自动备份 因服务器内存经常溢出崩溃,以及各种不可预料的BUG的发生,频繁备份服务器的存档是有必要的,需要配置一个自动任务来解决该问题。 参见本篇:[Ubuntu使用crontab自动任务执行shell](https://kroxitine.com/index.php/archives/140/) ## 五、服务器RCON远程管理 参见本篇:[Linux下使用RCON远程管理游戏服务器命令](https://kroxitine.com/index.php/archives/142/) ## 六、服务器自定义世界设置平衡性优化 在服务器根目录中有一个 `DefaultPalWorldSettings.ini` 的设置文件,它记载了服务器的默认平衡性优化,但在这个目录是不生效的,我们需要将他复制到指定的目录中: ```bash # 进入服务器根目录 cd /home/palworld/Steam/steamapps/common/PalServer # 复制配置文件到指定目录 cp DefaultPalWorldSettings.ini Pal/Saved/Config/LinuxServer/PalWorldSettings.ini # 编辑配置 vi PalWorldSettings.ini ``` **请注意,这个配置文件将只有一行非常长的参数,请不要对它进行换行操作!** 下面来说明这些配置项目: | 配置项 | 说明 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | Difficulty | 难度,貌似没有给出难度的其他参数 | | DayTimeSpeedRate | 白天的流逝倍率,值越大速度越快 | | NightTimeSpeedRate | 夜间的流逝倍率,值越大速度越快 | | ExpRate | 经验倍率 | | PalCaptureRate | 帕鲁捕捉倍率 | | PalSpawnNumRate | 帕鲁生成倍率 | | PalDamageRateAttack | 帕鲁伤害倍率 | | PalDamageRateDefense | 帕鲁受伤倍率 | | PlayerDamageRateAttack | 玩家伤害倍率 | | PlayerDamageRateDefense | 玩家受伤倍率 | | PlayerStomachDecreaceRate | 玩家饥饿值下降的倍率 | | PlayerStaminaDecreaceRate | 玩家体力下降的倍率 | | PlayerAutoHPRegeneRate | 玩家自动回血的倍率 | | PlayerAutoHpRegeneRateInSleep | 玩家睡觉时回血倍率 | | PalStomachDecreaceRate | 帕鲁饥饿值下降倍率 | | PalStaminaDecreaceRate | 帕鲁体力下降倍率 | | PalAutoHPRegeneRate | 帕鲁自动回血倍率 | | PalAutoHpRegeneRateInSleep | 帕鲁睡觉自动回血倍率 | | BuildObjectDamageRate | 建筑受到伤害倍率 | | BuildObjectDeteriorationDamageRate | 建筑自然腐烂的倍率 | | CollectionDropRate | 自然收集掉落物倍率 | | CollectionObjectHpRate | 自然收集掉物品耐久倍率 | | CollectionObjectRespawnSpeedRate | 自然收集物品再生速率 | | EnemyDropItemRate | 帕鲁掉落物品的概率 | | DeathPenalty | 死亡惩罚 (参数 - 解释)None - 死亡不掉落Item - 掉落收集物(不掉落装备)ItemAndEquipment - 掉落物品和装备All - 全部掉落(包括帕鲁) | | GuildPlayerMaxNum | 工会最大人员数 | | PalEggDefaultHatchingTime | 帕鲁孵蛋的时间(默认最大72小时)如果不想等待孵蛋,可以调为0.01 | | ServerPlayerMaxNum | 服务器最大人数(但实际上会被服务器-players启动参数控制) | | ServerName | 服务器名称 | | ServerDescription | 服务器展示的附加信息 | | AdminPassword | 管理员的密码游戏中通过/adminpassword <密码> 登陆 | | ServerPassword | 服务器进入的密码私人服务器强烈推荐设置密码 | | PublicPort | 服务器端口(实际上被服务器-port启动参数控制) | | PublicIP | 服务器IP地址,实际没什么作用 | | RCONEnabled | RCON远程控制端口,默认关闭False, 如需启动则输入True | | RCONPort | RCON的端口,默认25565 | ## 七、服务器游戏内管理员指令用法 在进入游戏后,可以通过使用/adminpassword <密码> 登录管理员账号,以使用某些指令,请注意:需要在 `PalWorldSetting.ini`中配置了 `AdminPassword` 项的密码才能使用。 #### 1.服务器管理员的指令 | 命令 | 解释 | | ----------------------------- | -------------------------------------------------------------------------------------------------------- | | /Shutdown {倒数秒} {关服信息} | 倒计时关闭服务器,并广播一条信息 | | /DoExit | 强制关闭服务器 | | /Broadcast {信息} | 在服务器广播一条信息 | | /KickPlayer {SteamID} | 通过SteamID踢出玩家,还能再进 | | /BanPlayer {SteamID} | 通过SteamID封禁玩家,无法进入 | | /TeleportToPlayer {SteamID} | 通过Steam ID传送到玩家 | | /TeleportToMe {SteamID} | 将指定SteamID玩家传送到你身边请注意不要在骑帕鲁的时候使用这个功能,你人物会卡消失,只能完全重进游戏 | | /ShowPlayers | 展示当前服务器玩家的信息和ID请注意不要在对方骑帕鲁的时候使用这个功能,对方人物会卡消失,只能完全重进游戏 | | /Info | 展示服务器信息 | | /Save | 保存服务器存档 | #### 2.如何取玩家Steam ID 登录管理员密码,并点击 `ESC` 键,你将在右方看到 `当前玩家列表`,点击玩家即可复制该玩家的 `Steam ID` 之后你可以按 `Enter`使用 `/TeleportToPlayer (按Ctrl + V粘贴)` 即可传送玩家。 #### 3.如何解封玩家 如果你使用了 `/BanPlayer` 封禁了一个玩家,现在将要解封,则需要编辑此文件: ``` vi /home/palworld/Steam/steamapps/common/PalServer/Pal/Saved/SaveGames/banlist.txt ``` 将其SteamID删除,等待大概2分钟左右,即可解封。 ## 八、服务器模组安装方法 服务器也支持使用模组来增加玩法,例如 `128据点`的Mods(需要服务器和客户端同时安装) [下载:128据点MOD.zip(需解压)](https://cdn.kroxitine.com/blog/typecho/128据点MOD.zip) 解压出 `AllTheBases_P.pak` 文件后,放到该目录下完成MOD的安装: ```bash # 进入指定目录 cd /home/palworld/Steam/steamapps/common/PalServer/Pal/Content/Paks` # 创建MOD文件夹 mkdir Mod # 将AllTheBases_P.pak 放在Mod目录下 cd Mod ``` **只对玩法功能更改的有效,对于帕鲁或玩家换皮肤之类的模组是无效的** ## 九、通过编辑服务器Engine提高性能 你可以在服务器遇到低FPS或者闪回现象,可以尝试以下方法: ```bash cd /home/palworld/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer vi Engine.ini ``` 定位到最后一行并追加内容: ```ini [/script/onlinesubsystemutils.ipnetdriver] LanServerMaxTickRate=120 NetServerMaxTickRate=120 [/script/engine.player] ConfiguredInternetSpeed=104857600 ConfiguredLanSpeed=104857600 [/script/socketsubsystemepic.epicnetdriver] MaxClientRate=104857600 MaxInternetClientRate=104857600 [/script/engine.engine] bSmoothFrameRate=true bUseFixedFrameRate=false SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=30.000000),UpperBound=(Type=Exclusive,Value=120.000000)) MinDesiredFrameRate=60.000000 FixedFrameRate=120.000000 NetClientTicksPerSecond=120 ``` 下面详细介绍了上面Engine.ini文件中提供的每个设置对 PalWorld 服务器的作用: **这些设置应该有助于优化您的 PalWorld 服务器,减少延迟和闪回现象。在进行更改之前,请始终备份现有设置,并在实施后监视服务器性能以进行任何必要的调整。** #### 1.Engine配置解释 | 配置项 | 描述 | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **LanServerMaxTickRate** | 此设置适用于局域网(LAN)服务器。它指定服务器每秒处理的最大更新次数或“滴答数”。更高的滴答率(此处设置为120)意味着服务器更新更频繁,这可以使游戏玩法更流畅,并更直接地响应LAN设置中的玩家操作。 | | **NetServerMaxTickRate** | 类似于LAN设置,但适用于基于Internet的服务器。它还将服务器的最大滴答率设置为120。这种高滴答率有利于减少延迟并提高通过互联网连接的玩家的整体响应能力。 | | **ConfiguredInternetSpeed** | 此设置对于优化每个播放器的网络带宽分配至关重要。它为玩家设置了较高的假设互联网速度(100 Mbps),这有助于减少网络带宽限制的机会。 | | **ConfiguredLanSpeed** | 类似于互联网速度设置,但专门针对LAN上的玩家。这确保了局域网上的玩家可以利用其网络的最大容量,而不受游戏服务器施加任何人为限制。 | | **MaxClientRate & MaxInternetClientRate** | 这些设置用于优化客户端(玩家)的数据传输速率。两者都设置为相同的高值(100 Mbps),旨在确保服务器能够处理大量数据而不会导致延迟。 | | **bSmoothFrameRate** | 此设置使游戏引擎能够消除帧速率的波动。通过这样做,它旨在提供更一致和视觉上更稳定的游戏体验。帧速率平滑对于保持游戏性能和视觉质量之间的平衡特别有益。 | | **bUseFixedFrameRate** | 在设置中设置为“false”,此选项允许游戏动态调整帧速率,而不是将其锁定为固定值。这种动态调整可以带来更好的整体性能,因为游戏可以适应不同的处理需求。 | | **SmoothedFrameRateRange** | 设置平滑帧速率的目标范围,下限为30 FPS,上限为120 FPS。游戏将尝试将帧速率保持在此范围内,平滑帧速率的任何跳跃或下降,以保持一致的游戏玩法。 | | **MinDesiredFrameRate** | 这是帧速率的最小阈值,设置为60 FPS。这是确保游戏至少在此帧速率畅运行的基线。 | | **NetClientTicksPerSecond** | 增加到120,此设置可提高客户端更新的频率。更频繁的更新意味着游戏状态会更频繁地刷新,这可以提高游戏的响应速度并减少延迟,尤其是在快节奏的场景中。 | 最后修改:2024 年 06 月 27 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 喜欢就请我喝一杯奶茶吧~