专用服务器

From PZwiki
< Dedicated serverDedicated server/zh-hans
游戏世界联机专用服务器

现在可以在Windows或Linux上托管《僵尸毁灭工程》专用服务器。

下载服务器文件

通过Steam下载

  1. 导航到Steam库并选择过滤工具类。
  2. 找到“僵尸毁灭工程专用服务器”并下载/安装它。

注意:不要通过Steam启动服务器。如果不小心这样做了,请验证文件的完整性。

通过SteamCMD下载

SteamCMD是Steam的命令行版本。 V社开发者wiki提供了如何下载和配置SteamCMD的说明

Windows

当您已经下载并提取了SteamCMD到您选择的文件夹中,请通过执行从命令行运行steamcmd.exe来运行它。

接着可以设置存储专用服务器文件的安装目录。

以下是将下载目录设置为C盘一个单独的文件夹的示例。您可以选择任何您想要存储服务器文件的地方。

force_install_dir C:\PZServer

对于Linux用户而言,服务器默认会安装到“/home/<MYOURUSERNAME>/.steam/steam/steamapps/common/Project Zomboid Dedicated Server/”目录。

当安装目录设置好后,匿名登录到Steam:

login anonymous

接着下载《僵尸毁灭工程》专用服务器文件:

app_update 380870 validate

在看到“Success! App '380870' fully installed”的提示后, 关闭SteamCMD:

quit

Linux

对于Debian和Ubuntu,首先安装SteamCMD

其中一些命令可能需要以root身份运行。要获得root访问权限,您可能需要使用“sudo”来获取root权限。

例如:

- 假设已经root则输入以下命令:
dpkg --add-architecture i386

- 否则输入以下命令:
sudo dpkg --add-architecture i386

如果您找不到`SteamCMD`包,您可能需要启用`non-free`存储库。

apt-get install software-properties-common -y
apt-add-repository non-free

继续安装`SteamCMD`。

dpkg --add-architecture i386
apt-get update
apt-get install steamcmd

不要以root身份运行服务器。添加一个用户,例如pzuser

adduser --disabled-password pzuser

我们将在“/opt/pzserver”中安装《僵尸毁灭工程》服务器。

mkdir /opt/pzserver
chown pzuser:pzuser /opt/pzserver

pzuser用户登录。

su - pzuser

如果您使用“sudo”来处理系统上的权限提升,请输入:

sudo su - pzuser

创建配置文件“/home/pzuser/update_zomboid.txt”来管理SteamCMD。

cat >$HOME/update_zomboid.txt <<'EOL'
// update_zomboid.txt
//
@ShutdownOnFailedCommand 1 // 如果曾更新过多人服务器则设为0
@NoPromptForPassword 1
force_install_dir /opt/pzserver/
// 对于不需要登录的服务器
login anonymous
app_update 380870 validate
quit
EOL

现在安装《僵尸毁灭工程》专用服务器。您每次想要更新服务器到最新版本时都会使用这个命令。

steamcmd +runscript $HOME/update_zomboid.txt

转发所需端口

《僵尸毁灭工程》专用服务器需要开放以下端口才能成功连接到客户端:

  • 16261 UDP
  • 16262 UDP - 直连端口

Linux

Linux上常用的防火墙是UFW(简单防火墙)。要在防火墙上打开所需的端口,您可以运行:

# 打开端口
sudo ufw allow 16261/udp
sudo ufw allow 16262/udp
# 重启防火墙以使添加的规则生效
sudo ufw reload

在单个系统上运行多个服务器

上面提到的端口是写在“SERVERNAME.ini”文件中的第一个服务器的默认端口配置。如果您想在一个Linux系统上运行多个僵毁服务器,您需要遵循以下步骤:

  • 在Linux中的home目录创建两个单独的帐户。
  • 在两个用户下运行steamcmd以创建两个steamcmd实例。
  • 在两个用户下运行login anonymousapp_update 380870 validate命令(推荐使用脚本执行——如果使用脚本,您需要在每个用户下复制上面的脚本并相应地编辑目录)。
  • 在运行第2个服务器实例之前,请务必在服务器上打开更多的UDP端口(例如16274和16275端口)。
  • 在第2个Steam服务器中的“SERVERNAME.ini”文件中编辑UDP端口设置以映射这些端口。

每个服务器都需要2个空闲的UDP端口。

在41.77版本之前使用的端口

  • 16261 UDP
  • 8766, 8767 UDP

运行服务器

Windows

导航到您指定的下载文件夹(如果您按照上述步骤,则是“C:\pzserver”目录)并找到三个StartServer批处理文件。

如果您使用Steam安装服务器,则默认下载目录是“C:\Program Files (x86)\Steam\steamapps\common\Project Zomboid Dedicated Server”。

StartServer32启动兼容Steam的32位专用服务器。 StartServer64启动兼容Steam的64位专用服务器。 StartServer64_nosteam启动非Steam 64位专用服务器。

运行与您的操作系统相对应的批处理文件。一般是64位,除非您有意运行32位或非Steam版本。

重要提示:默认情况下,StartServer64批处理文件指定了16GB的起始内存。您必须编辑StartServer64文件并将-Xms和-Xmx文件更改为您要用于服务器内存的值,否则服务器将因内存错误而无法启动。

一个使用6GB内存的示例(注意-Xms和-Xmx值):

".\jre64\bin\java.exe" -Djava.awt.headless=true -Dzomboid.steam=1 -Dzomboid.znetlog=1 -XX:+UseZGC -XX:-CreateCoredumpOnCrash -XX:-OmitStackTraceInFastThrow -Xms6g -Xmx6g -Djava.library.path=natives/;natives/win64/;. -cp %PZ_CLASSPATH% zombie.network.GameServer -statistic 0

参考:这相当于使用“主机”从主菜单启动本地多人服务器时的“服务器内存”选项。

启动服务器将打开一个命令控制台窗口,该窗口开始在您的计算机上执行服务器。第一次运行时,它将提示您为其创建的管理员帐户设置密码。服务器使用默认游戏设置完成设置后,将输出一个指示成功或失败的消息。

服务器成功启动的提示。

Linux

导航到您的安装文件夹(默认为“/home/YOURUSERNAME/.steam/steam/steamapps/common/Project Zomboid Dedicated Server”)并启动start-server.sh文件。以下示例使用默认文件夹:

cd ~/.steam/steam/steamapps/common/Project\ Zomboid\ Dedicated\ Server\/

然后启动start-server.sh:

bash start-server.sh

但是,如果您按照本页的说明在Linux中通过SteamCMD安装《僵尸毁灭工程》服务器,您只需要执行以下命令:

/opt/pzserver/start-server.sh
Mp lin terminal.png

启动服务器将打开一个命令控制台窗口,该窗口开始在您的计算机上执行服务器。第一次运行时,它将提示您为其创建的管理员帐户设置密码。服务器使用默认游戏设置完成设置后,将输出一个指示成功或失败的消息。

服务器成功启动的提示。

Systemd

警告:《僵尸毁灭工程》开发者明确不建议使用此方法,目前的安全措施应确保服务器在关闭时正确保存,但不能保证。

一个选择是将服务器配置为在system.d下运行。

在这之前:

  • 手动启动服务器(如上所述)至少一次,因为第一次会要求您输入管理员密码。
  • 确保您不再以pzuser身份登录(如果是,则输入exit)——system.d命令应以root身份运行。

首先配置system.d单元:

cat >/usr/lib/systemd/system/zomboid.service <<'EOL'
[Unit]
Description=Project Zomboid Server
After=network.target

[Service]
PrivateTmp=true
Type=simple
User=pzuser
WorkingDirectory=/opt/pzserver/
ExecStart=/bin/sh -c "exec /opt/pzserver/start-server.sh </opt/pzserver/zomboid.control"
ExecStop=/bin/sh -c "echo save > /opt/pzserver/zomboid.control; sleep 15; echo quit > /opt/pzserver/zomboid.control"
Sockets=zomboid.socket
KillSignal=SIGCONT

[Install]
WantedBy=multi-user.target
EOL

接着添加“zomboid.socket FIFO服务”,这将允许我们向服务器发送命令,并保证安全关闭。

cat >/usr/lib/systemd/system/zomboid.socket <<'EOL'
[Unit]
BindsTo=zomboid.service

[Socket]
ListenFIFO=/opt/pzserver/zomboid.control
FileDescriptorName=control
RemoveOnStop=true
SocketMode=0660
SocketUser=pzuser

EOL

完成后,您可以使用以下命令:

# start a server
systemctl start zomboid.service

# stop a server
systemctl stop zomboid.service

# restart a server
systemctl restart zomboid.service

# check server status (ctrl-c to exit)
systemctl status zomboid.service

日志现在由journalctl管理。要访问服务器的日志,请执行以下命令:

journalctl -u zomboid.service -f

如果遇到“zomboid.control”未找到的问题,则您的socket可能没有正确初始化。请尝试:

systemctl start zomboid.socket

然后再试一次:

systemctl start zomboid.service

要向服务器发送命令,请使用以下命令:

echo "command" > /opt/pzserver/zomboid.control

如果您使用“sudo”来处理系统上的权限提升,您应该使用:

sudo echo "command" | sudo tee /opt/pzserver/zomboid.control

要查看您的命令是否有效,请检查journalctl,一个很好的测试命令是help

连接服务器

添加服务器面板。
  1. 启动《僵尸毁灭工程》。
  2. 点击加入菜单选项。
  3. 点击收藏夹选项卡。
  4. 添加您的公共IPv4地址
  5. 输入端口(默认为16261)。
  6. 输入您的帐户详细信息(任何您需要的信息)。
  7. 点击保存,选择添加的服务器并加入。

注意I:托管非Steam专用服务器需要玩家通过游戏客户端的非Steam版本连接。对于Steam游戏所有者,可以通过在其属性菜单下的《僵尸毁灭工程》中添加-nosteam来实现。

注意II:如果为LAN或VPN客户端托管服务器,则需要使用本地IPv4地址或VPN定义的地址。

注意III:截至游戏版本41.65,托管并在同一台机器上玩的玩家可以仅使用公共IPv4地址连接到其服务器。如果遇到连接问题,请考虑在服务器屏幕上的本地IP字段中添加本地IPv4地址。此地址可以通过在桌面上点击开始,键入cmd,回车,在打开的命令提示符中键入ipconfig再按回车键来确定。

管理服务器

服务器管理员有许多工具可供使用来自定义和管理服务器。

配置服务器游戏设置

Windows

服务器数据保存位置

默认情况下,服务器将在“C:\Users\YourUsername\Zomboid”中查找名为servertest的游戏设置和世界数据。如果没有这些数据,服务器将使用默认游戏设置自动生成它们。使用以下表格作为参考。

文件名 文件位置 描述
servertest.ini C:\Users\YourUsername\Zomboid\Server 此文件包含服务器的游戏设置。可以用notepad编辑。
servertest_SandboxVars.lua C:\Users\YourUsername\Zomboid\Server 此文件包含服务器沙盒配置设置。可以用notepad编辑。
servertest_spawnpoints.lua C:\Users\YourUsername\Zomboid\Server 此文件包含服务器可用的出生点。可以设置自定义出生点。可以用notepad编辑。
servertest_spawnregions.lua C:\Users\YourUsername\Zomboid\Server 此文件包含可用的出生点(例如马尔德劳,罗斯伍德等)。可以用notepad编辑。
n/a C:\Users\YourUsername\Zomboid\Saves\Multiplayer\servertest 此文件夹包含服务器的生成/保存的世界数据。
自定义设置

可以通过两种方式自定义服务器设置。

  1. 通过游戏客户端
  2. 通过notepad编辑相关文件

要使用游戏客户端自定义设置,请启动《僵尸毁灭工程》,选择主机菜单选项,然后选择管理设置菜单选项。

将Steam创意工坊订阅的模组添加到服务器后,将在连接客户端机器时自动下载。

如果服务器至少成功运行过一次:

  1. 从保存的服务器设置列表中选择servertest
  2. 点击编辑设置
  3. 编辑所需设置并保存

如果服务器没有成功运行过:

  1. 点击创建新设置
  2. 将这些设置命名为servertest
  3. 编辑所需设置并保存

下次服务器成功启动时,它将使用定义的servertest.ini和lua文件。可以使用管理命令showoptions或在notepad中打开servertest.iniservertest_SandboxVars.luaservertest_spawnpoints.luaservertest_spawnregions.lua来验证设置。

注意:在服务器运行时可以将更改保存到servertest.ini。保存servertest.ini后,使用管理命令reloadoptions使更改生效。

自定义服务器名称

您可以将服务器名称自定义为不同于“servertest”的名称,以便快速阅读和识别世界,或者可以在不必在服务器和客户端上移动大量文件以保留该世界的情况下切换到新世界。

首先,要知道的是,玩家地图数据在本地客户端下存储在您的IP地址和端口下。如果您不希望地图信息泄漏,您可能需要在服务器设置中更改端口。

如果您要保存现有服务器,您有两个选择:

  1. 永远不要在任何其他PZ服务器上使用端口16261。
  2. 让任何以前加入的人查找一个名称格式为123.45.0.12_16261_a589371111b0ccerf81acc30e918f8c9[服务器IP地址 服务器端口 其它]的文件,该文件位于“C:\Users\%your username%\Zomboid\Saves”目录,并让他们将其放在安全的地方或编辑文件夹名称。

然后选中,右键单击,选择复制,右键单击空白处,粘贴,创建一个与您通常启动servertest的文件的副本。

重命名新文件(或不重命名)。

服务器文件夹。

在某些文本编辑器(例如notepad)中打开文件并插入:

-servername YOURSERVERNAME behind -cp %PZ_CLASSPATH% zombie.network.GameServer

例如,使用名称为“pizza”的服务器:

@setlocal enableextensions
@cd /d "%~dp0"
SET PZ_CLASSPATH=java/istack-commons-runtime.jar;java/jassimp.jar;java/javacord-2.0.17-shaded.jar;java/javax.activation-api.jar;java/jaxb-api.jar;java/jaxb-runtime.jar;java/lwjgl.jar;java/lwjgl-natives-windows.jar;java/lwjgl-glfw.jar;java/lwjgl-glfw-natives-windows.jar;java/lwjgl-jemalloc.jar;java/lwjgl-jemalloc-natives-windows.jar;java/lwjgl-opengl.jar;java/lwjgl-opengl-natives-windows.jar;java/lwjgl_util.jar;java/sqlite-jdbc-3.27.2.1.jar;java/trove-3.0.3.jar;java/uncommons-maths-1.2.3.jar;java/
".\jre64\bin\java.exe" -Djava.awt.headless=true -Dzomboid.steam=1 -Dzomboid.znetlog=1 -XX:+UseZGC -XX:-CreateCoredumpOnCrash -XX:-OmitStackTraceInFastThrow -Xms4g -Xmx4g -Djava.library.path=natives/;natives/win64/;. -cp %PZ_CLASSPATH% zombie.network.GameServer -servername pizza -statistic 0
PAUSE

只要执行上述操作,就可以创建一个有所有必需文件的新服务器。您可以稍后编辑服务器设置。

如果您已经创建了一个具有您想要的所有设置和合适名称的服务器,请使用与您的服务器名称相同的名称在“C:\Users\%your username%\Zomboid\db”目录创建一个新文件。

Linux

服务器数据保存位置

默认情况下,服务器将在“~/Zomboid”(假设您按照上述说明进行操作,那么就是“/home/pzuser/Zomboid”)中查找名为servertest的游戏设置和世界数据。如果没有这些数据,服务器将使用默认游戏设置自动生成它们。使用以下表格作为参考。

文件名 文件位置 描述
servertest.ini ~/Zomboid/Server 此文件包含服务器的游戏设置。
servertest_SandboxVars.lua ~/Zomboid/Server 此文件包含服务器沙盒配置设置。
servertest_spawnpoints.lua ~/Zomboid/Server 此文件包含服务器可用的出生点。可以设置自定义出生点。
servertest_spawnregions.lua ~/Zomboid/Server 此文件包含可用的出生点(例如马尔德劳,罗斯伍德等)。
n/a ~/Zomboid/Saves/Multiplayer/servertest 此文件夹包含服务器的生成/保存的世界数据。

管理员命令

以下命令可以在服务器控制台窗口或游戏中执行(在游戏中使用斜杠前缀),前提是用户具有管理员权限。有些东西是区分大小写的(例如:Base.Axe有效,但base.axe无效)。

命令 描述
addalltowhitelist 将所有当前使用密码连接的用户添加到白名单中,以便保护其帐户。
additem 给玩家一个物品。如果没有给出用户名,则您将收到物品。计数是可选的。用法:/additem \"username\" \"module.item\" count,例如:additem rj Base.Axe 1
adduser 使用此命令将新用户添加到白名单服务器。用法:/adduser \"username\" \"pwd\",例如:adduser rj 12345
addusertowhitelist 将使用密码连接的用户添加到白名单中,以便保护其帐户。用法:/addusertowhitelist \"username\",例如:addusertowhitelist rj
addvehicle 在玩家附近生成车辆。用法:/addvehicle \"script\" \"user or x,y,z\",例如:addvehicle Base.VanAmbulance rj
addxp 给玩家经验点。用法:/addxp \"playername\" perkname=xp,例如:addxp rj Woodwork=2
alarm 在管理员的位置发出建筑警报。(必须在房间内)
banid 禁止SteamID。用法:banid SteamID
banuser 禁止用户。添加-ip以同时禁止IP。添加-r \"reason\"以指定禁止的原因。用法:/banuser \"username\" -ip -r \"reason\",例如:banuser rj -ip -r spawn kill
changeoption 更改服务器选项。用法:/changeoption optionName \"newValue\",例如:changeoption SleepAllowed true
checkModsNeedUpdate 指示是否已更新模组。将答案写入日志文件(DebugLog-server.txt)。
chopper 在随机玩家身上放置直升机事件。
createhorde 在玩家附近生成一大群僵尸。用法:/createhorde count \"username\",例如:createhorde 150 rj,用户名是可选的,除了服务器控制台。
createhorde2 未知(错误:缺少翻译“UI_ServerOptionDesc_CreateHorde2”)
godmode 使玩家无敌。未设置用户名将在自己身上切换无敌。用法:/godmode \"username\" -value,例如:godmode rj -true(或-false
gunshot 在随机玩家身上放置枪声。
help 输出管理员命令列表和说明。
invisible 使玩家对僵尸不可见。未设置用户名将在自己身上切换隐形。用法:/invisible \"username\" -value,例如:invisible rj -true(或-false
kickuser 踢出用户。添加一个-r \"reason\"以指定踢出的原因。用法:/kickuser \"username\" -r \"reason\"
noclip 使玩家可以穿过墙壁。未设置用户名将在自己身上切换无碰撞。用法:/noclip \"username\" -value,例如:noclip rj -true(或-false
players 列出当前连接的玩家。
quit 保存并关闭服务器。
releasesafehouse 释放您当前的安全屋。用法:/safehouse release
reloadlua 重新加载一个Lua脚本。用法:/reloadlua \"filename\"
reloadoptions 重新加载服务器选项(servertest.ini)并发送到客户端。在玩家连接时实现游戏设置更改很有用。
removeuserfromwhitelist 从白名单中删除用户。用法:/removeuserfromwhitelist \"username\"
removezombies 移除所有僵尸,但尚未测试。(错误:缺少翻译“UI_ServerOptionDesc_RemoveZombies”)
replay 录制和重播玩家的移动。用法:/replay \"playername\" -record\-play\-stop \filename.\,例如:/replay user1 -record test.bin
save 保存当前游戏世界。
sendpulse 勾选将服务器性能信息发送到此客户端。用法:/sendpulse
servermsg 广播消息给所有在线玩家。用法:/servermsg \"text\"
setaccesslevel 设置玩家的访问级别。当前级别有:admin、moderator、overseer、gm、observer。例如:/setaccesslevel userName admin 注意:要删除任何访问级别,请使用“none”代替“admin”
showoptions 显示当前服务器选项和值的列表。用法:/showoptions
startrain 开始下雨。
stoprain 停止下雨。
teleport 传送到玩家身边。用法:/teleport \"playername\" or /teleport \"player1\" \"player2\",例如:/teleport \"rj\" or /teleport \"rj\" \"toUser\"
teleportto 传送到坐标。用法:/teleportto x,y,z,例如:/teleportto 100098,189980,0
unbanid 取消禁止SteamID。用法:/unbanid SteamID
unbanuser 取消禁止玩家。用法:/unbanuser \"username\"
voiceban 阻止某个玩家的语音。用法:/voiceban \"username\" -value,例如:/voiceban \"rj\" -true(或-false

安装模组

  1. 将所有模组保存到steam创意工坊收藏夹
  2. 将收藏夹网址粘贴到PZ ID Grabber
  3. 打开您的“SERVERNAME.ini”文件
  4. Mods=部分将模组粘贴到文件中
  5. WorkshopItems=部分将创意工坊项目ID粘贴到文件中

外部链接